Inputs to the State Transition Function
Arbitrum nodes receive transaction inputs through two channels:
Nodes subscribe to the Sequencer feed, receiving upcoming ordered transactions published in real time. To learn more, refer to the real-time sequencer feed documentation.
Nodes also subscribe to the SequencerBatchDelivered
event on the parent chain. This event occurs whenever a batch 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 re-organize to adopt the transactions confirmed on the parent chain, using the parent chain as the definitive source of truth.
As discussed in the considerations and limitations section, these methods suit different applications.
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 child chain 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
(Feel free to 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 | Arbitrum Classic used it for messages sent to bridge, 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.