Connect to the flashblocks stream
G3 sequencers publish flashblocks every 10 milliseconds over WebSocket. Each partial block update carries the transactions and receipts added since the previous flashblock, along with account balance metadata, so your app sees state changes hundreds of milliseconds before the block seals.
A WebSocket proxy serves the stream through one endpoint.
If you need the accumulated state instead of each update, query flashblock state through the public JSON-RPC endpoint.
Conduit enables the flashblocks stream per chain. Contact your Conduit account team for your chain’s WebSocket endpoint and credentials.
Connect
Start with your chain’s RPC endpoint, https://[YOUR_RPC_HOST]/[YOUR_API_KEY]. Connect to the same host over WebSocket at wss://[YOUR_RPC_HOST]/flashblocks/[YOUR_API_KEY].
Configure your client to accept messages large enough for your chain’s busiest flashblocks. Each message can include every raw transaction and receipt added in that update.
Read a flashblock
Every message is one JSON flashblock:
Two properties are worth planning around:
index0 opens a block. It carriesbaseand always contains at least the L1 deposit transaction.- Intermediate roots and hashes remain zero.
state_root,receipts_root, andblock_hashremain zero while the block is under construction. Only the final flashblock of a block, the seal, carries their completed values.
Flashblock reorgs
A flashblock reorg replaces transactions or state published in an earlier flashblock before the block seals. Conduit targets fewer than three flashblock reorgs per year. G3’s durability design aims to limit these reorgs to scenarios involving major hardware faults.
Even with this durability target, flashblocks remain preconfirmations. Before treating flashblock data as settled, verify against the canonical block with eth_getBlockByNumber once the chain tip has moved past it.
Handle gaps
Track (metadata.block_number, index) to detect skipped updates. Wait for an index of 0 before processing to begin at a clean block boundary. If a connection gap leaves you without finalized data, backfill it from canonical blocks over RPC.