Skip to content

Chain · checked 9 November 2026

Agent payment safety checks for Arbitrum

Arbitrum One is an optimistic rollup with a sequencer feed for soft confirmation and a long challenge period before withdrawals reach Ethereum.

What your agent needs to know about Arbitrum

Finality
The sequencer publishes a real-time feed and gives soft finality that depends on the sequencer behaving honestly. Hard finality comes when the batch the sequencer posted to Ethereum (blobs or calldata) is final on L1. Arbitrum docs list three block tags: latest (may not yet be posted to L1), safe (attested by two thirds of Ethereum validators, can still reorg in a large L1 reorg) and finalized (posted to L1 at depth, reorg highly improbable). Docs say assertions have a 6.4 day challenge period, and an L2 to L1 message is redeemable only after confirmation, which takes some days. Do not use block numbers for finality; use the tags.[1],[2]
Fees
Fee is L2 gas times an exponential L2 basefee, plus an L1 data charge for transactions that enter through the sequencer. The L1 part is the Brotli-compressed size times ArbOS's calldata price, readable with getPricesInWei on the ArbGasInfo precompile. eth_estimateGas covers both parts, so the estimate can change when L1 calldata price changes. Docs say an 'intrinsic gas too low' error usually means the gas limit does not cover the L1 part; raise the gas limit. Docs also note block.number in Solidity is an L1 block number updated every few minutes, so do not use it for timing. Gas token is ETH on Arbitrum One.[1],[2]
Stablecoins
Circle lists native USDC on Arbitrum at the address below. Bridged USDC (USDC.e) is not issued by Circle and is not compatible with CCTP, per Circle's bridged USDC page. Tether's supported-protocols page did not list Arbitrum, so no USDT address is given. The Circle USDC contract can blacklist addresses.[3],[4],[5]
Issuer-published contract addresses. Compare all of it, not the first and last characters.
TokenAddressSource
USDC (native, Circle)0xaf88d065e77c8cC2239327C5EDb3A432268e5831[3]

How agent payments go wrong on Arbitrum

  1. 1. Relying on the sequencer feed for large payments

    Soft finality depends on the sequencer behaving honestly, and the latest tag may not yet be posted to L1. For large amounts, wait for the safe or finalized tag instead of the feed.[1],[2]

  2. 2. Gas limit too low after L1 price change

    eth_estimateGas bundles the L1 data part, so a stale estimate can fail with intrinsic gas too low when L1 calldata price rises. Re-estimate right before signing and add headroom to the gas limit.[2]

  3. 3. Bridged USDC.e taken for native USDC

    Bridged USDC is created by third parties, is not issued by Circle and is not CCTP compatible. An agent that accepts by symbol may hold a token that Circle will not redeem. Compare the address with Circle's list.[3],[4]

  4. 4. Using block.number for timing

    block.number returns an L1 block number that updates every few minutes, while L2 block numbers move about every second. Expiry logic built on block.number is coarse. Use timestamps with a margin and read the tags for finality.[2]

  5. 5. Treating a withdrawal as quick

    Moving funds from Arbitrum to Ethereum through the native path needs the 6.4 day assertion challenge period plus confirmation. An agent that promises funds on Ethereum the same day must use a third-party bridge or CCTP and accept their terms.[1]

  6. 6. Sequencer delay or censorship

    Messages that bypass the sequencer go through the delayed inbox. Docs say a well-behaved sequencer typically releases them after about 10 minutes, and after the maximum delay (24 hours on Arbitrum One) anyone can force them in. Alert if a payment is not seen by then.[1],[6]

Pre-flight checklist for a Arbitrum agent

  • Accept USDC only at Circle's native Arbitrum address.
  • Use eth_getBlockByNumber with the safe or finalized tag for balance reads that release value.
  • Re-estimate gas right before signing and set a gas limit with headroom for the L1 data part.
  • Do not use block.number for expiry; use timestamps with margin.
  • Alert if a transaction is not included after about 10 minutes and check the delayed inbox path.
  • Call isBlacklisted on the USDC contract for the payee before sending.

Run the checks now, free

The free tools run in your browser: nothing you type leaves your browser, and wallet reads go only to a public RPC.

  • The Wrong-Money Test

    Write down what happens when your agent pays the wrong amount, the wrong address or the wrong token on Arbitrum, and see whether the answer holds up.

  • Agent Spend-Cap Stress Test

    Work out how much your agents can really move in one window once retries, parallel runs and per-key limits stack up.

  • Agent Money Trace

    Reads an address's Arbitrum stablecoin transfers from a public RPC and joins them to your run log: orphan spend, phantom successes and double pays.

  • Can Your Agent Get Back Out?

    Quotes a live round trip on Arbitrum for the tokens your agent trades and shows whether its slippage setting would stop a bad exit.

Want a second pair of eyes on how your agent pays on Arbitrum? Book the free 48-hour integration review (opens Cal.com in a new tab).

Explorers to confirm a payment

Sources

  1. [1] Inside Arbitrum Nitro, Arbitrum docs
  2. [2] Troubleshooting building on Arbitrum, Arbitrum docs
  3. [3] USDC contract addresses, Circle
  4. [4] Bridged USDC Standard, Circle
  5. [5] Blacklistable.sol, Circle (GitHub)
  6. [6] Sequencer, Arbitrum docs

Checked against these sources on 9 November 2026. Networks change: confirm against the live docs before you rely on a number. This page is a checklist from public documentation. It is not a security audit, legal, compliance or investment advice.