Antler by Autoflux

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_getBlockByNumber includes an l1BlockNumber field per block.
  • eth_maxPriorityFeePerGas returns 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...064 ArbSysarbBlockNumber, arbBlockHash, sendTxToL1, sendTxToL1CustomFee, withdrawEth, getStorageAt.
  • 0x0000...06B ArbRetryableTxcreateRetryableTicket, redeem, cancel, getBeneficiary.
  • 0x0000...06C ArbGasInfogetPricesInWei, getL1FeesApproximate, getL1GasUsed, getL1CurrentEstimate.
  • 0x0000...06D ArbTokendepositERC20, withdrawERC20, getGateway.
  • 0x0000...06E ArbOwnersetFeePool, setL1BaseFeeEstimate, withdrawEth, setChainConfig.

L1 contracts (reference)

  • BridgeenqueueDelayedMessage, executeCall, delayedInboxAccs, initialize.
  • InboxcreateRetryableTicket, createEthDeposit, sendL1FundedUnsignedTransaction.
  • OutboxexecuteTransaction, processOutgoingMessage, calculateItemHash.
  • SequencerInboxaddSequencerL2BatchFromOrigin, addSequencerL2BatchFromAnyAddress, addMessageToDelayedInbox.
  • RollupCore / RollupUserLogicnewStakeOnNewAssertion, challengeAssertion, confirmNextAssertion.
  • ChallengeManagerinitializeChallengeBisection, 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_maxPriorityFeePerGas on 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 l1BlockNumber block 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 extensions
eth_maxPriorityFeePerGas → the current L1-inclusive gas price advice
arb_getBlockWithSize → block with tx data sized for L1 fee estimates
arb_estimateRetryableTicket→ gas estimate for creating a retryable
 
# L2 precompiles (deterministic addresses)
0x0000...064 ArbSys → arbBlockNumber, sendTxToL1, withdrawEth
0x0000...06C ArbGasInfo → getPricesInWei, getL1FeesApproximate
0x0000...06D ArbToken → token bridging helpers (depositERC20...)
0x0000...06E ArbOwner → chain owner admin
0x0000...06B ArbRetryableTx → createRetryableTicket, redeem
 
# L1 contracts
Bridge.sol Inbox.sol Outbox.sol
SequencerInbox.sol RollupCore.sol ChallengeManager.sol
 
STATUSinterface