How Base is built

Base Mainnet seals a block every 2 seconds and preconfirms in between. Here are the parts underneath, each with something you can check.

Mainnet today, Vibenet next

Same 2-second ruler
01

Flashblocks · Mainnet

Live

Ten preconfirmations per 2‑second block.

Base Mainnet seals a block every 2 seconds. Inside it, the sequencer streams ten Flashblocks: each one preconfirms the transactions so far, so an app can show a result before the block is sealed.

One block, ten sliversWaiting for Base
A preconfirmation every
—
A block every
—
Measured in this tab from Base's preconfirmation RPCFlashblocks spec
02

200 ms blocks · Vibenet

Base's devnet already runs 200 ms native blocks.

On Vibenet every 200 ms slice is a full block with its own number, hash and receipts. Denim targets the same on Mainnet in November 2026. Until then, Mainnet's 200 ms steps are Flashblocks, not blocks.

Ten blocks, each sealedNot sampled yet
Median gap
—
Ten blocks in
—
One request when you press. No polling.
03

B20

A token standard in the node, not in bytecode.

B20 tokens are created by a precompile that runs inside the Base node. There is no contract code to read, so the way to ask is a call to the factory itself.

Any Base address
Press Check to ask Base
Live on Mainnet since BerylB20 specInspect in the Shell →
04

Native accounts · EIP-8130

Smart accounts the chain itself understands.

Experimental, and only on Vibenet for now. An account registers who may sign for it, and the chain checks that rule itself.

  • Batched calls that succeed or revert together.
  • An optional gas payer, so an app can sponsor its users.
  • No bundler, relay or separate mempool.
From Base's guide · an experimental viem fork
eip8130.ts
TS4 lines
import {  newSmartAccount8130, sendCalls8130, estimateGas8130,  encodeWalletCalls, waitForTransactionReceipt8130, allPhasesSucceeded,} from "viem/experimental/eip8130";
05

Validity transactions

Attach conditions to a signed transaction. The sequencer checks them before inclusion.

If a condition fails, the transaction is not included. It is eligibility, not a guarantee: the conditions never appear onchain, and an accepted request returns a hash, not a receipt.

  • block_number
    Block is a number or 0x hex
  • flashblock_index
    Only in a Flashblock at most number 3 of the block

1 condition

request.json
JSON19 lines
{  "jsonrpc": "2.0",  "id": 1,  "method": "base_sendRawTransactionValidity",  "params": [    "0x<signed-raw-transaction>",    {      "validity": [        {          "type": "flashblock_index",          "params": {            "op": "<=",            "value": "0x3"          }        }      ]    }  ]}
Sign the transaction yourself. This page holds no keys.RPC referenceEmulate in the Shell →
06

eth_simulateV1

We used it to check the Lab's snippets against real Base state.

It runs a chain of calls, as any address, on top of current state, and returns every result without committing anything. Our scripts first type-check each snippet against the real packages, then simulate it on Mainnet from an address that really holds the tokens.

Two snippets can't be run this way, because running them would move money: the x402 paywall and the Base Pay checkout. Those are type-checked only.

07

Upgrades

Three shipped this year. One is next.

  1. AzulMainnet · May 28, 2026

    Base's first independent upgrade, on its own node stack.

  2. BerylMainnet · Jun 25, 2026

    B20 tokens in the node. Faster withdrawals.

  3. CobaltMainnet · Sep 30, 2026

    Validity transactions. More B20 policies.

  4. DenimMainnet · Nov 2026Target · may change

    Native 200 ms blocks replace Flashblocks.

Dates from Base's upgrade log. A month without a set timestamp is a planning target.Upgrade log

Mainnet figures are measured from Base as you watch, and the B20 answer is a live call to Mainnet as of the block shown. The Vibenet sample comes from Base's devnet, which may reset. Nothing on this page signs or sends a transaction.

Base · Block — · —