B20 is Base's built-in token standard, introduced with the Beryl upgrade in June 2026. Wallets and apps can treat a B20 like any other ERC-20, but it runs inside the Base node and comes with issuer controls: minting roles, allow and block lists, per-feature pause and, since the Cobalt upgrade, a dedicated seize function. Base built it for stablecoins and tokenized real-world assets. For a community token, a fixed-supply ERC-20 with no owner is still the simpler thing for buyers to verify.
Key takeaways
- B20 is an ERC-20 superset that runs as Rust precompiles inside the Base node. Every B20 token is created through one factory and gets an address that starts with 0xb2 followed by nine zero bytes.
- There are two variants. Asset has 6 to 18 decimals, a balance multiplier, announcements and batch minting. Stablecoin has a fixed 6 decimals and a currency code.
- Controls are built in: minting and burning roles, optional supply caps, allow and block lists, and per-feature pause. Cobalt (Base mainnet, September 30, 2026) added an opt-in seize function and combined lists.
- As of October 2026, Base's docs send "launch a token" to a B20 guide written for asset issuers. You don't need B20 to launch on Base, because ordinary ERC-20s still work.
- Before you buy a B20 token, check its admin, roles, policies and pause state, and identify it by address, never by ticker.
The short answer
B20 is built for issuers who need control. A fixed-supply ERC-20 with no owner is built for holders who want proof that nobody has control. Custom ERC-20s fall anywhere in between, depending on their code.
| B20 token | Custom ERC-20 | Solbase Base token | |
|---|---|---|---|
| What it is | Protocol-level standard run by the node | Solidity contract written by the deployer | Fixed-supply Solidity ERC-20 |
| Can mint more later | Yes, if someone holds MINT_ROLE, up to an optional cap | Depends on the code | No mint function |
| Pause transfers | Yes, if someone holds PAUSE_ROLE | Depends on the code | No |
| Allow and block lists | Built in | Depends on the code | No |
| Take balances from holders | Only if the issuer configures it | Depends on the code | No |
| Rename token | Yes, if someone holds METADATA_ROLE | Depends on the code | No |
| Who can change the logic | Base, through hardforks | Nobody, unless upgradeable | Nobody |
| Best fit | Stablecoins, RWAs, tokenized equities | Anything, after careful review | Community, meme and simple utility tokens |
What B20 is
Beryl went live on Base Sepolia on June 18, 2026 and on Base mainnet on June 25, 2026, and it introduced B20. Our guide to Base's 2026 upgrades covers everything else it shipped.
A B20 token is not a Solidity contract. In Base's words, B20 tokens "execute as Rust precompiles inside the node." Every token shares one implementation, which Base says was audited by Base and Spearbit, and Base changes that implementation through hardforks. So there is no per-token code to audit. The flip side is that a token's behavior can change at a hardfork, which can't happen to an immutable ERC-20. Base's changelog says existing function signatures don't change and new features ship as additions, but it flags two upcoming changes as breaking for some integrations.
Every token is created by calling createB20 on one factory precompile (0xB20f000000000000000000000000000000000000), and anyone can call it. Addresses are deterministic: a 10-byte B20 prefix (0xb2 followed by nine zero bytes), one byte for the variant, then nine bytes derived from the deployer and a salt.
Token creation didn't open on Beryl day. Base's docs first gave June 26, 2026 at 18:00 UTC for B20's mainnet activation, then said it had been delayed by "an unrelated stability incident," and then rescheduled it for July 8, 2026 at 18:00 UTC. A Base-operated Activation Registry switches B20 features on. Deactivating a variant stops new tokens of that type, but existing ones keep running.
Asset vs Stablecoin
The variant is chosen at creation, written into the address (byte 10, counting from zero: 0x00 for Asset, 0x01 for Stablecoin), and can never change.
- Asset is the general-purpose variant, used for RWAs and other assets. Decimals are set once, anywhere from 6 to 18. It adds a balance multiplier, on-chain announcements, batch minting, issuer-defined metadata, and an OPERATOR_ROLE for multipliers and announcements.
- Stablecoin has decimals fixed at 6 and adds a currency code such as "USD". Base notes that the code is self-declared and not checked against any registry, so treat it as a label, not as proof of backing.
The built-in controls
Every B20 has the same controls. How many a token actually uses depends on its issuer.
- Roles. The admin (DEFAULT_ADMIN_ROLE) grants operating roles: mint, burn, pause, unpause, metadata and seize, plus operator on Asset tokens. An older burn-blocked role is deprecated but still works.
- Supply cap. Optional, and effectively uncapped by default. The admin can change it, but never below the current supply.
- Policies. Allowlists and blocklists live in a shared Policy Registry. A token attaches them to scopes: transfer sender, receiver and executor, mint receiver, and two seize scopes. Every scope starts as "always allow," so a token nobody configured is fully open.
- Pause. Transfers, minting, burning and seizing can each be paused separately. Pausing and unpausing are separate roles.
- Extras. Memos, ERC-2612 permit and an ERC-7572 contractURI. The metadata role can change the name, symbol and URI.
Cobalt went live on Base Sepolia on September 23, 2026 and on mainnet on September 30, 2026. For B20 it added three things: multiplier updates that can be scheduled in advance (ERC-8056), UNION and INTERSECT policies that combine two to four lists (Base's example is an account that must be both KYC-verified and on a "Pro User" allowlist), and seizeWithMemo.
Seize moves a holder's balance to another address without changing total supply. It supersedes burnBlocked, a Beryl function that burned the balance of a holder blocked from sending. burnBlocked is deprecated but still callable. Seize is opt-in: it does nothing until the issuer attaches a policy that marks which holders can be seized.
As of October 9, 2026, Base lists Denim, the next upgrade, as in planning, with Base Sepolia targeted for October 2026 and mainnet for November 2026. For B20, Denim would make transfers, mints and seizes to the token's own address revert, apply the transfer-executor policy on every transfer path, and add inverted (NOT) policies.
Admin-less B20: what it removes and what it doesn't
You can launch a B20 with no admin by passing address(0) as the initial admin, or remove the last admin later with renounceLastAdmin(). Either way, admin actions become permanently impossible: granting or revoking roles, changing which lists the token uses, and changing the supply cap.
That doesn't mean nobody has any powers left. Base's docs say roles already granted "continue to function independently." So a minter can still mint up to the cap, a pauser can still pause, and a metadata role can still rename the token. Setup calls bundled into the creation transaction bypass role checks, so even a token created with no admin can hand out roles, attach lists and set a cap at birth.
Lists can still change too. An admin-less token can't attach a different list, but each list in the Policy Registry has its own admin, who can edit it until they renounce. A list might also be shared with other tokens and run by someone else. "Admin-less" is a good sign, not the whole answer.
B20 in the wild: Coinbase's tokenized stocks
Coinbase's tokenized stocks on Base are B20 Asset tokens. Base's docs have listed them with a lowercase "c" suffix, such as AAPLc, NVDAc and TSLAc. As of October 2026, Base's docs say:
- Holding and secondary trading are permissionless. KYC applies only when Authorized Participants mint or redeem.
- They are only available to people in eligible jurisdictions outside the US.
- Cash dividends are converted into shares through the multiplier. After a dividend, for example, one token might redeem for 1.02 shares.
- Integrators should identify tokens by address and watch for B20Created events. A public, read-only Tokenized Stocks API reference was added to the docs on September 24, 2026.
- Chainlink price feeds on Base cover ten of the stocks. They update during US market hours and hold their last value when markets are closed.
Aave's address book also lists Aave V4 contracts on Base that include an EQUITIES hub and a MAG7 spoke, though it doesn't say which tokens they support. For comparison, see how tokenized stocks work on Solana.
Why Base's docs now point "launch a token" to B20
As of October 2026, Base's docs redirect /get-started/launch-token and /cookbook/launch-tokens to "Create an Asset Token," which sits in the docs' Tokenize Assets section.
The guide creates a six-decimal stock token, "Example Corp Class A," gives the deployer issuer roles such as mint, pause and operator, and sets a supply cap. Its samples target Base Foundry v1.1.1, base-std and viem. Base's B20 page warns you to verify the Activation Registry is enabled before deploying.
That B20 page does list "long-tail token creators" as an audience, but the guide is written for issuers. Regular ERC-20 contracts still deploy and trade on Base as before.
B20 or ERC-20: which should you use?
Use B20 if you are a regulated issuer. Allowlists, pause, seize, reconciliation memos and corporate-action multipliers come in one shared, audited implementation that wallets integrate once, instead of code you build and audit yourself.
Use a fixed-supply ERC-20 with no owner for a community, meme or simple utility token. Buyers here want proof that nobody holds admin keys. That proof is quick to confirm when the contract has no mint, pause or blocklist functions at all. An admin-less B20 with no roles granted can come close, but buyers have more to check, and its behavior can still change at a Base hardfork.
Solbase's Base launcher sits at that minimal end. It deploys a fixed-supply ERC-20 with 18 decimals, no owner, no mint function and no pause or freeze, and mints the full supply to your wallet for a 0.001 ETH platform fee plus gas. Like any plain ERC-20, it has no on-chain logo. It offers none of B20's issuer controls, so don't use it if you need them. Solbase is non-custodial and doesn't add liquidity, list or endorse tokens. See how a Base launch works or launch a token.
Buyer checklist for B20 tokens
- Confirm it is a live B20. The address starts with 0xb2 followed by zeros, but that prefix alone proves nothing. isB20 on the factory only checks the prefix, so use isB20Initialized or find the token's B20Created event.
- Identify it by address. Anyone can create a B20 and choose its name and symbol, and the metadata role can change both later. A familiar ticker proves nothing, so get the address from the issuer.
- Check roles. RoleGranted and RoleRevoked events show who holds the admin, mint, pause, metadata, seize and burn-blocked roles.
- Check policies. A policy ID of 0 means always allow. If a list is attached, check who administers it.
- Check pause and seize. Is any feature paused? Is a seize policy configured?
- Check the supply cap. By default it is effectively unlimited.
- Read the multiplier on Asset tokens. One token doesn't always equal one unit of the underlying asset.
- Don't misread "unverified." B20 tokens aren't separately deployed contracts, so Basescan has no per-token source code to verify. On a regular ERC-20, unverified source is a warning sign.
FAQ
Is B20 the same as an ERC-20?
It is a superset. Every standard ERC-20 function and event works as specified, so wallets and apps can treat a B20 like any ERC-20. The difference is that B20 runs inside the Base node and adds roles, policies, pause, memos and seize.
Can a B20 token be frozen?
Yes, if the issuer configures it that way. A blocklist on the sender scope stops an address from transferring, and the pause role can halt all transfers. Holders blocked from sending could already have their balance burned through burnBlocked under Beryl, and since Cobalt an issuer that has set up a seize policy can move a balance. An admin-less token can't change its policies, but roles and lists already in place keep working.
Do I need B20 to launch a token on Base?
No. B20 adds a new option and doesn't replace anything. Regular ERC-20 contracts still deploy and trade on Base, and for a simple fixed-supply token they are often the clearer choice.
Can B20 tokens trade on normal DEXs?
Base says existing ERC-20 integrations work with B20 unchanged, and its docs describe price aggregators tracking B20 prices from the DEXs where they trade. An issuer's policies or a pause can still block particular transfers, and that can affect trading.
Sources
- Base docs: B20 Native Token Standard (Beryl)
- Base docs: Beryl overview
- Base docs: B20 specification introduction
- Base docs: B20 token types
- Base docs: B20 roles and pause
- Base docs: B20 policies
- Base docs: B20 constants
- Base docs: B20 events
- Base docs: createB20
- Base docs: isB20
- Base docs: B20 changelog
- Base docs: Cobalt seize changelog
- Base docs: Cobalt composite policies
- Base docs: Seize and Cancel Units
- Base docs: Cobalt overview
- Base docs: Denim overview
- Base docs commit: B20 mainnet activation delayed
- Base docs commit: B20 mainnet activation date set
- Base docs: Create an Asset Token
- Base docs: docs.json redirects
- Base docs: docs.json commit history
- Base docs: List Tokenized Stocks
- Base docs commit: Tokenized Stocks on Base page
- Base docs: Tokenized Stocks API overview
- Base Standard Library (base-std)
- Aave address book: V4 on Base
