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 rulerFlashblocks · Mainnet
LiveTen 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.
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.
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.
- Factory0xB20f000000000000000000000000000000000000
- Activation registry0x8453000000000000000000000000000000000001
- Policy registry0x8453000000000000000000000000000000000002
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.
import { newSmartAccount8130, sendCalls8130, estimateGas8130, encodeWalletCalls, waitForTransactionReceipt8130, allPhasesSucceeded,} from "viem/experimental/eip8130";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_numberBlock is a number or 0x hex
- flashblock_indexOnly in a Flashblock at most number 3 of the block
1 condition
{ "jsonrpc": "2.0", "id": 1, "method": "base_sendRawTransactionValidity", "params": [ "0x<signed-raw-transaction>", { "validity": [ { "type": "flashblock_index", "params": { "op": "<=", "value": "0x3" } } ] } ]}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.
- verify-earn-snippet.mjsA Morpho vault deposit from a real USDC holder
- verify-trade-snippet.mjsApprove then swap on Uniswap, against the pool’s own Quoter
- verify-pay-snippet.mjsA USDC transfer, before any wallet is involved
- verify-shell-recipes.mjsEvery write recipe in the Shell
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.
Upgrades
Three shipped this year. One is next.
- AzulMainnet · May 28, 2026
Base's first independent upgrade, on its own node stack.
- BerylMainnet · Jun 25, 2026
B20 tokens in the node. Faster withdrawals.
- CobaltMainnet · Sep 30, 2026
Validity transactions. More B20 policies.
- DenimMainnet · Nov 2026Target · may change
Native 200 ms blocks replace Flashblocks.
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.