API Reference
The RPC surface, precompile addresses, and L1/L2 contract interfaces builders depend on.
Path: api-reference
Third-party documentation. This is independently authored analysis of the public Arbitrum Nitro codebase — not the official docs, and not reviewed or endorsed by the Arbitrum Nitro team.
API Reference
Nitro exposes three layers builders interact with: the Ethereum JSON-RPC (which is stock go-ethereum), a small set of Arbitrum-specific RPC extensions, and the L2 precompiles — fixed-address contracts that expose L2-native primitives. On the L1 side there are the bridge contracts.
Ethereum JSON-RPC
- Standard namespace (
eth_,net_,web3_) — identical semantics to go-ethereum. eth_getBlockByNumberincludes anl1BlockNumberfield per block.eth_maxPriorityFeePerGasreturns an estimate that accounts for the L1 data component — the recommended way to price transactions on the L2.
Arbitrum-specific RPC
arb_getBlockWithSize— block plus the exact byte-size of its transactions, useful for estimating L1 data fees.arb_estimateRetryableTicket— estimate the L2 gas cost of creating a retryable, without simulating it.arb_debugTracingCall— call tracing with Arbitrum-specific gas info (used by block explorers and debug tooling).
L2 precompiles (fixed addresses)
0x0000...064ArbSys —arbBlockNumber,arbBlockHash,sendTxToL1,sendTxToL1CustomFee,withdrawEth,getStorageAt.0x0000...06BArbRetryableTx —createRetryableTicket,redeem,cancel,getBeneficiary.0x0000...06CArbGasInfo —getPricesInWei,getL1FeesApproximate,getL1GasUsed,getL1CurrentEstimate.0x0000...06DArbToken —depositERC20,withdrawERC20,getGateway.0x0000...06EArbOwner —setFeePool,setL1BaseFeeEstimate,withdrawEth,setChainConfig.
L1 contracts (reference)
- Bridge —
enqueueDelayedMessage,executeCall,delayedInboxAccs,initialize. - Inbox —
createRetryableTicket,createEthDeposit,sendL1FundedUnsignedTransaction. - Outbox —
executeTransaction,processOutgoingMessage,calculateItemHash. - SequencerInbox —
addSequencerL2BatchFromOrigin,addSequencerL2BatchFromAnyAddress,addMessageToDelayedInbox. - RollupCore / RollupUserLogic —
newStakeOnNewAssertion,challengeAssertion,confirmNextAssertion. - ChallengeManager —
initializeChallengeBisection,oneStepProveExecution.
Edge cases
- Precompile addresses are L2-only — calling them on L1 hits empty accounts; gate any code that reads them behind a chain check.
eth_maxPriorityFeePerGason an Arbitrum node returns an L1-inclusive price; on an L1 node it returns an L1-only price. Don't pass the same value across chains.- The
l1BlockNumberblock field is the L1 block the L2 block is anchored to — for L1-timestamp-based logic, prefer it over the L2 timestamp (which follows the sequencer's clock).
Interface
Interface
text
# Standard Ethereum JSON-RPC (op-geth-compatible)eth_blockNumber, eth_getBlockByNumber, eth_getTransactionByHash,eth_call, eth_sendRawTransaction, eth_getLogs, eth_getProof# Arbitrum-specific RPC extensionseth_maxPriorityFeePerGas → the current L1-inclusive gas price advicearb_getBlockWithSize → block with tx data sized for L1 fee estimatesarb_estimateRetryableTicket→ gas estimate for creating a retryable# L2 precompiles (deterministic addresses)0x0000...064 ArbSys → arbBlockNumber, sendTxToL1, withdrawEth0x0000...06C ArbGasInfo → getPricesInWei, getL1FeesApproximate0x0000...06D ArbToken → token bridging helpers (depositERC20...)0x0000...06E ArbOwner → chain owner admin0x0000...06B ArbRetryableTx → createRetryableTicket, redeem# L1 contractsBridge.sol Inbox.sol Outbox.solSequencerInbox.sol RollupCore.sol ChallengeManager.sol
STATUSinterface
