Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Transaction Types

Arbitrum extends the EIP-2718 typed transaction envelope with six custom transaction types. These are used for L1-to-L2 messaging, internal protocol operations, and retryable tickets.

Type Bytes

TypeByteNameOrigin
Deposit0x64ArbitrumDepositTxL1 bridge
Unsigned0x65ArbitrumUnsignedTxL1 (no signature)
Contract0x66ArbitrumContractTxL1 contract call
Retry0x68ArbitrumRetryTxAuto/manual redeem
SubmitRetryable0x69ArbitrumSubmitRetryableTxL1 retryable ticket
Internal0x6AArbitrumInternalTxArbOS protocol

Standard Ethereum transaction types (Legacy, EIP-2930, EIP-1559) are also supported for regular L2 transactions.

Deposit Transactions (0x64)

Deposits move ETH from L1 to L2. They are included in blocks when the bridge contract emits a deposit event on L1.

  • Sender: Set to the L1 depositor (with address aliasing for contracts)
  • No signature: Authenticated by L1 inclusion proof
  • Always succeeds: Value is minted on L2 regardless of execution outcome
  • No gas cost: Gas is paid on L1

Unsigned Transactions (0x65)

L1-originated transactions without an ECDSA signature. The sender is determined by the L1 message rather than signature recovery.

Contract Transactions (0x66)

Similar to unsigned transactions but specifically for contract-to-contract L1-to-L2 calls. The sender address is aliased (offset by 0x1111000000000000000000000000000000001111) to prevent address collisions between L1 and L2.

Retryable Tickets (0x69)

Retryable tickets are the primary mechanism for L1-to-L2 message passing with guaranteed delivery.

Lifecycle

  1. Submit - L1 transaction creates a retryable ticket on L2 with a deposit covering fees and call value
  2. Auto-redeem - ArbOS automatically attempts to execute the ticket immediately
  3. Manual redeem - if auto-redeem fails, anyone can redeem the ticket later via ArbRetryableTx.redeem()
  4. Expiry - unredeemed tickets expire after 7 days (configurable) and deposits are refunded to the beneficiary

Fee Structure

  • Submission fee: (1400 + 6 * calldata_length) * l1_base_fee
  • Call value: Held in escrow at a derived address (keccak256("retryable escrow" || ticket_id))
  • Excess deposit: Refunded to the designated refund address

Retry Transactions (0x68)

Generated when a retryable ticket is redeemed (either automatically or manually). These carry the original call parameters from the retryable submission.

Internal Transactions (0x6A)

Protocol-level transactions generated by ArbOS itself, not by any external account. Two primary types:

  • StartBlock (0x6bf6a42d) - initializes ArbOS state at the beginning of each block (pricing updates, retryable reaping, L1 block number caching)
  • BatchPostingReport - records L1 batch posting costs for the L1 pricing model

Internal transactions are always the first transactions in a block and have no gas cost.

Receipt Extensions

Arbitrum receipts include additional fields beyond standard Ethereum receipts:

FieldDescription
gasUsedForL1Gas attributable to L1 data posting costs

Receipt type bytes mirror the transaction type bytes (0x64-0x6A), each with its own RLP encoding.