Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: 'Overview'
sidebarTitle: 'Overview'
description: 'Flashblocks-specific RPC methods, WebSocket subscriptions, and the infrastructure stream schema for Base pre-confirmations.'
description: 'Flashblocks-specific RPC methods and WebSocket subscriptions for Base pre-confirmations.'
---

All Base public endpoints (`mainnet.base.org` / `sepolia.base.org`) are Flashblocks-enabled, exposing all standard Ethereum JSON-RPC methods plus a set of pre-confirmation-specific additions. These let you read state, simulate transactions, and stream events against sequencer-ordered data up to ~1.8 seconds before a block seals.
Expand All @@ -27,164 +27,3 @@ On a Flashblocks WSS endpoint, `eth_subscribe` with `newHeads` emits a new event
| [pendingLogs](/base-chain/api-reference/flashblocks-api/pendingLogs) | Stream filtered event logs from pre-confirmed transactions |
| [newFlashblocks](/base-chain/api-reference/flashblocks-api/newFlashblocks) | Stream full Flashblock payload objects from the sequencer |

## Infrastructure Stream

The raw Flashblocks infrastructure stream is the upstream WebSocket feed consumed by Flashblocks-aware RPC nodes. It emits a new message approximately every 200ms as the sequencer pre-confirms transactions.

