Complete reference for the shell-chain JSON-RPC API. All methods follow the JSON-RPC 2.0 specification.
See also: Quickstart Guide · Testnet Operator Guide · Post-Quantum Cryptography Guide · Native Account Abstraction Guide · System Contracts · Prover Guide
- Connection
- CORS Configuration
- API Namespace Whitelist
- Rate Limiting
- WebSocket Support
- eth_ Namespace
- net_ Namespace
- web3_ Namespace
- shell_ Namespace
- debug_ Namespace
- trace_ Namespace
HTTP endpoint (default):
http://127.0.0.1:8545
WebSocket endpoint (when --ws is enabled):
ws://127.0.0.1:8546
All requests use POST with Content-Type: application/json.
Address note: RPC input and output addresses use canonical 32-byte 0x + 64 lowercase hex throughout the current codebase.
Control cross-origin access with --rpc-cors:
# Allow all origins
shell-node run --rpc-cors "*"
# Allow specific origins (comma-separated)
shell-node run --rpc-cors "http://localhost:3000,https://app.example.com"Or in TOML config:
[rpc]
cors_origins = ["http://localhost:3000", "https://app.example.com"]Control which API namespaces are exposed with --rpc-api:
# Validators (minimal surface)
shell-node run --rpc-api eth,net,web3,shell
# RPC nodes (full API)
shell-node run --rpc-api eth,net,web3,shell,debug,traceAvailable namespaces: eth, net, web3, shell, debug, trace
If --rpc-api is not specified, all namespaces registered by the node are available.
Per-connection rate limiting is available via --rpc-rate-limit:
shell-node run --rpc-rate-limit 100 # 100 requests/sec per connectionOr in TOML config:
[rpc]
rate_limit = 100When the limit is exceeded, the server returns an HTTP 429 response.
Enable the WebSocket server with --ws:
shell-node run --ws --ws-port 8546The WebSocket endpoint supports all the same JSON-RPC methods as HTTP, plus real-time PubSub subscriptions and filter-based polling via eth_newFilter, eth_newBlockFilter, and eth_getFilterChanges.
Subscribe to live events. Returns a subscription ID.
Subscription types:
| Type | Description |
|---|---|
newHeads |
Pushes new block headers when blocks are produced or imported |
logs |
Pushes log events matching a filter (address, topics) |
newPendingTransactions |
Pushes transaction hashes as they enter the mempool |
syncing |
Pushes sync status changes (syncing/not syncing) |
Example — newHeads:
wscat -c ws://127.0.0.1:8546
> {"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}
< {"jsonrpc":"2.0","id":1,"result":"0x1"}
< {"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x1","result":{"number":"0xa","hash":"0x...","parentHash":"0x...","timestamp":"0x..."}}}Example — logs with filter:
> {"jsonrpc":"2.0","id":2,"method":"eth_subscribe","params":["logs",{"address":"0x...","topics":["0xddf2..."]}]}
< {"jsonrpc":"2.0","id":2,"result":"0x2"}Example — newPendingTransactions:
> {"jsonrpc":"2.0","id":3,"method":"eth_subscribe","params":["newPendingTransactions"]}
< {"jsonrpc":"2.0","id":3,"result":"0x3"}
< {"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x3","result":"0xabc123..."}}Cancel an active subscription.
> {"jsonrpc":"2.0","id":4,"method":"eth_unsubscribe","params":["0x1"]}
< {"jsonrpc":"2.0","id":4,"result":true}Limits: Maximum 1024 global subscriptions, 16 per connection. Connections are auto-disconnected after repeated lag events.
Standard Ethereum-compatible JSON-RPC methods.
Returns the current block height.
Parameters: None
Returns: String — Hex-encoded block number.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x1a"}Returns the chain ID.
Parameters: None
Returns: String — Hex-encoded chain ID.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x539"}Returns sync status. A node may temporarily report syncing while block range catch-up is in flight; otherwise it returns false.
Parameters: None
Returns: Boolean | Object — false when not syncing, or a sync progress object when the node is catching up.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":false}Returns whether the node is producing blocks.
Parameters: None
Returns: Boolean — true if the node has a validator keystore loaded.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":true}Returns mining hashrate. Always "0x0" (PoA consensus, no mining).
Parameters: None
Returns: String — Always "0x0".
Returns managed accounts. Always empty — the node does not hold user private keys.
Parameters: None
Returns: Array — Always [].
Returns the protocol version.
Parameters: None
Returns: String — "0x45" (Cancun-compatible).
Returns the current base fee.
Parameters: None
Returns: String — Hex-encoded base fee in wei for the latest chain state.
The exact value changes over time as blocks are produced.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x5f7609"}Returns the suggested priority fee. Always "0x0" on this PoA chain.
Parameters: None
Returns: String — "0x0".
Returns historical base fee and gas usage data.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block count (hex) — max 1024 |
| 2 | String |
Yes | Newest block (block tag or hex number) |
| 3 | Array<Number> |
No | Reward percentiles |
Returns: Object with oldestBlock, baseFeePerGas, gasUsedRatio, reward.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_feeHistory","params":["0x5","latest",[]],"id":1}'{
"jsonrpc": "2.0",
"id": 1,
"result": {
"oldestBlock": "0x15",
"baseFeePerGas": ["0x8e4f6f","0x7c4681","0x6c1761","0x5f7609","0x53a8d3","0x48c470"],
"gasUsedRatio": [0.0, 0.0, 0.0, 0.0, 0.0],
"reward": []
}
}Returns the balance of an address.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address (0x... canonical) |
| 2 | String |
No | Block tag ("latest", "earliest", "pending", "safe", "finalized", or hex number) |
Returns: String — Hex-encoded balance in wei.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xYOUR_ADDRESS_HERE","latest"],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x3635c9adc5dea00000"}Returns the nonce (transaction count) for an address.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address (0x... canonical) |
| 2 | String |
No | Block tag |
Returns: String — Hex-encoded nonce.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0xYOUR_ADDRESS_HERE","latest"],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x0"}Returns a block by number.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block tag or hex number |
| 2 | Boolean |
Yes | true for full transaction objects, false for hashes only |
Supported block tags: "latest", "earliest", "pending", "safe", "finalized".
When "pending" is requested, a pseudo-block is constructed from the current mempool.
Returns: Object|null — Block object or null if not found.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false],"id":1}'{
"jsonrpc": "2.0",
"id": 1,
"result": {
"number": "0x1a",
"hash": "0xabc...",
"parentHash": "0xdef...",
"timestamp": "0x65a5f200",
"gasLimit": "0x1c9c380",
"gasUsed": "0x0",
"compressionLayer": 1,
"pruningStatus": "pruned",
"transactions": []
}
}Shell block responses include STARK storage metadata in addition to Ethereum
compatibility fields. compressionLayer is the highest accepted compression
layer currently known for the block, including pointer blocks in a contiguous
range. pruningStatus reports the local witness state (unpruned,
compressedWitnessRetained, pruned, notWitnessed, pending, or unknown).
STARK proof bytes are no longer carried in block header extraData; canonical
settlements use a StarkReward system transaction whose input contains the
proof payload, while source blocks expose full-proof or pointer metadata.
Returns a block by hash.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block hash (0x-prefixed, 32 bytes) |
| 2 | Boolean |
Yes | true for full tx objects, false for hashes |
Returns: Object|null — Block object or null.
Returns a transaction by hash. Checks the mempool first, then on-chain storage. Shell reward records are first-class system transactions, so block gas rewards and STARK rewards are also discoverable by deterministic transaction hash.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Transaction hash (0x-prefixed, 32 bytes) |
Returns: Object|null — Transaction object or null.
Shell-specific transaction metadata:
| Field | Description |
|---|---|
shellType |
Product-readable type: transfer, contractCreate, contractCall, aaBatch, blockGasReward, or starkReward |
rewardKind |
Present for reward system transactions: blockGasReward or starkReward |
rewardLayer |
STARK layer for prover rewards, hex encoded |
rewardSourceHash |
Parent block, source range, or artifact hash used to derive the reward |
originalSize / compressedSize |
STARK compression accounting, hex byte counts |
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xabc123..."],"id":1}'Returns the receipt of a mined transaction.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Transaction hash |
Returns: Object|null — Receipt object (includes status, gasUsed, logs, blockNumber, shellType, rewardKind, etc.) or null if not yet mined.
Submits a signed transaction. Accepts RLP-encoded or JSON-encoded transaction bytes.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Hex-encoded signed transaction data |
Returns: String — Transaction hash.
Validation: The transaction's max_fee_per_gas must be ≥ the current base fee.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x...signed_tx_bytes..."],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0xabc123..."}Executes a read-only call against the EVM (no state changes).
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Call request: {from?, to, data?, value?, gas?} |
| 2 | String |
No | Block tag |
Returns: String — Hex-encoded return data.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0xCONTRACT_ADDRESS","data":"0x..."},"latest"],"id":1}'Estimates gas for a transaction. Returns gas_used × 1.2 with a minimum of 21,000.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Call request: {from?, to?, data?, value?} |
Returns: String — Hex-encoded gas estimate.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"to":"0xRECIPIENT_ADDRESS","value":"0xde0b6b3a7640000"}],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x5208"}Creates an EIP-2930 access list for a transaction.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Call request |
| 2 | String |
No | Block tag |
Returns: Object with accessList and gasUsed.
Returns the bytecode at an address.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address |
| 2 | String |
No | Block tag |
Returns: String — Hex-encoded bytecode, or "0x" for accounts without
runtime code.
Returns a storage slot value.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address |
| 2 | String |
Yes | Storage position (hex-encoded, 32-byte key) |
| 3 | String |
No | Block tag |
Returns: String — Zero-padded 32-byte hex value.
Returns logs matching a filter.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Filter: {address?, topics?, fromBlock?, toBlock?} |
Returns: Array — Log objects with address, topics, data, blockNumber, blockHash, transactionHash, transactionIndex, logIndex, removed.
Uses bloom filters for fast block-level filtering. The block range is capped at MAX_BLOCK_RANGE to prevent DoS.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock":"0x0","toBlock":"latest"}],"id":1}'Creates a poll-based log filter.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Filter: {address?, topics?, fromBlock?, toBlock?} |
Returns: String — Filter ID.
Creates a poll-based block filter.
Parameters: None
Returns: String — Filter ID.
Returns changes since last poll for a filter.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Filter ID |
Returns: Array — Logs (for log filters) or block hashes (for block filters).
Re-queries all logs matching a filter's criteria.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Filter ID |
Returns: Array — Log objects.
Removes a filter.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Filter ID |
Returns: Boolean — true if the filter was removed.
Returns the current blob gas price (EIP-4844).
Parameters: None
Returns: String — Hex-encoded blob gas price, calculated from excess_blob_gas.
Returns error code -32601. The node does not hold private keys — sign transactions client-side with the CLI or SDK.
Returns error code -32601. Same reason as eth_sign.
Returns []. This legacy Ethereum method is retained for compatibility.
Returns the network/chain ID as a decimal string.
Parameters: None
Returns: String — Chain ID (e.g., "1337").
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"1337"}Returns whether the node is accepting connections. Always true.
Parameters: None
Returns: Boolean — true.
Returns the number of connected peers.
Parameters: None
Returns: String — Hex-encoded peer count (e.g., "0x3").
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'Returns the client identifier string.
Parameters: None
Returns: String — "shell-chain/0.22.2".
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"shell-chain/0.22.2"}Returns the Keccak-256 hash of the given data.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Hex-encoded data (max 32 KB) |
Returns: String — Hex-encoded Keccak-256 hash.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f"],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8"}Shell-chain custom extensions for post-quantum features, validator governance, and node information.
Returns the post-quantum public key associated with an address.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address (0x... canonical) |
Returns: String|null — Hex-encoded PQ public key, or null if not found.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_getPqPubkey","params":["0xYOUR_ADDRESS_HERE"],"id":1}'Returns the number of pending transactions in the mempool.
Parameters: None
Returns: String — Hex-encoded count.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_pendingCount","params":[],"id":1}'{"jsonrpc":"2.0","id":1,"result":"0x0"}Submits a pre-signed shell-chain transaction.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Signed transaction object |
Returns: String — Transaction hash.
Returns the current validator set.
Parameters: None
Returns: Array<String> — List of validator addresses.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_getValidators","params":[],"id":1}'{
"jsonrpc": "2.0",
"id": 1,
"result": [
"0x0000000000000000000000000000000000000000000000000000000000000001",
"0x0000000000000000000000000000000000000000000000000000000000000002"
]
}Returns whether an address is a validator.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address |
Returns: Object:
{
"address": "0x...",
"isValidator": true
}Submits a governance transaction to add a validator (requires the node to have a proposer keystore).
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address to add |
Returns: String — Transaction hash.
Submits a governance transaction to remove a validator.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address to remove |
Returns: String — Transaction hash.
Generates calldata for the validator management system contract (does not submit a transaction).
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address to add |
Returns: String — Hex-encoded calldata.
Generates calldata for validator removal.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Address to remove |
Returns: String — Hex-encoded calldata.
Estimates gas for a governance operation.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Operation: "addValidator", "removeValidator", "getValidators", or "isValidator" |
Returns: String — Hex-encoded gas estimate.
Returns governance configuration.
Parameters: None
Returns:
{
"validatorCount": 3,
"validators": ["0x...", "0x...", "0x..."],
"systemContractAddress": "0x0000000000000000000000000000000000000001",
"proposalGasLimit": 100000
}Returns node status information.
Parameters: None
Returns:
{
"version": "ShellChain/v0.22.2/rust",
"chainId": 1337,
"blockHeight": 42,
"peerCount": 0,
"txPoolSize": 5,
"isMining": true,
"uptime": 3600,
"baseFee": "0x5f7609"
}curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_getNodeInfo","params":[],"id":1}'Returns P2P network statistics.
Parameters: None
Returns:
{
"peerCount": 0,
"protocolVersion": "shell/1.0.0",
"listeningAddress": "/ip4/0.0.0.0/tcp/30303",
"protocols": ["gossipsub", "kademlia", "mdns"]
}Returns aggregate chain statistics. totalTransactions and gasUsedTotal
cover the canonical chain from block 0 through the current head; avgBlockTime
is computed from the most recent block-time window.
Parameters: None
Returns:
{
"blockHeight": 1500,
"totalTransactions": 3200,
"avgBlockTime": 2.01,
"gasUsedTotal": "0x...",
"latestBaseFee": "0x5f7609"
}Returns finality status for the connected node.
Parameters: None
Returns:
{
"currentHead": "0x1a",
"finalityLag": 2,
"lastFinalizedBlock": "0x18",
"lastFinalizedHash": "0xabc...",
"pendingAttestations": 2
}Returns a wrapper object for a finalized block hash. The certificate field
maps validator addresses to post-quantum signatures and is null when the
local node has no certificate for the requested hash.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block hash |
Returns:
{
"blockHash": "0xabc...",
"certificate": {
"0x...": {
"sig_type": "Dilithium3",
"data": [1, 2, 3]
}
}
}Returns the post-quantum signature details for validators who signed a specific block.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block number (hex) or block tag |
Returns:
{
"blockNumber": "0x1a",
"signers": [
{
"address": "0x...",
"pqPubkey": "0x...",
"signatureValid": true
}
]
}Verifies a Dilithium3 post-quantum signature against a message and public key.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Hex-encoded message |
| 2 | String |
Yes | Hex-encoded Dilithium3 signature |
| 3 | String |
Yes | Hex-encoded Dilithium3 public key |
Returns: Boolean — true if the signature is valid.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_verifyPqSignature","params":["0xmessage...","0xsignature...","0xpubkey..."],"id":1}'Returns information about the current consensus epoch.
Parameters: None
Returns:
{
"currentEpoch": 5,
"epochLength": 0,
"blocksInEpoch": 1500,
"currentBlockTime": 2.01,
"activeValidators": 3
}Returns voting activity statistics for validators in recent blocks.
Parameters: None
Returns:
{
"validators": [
{
"address": "0x...",
"blocksProduced": 500,
"lastBlockProduced": "0x1a",
"uptime": 99.8
}
]
}Returns pending governance proposals that have not yet been finalized.
Parameters: None
Returns:
{
"proposals": [
{
"type": "addValidator",
"target": "0x...",
"proposer": "0x...",
"proposedAt": "0x18",
"status": "pending"
}
]
}These methods return error -32601. Direct validator set mutation is disabled to prevent split-brain issues. Use shell_proposeAddValidator and shell_proposeRemoveValidator instead, which go through the governance transaction flow.
Returns the total number of transactions stored across all blocks (chain-wide counter, not per-address nonce).
Parameters: none
Response: "0x<hex>" — total transaction count as a hex string.
curl -s http://localhost:8545 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_transactionCount","params":[],"id":1}'
# → {"result":"0x1a4f"}Returns transactions sent from or received by an address. Supports pagination
and inclusive block-range filters. There is no artificial deep-offset cap; under
live load, clients should pin toBlock from the first page and reuse it for
older pages to avoid gaps or duplicates while new blocks arrive.
Parameters:
| Name | Type | Description |
|---|---|---|
address |
string | 0x... address |
fromBlock |
number | null | Start block (inclusive, default 0) |
toBlock |
number | null | End block (inclusive, default latest) |
page |
number | null | Page index, 0-based (default 0) |
limit |
number | null | Results per page (default 20) |
Response: paginated object:
| Field | Type | Description |
|---|---|---|
address |
string | Queried 0x... address |
fromBlock |
string | Effective inclusive lower block bound, hex encoded |
toBlock |
string | Effective inclusive upper block snapshot, hex encoded |
page |
number | Page index, 0-based |
limit |
number | Page size |
total |
number | Total matches in the requested range |
transactions |
array | Transaction summaries, including shellType/reward metadata when present |
curl -s http://localhost:8545 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_getTransactionsByAddress","params":["0xabc...",0,null,0,20],"id":1}'Returns the PQ witness bundle for a block — the individual Dilithium3 signatures stored separately from TX bodies. Returns null when witnesses have been pruned (STARK proof received) or the block predates B3 storage.
Parameters:
| Name | Type | Description |
|---|---|---|
block |
string | Block hash (0x...) or block number ("0x<hex>" / "latest") |
Response fields:
| Field | Type | Description |
|---|---|---|
blockHash |
string | Block hash |
witnessRoot |
string | witness_root from block header |
witnessCount |
number | Number of witnesses in bundle |
witnesses |
array | [{ txIndex, sigType, signature, pubkey? }, ...] |
Returns null when no witness bundle is stored (pruned or not applicable).
curl -s http://localhost:8545 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_getBlockWitnesses","params":["latest"],"id":1}'Directly sets the balance of an address. Only available when api_modules includes dev. Returns -32601 on production nodes.
Parameters:
| Name | Type | Description |
|---|---|---|
address |
string | Target 0x... address |
balance |
string | New balance in wei as decimal string |
Response: true on success.
curl -s http://localhost:8545 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"shell_setBalance","params":["0xabc...","1000000000000000000"],"id":1}'Note: The
debugnamespace must be explicitly enabled via--rpc-api eth,net,web3,shell,debug. It is not enabled by default on validator nodes.
Replays a transaction and returns an execution trace.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Transaction hash |
| 2 | Object |
No | Trace options |
Returns:
{
"frame": {
"type": "CALL",
"from": "0x...",
"to": "0x...",
"gas": 21000,
"gasUsed": 21000,
"input": "0x",
"output": "0x",
"value": "0xde0b6b3a7640000",
"error": null
},
"failed": false
}curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0xabc123..."],"id":1}'Traces all transactions in a block.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block number (hex) or block tag |
| 2 | Object |
No | Trace options |
Returns: Array — Array of trace result objects (one per transaction).
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"debug_traceBlockByNumber","params":["0x1a"],"id":1}'OpenEthereum-compatible trace format.
Note: Like
debug, thetracenamespace must be explicitly enabled via--rpc-api.
Returns traces for all transactions in a block.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block number (hex) or block tag |
Returns: Array — OpenEthereum-format trace objects.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"trace_block","params":["latest"],"id":1}'Returns the trace for a specific transaction in OpenEthereum format.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Transaction hash |
Returns: Array — Single-element array with the transaction trace.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"trace_oeTransaction","params":["0xabc123..."],"id":1}'Returns the trace for a specific transaction in standard format.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Transaction hash |
Returns: Array — Trace objects for the transaction.
curl -s http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"trace_transaction","params":["0xabc123..."],"id":1}'Returns the live algorithm registry as an array of objects: { algo, status, description }.
Parameters: None
Returns: Array — one entry per registered signature algorithm.
[
{
"algo": "MlDsa65",
"description": "FIPS 204 ML-DSA-65 (NIST post-quantum standard; primary algorithm)",
"status": "active"
},
{
"algo": "Dilithium3",
"description": "CRYSTALS-Dilithium3 (Round-3 pre-FIPS; active for legacy compatibility)",
"status": "active"
}
]Returns the STARK proof amendment for a block if one has been generated asynchronously. See stark-aggregation.md for the full response schema.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Block hash (0x...) |
Returns: Object|null — Proof amendment object or null if not yet generated.
Estimates gas for an AA batch transaction.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Batch transaction object |
Returns: String — Hex-encoded gas estimate.
Returns the paymaster policy for a given paymaster address.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | String |
Yes | Paymaster address (0x..., 32 bytes) |
Returns: Object|null — Policy object or null if no policy registered.
Returns whether a transaction would be sponsored by a paymaster.
Parameters:
| # | Type | Required | Description |
|---|---|---|---|
| 1 | Object |
Yes | Transaction object |
Returns: Boolean — true if the transaction would be sponsored.
Returns current consensus engine state.
Parameters: None
Returns:
{
"engine": "wpoa",
"currentProposer": "0x...",
"epochNumber": 5,
"validatorCount": 3,
"finalizedHeight": "0x18"
}For the canonical method list (currently 79 methods across web3_, net_, eth_, debug_, trace_, evm_, shell_ namespaces), see docs/rpc-reference.md, which is auto-generated from crates/rpc/src/api.rs.
Last updated: 2026-05-22