Japanese version: /ja/doc/compatibility/json-rpc-deviations.html
JSON-RPC Deviations
TL;DR
- Implemented methods are intentionally limited.
eth_getLogsis constrained;blockHashis conditionally supported, andtopics[0]OR arrays are supported.- blockTag support depends on method.
latestfamily plusearliest/QUANTITYare accepted, but historical support is limited. eth_sendRawTransactiondelegates to submit API; execution success must be confirmed from receipt.eth_feeHistoryis supported (blockCountaccepts number/QUANTITY/decimal string).eth_gasPricereturns an acceptance-oriented estimate, not rawbase_fee.
Scope: this page documents JSON-RPC-level differences. Canonical overall policy is ../rpc/overview.md.
Method-Level Differences (Highlights)
eth_getBalance- Accepts
latest/pending/safe/finalized/earliest/QUANTITY - Historical queries often return
exec.state.unavailableorinvalid.block_range.out_of_window
- Accepts
eth_getTransactionCount- Accepts
latest/pending/safe/finalized/earliest/QUANTITY pendingreturns pending nonceearliestand historical nonce are currently unavailable
- Accepts
eth_getCode- Accepts
latest/pending/safe/finalized/earliest/QUANTITY - Historical queries are generally unavailable
- Accepts
eth_getStorageAt- Accepts
latest/pending/safe/finalized/earliest/QUANTITY - slot accepts QUANTITY or 32-byte DATA
- Historical queries are generally unavailable
- Accepts
eth_call,eth_estimateGas- Accepts
latest/pending/safe/finalized/earliest/QUANTITY - Historical execution is unavailable (
exec.state.unavailable/invalid.block_range.out_of_window) - Unsupported fields return
-32602
- Accepts
eth_getLogsblockHashis conditionally supported (cannot combine withfromBlock/toBlock; resolved by scanning recent N blocks)- single
addressonly topics[0]OR array supported (max 16)topics[1+]conditions unsupported- oversized range returns
-32005
eth_feeHistoryblockCountacceptsnumber/QUANTITY/ decimal stringblockCount <= 256pendingis currently treated aslatest
eth_maxPriorityFeePerGas- returns
-32000(state unavailable) when observed data is insufficient
- returns
eth_gasPrice- returns
max(base_fee + max(estimated_priority, min_priority), min_gas_price)
- returns
Unsupported Methods
eth_getBlockByHasheth_newFilter/eth_getFilterChanges/eth_uninstallFiltereth_subscribe/eth_unsubscribeeth_pendingTransactions
Error Design
-32602: invalid params-32000: state unavailable / execution failed-32001: resource not found (including pruned cases)-32005: limit exceeded (logs)- Note: internal submit failures can surface as
-32603on specific paths
Pitfalls
- Reusing standard node
eth_getLogsfilters as-is (address[]ortopics[1+]) - Treating
eth_sendRawTransactionsuccess as final execution success - Assuming
blockHashineth_getLogsis always resolvable (scan window is bounded)
Sources
tools/rpc-gateway/src/handlers.tstools/rpc-gateway/README.mdcrates/ic-evm-rpc/src/lib.rs