Links

Ethereum API Compatibility

In addition to the native IoTeX API, any IoTeX node exposes an Ethereum-compatible JSON API: you can point your Ethereum libraries and tools to an IoTeX full-node with the Gateway service enabled, and have them work with the IoTeX blockchain with no changes.

Chain ID

The chainID chain identifier was introduced in EIP-155 to prevent replay attacks between Ethereum-compatible chains, it is a way to tell chains apart. Subsequent to EIP-155, Ethereum was assigned a chainID of 1.
In respect of this EIP, IoTeX chainIDs have been picked as follow:
Network
chainID
IoTeX Mainnet
4689
IoTeX Testnet
4690

Web3 API endpoints

Mainnet

Endpoint
Provider
More
https://babel-api.mainnet.iotex.io
IoTeX Foundation
https://babel-api.mainnet.iotex.one
IoTeX Foundation
https://iotexrpc.com
Ankr
https://rpc.ankr.com/iotex
Ankr
https://iotex-rpc.gateway.pokt.network
Pocket Network
Testnet
Endpoint
Text
More
https://babel-api.testnet.iotex.io
IoTeX Foundation
Example
To get the balance of the IoTeX address ukzv5m6xnsg3gzaec3shew8nw03cch2x53d6v6 you first convert it into the ethereum address format using ioctl:
$ ioctl account ethaddr io1ukzv5m6xnsg3gzaec3shew8nw03cch2x53d6v6
io1ukzv5m6xnsg3gzaec3shew8nw03cch2x53d6v6 - 0xE584ca6F469c11140Bb9c4617Cb8f373E38C5D46
which gives you the following Ethereum address:0xE584ca6F469c11140Bb9c4617Cb8f373E38C5D46.
Then you can query the Babel endpoint according to the Ethereum JSON RPC API:
» curl -X POST -H "Content-Type:application/json" --data '{"id": 1, "jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xE584ca6F469c11140Bb9c4617Cb8f373E38C5D46", ""]}' https://babel-api.mainnet.iotex.io
{
"id": 1,
"jsonrpc": "2.0",
"result": "0x10f0cf064dd59200000"
}
Which returns the balance 0x10f0cf064dd59200000 (hex) for the address, expressed in Rau units (i.e. 5000000000000000000000 Rau, equivalent to 5000 __ IOTX).
Check out the official Ethereum JSON-RPC API Documentation at:

Supported API

Below is the list of Ethereum APIs currently supported by IoTeX nodes. Any other API not listed here should be considered unsupported and it can be requested by submitting an issue to the following repository:
  • eth_accounts
  • eth_blockNumber
  • eth_call
  • eth_chainId
  • eth_estimateGas
  • eth_gasPrice
  • eth_getBalance
  • eth_getBlockByHash
  • eth_getBlockByNumber
  • eth_getBlockTransactionCountByHash
  • eth_getBlockTransactionCountByNumber
  • eth_getCode
  • eth_getFilterChanges
  • eth_getFilterLogs
  • eth_getLogs
  • eth_getStorageAt
  • eth_getTransactionByBlockHashAndIndex
  • eth_getTransactionByBlockNumberAndIndex
  • eth_getTransactionByHash
  • eth_getTransactionCount
  • eth_getTransactionReceipt
  • eth_hashrate
  • eth_mining
  • eth_newBlockFilter
  • eth_newFilter
  • eth_protocolVersion
  • eth_sendRawTransaction
  • eth_syncing
  • eth_uninstallFilter
  • net_listening
  • net_peerCount
  • net_version
  • web3_clientVersion