igneum/docs/build/rpc.md
igneum-labs 683a5afc99 Builder pages and faucet: Devnet 3 chain id 4464 since the class v5 floor (8 October 2026, 13:27 BST reading)
- the faucet reads eth_chainId from its node on every send and in its status (a fixed id signed refused transactions once the floor crossed); FAUCET_CHAIN_ID is gone from the env; the faucet now reads node1-dn3's EVM, the node the public RPC fronts
- /build, /faucet, docs/build/first-contract.md, rpc.md and faucet.md: 4464 with the floor note, "read it, never fix it"
- a second walkthrough PASS on the 4464 chain from build-2 through the public RPC and faucet: Counter at block 29878, 12 s end to end

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:38:51 +00:00

5.4 KiB

The JSON-RPC a Devnet 3 node serves

Read from the node, not from a spec: every method below was sent to a Devnet 3 node on 8 October 2026 (web3_clientVersion answered igneumd/2.1.0/execution-layer-v3, eth_chainId 0x116f, block 26,666) and sorted by what came back. A method the node does not know answers JSON-RPC error -32601. The probe is at the end; run it against your own node to refresh this file.

Transport: HTTP POST, JSON-RPC 2.0, one request per call, no batches tested. The public endpoint is https://rpc.devnet.igneum.network; a node you run serves http://127.0.0.1:26790. The DAG side of the node (blocks, the mempool, the vote table) speaks the Kaspa-style gRPC and wRPC on their own ports; the explorer and the observer use those, a contract developer needs only what is here.

Served: the Ethereum set

Method Note
web3_clientVersion igneumd/<version>/execution-layer-v3
net_version the chain id as a decimal string, "4464" ("4463" before the class v5 floor)
net_listening, net_peerCount
eth_chainId 0x1170 (4464) on Devnet 3 since its class v5 floor at DAA 68,400 on 8 October 2026; 0x116f (4463) below it. Read it, never fix it
eth_blockNumber the executed chain tip
eth_syncing false when the executor is at the tip
eth_mining false from the RPC's point of view: mining is the miner's, not the node's
eth_accounts always []: the node holds no keys
eth_protocolVersion 0x41
eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory EIP-1559 pricing; the proving dimension is folded into the quoted price
eth_getBalance, eth_getTransactionCount, eth_getCode, eth_getStorageAt by block tag or number
eth_getBlockByNumber, eth_getBlockByHash the EVM view of a chain block; null for an unknown hash
eth_getBlockTransactionCountByNumber
eth_getTransactionByHash, eth_getTransactionByBlockNumberAndIndex
eth_getTransactionReceipt, eth_getBlockReceipts
eth_getLogs by block range, address and topics
eth_call, eth_estimateGas as on Ethereum
eth_sendRawTransaction a signed EIP-155, EIP-1559 or legacy envelope; the chain id must match

Served: Igneum's own

Method What the answer carries (from the probe)
igneum_getExecStatus the executed tip, a continuity break if any, what the executor is blocked on
igneum_getProvingStatus whether proving is active, its activation height, assignees per shard, the dust rule
igneum_getShardPlan a block's shard plan: the DAA score, eligible keys, the epoch seed, the assignments
igneum_getProofRecords the proof records a block carries and claims
igneum_getTransactionStatus per transaction: in the mempool, included in, executed, locked
igneum_estimateGas both gas dimensions, the base fee, and exceedsProvingLimit
igneum_getBudgets the proving budgets: backlog depth, the base fee, chain blocks
igneum_getAssignedShards the shards assigned to this node's prover
igneum_getSegment, igneum_getSegmentRecords, igneum_getSegmentStatement a segment's executed blocks, records and statement
igneum_getSegmentProofBytes, igneum_getProofBytes the proof bytes for a key hash (keyHash is required)
igneum_exportSegments a range of segments with their accounts
igneum_exportExecSnapshot writes a snapshot to a path on the node's own disk
igneum_submitProofRecord, igneum_submitSegmentRecord the prover's submissions; a record is required

Not served

Each of these answered -32601 on 8 October 2026. Where a tool wants one, the note says what to do instead.

Method Instead
eth_newFilter, eth_newBlockFilter, eth_newPendingTransactionFilter, eth_getFilterChanges, eth_getFilterLogs, eth_uninstallFilter poll eth_blockNumber and eth_getLogs
eth_subscribe, eth_unsubscribe no WebSocket subscriptions; poll
eth_sendTransaction, eth_sign, eth_signTransaction the node holds no keys; sign on your side and use eth_sendRawTransaction
eth_getProof not yet
eth_getTransactionByBlockHashAndIndex, eth_getBlockTransactionCountByHash use the by-number forms
eth_getUncleByBlockHashAndIndex, eth_getUncleByBlockNumberAndIndex, eth_getUncleCountByBlockHash, eth_getUncleCountByBlockNumber there are no uncles; the DAG's merged blocks are not EVM blocks
eth_createAccessList, eth_simulateV1, eth_blobBaseFee not yet; no blobs
eth_coinbase, eth_hashrate the miner's, not the node's
txpool_content, txpool_status igneum_getTransactionStatus for one transaction
debug_traceTransaction, debug_traceBlockByNumber, trace_block no tracing yet
web3_sha3 hash on your side

The probe

Every method with a harmless argument; the verdict is served, not-found (-32601) or error (the node knows the method and refused the argument, which counts as served).

URL=http://127.0.0.1:26790
call() { curl -s -X POST -H 'content-type: application/json' \
  --data "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"$1\",\"params\":${2:-[]}}" "$URL"; }
for m in web3_clientVersion eth_chainId eth_blockNumber eth_newFilter eth_subscribe; do
  printf '%-32s %s\n' "$m" "$(call $m | cut -c1-80)"
done

Devnet 3 resets without notice and its coins have no value.