Execution patterns
Use the preconf endpoint for all reads and submissions
Always connect tomainnet-preconf.base.org (or sepolia-preconf.base.org for testnet) rather than the standard endpoint. This is the only way to access Flashblocks pending state, preconfirmed transaction streams, and base_transactionStatus. See Flashblocks endpoints for the full endpoint list including production provider options.
Simulate against preconfirmed state before signing
Calleth_simulateV1 against the preconf endpoint with "blockStateCalls" targeting the pending block before signing any transaction. This catches reverts against current Flashblocks state rather than the last sealed block — which may be up to 2 seconds stale by the time your transaction lands.
Poll base_transactionStatus instead of blocking on a receipt
After submission, base_transactionStatus returns preconfirmed inclusion status within a single Flashblock interval (~200ms). Blocking on eth_getTransactionReceipt waits for a full sealed block (up to 2 seconds). For latency-sensitive strategies, poll base_transactionStatus first and only fall back to the receipt for finality confirmation.
Fee calibration
L2 priority fee heuristics
Useeth_feeHistory over the last 5–10 blocks with reward percentiles [50, 90]:
- 50th percentile reward — standard inclusion within 1–3 Flashblocks
- 90th percentile reward — fast inclusion within the next Flashblock
maxFeePerGas— set tonextBaseFee * 2 + maxPriorityFeePerGasto survive base fee increases across multiple blocks without overpaying
L1 fee decision rule
Before signing, estimate the L1 cost via the GasPriceOracle. If the ratio below exceeds0.8 and trade size is small, the L1 fee dominates total cost — consider deferring until Ethereum congestion subsides:
Base-specific failure modes
Most transaction errors are standard EVM. These are the Base-specific cases that require different handling:| Failure | What it means | What to do |
|---|---|---|
replacement transaction underpriced | Replacing a pending tx requires ≥10% higher maxFeePerGas and maxPriorityFeePerGas | Increase both by ≥10%, resubmit with same nonce |
| DA throttling (no error code returned) | Sequencer is rate-limiting L2 throughput to manage L1 data availability costs | Fee-bumping does not resolve this — wait for the throttle to lift |
eth_getTransactionCount(address, "pending"). For parallel submissions, fetch once and increment locally — fetching fresh per call returns the same value for all concurrent requests.
Strategy signals
Base exposes data that most chains don’t provide at this resolution. The table maps each Base-specific signal to the class of opportunity it enables.| Signal | How to access | Opportunity category |
|---|---|---|
| Preconfirmed pending block state (200ms early) | eth_getBlockByNumber("pending") on preconf endpoint | Detect price impact before block seals; act on state changes visible to no one else |
| Preconfirmed transaction stream | eth_subscribe("newFlashblockTransactions") | First-mover on large trades entering the block |
| Preconfirmed logs | eth_subscribe("pendingLogs", { address, topics }) | Detect liquidation thresholds, pool price events, oracle updates before finality |
| Fee spike detection | eth_feeHistory trend over last 5 blocks | Identify congestion onset; adjust routing or pause/resume based on cost |
| L1 base fee trend | GasPriceOracle.l1BaseFee() polled over time | Time submissions to minimize L1 data cost; small trades become viable when L1 fee drops |
| Block gas utilization | gasUsedRatio from eth_feeHistory | Predict upcoming base fee increases; calibrate urgency |
Related
- Flashblocks API Reference —
eth_simulateV1,base_transactionStatus, subscription types - Flashblocks Integration Guide — endpoints, library setup (Wagmi, Viem, Ethers)
- Block Building — Flashblocks timing, per-transaction gas maximum
- Network Fees — EIP-1559 parameters, GasPriceOracle methods
- JSON-RPC API Reference — complete RPC method reference
- Troubleshooting Transactions — full error taxonomy and retry policies