Setup the ETH RPC Adaptor for Local Privatenet
The theta-eth-rpc-adaptor
project is aiming to provide an adaptor which translates the Theta RPC interface to the Ethereum RPC interface. Please find the currently supported Ethereum RPC APIs here.
Setup Theta Local Privatenet with ETH RPC Adaptor
This section will show you how to download precompiled binaries and launch a Theta local privatenet with the ETH RPC adaptor. If you want to compile the RPC adaptor from source code, please check out the steps here.
On Linux
First, run the following commands in a terminal (or screen/tmux session) to download and unzip the Theta local privatenet binaries and configs:
wget https://theta-downloader.s3.amazonaws.com/ethrpc/theta_local_privatenet_linux.tar.gz
tar -xvzf theta_local_privatenet_linux.tar.gz
cd theta_local_privatenet_linux/bin
Next, execute the following command to start the Theta local privatenet:
./theta start --config=../privatenet/validator --password=qwertyuiop
In a second terminal (or screen/tmux session), under the same theta_local_privatenet_linux/bin
directory, execute the following command to start the Theta ETH RPC Adaptor:
./theta-eth-rpc-adaptor start --config=../privatenet/eth_rpc_adaptor
After the adaptor creates 10 test wallets, in a third terminal (or screen/tmux session), run the following curl
command to verify that the Theta local privatenet and Adaptor work properly:
curl -X POST -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' http://127.0.0.1:18888/rpc
The response should be {"jsonrpc":"2.0","id":67,"result":"0x16e"}
. Next, checkout how to config Truffle and/or Hardhat to run tests against the Theta local privatenet here.
On macos
First, run the following commands in a terminal to download and unzip the Theta local privatenet binaries and configs.
wget https://theta-downloader.s3.amazonaws.com/ethrpc/theta_local_privatenet_macos.tar.gz
tar -xvzf theta_local_privatenet_macos.tar.gz
cd theta_local_privatenet_macos/bin
Starting with macOS v10.15 Catalina, only signed applications are allowed to run. We need to run the following commands to manually add the downloaded binaries to the allowed applications. You might be prompted to enter your Macbook password or use the touch ID to allow access.
sudo spctl --add ./theta
sudo spctl --add ./thetacli
sudo spctl --add ./theta-eth-rpc-adaptor
Now, execute the following command to start the Theta local privatenet:
./theta start --config=../privatenet/validator --password=qwertyuiop
In a second terminal, under the same theta_local_privatenet_macos/bin
directory, execute the following command to start the Theta ETH RPC Adaptor:
./theta-eth-rpc-adaptor start --config=../privatenet/eth_rpc_adaptor
After the adaptor creates 10 test wallets, in the third terminal, run the following curl
command to verify that the Theta local privatenet and Adaptor work properly:
curl -X POST -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' http://127.0.0.1:18888/rpc
The response should be {"jsonrpc":"2.0","id":67,"result":"0x16e"}
. Next, checkout how to config Truffle and/or Hardhat to run tests against the Theta local privatenet here.
Note: If you are using a Mac with the M1 chip, you might need to add the arch -arch x86_64
prefix to the commands as shown below:
# In the first terminal
arch -arch x86_64 ./theta start --config=../privatenet/validator --password=qwertyuiop
# In the second terminal
arch -arch x86_64 ./theta-eth-rpc-adaptor start --config=../privatenet/eth_rpc_adaptor
Configure Truffle/Hardhat for local testing
The genesis snapshot of the Theta local privatenet contains prefunded test wallets, which can be used to run unit test cases with Truffle/Hardhat. In particular, the following test wallets each has a starting balance of 500,000,000 TFuel, which should be sufficient to run many tests:
Test Wallet Private Key Test Wallet Address Initial TFuel Balance
1111111111111111111111111111111111111111111111111111111111111111 0x19E7E376E7C213B7E7e7e46cc70A5dD086DAff2A 50000000000000000000000000 wei
2222222222222222222222222222222222222222222222222222222222222222 0x1563915e194D8CfBA1943570603F7606A3115508 50000000000000000000000000 wei
3333333333333333333333333333333333333333333333333333333333333333 0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB 50000000000000000000000000 wei
4444444444444444444444444444444444444444444444444444444444444444 0x7564105E977516C53bE337314c7E53838967bDaC 50000000000000000000000000 wei
5555555555555555555555555555555555555555555555555555555555555555 0xe1fAE9b4fAB2F5726677ECfA912d96b0B683e6a9 50000000000000000000000000 wei
6666666666666666666666666666666666666666666666666666666666666666 0xdb2430B4e9AC14be6554d3942822BE74811A1AF9 50000000000000000000000000 wei
7777777777777777777777777777777777777777777777777777777777777777 0xAe72A48c1a36bd18Af168541c53037965d26e4A8 50000000000000000000000000 wei
8888888888888888888888888888888888888888888888888888888888888888 0x62f94E9AC9349BCCC61Bfe66ddAdE6292702EcB6 50000000000000000000000000 wei
9999999999999999999999999999999999999999999999999999999999999999 0x0D8e461687b7D06f86EC348E0c270b0F279855F0 50000000000000000000000000 wei
1000000000000000000000000000000000000000000000000000000000000000 0x7B2419E0Ee0BD034F7Bf24874C12512AcAC6e21C 50000000000000000000000000 wei
Truffle Configs
To use these prefunded test wallets for Truffle, modidfy the truffle-config.js
file to include the following. Then, you can run the test cases with truffle test --network theta_privatenet
.
const HDWalletProvider = require('@truffle/hdwallet-provider');
...
module.exports = {
mocha: {
enableTimeouts: false,
before_timeout: 1000000000
},
networks: {
theta_privatenet: {
provider: () => {
var privateKeyTest01 = '1111111111111111111111111111111111111111111111111111111111111111';
var privateKeyTest02 = '2222222222222222222222222222222222222222222222222222222222222222';
var privateKeyTest03 = '3333333333333333333333333333333333333333333333333333333333333333';
var privateKeyTest04 = '4444444444444444444444444444444444444444444444444444444444444444';
var privateKeyTest05 = '5555555555555555555555555555555555555555555555555555555555555555';
var privateKeyTest06 = '6666666666666666666666666666666666666666666666666666666666666666';
var privateKeyTest07 = '7777777777777777777777777777777777777777777777777777777777777777';
var privateKeyTest08 = '8888888888888888888888888888888888888888888888888888888888888888';
var privateKeyTest09 = '9999999999999999999999999999999999999999999999999999999999999999';
var privateKeyTest10 = '1000000000000000000000000000000000000000000000000000000000000000';
return new HDWalletProvider({
privateKeys: [privateKeyTest01, privateKeyTest02, privateKeyTest03, privateKeyTest04, privateKeyTest05, privateKeyTest06, privateKeyTest07, privateKeyTest08, privateKeyTest09, privateKeyTest10],
providerOrUrl: 'http://localhost:18888/rpc',
});
},
network_id: 366,
gasPrice: 4000000000000,
},
...
},
...
}
Hardhat Configs
To use these prefunded test wallets for Hardhat, modidfy the hardhat.config.js
file to include the following. Then, you can run the test cases with npx hardhat test --network theta_privatenet
.
module.exports = {
mocha: {
timeout: 1000000000,
},
networks: {
theta_privatenet: {
url: "http://localhost:18888/rpc",
accounts: [
"1111111111111111111111111111111111111111111111111111111111111111", // 0x19E7E376E7C213B7E7e7e46cc70A5dD086DAff2A
"2222222222222222222222222222222222222222222222222222222222222222", // 0x1563915e194D8CfBA1943570603F7606A3115508
"3333333333333333333333333333333333333333333333333333333333333333", // 0x5CbDd86a2FA8Dc4bDdd8a8f69dBa48572EeC07FB
"4444444444444444444444444444444444444444444444444444444444444444", // 0x7564105E977516C53bE337314c7E53838967bDaC
"5555555555555555555555555555555555555555555555555555555555555555", // 0xe1fAE9b4fAB2F5726677ECfA912d96b0B683e6a9
"6666666666666666666666666666666666666666666666666666666666666666", // 0xdb2430B4e9AC14be6554d3942822BE74811A1AF9
"7777777777777777777777777777777777777777777777777777777777777777", // 0xAe72A48c1a36bd18Af168541c53037965d26e4A8
"8888888888888888888888888888888888888888888888888888888888888888", // 0x62f94E9AC9349BCCC61Bfe66ddAdE6292702EcB6
"9999999999999999999999999999999999999999999999999999999999999999", // 0x0D8e461687b7D06f86EC348E0c270b0F279855F0
"1000000000000000000000000000000000000000000000000000000000000000", // 0x7B2419E0Ee0BD034F7Bf24874C12512AcAC6e21C
],
chainId: 366,
gasPrice: 4000000000000,
},
...
},
...
}
In addition to these prefunded test wallets, the RPC adaptor will create 10 random test wallets the first time it runs, which will be useful for running tests with dev tools like Truffle and Hardhat. After the test wallets are created, the ETH RPC APIs will be ready for use. To fund these randomly generated test wallets, you can execute the following command (replace <WALLET_ADDRESS>
with the actual address):
export SEQ=`./thetacli query account --address=0x2E833968E5bB786Ae419c4d13189fB081Cc43bab | grep sequence | grep -o '[[:digit:]]\+'`
./thetacli tx send --chain="privatenet" --from=0x2E833968E5bB786Ae419c4d13189fB081Cc43bab --to=<WALLET_ADDRASS> --tfuel=10000 --password=qwertyuiop --seq=$(($SEQ+1))
Updated about 3 years ago