Skip to content

Supported Ethereum RPC Methods

Introduction

While Moonbeam strives to be compatible with Ethereum's Web3 API and EVM, there are some important differences that developers should know and understand in terms of the Ethereum API JSON-RPC support on Moonbeam.

The Moonbeam team has collaborated closely with Parity on developing Frontier. Frontier is the Ethereum compatibility layer for Substrate-based chains, and it is what allows developers to run unmodified Ethereum DApps.

Nevertheless, not all of the Ethereum JSON-RPC methods are supported, and some of the supported ones return default values (those related to Ethereum's PoW consensus mechanism in particular). This guide will outline some of these main differences around Ethereum RPC support and what to expect when using Moonbeam for the first time.

Basic Ethereum JSON-RPC Methods

The basic JSON-RPC methods from the Ethereum API supported by Moonbeam are:

  • eth_protocolVersion — returns 1 by default
  • eth_syncing — returns an object with data about the sync status or false
  • eth_hashrate — returns "0x0" by default
  • eth_coinbase — returns the latest block author. Not necessarily a finalized block
  • eth_mining — returns false by default
  • eth_chainId — returns the chain ID used for signing at the current block
  • eth_gasPrice — returns the base fee per unit of gas used. This is currently the minimum gas price for each network
  • eth_accounts — returns a list of addresses owned by the client
  • eth_blockNumber — returns the highest available block number
  • eth_getBalance — returns the balance of the given address
  • eth_getStorageAt — returns content of the storage at a given address
  • eth_getBlockByHash — returns information about the block of the given hash including baseFeePerGas on post-London blocks
  • eth_getBlockByNumber — returns information about the block specified by block number including baseFeePerGas on post-London blocks
  • eth_getTransactionCount — returns the number of transactions sent from the given address (nonce)
  • eth_getBlockTransactionCountByHash — returns the number of transactions in a block with a given block hash
  • eth_getBlockTransactionCountByNumber — returns the number of transactions in a block with a given block number
  • eth_getUncleCountByBlockHash — returns "0x0" by default
  • eth_getUncleCountByBlockNumber — returns "0x0" by default
  • eth_getCode — returns the code at given address at given block number
  • eth_sendTransaction — creates new message call transaction or a contract creation, if the data field contains code. Returns the transaction hash, or the zero hash if the transaction is not yet available
  • eth_sendRawTransaction — creates new message call transaction or a contract creation for signed transactions. Returns the transaction hash, or the zero hash if the transaction is not yet available
  • eth_call — executes a new message call immediately without creating a transaction on the block chain, returning the value of the executed call
  • eth_estimateGas — returns an estimate amount of how much gas is necessary for a given transaction to succeed. You can optionally specify a gasPrice or maxFeePerGas and maxPriorityFeePerGas
  • eth_feeHistory — returns baseFeePerGas, gasUsedRatio, oldestBlock, and reward for a specified range of up to 1024 blocks
  • eth_getTransactionByHash — returns the information about a transaction with a given hash. EIP-1559 transactions have maxPriorityFeePerGas and maxFeePerGas fields
  • eth_getTransactionByBlockHashAndIndex — returns information about a transaction at a given block hash, and a given index position. EIP-1559 transactions have maxPriorityFeePerGas and maxFeePerGas fields
  • eth_getTransactionByBlockNumberAndIndex — returns information about a transaction at a given block number, and a given index position. EIP-1559 transactions have maxPriorityFeePerGas and maxFeePerGas fields
  • eth_getTransactionReceipt — returns the transaction receipt of a given transaction hash. After London support was added in runtime 1200, a new field named effectiveGasPrice has been added to the receipt, specifying the gas price of the transaction
  • eth_getUncleByBlockHashAndIndex — returns null by default
  • eth_getUncleByBlockNumberAndIndex — returns null by default
  • eth_getLogs — returns an array of all logs matching a given filter object
  • eth_getWork — returns ["0x0","0x0","0x0"] by default
  • eth_submitWork — not supported on Moonbeam
  • eth_submitHashrate — not supported on Moonbeam

Filter-related Ethereum JSON-RPC Methods

The filter-related JSON-RPC methods from the Ethereum API supported by Moonbeam are:

  • eth_newFilter — creates a filter object based on the input provided. Returns a filter ID
  • eth_newBlockFilter — creates a filter in the node to notify when a new block arrives. Returns a filter id
  • eth_getFilterChanges — polling method for filters (see methods above). Returns an array of logs which occurred since last poll
  • eth_getFilterLogs — returns an array of all the logs matching the filter with a given ID
  • eth_uninstallFilter — uninstall a filter with a given ID. Should be used when polling is no longer needed. Filters timeout when they are not requested using eth_getFilterChanges after a period of time

Event Subscription Ethereum JSON-RPC Methods

The event subscription JSON-RPC methods from the Ethereum API supported by Moonbeam are:

  • eth_subscribe — creates a subscription for a given subscription name. If successful, returns the subscription ID
  • eth_unsubscribe — cancels the subscription given by its ID

Supported Subscription Parameters

The supported subscriptions are:

  • newHeads — triggers a notification each time a new header is appended to the chain
  • logs — returns logs that are included in new imported blocks, and match a given filter criteria
  • newPendingTransactions — returns the hash for all transactions that are added to the pending state
  • syncing — indicates when the node starts or stop synchronizing with the network

For a dedicated tutorial for these subscriptions, check out the Events Subscription guide.

Debug and Trace JSON-RPC Methods

The supported methods from Geth's debug and txpool APIs and OpenEthereum's trace module are as follows:

  • debug_traceTransaction - given a transaction hash, this method attempts to replay a transaction in the exact same manner as it was executed on the network
  • debug_traceBlockByNumber - given a block number, this method attempts to replay a block in the exact same manner as it was executed on the network
  • debug_traceBlockByHash - given a block hash, this method attempts to replay a block in the exact same manner as it was executed on the network
  • trace_filter - given a filter, this method returns matching traces
  • txpool_content - returns the details for all of the transactions that are currently pending, waiting to be included in the next block(s), and queued for future execution
  • txpool_inspect - returns a summary of all of the transactions that are currently pending, waiting to be included in the next block(s), and queued for future execution
  • txpool_status - returns the total number of transactions currently pending, waiting to be included in the next block(s), and queued for future execution

For a dedicated tutorial for these debug and trace methods, check out the Debug API & Trace Module guide.

Last update: January 23, 2024
| Created: September 22, 2021