To demonstrate how a DApp can interact with the Theta blockchain via Web3.js, we put up a few quick examples in this repository. For readers that are not familiar with Web3.js, here and here are good starting points.

Interact with a Local Privatenet

Setup Theta local privatenet

First, setup the Theta local privatenet and the ETH RPC adaptor following this guide. The ETH RPC adaptor running at http://localhost:18888/rpc interacts with the Web3.js library by translating the Theta RPC interface into the ETH RPC interface.

Fund the test accounts with some TFuel

Execute the two commands below to fund the test accounts with some TFuel:

export SEQ=`thetacli query account --address=0x2E833968E5bB786Ae419c4d13189fB081Cc43bab | grep sequence | grep -o '[[:digit:]]\+'`

thetacli tx send --chain="privatenet" --from=0x2E833968E5bB786Ae419c4d13189fB081Cc43bab --to=0x19E7E376E7C213B7E7e7e46cc70A5dD086DAff2A --tfuel=1000 --password=qwertyuiop --seq=$(($SEQ+1))

Install dependencies

Execute the command below to clone the theta-web3-examples repository and install dependencies (please ignore errors from npm install if any):

git clone
cd theta-web3-examples
npm install

Run the examples

Run the following scripts to interact with the Theta local privatenet through Web3.js. Note that the chainID of the Theta local privatenet is 366. In the examples, when we compose the transactions, we need to specify the chainID, otherwise the transactions will be rejected by the blockchain.

# This example shows how to query the TFuel balance of a given account
node examples/account_query.js

# This example shows how to inspect the latest blocks
node examples/block_inspection.js

# This example shows how to deploy a smart contract to the local privatenet
node examples/contract_deploy.js

# This example shows how to send TFuel between two accounts
node examples/send_signed_transaction.js

# This example shows how some extra features of the Web3.js library
node examples/web3_extras.js

Interact with the Theta Mainnet

You can also interact with the Theta Mainnet through Web3.js. The chainID of the Theta Mainnet is 361. The Theta Lab hosts an ETH RPC endpoint for the Mainnet at The code below shows the setup for accessing the Theta Mainnet via Web3.js.

const Web3 = require('web3')
const web3 = new Web3('')
const chainID = 361 // for the Theta Mainnet

Below are some examples:

# This example shows how to inspect the latest blocks of the Theta Mainnet
node examples/block_inspection_mainnet.js 

# This example shows how to read a smart contract deployed on the Theta Mainnet
node examples/contract_read_mainnet.js 

# This example shows how to list and filter events emitted by smart contracts on the Theta Mainnet
node examples/events_filtering_mainnet.js

If you would like to test your contracts on the Theta Testnet, the chainID would be 365, and the hosted ETH RPC endpoint is