An honest subset of Ethereum's JSON-RPC: what is here behaves exactly as your tooling expects, and what is not answers -32601 instead of returning a lie.
Plain JSON-RPC 2.0 over HTTP POST. No auth header, no API key.
curl -s https://rpc.eavscan.com \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
{"jsonrpc":"2.0","id":1,"result":"0x139d67"}https://rpc.eavscan.comPOST with a JSON-RPC 2.0 body. There is no WebSocket.http://127.0.0.1:7070Comes up with the Core when the EAVM surface is enabled.72020 · 0x1195472020 decimal. The same number in net_version, as a string.wei = e7 × 10¹²Wei, 18 decimals. The native unit has 6 — the factor between them is 10¹².Twenty-one methods, exactly the ones rust/node/src/eavm_rpc.rs dispatches. The signature is the standard one; the note says what differs on EAV7.
| Method | Params | Returns | Note |
|---|---|---|---|
| Node identity | |||
web3_clientVersion | [] | string | Version of the EAV7 client serving this port. |
net_version | [] | string · "72020" | Chain id as a decimal string, for older wallets. |
net_listening | [] | bool | Always true while the EAVM port is open. |
eth_chainId | [] | hex · 0x11954 | Chain id in hex — this is what MetaMask reads. |
eth_syncing | [] | false | Always false: the node only serves while tracking the head. |
eth_accounts | [] | [] | Empty by definition. The node holds no user key. |
| Account state | |||
eth_blockNumber | [] | hex | Head height, in hex. |
eth_getBalance | [address, block?] | hex · wei | Balance in wei of the native account matching the 0x address. |
eth_getCode | [address, block?] | hex | Bytecode deployed at the address, or 0x for a plain account. |
eth_getTransactionCount | [address, block?] | hex | The account's nonce — the same counter as the native API. |
| Gas and fees | |||
eth_gasPrice | [] | hex · 0x1b1ae4d6e2ef4 | Fixed price derived from BURN_PER_ENERGY, converted to wei. |
eth_maxPriorityFeePerGas | [] | 0x0 | Zero: there is no priority auction on this chain. |
eth_feeHistory | [count, block, reward?] | object | History with a constant price, for wallets that require EIP-1559. |
eth_estimateGas | [callObject] | hex | Estimate via simulated execution, capped at EAVM_MAX_GAS. |
| Blocks, transactions and logs | |||
eth_getBlockByNumber | [block, fullTxs] | object | null | Block by height, accepting latest, earliest and pending. |
eth_getBlockByHash | [hash, fullTxs] | object | null | The same block, addressed by hash. |
eth_getTransactionByHash | [hash] | object | null | Transaction in EVM shape, even when it was born native. |
eth_getTransactionReceipt | [hash] | object | null | Receipt with status, gas used and execution logs. |
eth_getLogs | [filter] | array | Logs by block range, address and topics. |
| Execution and submission | |||
eth_call | [callObject, block?] | hex | Read-only execution against the state at a height. |
eth_sendRawTransaction | [rawTx] | hex · txHash | Submits an already signed EVM transaction; returns the hash. |
EAV7 has no gas market. Execution gas is converted into energy by a fixed divisor, and energy is the resource the account actually spends.
FEES.EAVM_TRANSFER × 10¹² ÷ 21 000Conversion divisor: a hundred gas units are worth one energy unit.100Energy cost of a contract call, before the gas conversion.5 190 000Gas ceiling for an execution. Above it the call is aborted.0x0There is no tip. A higher gasPrice does not buy block ordering.The filter accepts range, address and topics. The answer is a list, not a subscription.
{
"jsonrpc": "2.0", "id": 1, "method": "eth_getLogs",
"params": [{
"fromBlock": "0x139000",
"toBlock": "0x139d67",
"address": "0x4aE2…10b8",
"topics": ["0xddf252ad…"]
}]
}5 000Maximum block span in one query. Beyond that, paginate.10 000Cap on logs returned per call.100 000Topic indexAn array of requests returns an array of responses, in the same order. It is how an indexer avoids opening a hundred connections.
# lote: até MAX_RPC_BATCH (50) chamadas por requisição
curl -s https://rpc.eavscan.com \
-H 'Content-Type: application/json' \
-d '[
{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]},
{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[]}
]'The standard JSON-RPC 2.0 codes, plus the generic execution one.
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32601, "message": "método não suportado: eth_getStorageAt" }
}| Code | When it happens |
|---|---|
-32600 | The envelope is not valid JSON-RPC 2.0 — jsonrpc, method or id is missing. |
-32601 | Method not implemented by this surface. |
-32602 | The params exist but have the wrong type or arity. |
-32603 | Internal node failure while serving the call. |
-32700 | The body is not JSON. |
-32000 | Execution error: contract revert, out of gas, or insufficient balance. |
Listing what is absent is part of compatibility: a tool that probes the methods learns the boundary before breaking in production.
eth_sendTransactioneth_signeth_signTransactioneth_getStorageAteth_subscribeeth_unsubscribeeth_newFiltereth_getFilterChanges