igneum/docs/build/rpc.md
igneum-labs cb2b8a2578 Builder programme (8 October 2026): /build, /grants, the Devnet 3 faucet on build-1, docs/build as the source
- site/build.html and site/grants.html rendered by site/build.mjs from docs/build/build.md and docs/build/grants.md (the gate's site-only copy keeps the committed pages, as for /bench); site-relative links in the markdown renderer
- the nav's fourth group, Build (/build, /faucet, /grants), in the partial, the sheet, the footer, the sitemap and tools/ci/site-nav-check.mjs; the faucet leaves the Mine panel
- site/faucet.html is the Devnet 3 faucet: 10 IGN per address per day, 500 a day, chain id 4463, no value, resets without notice; the page posts to https://faucet.igneum.network/api/faucet and shows the balance
- infra/build-server/faucet: faucet.mjs (zero dependencies, signs with site/lib/eth.mjs, limiter self-test known-failed first, 100 IGN cap on the amount), the unit, faucet.sh install/status; live on build-1 behind Caddy since 10:16Z, funded 2,000 IGN by the fleet's funder at 10:01Z; first drip 0x8620e9d8 at 10:17Z
- docs/build: README, first-contract.md with its test script and the PASS line (24 s end to end through the public RPC and faucet, Foundry 1.8.5, Counter deployed at block 27055), rpc.md read from the node (75 methods probed, served and not served), faucet.md, verify-a-block.md, grants.md
- .forgejo/issue_template/grant.md: the grant application template on git.igneum.network

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

79 lines
5.2 KiB
Markdown

# 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, `"4463"` |
| `net_listening`, `net_peerCount` | |
| `eth_chainId` | `0x116f` (4463) on Devnet 3; `0x1170` after its class v5 floor |
| `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.