17. Glossary
1. General Terms
Predeployed Contract (Predeploy)
- A contract placed in the L2 genesis state.
Â
Receipt
- Output generated by a transaction, comprising of:
- A status code
- The amount of gas used
- List of log entries
- Bloom filter for indexing log entries
- Receipts are not stored in blocks. But the blocks do store the transaction trie receipt for every transaction in the block (thus easy to compute from execution).
Â
Transaction Type
- EIP-2718 defines different transaction types.
- Different transaction types contain different payloads.
Â
Fork Choice Rule
- Rule used to determine which block is the head of the blockchain.
- On L1 → Proof of Stake rules (Gasper FFG and GHOST)
- On L2 → rules vary depending on whether we want:
- safe L2 head
- unsafe L2 head
- finalised L2 head
Â
2. Sequencing
Transactions in the rollup can be included in 2 ways:
1. Through deposited transaction (directly to L1)
2. Through regular transaction (in sequencer batch)
Submitting transactions to sequencer saves costs and enables the sequencer to pre-confirm transactions before L1 confirms the data.
Sequencer
- Can be either:
- Rollup node ran in sequencer mode.
- Operator of this rollup node.
- Sequencer is a privileged actor.
- Sequencer receives L2 transactions from users.
- Sequencer creates L2 blocks using received transactions.
- Sequencer submits L2 blocks to a DA provider (via a batcher).
- Sequencer submits output roots to L1.
Â
Sequencing Window
- This is a range of L1 blocks from which a sequencing epoch can be derived.
Â
We have a sequencing window:
- The 1st L1 block of the window has number
N
.
- This L1 block contains batcher transactions for epoch N
.
- The sequencing window contains the range of the following L1 blocks labeled by number, [N, N + SWS)
.
- SWS
= sequencer window size
- 1st L1 block of window contains depositing transactions which determine the deposits to be included in the first LW block of the epoch.Â
Sequencing Epoch
- This is a sequential range of L2 blocks derived from a sequencing window of L1 blocks.
- Each epoch is identified by an epoch number.
- equal to the block number of the first L1 block in the sequencing window.
Â
L1 Origin
- This is a field of an L2 block.
- It refers to the L1 block corresponding to its sequencing to its sequencing epoch.
Â
3. Deposits
Â
A deposit is an L2 transaction derived from an L1 block.
This is performed by the rollup driver.
Â
Deposited Transaction
- A L2 transaction derived from L1 and included in a L2 block.
- 2 kinds of deposited transactions:
- L1 attributes deposited transactions: submits L1 block attributes to the L1 Attributes Predeployed Contract.
- User-deposited transactions: transactions derived from an L1 call to the deposit contract (OptimismPortal Contract).
Â
L1 Attributes Deposited Transaction (L2 transaction)
- Deposited Transaction on L2.
- Used to register the L1 block attributes on L2 (via call to L1 Attributes Predeployed Contract).
Â
User-Deposited Transaction (L2 transaction)
- Deposited Transaction on L2.
- Derived from an L1 call to the deposit contract.
Â
Depositing Call (L1 contract call)
- A L1 call to the deposit contract.
- Rollup driver uses this to derive the deposit transaction on L2 (by listening for the deposit events emitted by the L1 contract).
Â
Depositing Transaction (L1 transaction)
- L1 Transaction that makes one more depositing calls.
Â
Depositor
- L1 account (contract or EOA) that makes the depositing call.
- Depositor is the
msg.sender
(but is NOT the originator of the depositing transaction i.e.tx.origin
).
Â
Deposited Transaction Type
- EIP-2718 transaction type on L2.
0x7E
is the type number.
Â
Deposit Contract (on L1)
- L1 contract which accounts may send deposits to.
- Deposits are emitted as log events for consumption by rollup nodes.
Â
4. Withdrawals
Â
A withdrawal is a transaction sent from L2 to L1 that may transfer data and/or value.
Â
- Withdrawal initiating transaction = L2 transaction sent to the Withdrawals Predeployed Contract.
- Withdrawal finalising transaction = L1 transaction which finalises and relays the withdrawal.
Â
Relayer (L1 EOA)
- A L1 EOA which finalises a withdrawal.
- It submits data needed to verify its inclusion on L2.
Finalisation Period
- The minimum amount of time that must elapse before withdrawal can be finalised.
- It is necessary to afford sufficient time for validators to make a fault proof.
Â
5. Batch Submission
Data Availability
- Guarantees that data will be available (and retrievable) during a reasonably long time window.
- This data refers to sequencer batches that validators need in order to verify the sequencer’s work and validate the L2 chain.
- DA is most crucial when we need to make use of fault proofs.
- Availability does not guarantee long-term storage of the data.
Data Availability Provider
- A service that can be used to make data available.
- Provides strong, verifiable guarantees of data availability.
- Currently the only supported DA provider is Ethereum calldata.
- In the future, Ethereum data blobs will also be supported.
Sequencer Batch
- A list of L2 transactions submitted to a sequencer.
- This batch is tagged with an epoch number and an L2 block timestamp.
- This can trivially be converted to a block number, given Optimism block time is constant.
- These batches are part of the L2 derivation inputs.
- Each batch represents the inputs needed build one L2 block (given existing L2 chain state).
- Special Case: The first block of the epoch requires also the information about deposits.
Channel
- A sequence of sequencer batches (for sequential blocks) compressed together.
- Multiple batches are grouped together to obtain a better compression rate.
- Channels can be split in frames in order to be transmitted via batcher transactions.
- Channels are uniquely identified by its timestamp and a random value.
- The rollup node is the consumer of channels.
- A channel is considered to be opened if its final frame (explicitly labeled) has not been read, or closed otherwise.
Channel Frame
- A chunk of data belonging to a channel.
- Batcher transactions carry one or multiple frames.
- If a channel is too large to include in a single batcher transaction, we split a channel into frames.
Batcher
- A software component that is responsible for making channels available on a DA provider (right now this means the calldata).
- The batcher communicates with the rollup node in order to retrieve the channels.
- The channels are then made available using batcher transactions.
Batcher Transaction
- A transaction submitted by a batcher to a DA provider.
- These transactions carry one or more full frames, which may belong to different channels.
- A channel’s frame may be split between multiple batcher transactions.
- When submitting to Ethereum calldata, the batcher transaction’s recipient must be the sequencer inbox address.
- The transaction is required to be signed by a recognised batch submitter account.
Channel Timeout
- A duration (in L1 blocks) during which channel frames may land on L1 within batcher transactions.
- Acceptable time range for frames of a channel =
[channel_id.timestamp, channel_id.timestamp +
CHANNEL_TIMEOUT
]
. - Acceptable L1 block range for these frames are any L1 blocks whose timestamp falls within the time range.
- Purpose of channel timeouts:
- Avoid keeping old, unclosed channel data around forever.
- Bound the number of L1 blocks we need to look back at to decode sequencer batches from channels.
Â
6. L2 Chain Derivation
L2 chain derivation is a process that reads L2 derivation inputs from L1 to derive the L2 chain.
Â
L2 Derivation Inputs
- Data that is found in L1 blocks and is read by the rollup node to construct payload attributes.
- Inputs include:
- L1 block attributes
- block number
- timestamp
- basefee
- Deposits (as log data)
- Sequencer batches (as transaction data)
- System configuration updates (as log data)
Â
System Configuration
- The collection of dynamically configurable rollup parameters maintained by the
SystemConfig
contract on L1 and read by the L2 derivation process.
- These parameters enable keys to be rotated regularly.
- These parameters enable external cost parameters to be adjusted without requiring hard forks.
Â
Payload Attributes
- An object that can be derived from L2 chain derivation inputs found on L1, which are then passed to the execution engine to construct L2 blocks.
- This object encodes a block without output properties.
Â
L2 Genesis Block
- The first block of the L2 chain in its current version.
- State of the L2 genesis block includes:
- State inherited from previous versions of the L2 chain.
- Predeployed contracts
- Timestamp of L2 genesis block must be a multiple of the block time.
Â
L2 Chain Inception
- The L1 block number at which the output roots for the genesis block were proposed on the output oracle contract.
Safe L2 Block
- An L2 block that is derived entirely from L1 by a rollup node.
Safe L2 Head
- The highest safe L2 block that a rollup node knows about.
Unsafe L2 Block
- An L2 block that a rollup node knows about but which was not derived from the L1 chain.
- In sequencer mode, this is a block sequenced by the sequencer itself.
- In validator mode, this is a block acquired from the sequencer via unsafe sync.
Unsafe L2 Head
- The highest unsafe L2 block that a rollup node knows about.
Unsafe Block Consolidation
- The process through which the rollup node attempts to move the safe L2 head a block forward, so that the oldest unsafe L2 block becomes the new safe L2 head.
- To perform consolidation, the node verifies that the payload attributes derived from the L1 chain match the oldest unsafe L2 block exactly.
- Look at Engine Queue documentation.
Finalised L2 Head
- The highest L2 block that can be derived from finalised L1 blocks (L1 blocks older than 2 L1 epochs → 64 L1 time slots).
- L1 finality notes (https://hackmd.io/@prysmaticlabs/finality)
Â
7. Other L2 Chain Concepts
Address Aliasing
- Modified representation of the address of a contract on L2.
- When a contract submits a deposit from L1 to L2, its address is aliased with a modified representation of the address of the contract on L2.
Rollup Node
- Responsible for deriving the L2 chain from the L1 chain (using L1 blocks and their receipts).
- Can be run in either validator mode or sequencer mode.
- In sequencer mode:
- Rollup node receives L2 transactions from users, which it uses to create L2 blocks.
- These are then submitted to a DA provider via batch submission.
- L2 chain derivation is a sanity check + way to detect L1 chain re-orgs.
- In validator mode (replica):
- Rollup node performs L2 chain derivation.
- Is also able to run ahead of the L1 chain by getting blocks directly from the sequencer.
Rollup Driver
- Rollup node component responsible for executing derivation logic for deriving the L2 chain from the L1 chain.
L1 Attributes Predeployed Contract
- A predeployed contract on L2 used to retrieve L1 block attributes of L1 blocks (using number or hash).
L2 Output Root
- A 32 byte value representing a commitment to the current state of the L2 chain.
L2 Output Oracle Contract
- An L1 contract to which L2 output roots are posted to by the sequencer.
Validator
- An entity that runs a rollup node in validator mode.
- Validators can simulate L2 transactions locally, without rate limiting.
- Validators can verify the work of the sequencer.
- Re-deriving output roots and comparing them against those submitted by the sequencer.
- Performing fault proof if appropriate.
Fault Proof
- An on-chain interactive proof, performed by validators demonstrating that a sequencer provided incorrect output roots.
Time Slot
- Every 2 second interval following the timestamp of the L2 genesis block.
Block Time
- 2 seconds, meaning there is an L2 block at every 2 second time slot.
Unsafe Sync
- The process through which a validator learns about unsafe L2 blocks from the sequencer.
- The discovered unsafe L2 blocks need to be confirmed by the L1 chain (via unsafe block consolidation)
Â
8. Execution Engine Concepts
Execution Engine is the explicit component that executes L2 transactions. It uses transactions derived from L1 blocks to construct the L2 transactions and execute them.
Execution Engine
- Responsible for executing transactions in blocks and computing the resulting state roots, receipts roots and block hash.
- On L2, executed blocks are freshly minted by the execution engine at the request of the rollup node, using transactions derived from L1 blocks.
Â