This page outlines how Base blocks are built.
This section describes how blocks are ordered on the Base networks. The ordering is separate from the UX, for example the sequencer could be building Flashblocks every 200ms, without these Flashblocks being exposed publicly. In this scenario, block ordering would change but the user experience would remain consistent.
The Base networks are currently configured in the following ways:
Network | Current Configuration | Upcoming Deployments |
---|---|---|
Base Mainnet | Flashblocks | None |
Base Sepolia | Flashblocks | None |
Currently, blocks are built using op-rbuilder and priority fee auctions occur every 200ms. There are two changes from the vanilla ordering to be aware of:
Flashblocks are built every 200ms, each ordering a portion of the block. Unlike the current system where later-arriving transactions with higher priority fees can be placed at the top of the block, Flashblocks creates a time-based constraint. Once a Flashblock is built and broadcast, its transaction ordering is locked even if a transaction with a higher priority fee arrives later, it cannot be included in earlier, already built Flashblocks.
If your app creates transactions with large gas limits, we recommend monitoring to detect any changes in inclusion latency. Transactions with gas limits over 1/10 of the current block gas limit (currently 14 million gas), face additional constraints:
And so on for subsequent Flashblocks
Consequently, transactions with large gas requirements must wait for later Flashblocks with sufficient gas capacity. For example, a transaction exceeding 1/10 of the block’s gas limit cannot be included in Flashblock 1 and must wait for Flashblock 2 or later.
Blocks are built every 2s by op-geth. Transactions within those blocks are ordered by priority fee, see the (code.