Network & Consensus (pod )
Network & Consensus (pod_) exposes Pod-specific endpoints that provide visibility into the network’s validator set and consensus process. These APIs surface data that is not available through standard Ethereum JSON-RPC methods, such as validator committees and aggregated voting information.
This interface is intended for infrastructure providers, validators, and light clients that need to inspect, monitor, or verify the state of the Pod network.
📝 This is a JSON-RPC 2.0 API. The request path is not important; the method to execute is defined by the method field in the request body. You can send all requests to /, and any path after / is optional and used only for documentation clarity.
Submits a signed EIP-1559 transaction and waits for validator attestations, returning tx_hash, success count, and any rejection errors from validators.
Parameters:
signed_tx(string): Signed RLP-encoded transaction datatimeout_secs(integer, optional): Max seconds to wait for attestations. Default 10.skip_validation(boolean, optional): When true, a full node skips its local pre-validation. Default false.
The wait ends when the transaction executes, when n − f validators attest, when f + 1 reject it permanently, or at the timeout; on a timeout the result reports what was heard so far. On a validator node the call returns immediately with successes: 0.
Errors (beyond invalid params):
999— account locked;datacarriesrecovery_targetandrecovery_target_nonce.-32003— rejected permanently by at leastf + 1validators;datalists the rejections.997— an empty transaction is required atdata.nonceto make progress.-32000— the node is in read-only mode (seepod_status), or local validation failed on a non-contract rule (reason indata).3—execution reverted: local validation failed on a contract rule;datais the ABI-encodedError(string)reason.-32025— submission from a geo-restricted source.
2.0pod_sendRawTransaction1Parameters:
signed_tx(string): Signed RLP-encoded transaction datatimeout_secs(integer, optional): Max seconds to wait for attestationsskip_validation(boolean, optional): Skip the full node's local pre-validation
["0x02f8...",10]Object with tx_hash, successes count, and errors array
POST /pod_sendRawTransaction HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 84
{
"jsonrpc": "2.0",
"method": "pod_sendRawTransaction",
"id": 1,
"params": [
"0x02f8...",
10
]
}Object with tx_hash, successes count, and errors array
{
"jsonrpc": "text",
"result": {
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"successes": 1,
"errors": [
{
"error": "text"
}
]
},
"id": 1
}Returns the current validator committee and its quorum thresholds.
2.0pod_getCommittee1[]Committee information
POST /pod_getCommittee HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 64
{
"jsonrpc": "2.0",
"method": "pod_getCommittee",
"id": 1,
"params": []
}Committee information
{
"jsonrpc": "text",
"result": {
"validators": [
[
0,
"02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc"
]
],
"n": 1,
"n_minus_3f": 1,
"n_minus_f": 1
},
"id": 1
}Returns one validator's signed vote batches for the requested append-log sequence ranges. validator_index selects the validator; any node holding its batches can serve them, including a full node. Without validator_index the node serves its own batches; a full node then returns an internal error ("node is not a validator").
Each range is half-open, [start, end). The total across all ranges is capped by the node's vote-sync batch size; ranges past the cap are dropped, so re-request what is missing.
The result is a JSON array of vote batches, or with binary: true an object { data } holding the standard-base64 compact binary encoding of the same batches. Branch on the result: an array is the batches, an object carries them in data.
2.0pod_getVoteBatches1Array of vote batch objects, or { data } when binary is true
POST /pod_getVoteBatches HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 84
{
"jsonrpc": "2.0",
"method": "pod_getVoteBatches",
"id": 1,
"params": [
[
[
0,
1000
]
],
false,
3
]
}Array of vote batch objects, or { data } when binary is true
{
"jsonrpc": "text",
"result": [
{}
],
"id": 1
}Returns an account's finalized/expected nonces and last finalized transaction as this node sees them. Public and unauthenticated diagnostic info. Returns null when the account has never finalized a transaction.
2.0pod_getAccountInfo1Parameters:
account(address): The account to look up.
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"]Account nonce info, or null if the account has never finalized a tx
POST /pod_getAccountInfo HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 110
{
"jsonrpc": "2.0",
"method": "pod_getAccountInfo",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
]
}Account nonce info, or null if the account has never finalized a tx
{
"jsonrpc": "text",
"result": {
"next_finalized_nonce": 1,
"expected_nonce": 1,
"last_finalized_tx": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"id": 1
}Returns the account's last finalized nonce, or null when the account has never finalized a tx.
2.0pod_getLastFinalizedNonce1Parameters:
account(address): The account to look up.
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"]The account's last finalized nonce, or null
POST /pod_getLastFinalizedNonce HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 117
{
"jsonrpc": "2.0",
"method": "pod_getLastFinalizedNonce",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
]
}The account's last finalized nonce, or null
{
"jsonrpc": "text",
"result": 1,
"id": 1
}Returns the full pipeline status of a transaction: pending (with live vote counts), finalized (with execution result), or not_found for an unknown tx hash.
2.0pod_getTxStatus1Parameters:
tx_hash(bytes32): The transaction hash to look up.
["0xf74e07ff80dc54c7e894396954326fe13f07d176746a6a29d0ea34922b856402"]Transaction status
POST /pod_getTxStatus HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 131
{
"jsonrpc": "2.0",
"method": "pod_getTxStatus",
"id": 1,
"params": [
"0xf74e07ff80dc54c7e894396954326fe13f07d176746a6a29d0ea34922b856402"
]
}Transaction status
{
"jsonrpc": "text",
"result": {
"status": "not_found",
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"account": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"nonce": 1,
"account_next_finalized_nonce": 1,
"account_expected_nonce": 1,
"quorum": 1,
"votes": {
"account": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"nonce": 1,
"txs": [
{
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"voters": [
{
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
}
]
}
],
"bot_voters": [
{
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
}
],
"total_tx_votes": 1,
"quorum": 1
},
"success": true,
"gas_used": 1
},
"id": 1
}Returns the votes observed for a given (account, nonce): the voter set per transaction hash plus the BOT voters. Returns null when no votes are pending at that nonce (never seen, or already finalized).
2.0pod_getVotes1Parameters:
account(address): The account whose votes to inspect.nonce(integer): The nonce to inspect.
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",42]Votes at the (account, nonce), or null if none are pending
POST /pod_getVotes HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 107
{
"jsonrpc": "2.0",
"method": "pod_getVotes",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
42
]
}Votes at the (account, nonce), or null if none are pending
{
"jsonrpc": "text",
"result": {
"account": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"nonce": 1,
"txs": [
{
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"voters": [
{
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
}
]
}
],
"bot_voters": [
{
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
}
],
"total_tx_votes": 1,
"quorum": 1
},
"id": 1
}Fetches full signed transactions by hash. The request hash list is capped server-side, and the response is additionally truncated to the node's max response body size — a transaction that does not fit is omitted (re-request whatever is missing). Each returned item is a signed Pod transaction (EIP-1559 envelope plus signature); decode with the Pod SDK.
2.0pod_getTransactions1Array of signed transaction objects (possibly truncated to the body-size budget)
A signed Pod transaction.
POST /pod_getTransactions HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 137
{
"jsonrpc": "2.0",
"method": "pod_getTransactions",
"id": 1,
"params": [
[
"0xf74e07ff80dc54c7e894396954326fe13f07d176746a6a29d0ea34922b856402"
]
]
}Array of signed transaction objects (possibly truncated to the body-size budget)
{
"jsonrpc": "text",
"result": [
{}
],
"id": 1
}Lists signed transactions, newest first, optionally filtered by sender and/or recipient.
2.0pod_listTransactions1Parameters (all optional, positional):
from_account(address, nullable): filter by sender.to_account(address, nullable): filter by recipient.limit(integer, nullable): maximum number of transactions to return (default and cap 10,000).
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",null,100]Array of signed transaction objects
A signed Pod transaction.
POST /pod_listTransactions HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 121
{
"jsonrpc": "2.0",
"method": "pod_listTransactions",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
null,
100
]
}Array of signed transaction objects
{
"jsonrpc": "text",
"result": [
{}
],
"id": 1
}Returns the transaction an account must recover past to make progress, or null if the account does not need recovery.
2.0pod_getRecoveryTargetTx1Parameters:
account(address): The account to inspect.
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"]The recovery target, or null if none
POST /pod_getRecoveryTargetTx HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 115
{
"jsonrpc": "2.0",
"method": "pod_getRecoveryTargetTx",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
]
}The recovery target, or null if none
{
"jsonrpc": "text",
"result": {
"hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"nonce": 1
},
"id": 1
}Returns the bridge deposit replay-protection set (a watermark plus the processed ids at or above it). The relayer queries this to drop already-processed deposits from a batch.
2.0pod_getProcessedDeposits1[]The processed-deposit set
POST /pod_getProcessedDeposits HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 72
{
"jsonrpc": "2.0",
"method": "pod_getProcessedDeposits",
"id": 1,
"params": []
}The processed-deposit set
{
"jsonrpc": "text",
"result": {
"watermark": "0x6f05b59d3b200000",
"above_watermark": [
"0x6f05b59d3b200000"
]
},
"id": 1
}Returns the list of enshrined precompile contracts (bridge, CLOB, recovery, ...) with their addresses and names.
2.0pod_getPrecompiles1[]Array of precompiles
POST /pod_getPrecompiles HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 66
{
"jsonrpc": "2.0",
"method": "pod_getPrecompiles",
"id": 1,
"params": []
}Array of precompiles
{
"jsonrpc": "text",
"result": [
{
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"name": "text"
}
],
"id": 1
}Returns a single precompile's address, name, and callable interface.
2.0pod_getPrecompileInfo1Parameters:
address(address): The precompile address.
["0x50d0000000000000000000000000000000000002"]Precompile info
POST /pod_getPrecompileInfo HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 113
{
"jsonrpc": "2.0",
"method": "pod_getPrecompileInfo",
"id": 1,
"params": [
"0x50d0000000000000000000000000000000000002"
]
}Precompile info
{
"jsonrpc": "text",
"result": {
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"name": "text",
"interface": "text"
},
"id": 1
}Returns the solver node's current state: its address and public key, next finalized nonce, last executed and last generated solution batches, the votes seen for the next solution, and its solving schedule. Only meaningful when queried against the solver node.
2.0pod_getSolverState1[]Solver state
POST /pod_getSolverState HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 66
{
"jsonrpc": "2.0",
"method": "pod_getSolverState",
"id": 1,
"params": []
}Solver state
{
"jsonrpc": "text",
"result": {
"solver_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"solver_pub_key": "02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc",
"next_finalized_nonce": 1,
"last_executed_batch": {
"deadline": "1704153600000000",
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"last_generated_batch": {
"deadline": "1704153600000000",
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"next_solution_votes": {
"ANY_ADDITIONAL_PROPERTY": [
1
]
},
"schedule": {
"schedule": {
"start_deadline": 1,
"stop_deadline": 1
},
"next_deadline": "1704153600000000",
"producing": true
}
},
"id": 1
}Returns this node's own validator state: append-log sequence number, local past-perfect time, last executed batch deadline, and derived next-solution deadline. Values reflect the queried node's in-memory state, not a consensus view.
2.0pod_getValidatorStatus1[]Validator status
POST /pod_getValidatorStatus HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 70
{
"jsonrpc": "2.0",
"method": "pod_getValidatorStatus",
"id": 1,
"params": []
}Validator status
{
"jsonrpc": "text",
"result": {
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"append_log_sequence": 1,
"current_ppt": 1704153600000000,
"last_executed_batch": 1704153600000000,
"next_solution_deadline": 1704153600000000,
"quorum": 1,
"committee_size": 1
},
"id": 1
}Returns how a specific validator has voted with respect to a specific account: what it has (or hasn't) voted at each pending nonce, as seen by this node. Returns null when the validator address is not in the current committee.
2.0pod_getValidatorAccountStatus1Parameters:
validator(address): The validator to inspect.account(address): The account to inspect.
["0x1111111111111111111111111111111111111111","0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"]Validator's per-nonce vote state for the account, or null if the validator is not in the committee
POST /pod_getValidatorAccountStatus HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 166
{
"jsonrpc": "2.0",
"method": "pod_getValidatorAccountStatus",
"id": 1,
"params": [
"0x1111111111111111111111111111111111111111",
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
]
}Validator's per-nonce vote state for the account, or null if the validator is not in the committee
{
"jsonrpc": "text",
"result": {
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"account": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"account_next_finalized_nonce": 1,
"account_expected_nonce": 1,
"quorum": 1,
"pending_nonces": [
{
"nonce": 1,
"vote": {
"kind": "tx",
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001"
}
}
]
},
"id": 1
}Returns a full diagnostic snapshot of a single account across all committee validators: per-validator vote state, recovery status, CLOB pending-solution presence, and equivocation detection — all in one call. Votes are read for at most the 256 oldest pending nonces; when more are pending, current_vote (the vote on the latest pending nonce) reports not_seen.
2.0pod_getAccountDiagnostics1Parameters:
account(address): The account to diagnose.
["0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"]Account diagnostics
POST /pod_getAccountDiagnostics HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 117
{
"jsonrpc": "2.0",
"method": "pod_getAccountDiagnostics",
"id": 1,
"params": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28"
]
}Account diagnostics
{
"jsonrpc": "text",
"result": {
"account": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"next_finalized_nonce": 1,
"expected_nonce": 1,
"last_finalized_tx": "0x0000000000000000000000000000000000000000000000000000000000000001",
"is_locked": true,
"quorum": 1,
"validators": [
{
"validator_index": 1,
"validator_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"highest_attested_nonce": 1,
"current_vote": {
"kind": "tx",
"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"equivocating": true
}
],
"needs_recovery": true,
"recovery_target": {
"hash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"nonce": 1
},
"has_clob_order_pending_solution": true,
"equivocating": true
},
"id": 1
}Returns the operational status of the node. Currently exposes read_only — when true, the node rejects sendRawTransaction submissions. Public and unauthenticated.
2.0pod_status1[]Node status
POST /pod_status HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 58
{
"jsonrpc": "2.0",
"method": "pod_status",
"id": 1,
"params": []
}Node status
{
"jsonrpc": "text",
"result": {
"read_only": true
},
"id": 1
}Long-poll that resolves once this node's past-perfect time (PPT) reaches the given timestamp, then returns a null result. The target must be within ~500 ms of now; a target too far in the future is rejected with an invalid-params error.
2.0pod_waitPastPerfectTime1Parameters:
timestamp(integer): Target past-perfect time, in microseconds since the Unix epoch.
[1704153600000000]Resolves once PPT reaches the target; result is always null
Always null on success.
Requested PPT is too far in the future, or the timestamp does not fit in a u64
POST /pod_waitPastPerfectTime HTTP/1.1
Host: rpc.podtestnet.dev/
Content-Type: application/json
Accept: */*
Content-Length: 87
{
"jsonrpc": "2.0",
"method": "pod_waitPastPerfectTime",
"id": 1,
"params": [
1704153600000000
]
}{
"jsonrpc": "text",
"result": null,
"id": 1
}Last updated

