Flashblocks API Quickstart

Get started building on Optimism using Flashblocks

Introduction

Flashblocks on Optimism are a transaction preconfirmation feature that provides near-instant transaction feedback by streaming partial block updates every 200 milliseconds. This significantly reduces the effective block time from Optimism’s standard 2 seconds to just 200 milliseconds, a 10x increase.

Flashblocks is great for developers who demand instant UX such as decentralized exchanges, onchain gaming, and other high-frequency applications.

Getting started instructions

Flashblocks is currently supported on both Optimism Sepolia testnet and mainnet and can be accessed using your existing Alchemy Optimism RPC.

NetworkFlashblocks Availability
Optimism Sepolia
Optimism Mainnet

Flashblocks-enabled API Endpoints

eth_getBlockByNumber

Use the pending tag to retrieve the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["pending",true],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": {
> "number": "0x1234",
> "hash": "0x...",
> "transactions": [...]
> }
>}

eth_getTransactionReceipt

Use the existing receipt RPC to get preconfirmed receipts:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x..."],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": {
> "transactionHash": "0x...",
> "blockNumber": "0x1234",
> "status": "0x1"
> }
>}

eth_getBalance

Use the pending tag to get the address balance in the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x...","pending"],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": "0x0234"
>}

eth_getTransactionCount

Use the pending tag to get the address nonce in the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x...","pending"],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": "0x1b" // 27 transactions
>}

eth_getTransactionByHash

Use the existing get transaction by hash RPC to get preconfirmed transactions:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x..."],"id":1}'

Example Response

${
> "type": "0x2",
> "chainId": "...",
> "nonce": "...",
> ...
>}

eth_call

Use the pending tag to execute a smart contract call against the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x...","data":"0x..."},"pending"],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": "0x0000000000000000000000000000000000000000000000000000000000000001"
>}

eth_simulateV1

Use the pending tag to simulate transactions against the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_simulateV1","params":[{"blockStateCalls":[{"calls":[{"to":"0x...","data":"0x..."}],"stateOverrides":{}}],"traceTransfers":true,"validation":true},"pending"],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": [
> {
> "calls": [
> {
> "status": "0x1",
> "gasUsed": "0x5208",
> "returnData": "0x"
> }
> ]
> }
> ]
>}

eth_estimateGas

Use the pending tag to estimate gas against the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"to":"0x...","data":"0x..."},"pending"],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": "0x5208"
>}

eth_getLogs

Use the pending tag for toBlock to retrieve logs from the latest Flashblock:

$curl https://opt-sepolia.g.alchemy.com/v2/<YOUR_API_KEY> -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock":"latest","toBlock":"pending","address":"0x...","topics":["0x..."]}],"id":1}'

Example Response

${
> "jsonrpc": "2.0",
> "id": 1,
> "result": [
> {
> "address": "0x...",
> "topics": ["0x..."],
> "data": "0x...",
> "blockNumber": "0x1234",
> "transactionHash": "0x...",
> "transactionIndex": "0x0",
> "blockHash": "0x...",
> "logIndex": "0x0",
> "removed": false
> }
> ]
>}