Alloy Flashblocks
Stream Base L2 flashblocks and query preconfirmation state using Alloy.
Flashblocks are ~200ms preconfirmations on Base. Instead of waiting ~2 seconds for block finalization, you get transaction feedback in ~200ms.
Installation
[]
= "0.1.0"
Features
This crate provides the FlashblocksProviderExt extension trait with:
- Streaming:
watch_flashblocks()- stream pending block updates - State queries: Query balances, nonces, simulate calls against flashblock state
- Preconfirmation helpers: Wait for transaction preconfirmation (~200ms feedback)
Usage
Stream Flashblocks
use ProviderBuilder;
use FlashblocksProviderExt;
use StreamExt;
let provider = new
.connect_http;
let mut stream = provider.watch_flashblocks.into_stream;
while let Some = stream.next.await
Query Flashblock State
Query balances, nonces, and simulate calls against the current flashblock state (including preconfirmed transactions):
use ProviderBuilder;
use FlashblocksProviderExt;
let provider = new
.connect_http;
// Get current flashblock
let block = provider.flashblock.await?;
// Query balance including preconfirmed txs
let balance = provider.flashblock_balance.await?;
// Query nonce for next tx (accounts for pending txs)
let nonce = provider.flashblock_nonce.await?;
// Simulate a call against flashblock state
let result = provider.flashblock_call.await?;
// Estimate gas against flashblock state
let gas = provider.flashblock_estimate_gas.await?;
// Get logs up to flashblock
let logs = provider.flashblock_logs.await?;
Wait for Preconfirmation
Get ~200ms feedback on transaction inclusion instead of waiting ~2s for block finalization:
use ProviderBuilder;
use FlashblocksProviderExt;
let provider = new
.wallet
.connect_http;
// Send transaction
let pending = provider.send_transaction.await?;
let tx_hash = *pending.tx_hash;
// Wait for preconfirmation (~200ms)
let receipt = provider.wait_for_preconfirmation.await?;
println!;
// Or just check if preconfirmed
let is_preconf = provider.is_preconfirmed.await?;
RPC Endpoints
| Network | Endpoint |
|---|---|
| Base Mainnet | https://mainnet-preconf.base.org |
| Base Sepolia | https://sepolia-preconf.base.org |
API Reference
Streaming
| Method | Description |
|---|---|
watch_flashblocks() |
Stream pending block updates (polls every 120ms) |
State Queries
All methods query against pending/flashblock state:
| Method | Description |
|---|---|
flashblock() |
Get current flashblock |
flashblock_balance(addr) |
Balance including preconfirmed txs |
flashblock_nonce(addr) |
Nonce for sending next tx |
flashblock_call(&tx) |
Simulate call against flashblock state |
flashblock_estimate_gas(&tx) |
Gas estimate against flashblock |
flashblock_logs(filter) |
Logs up to flashblock |
flashblock_simulate(&payload) |
Multi-call simulation |
Preconfirmation Helpers
| Method | Description |
|---|---|
wait_for_preconfirmation(tx_hash) |
Poll until tx is preconfirmed |
is_preconfirmed(tx_hash) |
Check if tx has receipt |
How It Works
The poller calls eth_getBlockByNumber("pending") every 120ms against a
flashblocks-enabled RPC endpoint and yields new blocks when the block hash changes.
Base's sequencer emits flashblocks every ~200ms, providing near-instant preconfirmation of transaction inclusion.
License
MIT