<Warning>
**Applications should not connect directly to the infrastructure stream.** These endpoints are for node operators only. App developers should use the [WebSocket subscription methods](#websocket-subscriptions) above via a Flashblocks-aware RPC provider.
</Warning>

| Network | Raw stream URL |
| :--- | :--- |
| Mainnet | `wss://mainnet.flashblocks.base.org/ws` |
| Sepolia | `wss://sepolia.flashblocks.base.org/ws` |

### Flashblock Object

The root structure of each infrastructure stream message.

<Card>
<ParamField path="payload_id" type="string">
Unique identifier for the block being built. Remains consistent across all Flashblocks within a single full block.
</ParamField>

<ParamField path="index" type="number">
Flashblock index within the current block. Starts at 0 (system transactions only). User transactions begin at index 1. Typically reaches 9–10 per block, but [may exceed 10](/base-chain/flashblocks/faq#why-can-the-flashblock-index-exceed-10) during sequencer timing drift.
</ParamField>

<ParamField path="base" type="Base Object">
Block header properties. **Only present when `index` is `0`.** See [Base Object](#base-object).
</ParamField>

<ParamField path="diff" type="Diff Object">
Incremental block state changes for this Flashblock. Present in every message. See [Diff Object](#diff-object).
</ParamField>

<ParamField path="metadata" type="Metadata Object">
Supplemental data. **Unstable — fields may change without notice.** See [Metadata Object](#metadata-object).
</ParamField>
</Card>

### Base Object

Contains full block header properties. **Only present in the `index: 0` message** (the first Flashblock of each full block).

<Card>
<ParamField path="parent_hash" type="string">Hash of the parent block.</ParamField>
<ParamField path="fee_recipient" type="string">Address receiving transaction fees (coinbase).</ParamField>
<ParamField path="block_number" type="string">Block number in hex.</ParamField>
<ParamField path="gas_limit" type="string">Maximum gas allowed in this block (hex).</ParamField>
<ParamField path="timestamp" type="string">Unix timestamp of block creation (hex).</ParamField>
<ParamField path="base_fee_per_gas" type="string">EIP-1559 base fee per gas (hex).</ParamField>
<ParamField path="prev_randao" type="string">Previous RANDAO value used for on-chain randomness.</ParamField>
<ParamField path="extra_data" type="string">Arbitrary data field set by the sequencer.</ParamField>
<ParamField path="parent_beacon_block_root" type="string">Root of the parent beacon block (EIP-4788).</ParamField>
</Card>

### Diff Object

Contains the incremental block state changes for this specific Flashblock. Present in every message.

<Card>
<ParamField path="state_root" type="string">Merkle root of the state trie after applying this Flashblock's transactions.</ParamField>
<ParamField path="block_hash" type="string">Hash of the partial block at this Flashblock index. Changes with each Flashblock as more transactions are pre-confirmed.</ParamField>
<ParamField path="gas_used" type="string">Cumulative gas used up to and including this Flashblock (hex).</ParamField>
<ParamField path="blob_gas_used" type="string">Cumulative blob gas used (EIP-4844, hex).</ParamField>
<ParamField path="transactions" type="string[]">Array of RLP-encoded transactions included in this Flashblock.</ParamField>
<ParamField path="withdrawals" type="array">Validator withdrawals (always empty on Base L2).</ParamField>
<ParamField path="receipts_root" type="string">Merkle root of transaction receipts.</ParamField>
<ParamField path="logs_bloom" type="string">Bloom filter for logs in this Flashblock.</ParamField>
<ParamField path="withdrawals_root" type="string">Merkle root of withdrawals.</ParamField>
</Card>

### Metadata Object

<Warning>
**The `metadata` object is not stable.** Fields may be added, modified, or removed without prior notice. Do not build production dependencies on it — use the [`diff`](#diff-object) object or query finalized block data via standard RPC instead.
</Warning>

As of v0.8.0, `new_account_balances` and `receipts` are no longer present in the `metadata` object. `block_number` remains. The `access_list` field is present but always empty.

<Card>
<ParamField path="block_number" type="number">Block number as a decimal integer.</ParamField>
</Card>

### Receipt Object

<Note>
`metadata.receipts` was removed in v0.8.0. This schema is preserved for reference for older node versions. On v0.8.0+, use [`eth_getTransactionReceipt`](/base-chain/api-reference/ethereum-json-rpc-api/eth_getTransactionReceipt) for polling-based receipt data, or subscribe to [`newFlashblockTransactions`](/base-chain/api-reference/flashblocks-api/newFlashblockTransactions) with `full: true` for a real-time stream of pre-confirmed transaction data including logs.
</Note>

<Card>
<ParamField path="type" type="string">Transaction type: `0x0` Legacy, `0x1` Access List, `0x2` EIP-1559, `0x7e` Deposit (L1→L2).</ParamField>
<ParamField path="status" type="string">Transaction status: `0x1` for success, `0x0` for failure.</ParamField>
<ParamField path="cumulativeGasUsed" type="string">Total gas used in the block up to and including this transaction (hex).</ParamField>
<ParamField path="logs" type="Log[]">Array of event logs emitted by the transaction. See [Log Object](#log-object).</ParamField>
<ParamField path="logsBloom" type="string">Bloom filter for the logs in this receipt.</ParamField>
<ParamField path="transactionIndex" type="string">Index of the transaction within the block (hex).</ParamField>
</Card>

### Log Object

<Card>
<ParamField path="address" type="string">Contract address that emitted the event.</ParamField>
<ParamField path="topics" type="string[]">Array of indexed event parameters. Topic 0 is typically the event signature hash.</ParamField>
<ParamField path="data" type="string">ABI-encoded non-indexed event parameters.</ParamField>
<ParamField path="blockHash" type="string">Hash of the block containing this log.</ParamField>
<ParamField path="blockNumber" type="string">Block number in hex.</ParamField>
<ParamField path="blockTimestamp" type="string">Unix timestamp of the block as a hex string. Base L2 extension to the standard Ethereum log schema.</ParamField>
<ParamField path="transactionHash" type="string">Hash of the transaction that emitted this log.</ParamField>
<ParamField path="transactionIndex" type="string">Index of the transaction in the block (hex).</ParamField>
<ParamField path="logIndex" type="string">Log's index position within the block (hex).</ParamField>
<ParamField path="removed" type="boolean">`true` if the log was removed due to a chain reorg.</ParamField>
</Card>

### Complete Examples

**Index 0** — includes the `base` object (block header):

```json
{
"payload_id": "0x03997352d799c31a",
"index": 0,
"base": {
"parent_hash": "0x9edc29b8b0a1e31d28616e40c16132ad0d58faa8bb952595b557526bdb9a960a",
"fee_recipient": "0x4200000000000000000000000000000000000011",
"block_number": "0x158a0e9",
"gas_limit": "0x3938700",
"timestamp": "0x67bf8332",
"base_fee_per_gas": "0xfa",
"parent_beacon_block_root": "0x15b9e7c8ac4cbe92dafc849ed30a23e91624bbe5cbe199c0ccea3f7de7fc6d49"
},
"diff": {
"state_root": "0x208fd63edc0681161105f27d03daf9f8c726d8c94e584a3c0696c98291c24333",
"block_hash": "0x5c330e55a190f82ea486b61e5b12e27dfb4fb3cecfc5746886ef38ca1281bce8",
"gas_used": "0xab3f",
"transactions": ["0x7ef8f8a0b4afc0b7ce10e150801bbaf08ac33fecb0f38311793abccb022120d321c6d276..."],
"withdrawals": []
},
"metadata": {
"block_number": 22585577
}
}
```

**Index 1–N (diff only)** — no `base` object:

```json
{
"payload_id": "0x03997352d799c31a",
"index": 4,
"diff": {
"state_root": "0x7a8f45038665072f382730e689f4a1561835c9987fca8942fa95872fb9367eaa",
"block_hash": "0x9b32f7a14cbd1efc8c2c5cad5eb718ec9e0c5da92c3ba7080f8d4c49d660c332",
"gas_used": "0x1234f",
"transactions": ["0x02f90133...", "0x02f90196..."],
"withdrawals": []
},
"metadata": {
"block_number": 22585577
}
}
```
10 changes: 5 additions & 5 deletions docs/base-chain/api-reference/flashblocks-api/newFlashblocks.mdx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
title: 'newFlashblocks'
sidebarTitle: 'newFlashblocks'
description: 'Subscribe to receive full Flashblock payload stream as each pre-confirmed block is built. Only available on Flashblocks WebSocket endpoints.'
description: 'Subscribe to receive full Flashblock payload stream as each pre-confirmed block is built. Requires a Flashblocks-aware WebSocket RPC endpoint.'
---

Subscribe via `eth_subscribe` to receive full block state updates as each Flashblock is built. Each message contains the accumulated pre-confirmed state for the block in progress.

<Info>
Only available on Flashblocks WebSocket endpoints: `wss://mainnet-preconf.base.org` and `wss://sepolia-preconf.base.org`.
This subscription requires a WebSocket-enabled RPC endpoint with Flashblocks support. The public Base endpoints (`mainnet.base.org`, `sepolia.base.org`) are HTTP only. Use a [node provider](/base-chain/node-operators/node-providers) such as Alchemy or QuickNode that offers WebSocket support for Base.
</Info>

<Note>
Expand All @@ -27,7 +27,7 @@ Each subscription emits **one Flashblock Object per WebSocket message**. Events
## Returns

<ResponseField name="result" type="string">
Hex-encoded subscription ID. Each event notification delivers a **Flashblock Object** — not a standard block object. The payload contains `payload_id`, `index`, `diff`, and (on index 0) `base`. See the [Infrastructure Stream schema](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#flashblock-object) for the full structure.
Hex-encoded subscription ID. Each event notification delivers a **Flashblock Object** — not a standard block object. The payload contains `payload_id`, `index`, `diff`, and (on index 0) `base`. See the [Infrastructure Stream schema](/base-chain/node-operators/run-a-base-node#flashblock-object) for the full structure.
</ResponseField>

## Example
Expand All @@ -44,8 +44,8 @@ Each subscription emits **one Flashblock Object per WebSocket message**. Events
```javascript JavaScript
import WebSocket from 'ws';

// Use a Flashblocks-enabled provider WSS endpoint in production
const ws = new WebSocket('wss://mainnet-preconf.base.org');
// Use a Flashblocks-enabled provider WSS endpoint (e.g. from Alchemy or QuickNode)
const ws = new WebSocket('wss://<YOUR_WSS_PROVIDER_ENDPOINT>');

ws.on('open', () => {
ws.send(JSON.stringify({
Expand Down
4 changes: 2 additions & 2 deletions docs/base-chain/api-reference/flashblocks-api/pendingLogs.mdx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
title: 'pendingLogs'
sidebarTitle: 'pendingLogs'
description: 'Subscribe to logs from pre-confirmed transactions matching an optional filter. Only available on Flashblocks WebSocket endpoints.'
description: 'Subscribe to logs from pre-confirmed transactions matching an optional filter. Requires a Flashblocks-aware WebSocket RPC endpoint.'
---

Subscribe via `eth_subscribe` to receive logs from pre-confirmed transactions matching an optional filter. Useful for monitoring contract events with sub-block latency.

<Info>
Only available on Flashblocks WebSocket endpoints: `wss://mainnet-preconf.base.org` / `wss://sepolia-preconf.base.org`.
This subscription requires a WebSocket-enabled RPC endpoint with Flashblocks support. The public Base endpoints (`mainnet.base.org`, `sepolia.base.org`) are HTTP only. Use a [node provider](/base-chain/node-operators/node-providers) such as Alchemy or QuickNode that offers WebSocket support for Base.
</Info>

<Note>
Expand Down
2 changes: 1 addition & 1 deletion docs/base-chain/flashblocks/app-integration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Applications should avoid hard dependencies on the WebSocket stream. RPCs provid

## RPC Endpoints

For HTTP and WebSocket endpoint URLs, see the [Flashblocks API Reference](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview). Public endpoints are rate-limited. For production use, connect through a Flashblocks-enabled node provider such as Alchemy, QuickNode, or dRPC.
For HTTP endpoint URLs, see the [RPC Overview](/base-chain/api-reference/rpc-overview). The public Base endpoints are HTTP only — for WebSocket support, use a [node provider](/base-chain/node-operators/node-providers) such as Alchemy, QuickNode, or dRPC. Public endpoints are rate-limited and not suitable for production traffic.

## Performance Characteristics

Expand Down
3 changes: 2 additions & 1 deletion docs/base-chain/flashblocks/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ Flashblocks introduce several new infrastructure components:

- [Flashblocks Overview](/base-chain/flashblocks/overview) — Key concepts and transaction lifecycle
- [Enable Flashblocks](/base-chain/node-operators/run-a-base-node#enable-flashblocks) — Run your own Flashblocks-aware RPC node
- [API Reference](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview) — RPC methods, WebSocket subscriptions, and infrastructure stream schema
- [API Reference](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview) — RPC methods and WebSocket subscriptions
- [Infrastructure Stream Schema](/base-chain/node-operators/run-a-base-node#infrastructure-stream-schema) — Message format for node operators
- [Flashblocks Deep Dive](https://blog.base.dev/flashblocks-deep-dive) — Engineering blog post with implementation details
2 changes: 1 addition & 1 deletion docs/base-chain/flashblocks/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ For a comprehensive introduction to how Flashblocks work, see the [Flashblocks O
</Accordion>

<Accordion title="What encoding format is the transaction data in?">
Transaction data in the [`diff.transactions`](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#diff-object) array is Recursive Length Prefix (RLP) encoded.
Transaction data in the [`diff.transactions`](/base-chain/node-operators/run-a-base-node#diff-object) array is Recursive Length Prefix (RLP) encoded.
</Accordion>

<Accordion title="Why am I getting rate limited on the WebSocket?">
Expand Down
2 changes: 1 addition & 1 deletion docs/base-chain/flashblocks/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ FOR each flashblock j FROM 0 TO 10:
Once a transaction is included in a Flashblock, it's streamed to the websocket-proxy, which RPC nodes listen to. When you call a Flashblocks-aware RPC method (like `eth_getTransactionReceipt`), the node retrieves the preconfirmed data from its cache.

<Info>
For the complete infrastructure stream schema, see the [Flashblocks API Overview](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview) reference: [Flashblock](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#flashblock-object), [Diff](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#diff-object), [Metadata](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#metadata-object), [Receipt](/base-chain/api-reference/flashblocks-api/flashblocks-api-overview#receipt-object).
For the complete infrastructure stream schema, see the [Run a Node](/base-chain/node-operators/run-a-base-node#infrastructure-stream-schema) reference: [Flashblock](/base-chain/node-operators/run-a-base-node#flashblock-object), [Diff](/base-chain/node-operators/run-a-base-node#diff-object), [Metadata](/base-chain/node-operators/run-a-base-node#metadata-object), [Receipt](/base-chain/node-operators/run-a-base-node#receipt-object).
</Info>

## Further Reading
Expand Down
Loading
Loading