Skip to main content
Get started with a reliable Optimism RPC endpoint to use Subblocks. Subblocks are partial blocks that the Optimism sequencer streams about every 200 ms while it builds each 2-second block. Chainstack Optimism Mainnet nodes follow this stream and serve the preconfirmed state through standard JSON-RPC methods with the pending block tag.
Subblocks were previously called Flashblocks. Subblocks replaced Flashblocks on Optimism Mainnet on August 31, 2026, which shortened the interval from 250 ms to 200 ms and kept the JSON-RPC interface the same.
OP Labs builds and maintains Subblocks. Flashblocks, the earlier implementation, is built and maintained by Flashbots.

How Subblocks work on Optimism

Subblocks on Optimism have two parts:
  • Sequencer side — the Optimism sequencer’s execution client produces a subblock as it builds each block and publishes the subblocks over a WebSocket stream.
  • Node side — the Reth-based execution client running on Chainstack follows the stream, executes the transactions in each subblock, and serves the result under the pending block tag.
This two-part architecture implements the following flow:
  • The Optimism sequencer creates regular 2-second blocks and, while building each block, publishes a subblock about every 200 ms.
  • Each subblock appends transactions to the block in progress. The transaction list only grows until the block is sealed.
  • Apps retrieve the preconfirmed state over the standard Optimism RPC endpoints and methods:
The 200 ms interval is a target, not a guarantee, so the number of subblocks in a 2-second block varies and is about 10.
Unlike Base, Optimism does not expose preconfirmations as dedicated WebSocket subscriptions like eth_subscribe newFlashblocks. The customer-facing interface on Optimism is the standard JSON-RPC interface with the pending block tag, as defined in the Optimism Subblocks specification.

Compare preconfirmed subblocks with the sealed block

Call eth_getBlockByNumber with the pending tag on an Optimism endpoint while a 2-second canonical block is forming. The response changes with each subblock: the block number stays the same, the transaction list grows, and the block hash changes. The same canonical block number sampled about 500 ms apart while the block was being built on Chainstack, and then after it was sealed:
The block number stays the same across all three samples. Only the transaction list grows and the preconfirmation hash changes. In a pending response, stateRoot is all zeros, because the state root is exact only once the block is sealed. The pending hash is not the hash of the sealed block either. Read the final hash and stateRoot from the block after it is sealed, and track transactions by their own hash.

Verify Subblocks on your endpoint

You can verify Subblocks on your Optimism endpoint by polling eth_getBlockByNumber with the pending tag and watching the response change within a single block number. Replace YOUR_OPTIMISM_ENDPOINT with your Chainstack Optimism node HTTPS endpoint:
On an endpoint that follows Subblocks, you see multiple distinct hashes and growing transaction counts for the same block number within a 2-second window.

Performance expectations

Subblocks on Optimism are produced about every 200 ms, so a pending read reflects a transaction long before the 2-second block that includes it is sealed. A latest read reflects the transaction only after the block is sealed. The actual preconfirmation time depends on:
  • Network latency to and from the Optimism node.
  • Transaction processing time at the sequencer.
  • Time until the next subblock (up to about 200 ms).
  • Gas available in the next subblock. The sequencer divides a block’s gas capacity across the block-building window, so a transaction with a large gas limit can wait for a later subblock or the next block.
  • Network travel time for the confirmation response.
Subblock preconfirmations are not final. A preconfirmed receipt from eth_getTransactionReceipt, eth_sendRawTransactionSync, or a pending-tag call can be revoked if the Optimism sequencer abandons or reorganizes the block in progress. Wait for the transaction to be included in a finalized canonical block before releasing funds or considering a payment settled.

Optimism Subblocks vs. Base Flashblocks at a glance

Additional resources

About the author

Ake

Ake Director of Developer Experience @ Chainstack
Talk to me all things Web3
20 years in technology | 8+ years in Web3 full time years experience
Last modified on October 30, 2026