Inputs to the State Transition Function
Reference for the message types and input channels that feed the Arbitrum State Transition Function.
nodes receive transaction inputs through two channels:
- Nodes subscribe to the feed and receive upcoming ordered published in real time. To learn more, refer to the real-time sequencer feed documentation.
- Nodes also subscribe to the
SequencerBatchDeliveredevent on the . This event occurs whenever a of transactions gets delivered to the parent chain via the batch poster. Upon receiving this event, nodes verify that the transactions recorded on the parent chain match those from the Sequencer feed. If discrepancies arise, nodes reorganize to adopt the transactions confirmed on the parent chain, treating it as the definitive source of truth.
These two channels suit different applications. To choose between them, see when to rely on soft finality versus hard finality.
The Fast Feed on is not a third channel. It is a read-only stream for latency-sensitive subscribers, and a Nitro node cannot consume it or follow the chain with it. It delivers no input to the STF.
These transactions serve as inputs for the State Transition Function (STF).
Message types
Arbitrum supports multiple message types. These messages fall into two broad categories:
- Messages submitted directly to the Sequencer as messages
- Messages submitted to the parent chain
For other message types, see the parent-to-child chain messaging documentation.
In the system, we refer to these messages as L1IncomingMessage (inspect the source code reference).
When submitted to the Sequencer feed, messages receive unique identifiers for proper routing. Below is the list of message types, their associated constant values, and descriptions:
uint8 constant L2_MSG = 3;
uint8 constant L1MessageType_L2FundedByL1 = 7;
uint8 constant L1MessageType_submitRetryableTx = 9;
uint8 constant L1MessageType_ethDeposit = 12;
uint8 constant L1MessageType_batchPostingReport = 13;
uint8 constant L2MessageType_unsignedEOATx = 0;
uint8 constant L2MessageType_unsignedContractTx = 1;
uint8 constant ROLLUP_PROTOCOL_EVENT_TYPE = 8;
uint8 constant INITIALIZATION_MSG_TYPE = 11;| Message Type | Value | Description |
|---|---|---|
L2MessageType_unsignedEOATx | 0 | Unsigned child chain messages from EOAs submitted to the parent chain. |
L2MessageType_unsignedContractTx | 1 | Unsigned child chain messages submitted to the parent chain. |
L2_MSG | 3 | Child chain messages submitted directly to the Sequencer. |
L1MessageType_L2FundedByL1 | 7 | Child chain messages that go to the parent chain's delayed inbox, with funding provided on the parent chain itself. |
ROLLUP_PROTOCOL_EVENT_TYPE | 8 | used it for messages sent to ; Nitro does not use it. |
L1MessageType_submitRetryableTx | 9 | Submitting parent chain messages to the child chain via retryable tickets. |
INITIALIZATION_MSG_TYPE | 11 | The first message added to a new Rollup inbox. Its presence indicates proper initialization of the Rollup. |
L1MessageType_ethDeposit | 12 | Child chain messages that handle deposits of native tokens (ETH) into the child chain. |
L1MessageType_batchPostingReport | 13 | Used by the Sequencer to update the pricing model based on payment(s) by the batch poster. |
These identifiers enable nodes to route messages correctly.
How is this guide?
Finality and reorgs
How finality works on Arbitrum chains, how and why a child chain can reorganize, how deep a reorg can go, and the confirmation levels an indexer should wait for before treating data as irreversible.
ArbOS technical reference
Technical reference for ArbOS internals: precompile architecture, state storage, child chain pricing state, and Stylus execution details.