> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-roethke-b20-upgrade-pages.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Per-hardfork, per-feature migration notes for the B20 token standard, newest first, including new methods, deprecations, and activation dates.

Per-hardfork, per-feature migration notes for the [B20 token standard](/specifications/b20). Each Cobalt and Denim entry is a focused, code-forward changelog for one scoped feature change that crosses a hardfork boundary. Newest first.

<Note>
  B20 method and event signatures are part of the chain's consensus surface. Existing selectors do not change, and new functionality ships by addition. Behavior can change at a hardfork boundary: two Denim entries below are breaking for some integrations.
</Note>

## Hardfork Ordinals

| Ordinal | Hardfork | Status |
| - | - | - |
| `01` | Beryl | Live |
| `02` | Cobalt | Upcoming |
| `03` | Denim | Upcoming |

## [Denim](/upgrades/denim/overview) (Upcoming), Ordinal 03

| Product(s) | Change | Affected interfaces | Entry |
| - | - | - | - |
| B20 Asset, B20 Stablecoin | (Breaking) Reject the token itself as a credit recipient | `IB20` (shared surface), `IB20Asset` (`batchMint`) | [Token receiver](/base-chain/specs/reference/b20/changelog/03-denim-b20-token-receiver) |
| B20 Asset, B20 Stablecoin | (Breaking) Transfer executor policy on every transfer path | `IB20` (shared surface) | [Transfer executor enforcement](/base-chain/specs/reference/b20/changelog/03-denim-b20-transfer-executor-enforcement) |
| PolicyRegistry | NOT / invert policies | `IPolicyRegistry` | [NOT policies](/base-chain/specs/reference/b20/changelog/03-denim-policyregistry-not-policy) |

## [Cobalt](/upgrades/cobalt/overview) (Upcoming), Ordinal 02

| Product(s) | Change | Affected interfaces | Entry |
| - | - | - | - |
| B20 Asset | Schedule Multiplier Updates (ERC-8056) | `IB20Asset` | [Multiplier / ERC-8056](/base-chain/specs/reference/b20/changelog/02-cobalt-b20asset-multiplier) |
| B20 Asset, B20 Stablecoin | Seize surface + `burnBlocked` deprecation | `IB20` (shared surface) | [Seize surface](/base-chain/specs/reference/b20/changelog/02-cobalt-b20-seize) |
| PolicyRegistry | Composite Policies (UNION / INTERSECT) | `IPolicyRegistry` | [Composite policies](/base-chain/specs/reference/b20/changelog/02-cobalt-policyregistry-composite-policy) |

## [Beryl](/upgrades/beryl/overview): Initial Release

| Network | Activated |
| - | - |
| Base mainnet | 2026-06-25 |
| Base Sepolia | 2026-06-18 |

Shipped with the [Beryl upgrade](/upgrades/beryl/overview).

**Added**

* The B20 standard as a native precompile: a superset of ERC-20 with full selector and behavior parity for `transfer`, `transferFrom`, `approve`, `allowance`, `balanceOf`, `totalSupply`, `name`, `symbol`, `decimals`, `Transfer`, and `Approval`
* [Role-based access control](/specifications/b20/concepts/roles-and-pause#2-roles) with built-in roles, user-defined roles in the role graph, and `renounceLastAdmin` for permanent admin-less operation
* [PolicyRegistry](/specifications/b20/concepts/policies#21-the-registry-and-the-token) singleton precompile with `BLOCKLIST`, `ALLOWLIST`, `UNION`, and `INTERSECT` policy types, two-step admin transfer, and the `ALWAYS_ALLOW` and `ALWAYS_BLOCK` built-ins
* [Six policy scopes](/specifications/b20/concepts/policies#32-policy-scopes) on every token, covering transfer sender, receiver, and executor, mint receiver, and seize holder and receiver
* [`seizeWithMemo`](/specifications/b20/reference/interfaces/ib20/seize-with-memo) for compliance-driven balance transfers
* [Memo variants](/specifications/b20/reference/interfaces/ib20) of transfer, transferFrom, mint, burn, and seize, emitting `Memo` immediately after the primary event
* [Granular pausing](/specifications/b20/concepts/roles-and-pause#3-pause) by `PausableFeature`: `TRANSFER`, `MINT`, `BURN`, and `SEIZE`
* [Optional supply caps](/specifications/b20/reference/interfaces/ib20/supply-cap), with `type(uint128).max` as the uncapped sentinel and maximum supply
* [ERC-2612 `permit`](/specifications/b20) with an EIP-712 domain at version `"1"`
* [ERC-7572 `contractURI`](/specifications/b20/reference/interfaces/ib20/contract-uri) and `METADATA_ROLE`-gated name, symbol, and URI updates
* [B20Factory](/specifications/b20/reference/interfaces/ib20-factory/create-b20) singleton precompile with deterministic, variant-encoding addresses and `initCalls` bootstrap semantics
* ActivationRegistry gating for state-changing PolicyRegistry calls
* The [`ASSET` variant](/specifications/b20/concepts/token-types#4-asset): `OPERATOR_ROLE`, WAD-precision UI multipliers with scheduled and instant updates, announcements, `batchMint`, and issuer-defined extra metadata
* The [`STABLECOIN` variant](/specifications/b20/concepts/token-types#5-stablecoin): fixed 6 decimals and a `currency()` code set once at creation

**Deprecated**

* `burnBlocked` and `BURN_BLOCKED_ROLE`, retained for backwards compatibility. New seizure flows use `seizeWithMemo`.
