Skip to main content
B20 is Base’s native token standard, introduced with the Beryl upgrade (Base mainnet activation June 25, 2026). It is an ERC-20 superset implemented as a native precompile rather than a smart contract: it keeps full ERC-20 compatibility while building roles, transfer policies, supply caps, pausing, memos, and permit directly into the chain. You create a B20 token by calling the singleton B20 factory precompile — there is no token contract to write, deploy, or audit.

B20 vs. ERC-20

ERC-20B20
ImplementationSmart contract you write and deployNative precompile
CreationDeploy your own bytecodeOne createB20 call to the factory
Compliance featuresBuild them yourselfRoles, transfer policies, freeze-and-seize, pause, supply cap, and memos built in
CompatibilityFull ERC-20 selector parity — a drop-in for wallets, explorers, and indexers
Cost and throughputStandard EVM executionCheaper and higher-throughput (native)
Because B20 implements the full ERC-20 surface, existing wallets, explorers, and indexers treat a B20 token like any other ERC-20.

How B20 works

All B20 tokens are created through the singleton B20 factory precompile. A single call configures and creates the token in one transaction:
createB20(variant, salt, params, initCalls)
  • variantASSET or STABLECOIN.
  • salt — caller-chosen entropy that fixes the token’s deterministic address.
  • params — ABI-encoded name, symbol, initial admin, and decimals.
  • initCalls — an optional batch of configuration calls (grant roles, set the supply cap, bind policies) applied atomically at creation.

Precompile addresses

PrecompileAddress
B20 factory0xB20f000000000000000000000000000000000000
Policy registry0x8453000000000000000000000000000000000002
Activation registry0x8453000000000000000000000000000000000001
Token addresses are deterministic and encode the variant in the address itself: [10-byte B20 prefix][1-byte variant][9-byte hash of deployer and salt]. Tokens created by the factory start with 0xB200…; the factory itself is 0xB20f…. You can predict a token’s address before creating it with getB20Address(variant, deployer, salt).

Variants

VariantDecimalsAdds
Asset6–18, set at creationRebase multiplier, on-chain announcements, batched issuance, extra metadata
Stablecoin6, fixedImmutable ISO-style currency code (for example, USD)

Built-in features

B20 ships a compliance and operations toolkit that an ERC-20 leaves you to build:
  • Role-based access controlDEFAULT_ADMIN_ROLE, MINT_ROLE, BURN_ROLE, BURN_BLOCKED_ROLE, PAUSE_ROLE, UNPAUSE_ROLE, and METADATA_ROLE. The Asset variant adds OPERATOR_ROLE. A token can be made permanently admin-less.
  • Transfer policies — each token binds allowlist or blocklist policies from the policy registry to per-actor scopes (transfer sender, transfer receiver, mint receiver).
    Every policy scope defaults to ALWAYS_ALLOW at creation. An unconfigured B20 is fully open — constrain it intentionally in initCalls.
  • Freeze-and-seizeburnBlocked burns from a policy-blocked account, the path regulated issuers need.
  • Supply cap — an optional cap enforced on every mint.
  • Granular pause — pause TRANSFER, MINT, or BURN independently, with separate pause and unpause roles.
  • Memos — attach a bytes32 reference (a payment ID or settlement tag) to transfers, mints, and burns. Each is emitted as a Memo event for off-chain reconciliation.
  • ERC-2612 permit and ERC-7572 contractURI are built in.

Availability

B20 ships with the Beryl upgrade:
NetworkBeryl activation
Base SepoliaJune 18, 2026
Base mainnetJune 25, 2026, 18:00 UTC
Chainstack Base nodes serve the B20 precompiles, so you can create and query B20 tokens through your Chainstack Base endpoint.

Use B20 on Chainstack

1

Deploy a Base node

Deploy a Base node on Chainstack and copy your endpoint.
2

Create a token

Call the B20 factory from a script or directly with cast. See the Deploy a B20 token tutorial for the full walkthrough.

See also

Last modified on June 19, 2026