Skip to main content
Changes to the B20 token standard. Newest first.
B20 method and event signatures are part of the chain’s consensus surface. Existing selectors and behavior do not change; the standard grows by addition.

Beryl — initial release

Shipped with the Beryl upgrade. 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 with built-in roles, user-defined roles in the role graph, and renounceLastAdmin for permanent admin-less operation
  • PolicyRegistry 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 on every token, covering transfer sender, receiver, and executor, mint receiver, and seize holder and receiver
  • seizeWithMemo for compliance-driven balance transfers
  • Memo variants of transfer, transferFrom, mint, burn, and seize, emitting Memo immediately after the primary event
  • Granular pausing by PausableFeature: TRANSFER, MINT, BURN, and SEIZE
  • Optional supply caps, with type(uint128).max as the uncapped sentinel and maximum supply
  • ERC-2612 permit with an EIP-712 domain at version "1"
  • ERC-7572 contractURI and METADATA_ROLE-gated name, symbol, and URI updates
  • B20Factory singleton precompile with deterministic, variant-encoding addresses and initCalls bootstrap semantics
  • ActivationRegistry gating for state-changing PolicyRegistry calls
  • The ASSET variant: OPERATOR_ROLE, WAD-precision UI multipliers with scheduled and instant updates, announcements, batchMint, and issuer-defined extra metadata
  • The STABLECOIN variant: 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.