diff --git a/docs/AGENTS.md b/docs/AGENTS.md
index a1044b1f4..925e6cac2 100644
--- a/docs/AGENTS.md
+++ b/docs/AGENTS.md
@@ -12,6 +12,7 @@ description: Look up Base documentation with a compact directory-grouped index b
- [Apps](./apps/llms.txt) — A step-by-step guide to building a Next.js tally app on Base using wagmi and viem, with wallet connection, contract reads and writes, and batch transaction support.
- [Base Account](./base-account/llms.txt)
- [Base Chain](./base-chain/llms.txt) — Start here for Base Chain docs, including concepts, network reference, node operation, APIs, and protocol specifications.
+- [Docs](./docs/llms.txt)
- [Get Started](./get-started/llms.txt)
- [Ledgers](./ledgers/llms.txt) — An introduction to Base Ledgers, the enterprise way to run confidential payments that settle on Base.
- [Static](./static/llms.txt)
@@ -80,7 +81,7 @@ npx skills add base/base-skills
|base-chain/api-reference/ethereum-json-rpc-api:eth_blockNumber,eth_call,eth_chainId,eth_estimateGas,eth_feeHistory,eth_gasPrice,eth_getBalance,eth_getBlockByHash,eth_getBlockByNumber,eth_getBlockReceipts,eth_getBlockTransactionCountByHash,eth_getBlockTransactionCountByNumber,eth_getCode,eth_getLogs,eth_getStorageAt,eth_getTransactionByBlockHashAndIndex,eth_getTransactionByBlockNumberAndIndex,eth_getTransactionByHash,eth_getTransactionCount,eth_getTransactionReceipt,eth_maxPriorityFeePerGas,eth_sendRawTransaction,eth_subscribe,eth_syncing,eth_unsubscribe,net_version,web3_clientVersion
|base-chain/api-reference/flashblocks-api:base_transactionStatus,eth_simulateV1,flashblocks-api-overview,newFlashblockTransactions,newFlashblocks,pendingLogs
|base-chain/flashblocks:faq
-|base-chain/network-information:base-contracts,base-solana-bridge,bridging-and-withdrawals,configuration-changelog,ecosystem-bridges,network-faucets,network-fees,throughput-and-limits,transaction-finality,transaction-ordering,troubleshooting-transactions
+|base-chain/network-information:b20-token-standard,base-contracts,base-solana-bridge,bridging-and-withdrawals,configuration-changelog,ecosystem-bridges,native-account-abstraction,network-faucets,network-fees,throughput-and-limits,transaction-finality,transaction-ordering,troubleshooting-transactions
|base-chain/node-operators:node-providers,performance-tuning,run-a-base-node,snapshots,troubleshooting
|base-chain/quickstart:connecting-to-base
|base-chain/security:avoid-malicious-flags,bug-bounty,report-vulnerability,security-council
@@ -91,21 +92,19 @@ npx skills add base/base-skills
|base-chain/specs/protocol/execution:index
|base-chain/specs/protocol/execution/evm:precompiles,predeploys,preinstalls
|base-chain/specs/protocol/proofs:challenger,contracts,index,proposer,registrar,tee-prover,zk-prover
-|base-chain/specs/reference:configurability,glossary
+|base-chain/specs/reference:configurability,glossary,native-account-abstraction
+|base-chain/specs/reference/b20:changelog,constants-and-addresses,errors-and-events,index
+|base-chain/specs/reference/b20/interfaces:IActivationRegistry,IB20,IB20Asset,IB20Factory,IB20Stablecoin,IPolicyRegistry
+|base-chain/specs/reference/b20/interfaces/IActivationRegistry:activate,admin,checkActivated,deactivate,isActivated
+|base-chain/specs/reference/b20/interfaces/IB20:BURN_BLOCKED_ROLE,BURN_ROLE,DEFAULT_ADMIN_ROLE,DOMAIN_SEPARATOR,METADATA_ROLE,MINT_RECEIVER_POLICY,MINT_ROLE,PAUSE_ROLE,SEIZE_HOLDER_POLICY,SEIZE_RECEIVER_POLICY,SEIZE_ROLE,TRANSFER_EXECUTOR_POLICY,TRANSFER_RECEIVER_POLICY,TRANSFER_SENDER_POLICY,UNPAUSE_ROLE,allowance,approve,balanceOf,burn,burnBlocked,burnWithMemo,contractURI,decimals,eip712Domain,getRoleAdmin,grantRole,hasRole,isPaused,mint,mintWithMemo,name,nonces,pause,pausedFeatures,permit,policyId,renounceLastAdmin,renounceRole,revokeRole,seizeWithMemo,setRoleAdmin,supplyCap,symbol,totalSupply,transfer,transferFrom,transferFromWithMemo,transferWithMemo,unpause,updateContractURI,updateName,updatePolicy,updateSupplyCap,updateSymbol
+|base-chain/specs/reference/b20/interfaces/IB20Asset:MAX_UI_MULTIPLIER,OPERATOR_ROLE,WAD_PRECISION,announce,balanceOfUI,batchMint,cancelUIMultiplierUpdate,effectiveAt,extraMetadata,fromUIAmount,isAnnouncementIdUsed,multiplier,newUIMultiplier,scaledBalanceOf,toRawBalance,toScaledBalance,toUIAmount,totalSupplyUI,uiMultiplier,updateExtraMetadata,updateMultiplier,updateUIMultiplier
+|base-chain/specs/reference/b20/interfaces/IB20Factory:createB20,getB20Address,isB20,isB20Initialized
+|base-chain/specs/reference/b20/interfaces/IB20Stablecoin:currency
+|base-chain/specs/reference/b20/interfaces/IPolicyRegistry:MAX_COMPOSITE_CHILD_POLICIES,MIN_COMPOSITE_CHILD_POLICIES,compositePolicyChildIds,createCompositePolicy,createPolicy,createPolicyWithAccounts,finalizeUpdateAdmin,isAuthorized,pendingPolicyAdmin,policyAdmin,policyExists,renounceAdmin,stageUpdateAdmin,updateAllowlist,updateBlocklist,updateComposite
|base-chain/specs/upgrades/azul:exec-engine,node-upgrade,overview,proofs
|base-chain/specs/upgrades/beryl:b20-playground,overview
-|base-chain/specs/upgrades/beryl/b20:demos
-|base-chain/specs/upgrades/beryl/b20/specification:index
-|base-chain/specs/upgrades/beryl/b20/specification/reference:constants-and-addresses,errors-and-events-index
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces:IActivationRegistry,IB20,IB20Asset,IB20Factory,IB20Stablecoin,IPolicyRegistry
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry:activate,admin,checkActivated,deactivate,isActivated
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20:BURN_BLOCKED_ROLE,BURN_ROLE,DEFAULT_ADMIN_ROLE,DOMAIN_SEPARATOR,METADATA_ROLE,MINT_RECEIVER_POLICY,MINT_ROLE,PAUSE_ROLE,SEIZE_HOLDER_POLICY,SEIZE_RECEIVER_POLICY,SEIZE_ROLE,TRANSFER_EXECUTOR_POLICY,TRANSFER_RECEIVER_POLICY,TRANSFER_SENDER_POLICY,UNPAUSE_ROLE,allowance,approve,balanceOf,burn,burnBlocked,burnWithMemo,contractURI,decimals,eip712Domain,getRoleAdmin,grantRole,hasRole,isPaused,mint,mintWithMemo,name,nonces,pause,pausedFeatures,permit,policyId,renounceLastAdmin,renounceRole,revokeRole,seizeWithMemo,setRoleAdmin,supplyCap,symbol,totalSupply,transfer,transferFrom,transferFromWithMemo,transferWithMemo,unpause,updateContractURI,updateName,updatePolicy,updateSupplyCap,updateSymbol
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset:MAX_UI_MULTIPLIER,OPERATOR_ROLE,WAD_PRECISION,announce,balanceOfUI,batchMint,cancelUIMultiplierUpdate,effectiveAt,extraMetadata,fromUIAmount,isAnnouncementIdUsed,multiplier,newUIMultiplier,scaledBalanceOf,toRawBalance,toScaledBalance,toUIAmount,totalSupplyUI,uiMultiplier,updateExtraMetadata,updateMultiplier,updateUIMultiplier
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory:createB20,getB20Address,isB20,isB20Initialized
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin:currency
-|base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry:MAX_COMPOSITE_CHILD_POLICIES,MIN_COMPOSITE_CHILD_POLICIES,compositePolicyChildIds,createCompositePolicy,createPolicy,createPolicyWithAccounts,finalizeUpdateAdmin,isAuthorized,pendingPolicyAdmin,policyAdmin,policyExists,renounceAdmin,stageUpdateAdmin,updateAllowlist,updateBlocklist,updateComposite
|base-chain/specs/upgrades/canyon:overview
-|base-chain/specs/upgrades/cobalt:eip-8130
+|base-chain/specs/upgrades/cobalt:overview
|base-chain/specs/upgrades/delta:overview,span-batches
|base-chain/specs/upgrades/ecotone:derivation,l1-attributes,overview
|base-chain/specs/upgrades/fjord:derivation,exec-engine,overview,predeploys
diff --git a/docs/apps/guides/accept-b20-payments.mdx b/docs/apps/guides/accept-b20-payments.mdx
index cb855a321..887a49253 100644
--- a/docs/apps/guides/accept-b20-payments.mdx
+++ b/docs/apps/guides/accept-b20-payments.mdx
@@ -56,6 +56,6 @@ Call `publicClient.simulateContract` with the same arguments before sending. It
## Related pages
-- [B20 token standard](/base-chain/specs/upgrades/beryl/b20/specification): the full interface, including memos, policies, pausing, and roles.
+- [B20 token standard](/base-chain/specs/reference/b20): the full interface, including memos, policies, pausing, and roles.
- [Query B20 events](https://docs.cdp.coinbase.com/data/sql-api/b20-events): index `Transfer` and `Memo` events with the CDP SQL API to reconcile payments against orders at scale.
- [Launch a B20 token](/get-started/launch-b20-token): create your own B20 token.
\ No newline at end of file
diff --git a/docs/base-chain/network-information/b20-token-standard.mdx b/docs/base-chain/network-information/b20-token-standard.mdx
new file mode 100644
index 000000000..e3daf558d
--- /dev/null
+++ b/docs/base-chain/network-information/b20-token-standard.mdx
@@ -0,0 +1,134 @@
+---
+title: "B20 Token Standard"
+description: "Learn about B20, Base's native ERC-20-compatible token standard."
+tag: "New"
+---
+
+## What is B20?
+
+B20 is Base's native token standard for stablecoins, real-world assets (RWAs), and other fungible tokens. It retains ERC-20 compatibility, so wallets, exchanges, and apps can use B20 tokens through standard ERC-20 flows. Issuers can add B20 controls without requiring those integrations to use a new token interface.
+
+The [B20 Factory](/base-chain/specs/reference/b20#factory) establishes a token's operational configuration. The factory applies the configuration atomically, so the token starts with the selected controls. The issuer supplies roles, policies, supply limits, pause controls, and metadata for that configuration.
+
+After creation, the token applies its configuration to each operation. [Roles](/base-chain/specs/reference/b20#roles-model) control privileged issuer actions. The token queries the [PolicyRegistry](/base-chain/specs/reference/b20#policy-registry) for configured authorization checks. Holders can transfer and approve tokens. Apps and indexers continue to use standard ERC-20 calls and events.
+
+## Why B20?
+
+Token issuers may need controls beyond ordinary transfers. Examples include mint permissions, transfer restrictions, operation pauses, and payment references. A standard ERC-20 requires issuers to implement these controls in a custom contract. B20 standardizes the controls that issuers configure for a token.
+
+The standard includes:
+
+- **Issuer controls:** B20 includes [roles](/base-chain/specs/reference/b20#roles-model), [policy scopes](/base-chain/specs/reference/b20#policy-integration), [supply caps](/base-chain/specs/reference/b20#supply-cap), [pauses](/base-chain/specs/reference/b20#pause), [memos](/base-chain/specs/reference/b20#memos), and [signed approvals](/base-chain/specs/reference/b20#erc-2612-permit--eip-712).
+- **Integration surface:** B20 retains [ERC-20 compatibility](/base-chain/specs/reference/b20#erc-20-compatibility). B20-specific functionality uses a consistent interface.
+- **Execution model:** B20 runs as a precompile. [Precompile addresses](/base-chain/specs/reference/b20#precompile-addresses) define the protocol entry points.
+
+## How B20 works
+
+The diagram shows the B20 lifecycle. The issuer configures the token during creation. The token applies that configuration during later operations. Use the diagram to identify the component that controls each part of the lifecycle.
+
+```mermaid
+flowchart LR
+ AR[ActivationRegistry] -->|enables a B20 variant| F[B20 Factory]
+ I[Issuer] -->|chooses variant and initial configuration| F
+ F -->|creates and initializes| T[B20 token]
+ I -->|assigns roles and policy scopes| T
+ I -->|manages allowlists and blocklists| PR[PolicyRegistry]
+ T -->|checks configured policy scopes| PR
+ U[Holders and ERC-20 apps] -->|transfer, approve, balanceOf| T
+ O[Issuer operators] -->|mint, pause, seize, update metadata| T
+```
+
+In practice, the flow is:
+
+1. **Choose a variant.** Check [activation](/get-started/launch-b20-token#verify-the-activation-registry-is-enabled) for the selected variant.
+2. **Create the token.** The issuer calls the factory with creation parameters and bootstrap calls. [Factory creation](/base-chain/specs/reference/b20#factory) defines the call. [Address derivation](/base-chain/specs/reference/b20#address-derivation) defines the token address.
+3. **Configure operations.** Built-in roles gate sensitive operations. [Policy scopes](/base-chain/specs/reference/b20#policy-integration) authorize or deny accounts for each operation.
+4. **Use the token.** Holders and applications use ordinary ERC-20 methods. B20 methods can add a memo or perform an issuer operation.
+
+## What can I do with B20?
+
+
+
+ Create a token. Set a supply cap. Assign roles for minting, pausing, seizure, and metadata. [Manage roles](/base-chain/specs/reference/b20#roles-model).
+
+
+ Connect allowlists, blocklists, or composite policies to transfer, mint, and seizure scopes. Scopes allow every account by default. [Set policies](/base-chain/specs/reference/b20#policy-integration).
+
+
+ Pause transfers, mints, burns, or seizures independently. Authorized operators can mint, burn, or seize balances. [Review pauses](/base-chain/specs/reference/b20#pause) and [seizures](/base-chain/specs/reference/b20#seize).
+
+
+ Memo-enabled operations emit a `bytes32` reference. The reference can identify an order or invoice. [Review memo events](/base-chain/specs/reference/b20#memos).
+
+
+ Use ERC-2612 [`permit`](/base-chain/specs/reference/b20#erc-2612-permit--eip-712) for signed approvals. Standard `approve` and allowance flows remain available.
+
+
+ Asset tokens support scaled UI balances, announcements, batch minting, and extra metadata. [Review Asset features](/base-chain/specs/reference/b20#asset).
+
+
+
+### Choose the right variant
+
+Every B20 token uses one of two variants. The issuer chooses the variant during creation. The choice determines the token's decimals and additional methods. Use the table to select the variant for the token's use case.
+
+| Variant | Best for | Key differences |
+|---|---|---|
+| **Asset** | RWAs, equities, funds, and long-tail assets | Configurable 6 to 18 decimals. Multipliers, announcements, batch minting, and extra metadata. |
+| **Stablecoin** | Fiat-referenced stablecoins | Fixed 6 decimals. An immutable uppercase currency code such as `USD`. The code validates format only. It does not validate reserves, legal status, or registration. |
+
+This overview does not define method-level behavior. Read the [B20 technical specification](/base-chain/specs/reference/b20) for methods, events, errors, and configuration rules. Read the [generated interface reference](/base-chain/specs/reference/b20/interfaces/IB20) when you need the full callable interface.
+
+## How can I get started?
+
+### Explore the issuer flow
+
+The B20 demo runs issuer flows in the browser. Use the demo to explore token creation and issuer controls before you integrate B20. The demo does not require a wallet or setup.
+
+
+
+
+
+[Open the demo in a new tab](https://chain.base.org/demos/b20).
+
+
+Standard `forge` cannot simulate B20 precompile calls. B20 precompile addresses have no contract bytecode. Use Base's Foundry build: `base-forge`, `base-cast`, and `base-anvil`. The tools register B20 precompiles in their EVM.
+
+
+## Availability
+
+| Network | Live since |
+|---|---|
+| Base mainnet | 2026-06-25 (Beryl) |
+| Base Sepolia | 2026-06-18 (Beryl) |
+
+## Next steps
+
+
+
+ Create a token with one factory call.
+
+
+ Integrate memo-tagged payments. Handle B20-specific reverts.
+
+
+ Read the normative standard.
+
+
+ Find protocol constants and addresses.
+
+
+ Browse B20 and registry methods.
+
+
+ Review standard changes by release.
+
+
diff --git a/docs/base-chain/network-information/native-account-abstraction.mdx b/docs/base-chain/network-information/native-account-abstraction.mdx
new file mode 100644
index 000000000..b7010eab8
--- /dev/null
+++ b/docs/base-chain/network-information/native-account-abstraction.mdx
@@ -0,0 +1,88 @@
+---
+title: "Native Account Abstraction"
+description: "Understand native account abstraction on Base. EIP-8130 smart accounts send ordinary transactions, with no bundlers, relays, or paymaster infrastructure."
+tag: "Soon"
+---
+
+Native account abstraction makes smart accounts a property of the chain instead of something bolted on around it. An account records who is allowed to act for it, and how its signatures are checked, in an onchain system contract. Base validates every transaction against that configuration, so smart accounts send ordinary transactions.
+
+Base's implementation is [EIP-8130](https://eip.tools/eip/8130), landing with the [Cobalt upgrade](/base-chain/specs/upgrades/cobalt/overview).
+
+
+EIP-8130 is experimental and currently runs only on the [vibenet devnet](https://chain.base.org/vibenet). See [connecting to Base](/base-chain/quickstart/connecting-to-base#vibenet) for connection details.
+
+
+## Why native
+
+Smart accounts on EVM networks today work around the protocol rather than inside it, and you pay for that in infrastructure.
+
+[ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) introduces an alternate mempool, bundlers, and an EntryPoint contract. Every app that wants smart account features inherits that stack, its operating cost, and its failure modes. [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) lets an externally owned account (EOA) delegate to contract code, which is simpler, but the account still validates against its single original key.
+
+EIP-8130 moves the abstraction into the chain, so features that 4337 provides through external services come built into ordinary transactions:
+
+| | ERC-4337 | EIP-7702 | EIP-8130 |
+|---|---|---|---|
+| Validation | EntryPoint contract via bundlers | One fixed key | Protocol, against onchain configuration |
+| Infrastructure | Bundlers and an alternate mempool | None | None, standard transactions |
+| Session keys | Per-wallet plugin systems | Not native | Native actors with scoped policies |
+| Gas sponsorship | Paymaster contracts | Not native | Native payers ([ERC-8168](https://eip.tools/eip/8168)) |
+| Batching | Via the account contract | Via delegated code | Native, atomic, per transaction |
+
+## The five concepts
+
+An EIP-8130 transaction names a sender account, proves the sender is authorized to act for it, and carries a batch of calls. Everything in the model maps to one of five ideas.
+
+
+
+An account is a small proxy contract that forwards calls to a shared implementation. Its address is deterministic, so it exists and can receive funds before anything is deployed, and the deployment can ride along in the account's first transaction.
+
+`DefaultAccount` is the minimal building block, and also backs EOAs upgraded through EIP-7702. A separate variant built for high transaction rates locks outbound ETH during execution in exchange for higher mempool rate limits.
+
+
+
+A **signer** is what produces a transaction's authorization: a private key, a passkey, a hardware device.
+
+An **actor** is the onchain identity that authorization resolves to, recorded for the account in a system contract. The distinction matters because an account can authorize many actors at once and revoke each one independently. Losing a device means revoking one actor, not migrating the account.
+
+
+
+Each actor carries **scope** flags that limit what it may do, and can bind to an onchain **policy**: per-token spend limits, plus restrictions on which contracts and functions it may call.
+
+This is the native session key model. An app receives an actor with exactly the permissions it needs and nothing more, enforced by the chain, revocable at any time.
+
+
+
+Signature validation is pluggable. Authenticator contracts implement a single `authenticate` entrypoint, and the reference set covers secp256k1 (standard EVM keys), P-256, and WebAuthn.
+
+Passkeys therefore validate at the protocol level. There is no wrapper contract and no verification cost premium for using a device credential instead of a seed phrase.
+
+
+
+A transaction can name a **payer** that covers gas on the sender's behalf, so sponsorship needs no paymaster contract. Draft [ERC-8168](https://eip.tools/eip/8168) standardizes the service flow around it: how apps discover a payer and request sponsorship.
+
+
+
+## What it unlocks
+
+- **Passkey accounts by default.** A user signs with the biometric on their device, validated by the protocol, with no seed phrase anywhere in the flow.
+- **Session keys that are real permissions.** Grant an app a scoped, spend-limited actor instead of blanket approval, and revoke it without moving funds.
+- **Atomic batching.** Approve and swap, or claim and stake, succeed or revert together in one transaction.
+- **Sponsored onboarding.** A new user's first transaction can be paid for by the app, with no bundler or paymaster deployment.
+- **Accounts that survive a lost device.** Rotate an actor rather than recover a key.
+
+## Next steps
+
+
+
+ Chain details, client setup, a working code example, and the onchain interfaces.
+
+
+ Activation status and required node software.
+
+
+ `AccountConfiguration`, account implementations, and authenticators, with Foundry tests.
+
+
+ RPC endpoints and chain ID for the devnet where EIP-8130 runs today.
+
+
diff --git a/docs/base-chain/overview.mdx b/docs/base-chain/overview.mdx
index 635a3379a..72c4f6294 100644
--- a/docs/base-chain/overview.mdx
+++ b/docs/base-chain/overview.mdx
@@ -8,6 +8,9 @@ Base Chain docs are organized around the core concepts, references, and operatin
## Start here
+
+ Base's native token standard: an ERC-20 superset with compliance, reconciliation, and corporate actions built in.
+
Understand transaction ordering, finality, throughput, fees, bridging, and Base-specific execution behavior.
diff --git a/docs/base-chain/specs/reference/b20/changelog.mdx b/docs/base-chain/specs/reference/b20/changelog.mdx
new file mode 100644
index 000000000..81c4ef6b7
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/changelog.mdx
@@ -0,0 +1,40 @@
+---
+title: "B20 changelog"
+description: "Changes to the B20 token standard, release by release, including new methods, deprecations, and activation dates."
+---
+
+Changes to the [B20 token standard](/base-chain/specs/reference/b20). 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
+
+| Network | Activated |
+|---|---|
+| Base mainnet | 2026-06-25 |
+| Base Sepolia | 2026-06-18 |
+
+Shipped with the [Beryl upgrade](/base-chain/specs/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](/base-chain/specs/reference/b20#roles-model) with built-in roles, user-defined roles in the role graph, and `renounceLastAdmin` for permanent admin-less operation
+- [PolicyRegistry](/base-chain/specs/reference/b20#policy-registry) 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](/base-chain/specs/reference/b20#policy-integration) on every token, covering transfer sender, receiver, and executor, mint receiver, and seize holder and receiver
+- [`seizeWithMemo`](/base-chain/specs/reference/b20#seize) for compliance-driven balance transfers
+- [Memo variants](/base-chain/specs/reference/b20#memos) of transfer, transferFrom, mint, burn, and seize, emitting `Memo` immediately after the primary event
+- [Granular pausing](/base-chain/specs/reference/b20#pause) by `PausableFeature`: `TRANSFER`, `MINT`, `BURN`, and `SEIZE`
+- [Optional supply caps](/base-chain/specs/reference/b20#supply-cap), with `type(uint128).max` as the uncapped sentinel and maximum supply
+- [ERC-2612 `permit`](/base-chain/specs/reference/b20#erc-2612-permit--eip-712) with an EIP-712 domain at version `"1"`
+- [ERC-7572 `contractURI`](/base-chain/specs/reference/b20#contract-uri-erc-7572) and `METADATA_ROLE`-gated name, symbol, and URI updates
+- [B20Factory](/base-chain/specs/reference/b20#factory) singleton precompile with deterministic, variant-encoding addresses and `initCalls` bootstrap semantics
+- ActivationRegistry gating for state-changing PolicyRegistry calls
+- The [`ASSET` variant](/base-chain/specs/reference/b20#asset): `OPERATOR_ROLE`, WAD-precision UI multipliers with scheduled and instant updates, announcements, `batchMint`, and issuer-defined extra metadata
+- The [`STABLECOIN` variant](/base-chain/specs/reference/b20#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`.
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses.mdx b/docs/base-chain/specs/reference/b20/constants-and-addresses.mdx
similarity index 100%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses.mdx
rename to docs/base-chain/specs/reference/b20/constants-and-addresses.mdx
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/errors-and-events-index.mdx b/docs/base-chain/specs/reference/b20/errors-and-events.mdx
similarity index 100%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/errors-and-events-index.mdx
rename to docs/base-chain/specs/reference/b20/errors-and-events.mdx
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/index.mdx b/docs/base-chain/specs/reference/b20/index.mdx
similarity index 97%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/index.mdx
rename to docs/base-chain/specs/reference/b20/index.mdx
index ce5bac6dc..a76152704 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/index.mdx
+++ b/docs/base-chain/specs/reference/b20/index.mdx
@@ -1,5 +1,6 @@
---
title: "B20 specification"
+sidebarTitle: "Overview"
description: "Normative Beryl specification for Base's B20 native token standard, precompile registries, policy scopes, factory, and variants."
---
@@ -219,4 +220,6 @@ Stablecoin tokens add `currency()`, set once at creation. The value must contain
## Developer documentation
-- [Generated reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
+- [B20 token standard](/base-chain/network-information/b20-token-standard): conceptual introduction to B20 and when to use it
+- [Generated reference](/base-chain/specs/reference/b20/interfaces/IB20)
+- [B20 changelog](/base-chain/specs/reference/b20/changelog)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry.mdx
new file mode 100644
index 000000000..80b2ea411
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry.mdx
@@ -0,0 +1,32 @@
+---
+title: "IActivationRegistry reference"
+description: "Generated B20 reference for IActivationRegistry functions, events, and errors."
+---
+
+
+## Functions
+
+| Function | Selector | Summary |
+|---|---|---|
+| [`isActivated`](/base-chain/specs/reference/b20/interfaces/IActivationRegistry/isActivated) | `0xba87af80` | Whether `feature` is currently activated. Never reverts. |
+| [`checkActivated`](/base-chain/specs/reference/b20/interfaces/IActivationRegistry/checkActivated) | `0xde5bfd9b` | Reverts with `FeatureNotActivated(feature)` if `feature` is not currently activated. |
+| [`admin`](/base-chain/specs/reference/b20/interfaces/IActivationRegistry/admin) | `0xf851a440` | The address authorized to call `activate` and `deactivate`. |
+| [`activate`](/base-chain/specs/reference/b20/interfaces/IActivationRegistry/activate) | `0x59db6e85` | Activates `feature`. Emits `FeatureActivated`. |
+| [`deactivate`](/base-chain/specs/reference/b20/interfaces/IActivationRegistry/deactivate) | `0x22eee84c` | Deactivates `feature`. Emits `FeatureDeactivated`. |
+
+## Events
+
+| Event | Topic0 | Summary |
+|---|---|---|
+| `FeatureActivated` | `0x8c7a0ecdbb8d96e867e43ec1aef80027976ee493c18bef399fa799ed19752451` | Emitted when `feature` is activated. |
+| `FeatureDeactivated` | `0x15bf65a782c3258c63268ba9d7aed710cf9f9315d3687d9a4632ccdad7926c84` | Emitted when `feature` is deactivated. |
+
+## Errors
+
+| Error | Selector | Summary |
+|---|---|---|
+| `Unauthorized` | `0x8e4a23d6` | Caller is not the activation admin. |
+| `AlreadyActivated` | `0x866b0041` | Feature is already activated. |
+| `FeatureNotActivated` | `0xb9b2a425` | Feature is not activated. |
+| `DelegateCallNotAllowed` | `0x0d89438e` | The precompile was invoked via `DELEGATECALL` or `CALLCODE`. |
+| `StaticCallNotAllowed` | `0xbeaba5b7` | A state-mutating entry point was invoked from a `STATICCALL` frame. |
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/activate.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/activate.mdx
similarity index 78%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/activate.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/activate.mdx
index c2eda9816..ad20f32cf 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/activate.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/activate.mdx
@@ -38,8 +38,3 @@ No direct policy interaction.
```solidity
IActivationRegistry(target).activate(arg0);
```
-
-## Related
-
-- [IActivationRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/admin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/admin.mdx
similarity index 70%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/admin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/admin.mdx
index a1378c1e5..05f5df066 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/admin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/admin.mdx
@@ -34,8 +34,3 @@ No direct policy interaction.
```solidity
IActivationRegistry(target).admin();
```
-
-## Related
-
-- [IActivationRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/checkActivated.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/checkActivated.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/checkActivated.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/checkActivated.mdx
index 962653eba..9acede31f 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/checkActivated.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/checkActivated.mdx
@@ -36,8 +36,3 @@ No direct policy interaction.
```solidity
IActivationRegistry(target).checkActivated(arg0);
```
-
-## Related
-
-- [IActivationRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/deactivate.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/deactivate.mdx
similarity index 78%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/deactivate.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/deactivate.mdx
index 2df42d5ad..66a821696 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/deactivate.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/deactivate.mdx
@@ -38,8 +38,3 @@ No direct policy interaction.
```solidity
IActivationRegistry(target).deactivate(arg0);
```
-
-## Related
-
-- [IActivationRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/isActivated.mdx b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/isActivated.mdx
similarity index 73%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/isActivated.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/isActivated.mdx
index f0d934418..141e3906f 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/isActivated.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IActivationRegistry/isActivated.mdx
@@ -35,8 +35,3 @@ No direct policy interaction.
```solidity
IActivationRegistry(target).isActivated(arg0);
```
-
-## Related
-
-- [IActivationRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20.mdx
new file mode 100644
index 000000000..132933833
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20.mdx
@@ -0,0 +1,115 @@
+---
+title: "IB20 reference"
+description: "Generated B20 reference for IB20 functions, events, and errors."
+---
+
+
+## Functions
+
+| Function | Selector | Summary |
+|---|---|---|
+| [`DEFAULT_ADMIN_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/DEFAULT_ADMIN_ROLE) | `0xa217fddf` | The default top-level admin role (`bytes32(0)`). Required to call `grantRole`, `revokeRole`, |
+| [`MINT_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/MINT_ROLE) | `0xe9a9c850` | Required to call `mint` and `mintWithMemo`. |
+| [`BURN_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/BURN_ROLE) | `0xb930908f` | Required to call `burn` and `burnWithMemo`. |
+| [`BURN_BLOCKED_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/BURN_BLOCKED_ROLE) | `0x32ad9be8` | Required to call the deprecated `burnBlocked` (retained for |
+| [`SEIZE_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_ROLE) | `0x3c7e9ba5` | Required to call `seizeWithMemo`. |
+| [`PAUSE_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/PAUSE_ROLE) | `0x389ed267` | Required to call `pause`. |
+| [`UNPAUSE_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/UNPAUSE_ROLE) | `0x309756fb` | Required to call `unpause`. |
+| [`METADATA_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20/METADATA_ROLE) | `0x38841782` | Required to call `updateName`, `updateSymbol`, and `updateContractURI`. |
+| [`TRANSFER_SENDER_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_SENDER_POLICY) | `0xd116fc21` | Policy slot consulted against `from` on every transfer (including `transferFrom`). |
+| [`TRANSFER_RECEIVER_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_RECEIVER_POLICY) | `0x210f521b` | Policy slot consulted against `to` on every transfer. |
+| [`TRANSFER_EXECUTOR_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_EXECUTOR_POLICY) | `0x724e9c53` | Policy slot consulted against `msg.sender` on `transferFrom` when distinct from `from`. |
+| [`MINT_RECEIVER_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/MINT_RECEIVER_POLICY) | `0x6e5b013d` | Policy slot consulted against `to` on every mint. |
+| [`SEIZE_HOLDER_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_HOLDER_POLICY) | `0xb279d311` | Policy slot consulted against `from` by `seizeWithMemo`. |
+| [`SEIZE_RECEIVER_POLICY`](/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_RECEIVER_POLICY) | `0xb31da27f` | Policy slot consulted against `to` by `seizeWithMemo`. |
+| [`name`](/base-chain/specs/reference/b20/interfaces/IB20/name) | `0x06fdde03` | Token name. Set at creation, mutable via `updateName`. |
+| [`symbol`](/base-chain/specs/reference/b20/interfaces/IB20/symbol) | `0x95d89b41` | Token symbol. Set at creation, mutable via `updateSymbol`. |
+| [`decimals`](/base-chain/specs/reference/b20/interfaces/IB20/decimals) | `0x313ce567` | Number of decimal places. Immutable per token variant. |
+| [`totalSupply`](/base-chain/specs/reference/b20/interfaces/IB20/totalSupply) | `0x18160ddd` | Total token supply currently in circulation. |
+| [`balanceOf`](/base-chain/specs/reference/b20/interfaces/IB20/balanceOf) | `0x70a08231` | Balance of `account`. |
+| [`allowance`](/base-chain/specs/reference/b20/interfaces/IB20/allowance) | `0xdd62ed3e` | Allowance granted by `owner` to `spender`. |
+| [`transfer`](/base-chain/specs/reference/b20/interfaces/IB20/transfer) | `0xa9059cbb` | Transfers `amount` from `msg.sender` to `to`. Emits `Transfer`. |
+| [`transferFrom`](/base-chain/specs/reference/b20/interfaces/IB20/transferFrom) | `0x23b872dd` | Transfers `amount` from `from` to `to` using `msg.sender`'s allowance. Emits `Transfer`. |
+| [`approve`](/base-chain/specs/reference/b20/interfaces/IB20/approve) | `0x095ea7b3` | Sets `spender`'s allowance to `amount`. Not gated by any policy or by pause. Emits `Approval`. |
+| [`updateName`](/base-chain/specs/reference/b20/interfaces/IB20/updateName) | `0x84da92a7` | Updates the token's `name`. Emits `NameUpdated` followed by `EIP712DomainChanged`. |
+| [`updateSymbol`](/base-chain/specs/reference/b20/interfaces/IB20/updateSymbol) | `0x537f5312` | Updates the token's `symbol`. Emits `SymbolUpdated`. |
+| [`transferWithMemo`](/base-chain/specs/reference/b20/interfaces/IB20/transferWithMemo) | `0x95777d59` | Same as `transfer`, plus emits `Memo` immediately after the standard `Transfer` event. |
+| [`transferFromWithMemo`](/base-chain/specs/reference/b20/interfaces/IB20/transferFromWithMemo) | `0x929c2539` | Same as `transferFrom`, plus emits `Memo` immediately after the standard `Transfer` event. |
+| [`mint`](/base-chain/specs/reference/b20/interfaces/IB20/mint) | `0x40c10f19` | Mints `amount` to `to`. Emits `Transfer(address(0), to, amount)`. |
+| [`mintWithMemo`](/base-chain/specs/reference/b20/interfaces/IB20/mintWithMemo) | `0xe44f0b12` | Same as `mint`, plus emits `Memo` immediately after the standard `Transfer` event. |
+| [`burn`](/base-chain/specs/reference/b20/interfaces/IB20/burn) | `0x42966c68` | Burns `amount` from the caller's own balance. Not subject to any policy. |
+| [`burnWithMemo`](/base-chain/specs/reference/b20/interfaces/IB20/burnWithMemo) | `0x38f23b0b` | Same as `burn`, plus emits `Memo` immediately after the standard `Transfer` event. |
+| [`burnBlocked`](/base-chain/specs/reference/b20/interfaces/IB20/burnBlocked) | `0xec0cf3dc` | DEPRECATED. Burns `amount` from a `from` account that is blocked under `TRANSFER_SENDER_POLICY`. |
+| [`seizeWithMemo`](/base-chain/specs/reference/b20/interfaces/IB20/seizeWithMemo) | `0xf916d81b` | Seizes `amount` of `from`'s balance and reassigns it to `to` in a single admin operation. |
+| [`hasRole`](/base-chain/specs/reference/b20/interfaces/IB20/hasRole) | `0x91d14854` | Whether `account` is a member of `role`. User-defined roles are supported and have no |
+| [`getRoleAdmin`](/base-chain/specs/reference/b20/interfaces/IB20/getRoleAdmin) | `0x248a9ca3` | The role required to grant or revoke `role`. Defaults to `DEFAULT_ADMIN_ROLE` if not |
+| [`grantRole`](/base-chain/specs/reference/b20/interfaces/IB20/grantRole) | `0x2f2ff15d` | Grants `role` to `account`. Emits `RoleGranted`. |
+| [`revokeRole`](/base-chain/specs/reference/b20/interfaces/IB20/revokeRole) | `0xd547741f` | Revokes `role` from `account`. Emits `RoleRevoked`. |
+| [`renounceRole`](/base-chain/specs/reference/b20/interfaces/IB20/renounceRole) | `0x36568abe` | Caller renounces `role` for themselves. Emits `RoleRevoked`. |
+| [`renounceLastAdmin`](/base-chain/specs/reference/b20/interfaces/IB20/renounceLastAdmin) | `0x6f79e3d7` | Permanently transitions the token to a zero-admin state. Revokes `DEFAULT_ADMIN_ROLE` |
+| [`setRoleAdmin`](/base-chain/specs/reference/b20/interfaces/IB20/setRoleAdmin) | `0x1e4e0091` | Sets the admin role for `role`. Emits `RoleAdminChanged`. |
+| [`pausedFeatures`](/base-chain/specs/reference/b20/interfaces/IB20/pausedFeatures) | `0xde9997e3` | The `PausableFeature`s currently paused on this token. Order is implementation-defined; |
+| [`isPaused`](/base-chain/specs/reference/b20/interfaces/IB20/isPaused) | `0x165c44bc` | Whether `feature` is currently paused. O(1). |
+| [`pause`](/base-chain/specs/reference/b20/interfaces/IB20/pause) | `0x9f98bd2d` | Pauses each of `features`. Additive: features already paused remain paused; duplicates |
+| [`unpause`](/base-chain/specs/reference/b20/interfaces/IB20/unpause) | `0xb61b2ebc` | Unpauses each of `features`. Features not listed are unaffected; duplicates are idempotent. |
+| [`policyId`](/base-chain/specs/reference/b20/interfaces/IB20/policyId) | `0xdb3de624` | The current policy ID configured for `policyScope`. Returns `0` (always-allow built-in) |
+| [`updatePolicy`](/base-chain/specs/reference/b20/interfaces/IB20/updatePolicy) | `0xadf9c4ea` | Updates the policy ID assigned to `policyScope`. Takes effect immediately for the next |
+| [`supplyCap`](/base-chain/specs/reference/b20/interfaces/IB20/supplyCap) | `0x8f770ad0` | The maximum total supply enforced on `mint`. Capped at `type(uint128).max`, which |
+| [`updateSupplyCap`](/base-chain/specs/reference/b20/interfaces/IB20/updateSupplyCap) | `0xe5a97f07` | Sets a new supply cap. May be raised or lowered freely, but never below current |
+| [`DOMAIN_SEPARATOR`](/base-chain/specs/reference/b20/interfaces/IB20/DOMAIN_SEPARATOR) | `0x3644e515` | The current EIP-712 domain separator for this token. Recomputed on each call so it |
+| [`nonces`](/base-chain/specs/reference/b20/interfaces/IB20/nonces) | `0x7ecebe00` | The current EIP-2612 permit nonce for `owner`. Incremented by 1 on each successful `permit`. |
+| [`permit`](/base-chain/specs/reference/b20/interfaces/IB20/permit) | `0xd505accf` | EIP-2612 permit. Recovers `owner` via ECDSA from `(v, r, s)`. EOA signatures only; |
+| [`eip712Domain`](/base-chain/specs/reference/b20/interfaces/IB20/eip712Domain) | `0x84b0196e` | ERC-5267 EIP-712 domain introspection. |
+| [`contractURI`](/base-chain/specs/reference/b20/interfaces/IB20/contractURI) | `0xe8a3d485` | Off-chain URI pointing at contract-level metadata for this token, per ERC-7572. |
+| [`updateContractURI`](/base-chain/specs/reference/b20/interfaces/IB20/updateContractURI) | `0x7e5b1e24` | Updates `contractURI`. Emits the parameterless `ContractURIUpdated` event per ERC-7572; |
+
+## Events
+
+| Event | Topic0 | Summary |
+|---|---|---|
+| `Transfer` | `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef` | ERC-20 transfer event. Emitted on every successful transfer (including memo'd variants), |
+| `Approval` | `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` | ERC-20 approval event. Emitted by `approve` and `permit`. |
+| `Memo` | `0x6989f5818dcfd11f8cd53b27c94cec33dae1589735f03e639cba54553a1825e8` | Emitted by `transferWithMemo`, `transferFromWithMemo`, `mintWithMemo`, and `burnWithMemo` |
+| `BurnedBlocked` | `0x0b552e96653fd6842da37c477005d3b5c08a8c7d3631b1f43787b2dc9a1006a3` | Emitted by the deprecated `burnBlocked` in addition to `Transfer(from, address(0), amount)`. |
+| `Seized` | `0xa9aec5d8b86e2fa2fd6ac3af62f2622e3dfdab1967d4cbbb56a5df7d74cb887c` | Emitted by `seizeWithMemo` in addition to `Transfer(from, to, amount)` (and the |
+| `RoleGranted` | `0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d` | Emitted when `account` is granted `role`. `sender` is the originating caller. |
+| `RoleRevoked` | `0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b` | Emitted when `role` is revoked from `account`. `sender` is the originating caller |
+| `RoleAdminChanged` | `0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff` | Emitted by `setRoleAdmin` when the admin role for `role` changes. |
+| `LastAdminRenounced` | `0xe8d3a9872e7ca325571ff1e4c51ddd69090a0345240cc605ccde365ec867cc67` | Emitted by `renounceLastAdmin` in addition to the standard |
+| `Paused` | `0x43e072977b8112813d7c2aa0b63d3c121c1fe3e714e6d2eacb5735fe4027e976` | Emitted by `pause`. `features` is the argument to the call (not the resulting paused state). |
+| `Unpaused` | `0xdc6281474ea3dea2a856e225c7ba3edf427de9164495817c4d49a595e683fed4` | Emitted by `unpause`. `features` is the argument to the call (not the resulting paused state). |
+| `PolicyUpdated` | `0x8b4790f7ff717fc8f60f07ae099e47ef318dc04b37ae98056b50a22b79056626` | Emitted by `updatePolicy` when a token's policy slot is changed. Initial slot assignment at |
+| `SupplyCapUpdated` | `0x6d14f44808ce024f263432bc38d019a9951fbe674e9898b54844dbc8dc09c23a` | Emitted by `updateSupplyCap`. |
+| `ContractURIUpdated` | `0xa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962` | Emitted by `updateContractURI`. Per ERC-7572, parameterless: integrators re-fetch `contractURI()`. |
+| `NameUpdated` | `0x74321da206c1b9fa34367f7ece59ca49371dcd13820b9a5c3767ae1ecceed51a` | Emitted by `updateName`. Carries the new name string. |
+| `SymbolUpdated` | `0x64e8b5c6dcea43dd79766bb3b8af7c45968d12b68c960cf2da23856f34d598d4` | Emitted by `updateSymbol`. Carries the new symbol string. |
+| `EIP712DomainChanged` | `0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31` | ERC-5267 domain-change signal. Emitted exactly once per successful `updateName` call, |
+
+## Errors
+
+| Error | Selector | Summary |
+|---|---|---|
+| `NonPayable` | `0x6fb1b0e9` | ETH was attached to a call targeting a nonpayable token selector. |
+| `AccessControlUnauthorizedAccount` | `0xe2517d3f` | `account` does not hold `neededRole`. |
+| `Unauthorized` | `0x82b42900` | Caller failed a positional authorization check that is not expressible as "missing role X". |
+| `ContractPaused` | `0xf9df5ac9` | The `PausableFeature` covering this operation is currently paused. |
+| `InsufficientAllowance` | `0x192b9e4e` | `spender`'s allowance is less than `needed` for the requested `transferFrom`. |
+| `InsufficientBalance` | `0xdb42144d` | `sender`'s balance is less than `needed` for the requested transfer or burn. |
+| `InvalidSender` | `0x4c14f64c` | The transfer's source address is invalid (typically `address(0)`). |
+| `InvalidReceiver` | `0x9cfea583` | The transfer's destination address is invalid (typically `address(0)`). |
+| `InvalidApprover` | `0x8bc146c4` | The approval's `owner` address is invalid (typically `address(0)`). |
+| `InvalidSpender` | `0x4e15efda` | The approval's `spender` address is invalid (typically `address(0)`). |
+| `InvalidAmount` | `0x2c5211c6` | An amount argument was zero where a non-zero value is required. Not used for ERC-20 amount arguments. |
+| `EmptyFeatureSet` | `0x4861ff45` | An empty array was passed to a function that requires at least one element. |
+| `InvalidSupplyCap` | `0x0a3780ce` | The proposed supply cap is outside the permitted range: below the current |
+| `SupplyCapExceeded` | `0x4b344b11` | The mint would push `totalSupply` past the configured cap. |
+| `PolicyForbids` | `0xa43fec12` | A policy slot denied the operation. |
+| `PolicyNotFound` | `0xcccad523` | The provided policy ID does not exist in the policy registry. |
+| `UnsupportedPolicyType` | `0xcdd98a4a` | `policyScope` is not a slot this token (or its variant) supports. |
+| `AccountNotSeizable` | `0x91dbbc8d` | `seizeWithMemo` was called against a `from` that is currently authorized under |
+| `AccountNotBlocked` | `0x64a5cb46` | The deprecated `burnBlocked` was called against a `from` that is currently authorized under |
+| `ExpiredSignature` | `0xbd2a913c` | An EIP-2612 `permit` was submitted with a `deadline` strictly less than `block.timestamp`. |
+| `InvalidSigner` | `0x7ba5ffb5` | ECDSA recovery on an EIP-2612 `permit` returned `signer`, which does not match the claimed `owner`. |
+| `LastAdminCannotRenounce` | `0x361513e7` | `renounceRole(DEFAULT_ADMIN_ROLE, ...)` was called by the sole remaining admin. |
+| `NotSoleAdmin` | `0x2a98e73b` | `renounceLastAdmin()` was called when other accounts also hold `DEFAULT_ADMIN_ROLE`. |
+| `AccessControlBadConfirmation` | `0x6697b232` | The `callerConfirmation` argument to `renounceRole` was not `msg.sender`. |
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_BLOCKED_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_BLOCKED_ROLE.mdx
similarity index 57%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_BLOCKED_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_BLOCKED_ROLE.mdx
index db0fbf144..49c9a70dc 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_BLOCKED_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_BLOCKED_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for BURN_BLOCKED_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -19,9 +18,11 @@ function BURN_BLOCKED_ROLE() external view returns (bytes32);
## Description
-Required to call the deprecated `burnBlocked` (retained for
-the back-compat impl).
-Return: Role constant.
+Required to call the deprecated `burnBlocked` (retained for the back-compat impl).
+
+## Returns
+
+Role constant.
## Access control
@@ -36,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).BURN_BLOCKED_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_ROLE.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_ROLE.mdx
index 3b6aa18a9..a279e1db4 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/BURN_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for BURN_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function BURN_ROLE() external view returns (bytes32);
## Description
Required to call `burn` and `burnWithMemo`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).BURN_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx
similarity index 60%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx
index dfa386aa7..52978c513 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/DEFAULT_ADMIN_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for DEFAULT_ADMIN_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -19,9 +18,11 @@ function DEFAULT_ADMIN_ROLE() external view returns (bytes32);
## Description
-The default top-level admin role (`bytes32(0)`). Required to call `grantRole`, `revokeRole`,
-`setRoleAdmin`, `updatePolicy`, and `updateSupplyCap`.
-Return: Role constant.
+The default top-level admin role (`bytes32(0)`). Required to call `grantRole`, `revokeRole`, `setRoleAdmin`, `updatePolicy`, and `updateSupplyCap`.
+
+## Returns
+
+Role constant.
## Access control
@@ -36,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).DEFAULT_ADMIN_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DOMAIN_SEPARATOR.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/DOMAIN_SEPARATOR.mdx
similarity index 58%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DOMAIN_SEPARATOR.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/DOMAIN_SEPARATOR.mdx
index 92e4e8854..60b3799d5 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DOMAIN_SEPARATOR.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/DOMAIN_SEPARATOR.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for DOMAIN_SEPARATOR()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -19,9 +18,11 @@ function DOMAIN_SEPARATOR() external view returns (bytes32);
## Description
-The current EIP-712 domain separator for this token. Recomputed on each call so it
-remains correct after `updateName` or a chain fork that changes `block.chainid`.
-Return: Current domain separator.
+The current EIP-712 domain separator for this token. Recomputed on each call so it remains correct after `updateName` or a chain fork that changes `block.chainid`.
+
+## Returns
+
+Current domain separator.
## Access control
@@ -36,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).DOMAIN_SEPARATOR();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/METADATA_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/METADATA_ROLE.mdx
similarity index 65%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/METADATA_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/METADATA_ROLE.mdx
index 7f0279ad8..7de7b5a47 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/METADATA_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/METADATA_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for METADATA_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function METADATA_ROLE() external view returns (bytes32);
## Description
Required to call `updateName`, `updateSymbol`, and `updateContractURI`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).METADATA_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_RECEIVER_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_RECEIVER_POLICY.mdx
similarity index 50%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_RECEIVER_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_RECEIVER_POLICY.mdx
index 55897fec4..6a538f2f6 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_RECEIVER_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_RECEIVER_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for MINT_RECEIVER_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,10 +19,12 @@ function MINT_RECEIVER_POLICY() external view returns (bytes32);
## Description
Policy slot consulted against `to` on every mint.
-Dev: Unlike the transfer-side policies, this slot is ALWAYS enforced — including for
-factory-originated mints during the creation (bootstrap) window — so new supply is never
-issued to a policy-denied recipient even at creation. See `IB20Factory.createB20`.
-Return: Policy scope constant.
+
+Unlike transfer-side policies, this slot is always enforced. Factory-originated mints also check this slot during the creation window. A policy-denied recipient cannot receive new supply at creation. See `IB20Factory.createB20`.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -38,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).MINT_RECEIVER_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_ROLE.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_ROLE.mdx
index f79a3c624..8b27ed89f 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/MINT_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for MINT_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function MINT_ROLE() external view returns (bytes32);
## Description
Required to call `mint` and `mintWithMemo`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).MINT_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/PAUSE_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/PAUSE_ROLE.mdx
similarity index 62%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/PAUSE_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/PAUSE_ROLE.mdx
index 1fadb01c9..856793b5c 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/PAUSE_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/PAUSE_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for PAUSE_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function PAUSE_ROLE() external view returns (bytes32);
## Description
Required to call `pause`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).PAUSE_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx
similarity index 54%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx
index 79618bfd4..930fffd71 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_HOLDER_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for SEIZE_HOLDER_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,9 +19,12 @@ function SEIZE_HOLDER_POLICY() external view returns (bytes32);
## Description
Policy slot consulted against `from` by `seizeWithMemo`.
-Dev: A `from` is seizable only when it is NOT authorized by this policy. An unset slot reads as `0`
-(always-allow), so no account is seizable until an issuer configures the slot.
-Return: Policy scope constant.
+
+A `from` is seizable only when it is NOT authorized by this policy. An unset slot reads as `0` (always-allow), so no account is seizable until an issuer configures the slot.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -37,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).SEIZE_HOLDER_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx
similarity index 54%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx
index f3573f37c..2aff35b4c 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_RECEIVER_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for SEIZE_RECEIVER_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,9 +19,12 @@ function SEIZE_RECEIVER_POLICY() external view returns (bytes32);
## Description
Policy slot consulted against `to` by `seizeWithMemo`.
-Dev: Mirrors `MINT_RECEIVER_POLICY`: always enforced on the seize destination. An unset slot reads
-as `0` (always-allow), so seize may send anywhere until an issuer configures the slot.
-Return: Policy scope constant.
+
+Mirrors `MINT_RECEIVER_POLICY`: always enforced on the seize destination. An unset slot reads as `0` (always-allow), so seize may send anywhere until an issuer configures the slot.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -37,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).SEIZE_RECEIVER_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_ROLE.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_ROLE.mdx
index 45a0fa68d..cb3bc9809 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/SEIZE_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for SEIZE_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function SEIZE_ROLE() external view returns (bytes32);
## Description
Required to call `seizeWithMemo`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).SEIZE_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx
similarity index 56%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx
index 621bfe5f4..ae5a87c93 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_EXECUTOR_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for TRANSFER_EXECUTOR_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -19,11 +18,13 @@ function TRANSFER_EXECUTOR_POLICY() external view returns (bytes32);
## Description
-Policy slot consulted against `msg.sender` on `transferFrom` when distinct from `from`.
-Not consulted on `transfer`.
-Dev: Bypassed for factory-originated calls during the creation (bootstrap) window; see
-`IB20Factory.createB20`.
-Return: Policy scope constant.
+Policy slot consulted against `msg.sender` on `transferFrom` when distinct from `from`. Not consulted on `transfer`.
+
+Bypassed for factory-originated calls during the creation (bootstrap) window; see `IB20Factory.createB20`.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -38,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).TRANSFER_EXECUTOR_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx
index e3eea8673..5134caf32 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_RECEIVER_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for TRANSFER_RECEIVER_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,9 +19,12 @@ function TRANSFER_RECEIVER_POLICY() external view returns (bytes32);
## Description
Policy slot consulted against `to` on every transfer.
-Dev: Bypassed for factory-originated calls during the creation (bootstrap) window; see
-`IB20Factory.createB20`.
-Return: Policy scope constant.
+
+Bypassed for factory-originated calls during the creation (bootstrap) window; see `IB20Factory.createB20`.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -37,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).TRANSFER_RECEIVER_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx
index 03e25cfcd..a9d6cfb55 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/TRANSFER_SENDER_POLICY.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for TRANSFER_SENDER_POLICY()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,9 +19,12 @@ function TRANSFER_SENDER_POLICY() external view returns (bytes32);
## Description
Policy slot consulted against `from` on every transfer (including `transferFrom`).
-Dev: Bypassed for factory-originated calls during the creation (bootstrap) window; see
-`IB20Factory.createB20`.
-Return: Policy scope constant.
+
+Bypassed for factory-originated calls during the creation (bootstrap) window; see `IB20Factory.createB20`.
+
+## Returns
+
+Policy scope constant.
## Access control
@@ -37,8 +39,3 @@ No direct policy interaction.
```solidity
IB20(target).TRANSFER_SENDER_POLICY();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/UNPAUSE_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/UNPAUSE_ROLE.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/UNPAUSE_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/UNPAUSE_ROLE.mdx
index b354772d2..3c72cd851 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/UNPAUSE_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/UNPAUSE_ROLE.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for UNPAUSE_ROLE()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function UNPAUSE_ROLE() external view returns (bytes32);
## Description
Required to call `unpause`.
-Return: Role constant.
+
+## Returns
+
+Role constant.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).UNPAUSE_ROLE();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/allowance.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/allowance.mdx
similarity index 57%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/allowance.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/allowance.mdx
index a909aa4fc..51939d27f 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/allowance.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/allowance.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for allowance(address,address)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,9 +19,17 @@ function allowance(address owner, address spender) external view returns (uint25
## Description
Allowance granted by `owner` to `spender`.
-Param: owner Allowance owner.
-Param: spender Allowance spender.
-Return: Current allowance.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `owner` | Allowance owner. |
+| `spender` | Allowance spender. |
+
+## Returns
+
+Current allowance.
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).allowance(arg0, arg1);
+IB20(target).allowance(owner, spender);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/approve.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/approve.mdx
similarity index 51%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/approve.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/approve.mdx
index a8763c4ca..e03b0ecf3 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/approve.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/approve.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for approve(address,uint256)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,11 +19,22 @@ function approve(address spender, uint256 amount) external returns (bool);
## Description
Sets `spender`'s allowance to `amount`. Not gated by any policy or by pause. Emits `Approval`.
-Dev: Reverts with `InvalidApprover` when `msg.sender == address(0)`.
-Dev: Reverts with `InvalidSpender` when `spender == address(0)`.
-Param: spender Account being granted the allowance.
-Param: amount Allowance amount.
-Return: Always `true` on success.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `spender` | Account being granted the allowance. |
+| `amount` | Allowance amount. |
+
+## Returns
+
+Always `true` on success.
+
+## Reverts
+
+- `InvalidApprover` when `msg.sender == address(0)`.
+- `InvalidSpender` when `spender == address(0)`.
## Access control
@@ -37,10 +47,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).approve(arg0, arg1);
+IB20(target).approve(spender, amount);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/balanceOf.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/balanceOf.mdx
similarity index 56%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/balanceOf.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/balanceOf.mdx
index 1090ccb28..fc2cfa429 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/balanceOf.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/balanceOf.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for balanceOf(address)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,8 +19,16 @@ function balanceOf(address account) external view returns (uint256);
## Description
Balance of `account`.
-Param: account Account whose balance is being queried.
-Return: Current balance.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `account` | Account whose balance is being queried. |
+
+## Returns
+
+Current balance.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).balanceOf(arg0);
+IB20(target).balanceOf(account);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/burn.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/burn.mdx
new file mode 100644
index 000000000..d98016dfa
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/burn.mdx
@@ -0,0 +1,47 @@
+---
+title: "IB20.burn"
+description: "Generated B20 reference for burn(uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function burn(uint256 amount) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0x42966c68` |
+| Canonical signature | `burn(uint256)` |
+
+## Description
+
+Burns `amount` from the caller's own balance. Not subject to any policy. Emits `Transfer(caller, address(0), amount)`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `amount` | Amount to burn. |
+
+## Reverts
+
+- `ContractPaused(BURN)` when `BURN` is paused.
+- `AccessControlUnauthorizedAccount` when the caller does not hold `BURN_ROLE`.
+- `InsufficientBalance` when the caller's balance is below `amount`.
+
+## Access control
+
+`BURN_ROLE` gates self-burn calls.
+
+## Policy interaction
+
+No direct policy interaction.
+
+## Example
+
+```solidity
+IB20(target).burn(amount);
+```
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/burnBlocked.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/burnBlocked.mdx
new file mode 100644
index 000000000..c4174a964
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/burnBlocked.mdx
@@ -0,0 +1,51 @@
+---
+title: "IB20.burnBlocked"
+description: "Generated B20 reference for burnBlocked(address,uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function burnBlocked(address from, uint256 amount) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xec0cf3dc` |
+| Canonical signature | `burnBlocked(address,uint256)` |
+
+## Description
+
+DEPRECATED. Burns `amount` from a `from` account that is blocked under `TRANSFER_SENDER_POLICY`, without spending an allowance. Retained for back-compat; prefer `seizeWithMemo` (to a treasury/self address) followed by `burn`. Emits `Transfer(from, address(0), amount)` and `BurnedBlocked(caller, from, amount)`.
+
+Gated by `BURN_BLOCKED_ROLE` and the `BURN` pause vector (not `SEIZE`). Its blocked check reads `TRANSFER_SENDER_POLICY`, distinct from `seizeWithMemo`'s `SEIZE_HOLDER_POLICY`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `from` | Account whose blocked balance is being burned. |
+| `amount` | Amount to burn. |
+
+## Reverts
+
+- `ContractPaused(BURN)` when `BURN` is paused.
+- `AccessControlUnauthorizedAccount` when the caller does not hold `BURN_BLOCKED_ROLE`.
+- `AccountNotBlocked` when `from` is currently authorized under `TRANSFER_SENDER_POLICY`.
+- `InsufficientBalance` when `from`'s balance is below `amount`.
+
+## Access control
+
+`BURN_BLOCKED_ROLE` gates deprecated blocked-burn calls.
+
+## Policy interaction
+
+Checks `TRANSFER_SENDER_POLICY`; the account can be burned only when not authorized by that policy.
+
+## Example
+
+```solidity
+IB20(token).burnBlocked(from, amount);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnWithMemo.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/burnWithMemo.mdx
similarity index 58%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnWithMemo.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/burnWithMemo.mdx
index d61ddc11c..64d65c94e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnWithMemo.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/burnWithMemo.mdx
@@ -18,10 +18,14 @@ function burnWithMemo(uint256 amount, bytes32 memo) external;
## Description
-Same as `burn`, plus emits `Memo` immediately after the standard `Transfer` event.
-A memo of `bytes32(0)` is permitted.
-Param: amount Amount to burn.
-Param: memo Off-chain memo payload.
+Same as `burn`, plus emits `Memo` immediately after the standard `Transfer` event. A memo of `bytes32(0)` is permitted.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `amount` | Amount to burn. |
+| `memo` | Off-chain memo payload. |
## Access control
@@ -34,10 +38,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).burnWithMemo(arg0, arg1);
+IB20(target).burnWithMemo(amount, memo);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/contractURI.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/contractURI.mdx
similarity index 65%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/contractURI.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/contractURI.mdx
index 19563c4ad..483fd0f92 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/contractURI.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/contractURI.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for contractURI()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function contractURI() external view returns (string memory);
## Description
Off-chain URI pointing at contract-level metadata for this token, per ERC-7572.
-Return: Current contract URI.
+
+## Returns
+
+Current contract URI.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).contractURI();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/decimals.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/decimals.mdx
similarity index 62%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/decimals.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/decimals.mdx
index 4b10bb9c2..677e9ae27 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/decimals.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/decimals.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for decimals()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function decimals() external view returns (uint8);
## Description
Number of decimal places. Immutable per token variant.
-Return: Number of decimal places.
+
+## Returns
+
+Number of decimal places.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).decimals();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/eip712Domain.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/eip712Domain.mdx
similarity index 50%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/eip712Domain.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/eip712Domain.mdx
index 73edcc832..fb27c9141 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/eip712Domain.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/eip712Domain.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for eip712Domain()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,13 +19,18 @@ function eip712Domain() external view returns ( bytes1 fields, string memory nam
## Description
ERC-5267 EIP-712 domain introspection.
-Return: fields Bitmap of populated domain fields (`0x0f`: `name`, `version`, `chainId`, `verifyingContract`).
-Return: name Live `name()` value.
-Return: version Constant `"1"`.
-Return: chainId Current `block.chainid`.
-Return: verifyingContract This token's address.
-Return: salt Unused (zero).
-Return: extensions Empty.
+
+## Returns
+
+| Value | Description |
+|---|---|
+| `fields` | Bitmap of populated domain fields (`0x0f`: `name`, `version`, `chainId`, `verifyingContract`). |
+| `name` | Live `name()` value. |
+| `version` | Constant `"1"`. |
+| `chainId` | Current `block.chainid`. |
+| `verifyingContract` | This token's address. |
+| `salt` | Unused (zero). |
+| `extensions` | Empty. |
## Access control
@@ -41,8 +45,3 @@ No direct policy interaction.
```solidity
IB20(target).eip712Domain();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/getRoleAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/getRoleAdmin.mdx
similarity index 60%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/getRoleAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/getRoleAdmin.mdx
index 70e7a952e..bdcfaad55 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/getRoleAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/getRoleAdmin.mdx
@@ -18,10 +18,17 @@ function getRoleAdmin(bytes32 role) external view returns (bytes32);
## Description
-The role required to grant or revoke `role`. Defaults to `DEFAULT_ADMIN_ROLE` if not
-explicitly set via `setRoleAdmin`.
-Param: role Role whose admin is being queried.
-Return: Admin role.
+The role required to grant or revoke `role`. Defaults to `DEFAULT_ADMIN_ROLE` if not explicitly set via `setRoleAdmin`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role whose admin is being queried. |
+
+## Returns
+
+Admin role.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).getRoleAdmin(arg0);
+IB20(target).getRoleAdmin(role);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/grantRole.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/grantRole.mdx
similarity index 52%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/grantRole.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/grantRole.mdx
index 732376ce6..b9c6917ef 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/grantRole.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/grantRole.mdx
@@ -19,10 +19,17 @@ function grantRole(bytes32 role, address account) external;
## Description
Grants `role` to `account`. Emits `RoleGranted`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold the admin role for `role`,
-or when the token has been transitioned to admin-less via `renounceLastAdmin` (admin-resurrection guard).
-Param: role Role to grant.
-Param: account Recipient.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role to grant. |
+| `account` | Recipient. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold the admin role for `role`, or when the token has been transitioned to admin-less via `renounceLastAdmin` (admin-resurrection guard).
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).grantRole(arg0, arg1);
+IB20(target).grantRole(role, account);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/hasRole.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/hasRole.mdx
similarity index 57%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/hasRole.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/hasRole.mdx
index 69c9636c1..c6fa1d756 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/hasRole.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/hasRole.mdx
@@ -18,11 +18,18 @@ function hasRole(bytes32 role, address account) external view returns (bool);
## Description
-Whether `account` is a member of `role`. User-defined roles are supported and have no
-built-in effect on the token's own functions.
-Param: role Role to check.
-Param: account Account to check.
-Return: Whether `account` holds `role`.
+Whether `account` is a member of `role`. User-defined roles are supported and have no built-in effect on the token's own functions.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role to check. |
+| `account` | Account to check. |
+
+## Returns
+
+Whether `account` holds `role`.
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).hasRole(arg0, arg1);
+IB20(target).hasRole(role, account);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/isPaused.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/isPaused.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/isPaused.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/isPaused.mdx
index c69350756..d6e55d027 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/isPaused.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/isPaused.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for isPaused(PausableFeature)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,8 +19,16 @@ function isPaused(PausableFeature feature) external view returns (bool);
## Description
Whether `feature` is currently paused. O(1).
-Param: feature Feature to query.
-Return: Whether `feature` is paused.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `feature` | Feature to query. |
+
+## Returns
+
+Whether `feature` is paused.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).isPaused(arg0);
+IB20(target).isPaused(feature);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/mint.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/mint.mdx
new file mode 100644
index 000000000..4aedce21b
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/mint.mdx
@@ -0,0 +1,50 @@
+---
+title: "IB20.mint"
+description: "Generated B20 reference for mint(address,uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function mint(address to, uint256 amount) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0x40c10f19` |
+| Canonical signature | `mint(address,uint256)` |
+
+## Description
+
+Mints `amount` to `to`. Emits `Transfer(address(0), to, amount)`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `to` | Mint recipient. |
+| `amount` | Amount to mint. |
+
+## Reverts
+
+- `ContractPaused(MINT)` when `MINT` is paused.
+- `AccessControlUnauthorizedAccount` when the caller does not hold `MINT_ROLE`.
+- `InvalidReceiver` when `to == address(0)`.
+- `PolicyForbids(MINT_RECEIVER_POLICY, ...)` when `to` is not authorized.
+- `SupplyCapExceeded` when `totalSupply + amount > supplyCap`.
+
+## Access control
+
+`MINT_ROLE` gates state-changing mint calls.
+
+## Policy interaction
+
+Checks `MINT_RECEIVER_POLICY`, including during factory initCalls.
+
+## Example
+
+```solidity
+IB20(target).mint(to, amount);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mintWithMemo.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/mintWithMemo.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mintWithMemo.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/mintWithMemo.mdx
index 4a4bef026..ba8737fd5 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mintWithMemo.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/mintWithMemo.mdx
@@ -18,11 +18,15 @@ function mintWithMemo(address to, uint256 amount, bytes32 memo) external;
## Description
-Same as `mint`, plus emits `Memo` immediately after the standard `Transfer` event.
-A memo of `bytes32(0)` is permitted.
-Param: to Mint recipient.
-Param: amount Amount to mint.
-Param: memo Off-chain memo payload.
+Same as `mint`, plus emits `Memo` immediately after the standard `Transfer` event. A memo of `bytes32(0)` is permitted.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `to` | Mint recipient. |
+| `amount` | Amount to mint. |
+| `memo` | Off-chain memo payload. |
## Access control
@@ -35,10 +39,5 @@ Checks `MINT_RECEIVER_POLICY`, including during factory initCalls.
## Example
```solidity
-IB20(target).mintWithMemo(arg0, arg1, arg2);
+IB20(target).mintWithMemo(to, amount, memo);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/name.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/name.mdx
similarity index 62%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/name.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/name.mdx
index f875efe2f..85d0c4b78 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/name.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/name.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for name()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function name() external view returns (string memory);
## Description
Token name. Set at creation, mutable via `updateName`.
-Return: Current token name.
+
+## Returns
+
+Current token name.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).name();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/nonces.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/nonces.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/nonces.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/nonces.mdx
index 207b4bb16..22c818acd 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/nonces.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/nonces.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for nonces(address)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,8 +19,16 @@ function nonces(address owner) external view returns (uint256);
## Description
The current EIP-2612 permit nonce for `owner`. Incremented by 1 on each successful `permit`.
-Param: owner Account whose nonce is being queried.
-Return: Current nonce.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `owner` | Account whose nonce is being queried. |
+
+## Returns
+
+Current nonce.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).nonces(arg0);
+IB20(target).nonces(owner);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pause.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/pause.mdx
similarity index 50%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pause.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/pause.mdx
index 4b23c1943..584424560 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pause.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/pause.mdx
@@ -18,11 +18,18 @@ function pause(PausableFeature[] calldata features) external;
## Description
-Pauses each of `features`. Additive: features already paused remain paused; duplicates
-within the call are idempotent. Emits `Paused`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `PAUSE_ROLE`.
-Dev: Reverts with `EmptyFeatureSet` when `features.length == 0`.
-Param: features Features to pause.
+Pauses each of `features`. Additive: features already paused remain paused; duplicates within the call are idempotent. Emits `Paused`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `features` | Features to pause. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `PAUSE_ROLE`.
+- `EmptyFeatureSet` when `features.length == 0`.
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).pause(arg0);
+IB20(target).pause(features);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pausedFeatures.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/pausedFeatures.mdx
similarity index 65%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pausedFeatures.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/pausedFeatures.mdx
index 1b37270f4..52e43b907 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pausedFeatures.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/pausedFeatures.mdx
@@ -18,9 +18,11 @@ function pausedFeatures() external view returns (PausableFeature[] memory);
## Description
-The `PausableFeature`s currently paused on this token. Order is implementation-defined;
-callers should treat the result as a set.
-Return: Currently-paused features.
+The `PausableFeature`s currently paused on this token. Order is implementation-defined; callers should treat the result as a set.
+
+## Returns
+
+Currently-paused features.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).pausedFeatures();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/permit.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/permit.mdx
new file mode 100644
index 000000000..fdbe398f9
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/permit.mdx
@@ -0,0 +1,53 @@
+---
+title: "IB20.permit"
+description: "Generated B20 reference for permit(address,address,uint256,uint256,uint8,bytes32,bytes32)."
+---
+
+
+
+## Signature
+
+```solidity
+function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xd505accf` |
+| Canonical signature | `permit(address,address,uint256,uint256,uint8,bytes32,bytes32)` |
+
+## Description
+
+EIP-2612 permit. Recovers `owner` via ECDSA from `(v, r, s)`. EOA signatures only; ERC-1271 contract signatures are NOT supported. Emits `Approval`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `owner` | Token holder granting the allowance. |
+| `spender` | Account being granted the allowance. |
+| `value` | Allowance amount. |
+| `deadline` | Unix timestamp after which the signature is invalid. |
+| `v` | ECDSA recovery byte. |
+| `r` | ECDSA signature r component. |
+| `s` | ECDSA signature s component. |
+
+## Reverts
+
+- `ExpiredSignature` when `block.timestamp > deadline`.
+- `InvalidSigner` when ECDSA recovery does not yield `owner`.
+- `InvalidSpender` when `spender == address(0)`.
+
+## Access control
+
+Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
+
+## Policy interaction
+
+No direct policy interaction.
+
+## Example
+
+```solidity
+IB20(target).permit(owner, spender, value, deadline, v, r, s);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/policyId.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/policyId.mdx
similarity index 60%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/policyId.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/policyId.mdx
index a62ed507d..efeef8e08 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/policyId.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/policyId.mdx
@@ -18,11 +18,21 @@ function policyId(bytes32 policyScope) external view returns (uint64);
## Description
-The current policy ID configured for `policyScope`. Returns `0` (always-allow built-in)
-for any slot that has never been assigned.
-Dev: Reverts with `UnsupportedPolicyType` when `policyScope` is not recognized by this token.
-Param: policyScope Policy slot scope.
-Return: Configured policy ID.
+The current policy ID configured for `policyScope`. Returns `0` (always-allow built-in) for any slot that has never been assigned.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `policyScope` | Policy slot scope. |
+
+## Returns
+
+Configured policy ID.
+
+## Reverts
+
+- `UnsupportedPolicyType` when `policyScope` is not recognized by this token.
## Access control
@@ -37,8 +47,3 @@ Reads or writes a token policy-scope pointer into the PolicyRegistry.
```solidity
uint64 id = IB20(token).policyId(B20Constants.MINT_RECEIVER_POLICY);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceLastAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/renounceLastAdmin.mdx
similarity index 51%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceLastAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/renounceLastAdmin.mdx
index c3e71eb01..2b76354e0 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceLastAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/renounceLastAdmin.mdx
@@ -18,11 +18,12 @@ function renounceLastAdmin() external;
## Description
-Permanently transitions the token to a zero-admin state. Revokes `DEFAULT_ADMIN_ROLE`
-from `msg.sender`. Emits `RoleRevoked(DEFAULT_ADMIN_ROLE, msg.sender, msg.sender)` and
-`LastAdminRenounced(msg.sender)`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when `msg.sender` does not hold `DEFAULT_ADMIN_ROLE`.
-Dev: Reverts with `NotSoleAdmin` when other accounts also hold `DEFAULT_ADMIN_ROLE`.
+Permanently transitions the token to a zero-admin state. Revokes `DEFAULT_ADMIN_ROLE` from `msg.sender`. Emits `RoleRevoked(DEFAULT_ADMIN_ROLE, msg.sender, msg.sender)` and `LastAdminRenounced(msg.sender)`.
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when `msg.sender` does not hold `DEFAULT_ADMIN_ROLE`.
+- `NotSoleAdmin` when other accounts also hold `DEFAULT_ADMIN_ROLE`.
## Access control
@@ -37,8 +38,3 @@ No direct policy interaction.
```solidity
IB20(target).renounceLastAdmin();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceRole.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/renounceRole.mdx
similarity index 51%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceRole.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/renounceRole.mdx
index 55c34827b..57272d7c5 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceRole.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/renounceRole.mdx
@@ -19,10 +19,18 @@ function renounceRole(bytes32 role, address callerConfirmation) external;
## Description
Caller renounces `role` for themselves. Emits `RoleRevoked`.
-Dev: Reverts with `AccessControlBadConfirmation` when `callerConfirmation != msg.sender`.
-Dev: Reverts with `LastAdminCannotRenounce` when `role == DEFAULT_ADMIN_ROLE` and the caller is the last default admin.
-Param: role Role to renounce.
-Param: callerConfirmation MUST equal `msg.sender`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role to renounce. |
+| `callerConfirmation` | MUST equal `msg.sender`. |
+
+## Reverts
+
+- `AccessControlBadConfirmation` when `callerConfirmation != msg.sender`.
+- `LastAdminCannotRenounce` when `role == DEFAULT_ADMIN_ROLE` and the caller is the last default admin.
## Access control
@@ -35,10 +43,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).renounceRole(arg0, arg1);
+IB20(target).renounceRole(role, callerConfirmation);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/revokeRole.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/revokeRole.mdx
new file mode 100644
index 000000000..e4a1a2f19
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/revokeRole.mdx
@@ -0,0 +1,47 @@
+---
+title: "IB20.revokeRole"
+description: "Generated B20 reference for revokeRole(bytes32,address)."
+---
+
+
+
+## Signature
+
+```solidity
+function revokeRole(bytes32 role, address account) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xd547741f` |
+| Canonical signature | `revokeRole(bytes32,address)` |
+
+## Description
+
+Revokes `role` from `account`. Emits `RoleRevoked`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role to revoke. |
+| `account` | Account to revoke from. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold the admin role for `role`, or when the token has been transitioned to admin-less via `renounceLastAdmin`.
+- `LastAdminCannotRenounce` when `role == DEFAULT_ADMIN_ROLE` and `account` is the last default admin. Use `renounceLastAdmin` to clear the final admin.
+
+## Access control
+
+Uses the B20 access-control role graph. Factory initCalls bypass role gates during creation.
+
+## Policy interaction
+
+No direct policy interaction.
+
+## Example
+
+```solidity
+IB20(target).revokeRole(role, account);
+```
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/seizeWithMemo.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/seizeWithMemo.mdx
new file mode 100644
index 000000000..f05a9ad01
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/seizeWithMemo.mdx
@@ -0,0 +1,56 @@
+---
+title: "IB20.seizeWithMemo"
+description: "Generated B20 reference for seizeWithMemo(address,address,uint256,bytes32)."
+---
+
+
+
+## Signature
+
+```solidity
+function seizeWithMemo(address from, address to, uint256 amount, bytes32 memo) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xf916d81b` |
+| Canonical signature | `seizeWithMemo(address,address,uint256,bytes32)` |
+
+## Description
+
+Seizes `amount` of `from`'s balance and reassigns it to `to` in a single admin operation. Emits, in order, `Transfer(from, to, amount)`, `Memo(caller, memo)`, and `Seized(caller, from, to, amount)`. A memo of `bytes32(0)` is permitted.
+
+Admin operation: skips allowance and the transfer policies. The membership checks are that `from` is blocked under `SEIZE_HOLDER_POLICY` and `to` is authorized under `SEIZE_RECEIVER_POLICY`.
+`to` is gated by `SEIZE_RECEIVER_POLICY`, which defaults to always-allow when unset, so an unconfigured token may seize to any destination (a treasury need not be allowlisted).
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `from` | Account whose balance is being seized. |
+| `to` | Destination address for the seized balance. |
+| `amount` | Amount to seize. |
+| `memo` | Memo payload. |
+
+## Reverts
+
+- `ContractPaused(SEIZE)` when `SEIZE` is paused.
+- `AccessControlUnauthorizedAccount` when the caller does not hold `SEIZE_ROLE`.
+- `InvalidReceiver` when `to == address(0)`.
+- `AccountNotSeizable` when `from` is currently authorized under `SEIZE_HOLDER_POLICY`.
+- `PolicyForbids(SEIZE_RECEIVER_POLICY, ...)` when `to` is not authorized under `SEIZE_RECEIVER_POLICY`.
+- `InsufficientBalance` when `from`'s balance is below `amount`.
+
+## Access control
+
+`SEIZE_ROLE` gates seizure calls.
+
+## Policy interaction
+
+Checks `SEIZE_HOLDER_POLICY` for the holder and `SEIZE_RECEIVER_POLICY` for the destination.
+
+## Example
+
+```solidity
+IB20(token).seizeWithMemo(holder, destination, amount, memo);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/setRoleAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/setRoleAdmin.mdx
similarity index 52%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/setRoleAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/setRoleAdmin.mdx
index 464546eb8..6627f1e39 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/setRoleAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/setRoleAdmin.mdx
@@ -19,10 +19,17 @@ function setRoleAdmin(bytes32 role, bytes32 newAdminRole) external;
## Description
Sets the admin role for `role`. Emits `RoleAdminChanged`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold the current admin role for `role`,
-or when the token has been transitioned to admin-less via `renounceLastAdmin`.
-Param: role Role whose admin is being updated.
-Param: newAdminRole New admin role.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `role` | Role whose admin is being updated. |
+| `newAdminRole` | New admin role. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold the current admin role for `role`, or when the token has been transitioned to admin-less via `renounceLastAdmin`.
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).setRoleAdmin(arg0, arg1);
+IB20(target).setRoleAdmin(role, newAdminRole);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/supplyCap.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/supplyCap.mdx
similarity index 56%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/supplyCap.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/supplyCap.mdx
index e452724ab..35b18ffc6 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/supplyCap.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/supplyCap.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for supplyCap()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -19,10 +18,11 @@ function supplyCap() external view returns (uint256);
## Description
-The maximum total supply enforced on `mint`. Capped at `type(uint128).max`, which
-indicates no cap (the unbounded sentinel). `totalSupply` can therefore never exceed
-`type(uint128).max`.
-Return: Current supply cap.
+The maximum total supply enforced on `mint`. Capped at `type(uint128).max`, which indicates no cap (the unbounded sentinel). `totalSupply` can therefore never exceed `type(uint128).max`.
+
+## Returns
+
+Current supply cap.
## Access control
@@ -37,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).supplyCap();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/symbol.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/symbol.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/symbol.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/symbol.mdx
index f8b8f9e30..9a60811ba 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/symbol.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/symbol.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for symbol()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function symbol() external view returns (string memory);
## Description
Token symbol. Set at creation, mutable via `updateSymbol`.
-Return: Current token symbol.
+
+## Returns
+
+Current token symbol.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).symbol();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/totalSupply.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/totalSupply.mdx
similarity index 63%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/totalSupply.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/totalSupply.mdx
index 8f002eca0..f88eb9338 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/totalSupply.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/totalSupply.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for totalSupply()."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,7 +19,10 @@ function totalSupply() external view returns (uint256);
## Description
Total token supply currently in circulation.
-Return: Current total supply.
+
+## Returns
+
+Current total supply.
## Access control
@@ -35,8 +37,3 @@ No direct policy interaction.
```solidity
IB20(target).totalSupply();
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/transfer.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/transfer.mdx
new file mode 100644
index 000000000..3b34e0cf3
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/transfer.mdx
@@ -0,0 +1,55 @@
+---
+title: "IB20.transfer"
+description: "Generated B20 reference for transfer(address,uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function transfer(address to, uint256 amount) external returns (bool);
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xa9059cbb` |
+| Canonical signature | `transfer(address,uint256)` |
+
+## Description
+
+Transfers `amount` from `msg.sender` to `to`. Emits `Transfer`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `to` | Destination address. |
+| `amount` | Amount to transfer. |
+
+## Returns
+
+Always `true` on success.
+
+## Reverts
+
+- `ContractPaused(TRANSFER)` when `TRANSFER` is paused.
+- `InvalidReceiver` when `to == address(0)`.
+- `InvalidSender` when `msg.sender == address(0)`.
+- `PolicyForbids(TRANSFER_SENDER_POLICY, ...)` when `msg.sender` is not authorized.
+- `PolicyForbids(TRANSFER_RECEIVER_POLICY, ...)` when `to` is not authorized.
+- `InsufficientBalance` when `msg.sender`'s balance is below `amount`.
+
+## Access control
+
+Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
+
+## Policy interaction
+
+Checks `TRANSFER_SENDER_POLICY` and `TRANSFER_RECEIVER_POLICY`; `approve` and `permit` are not policy-gated.
+
+## Example
+
+```solidity
+IB20(target).transfer(to, amount);
+```
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/transferFrom.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferFrom.mdx
new file mode 100644
index 000000000..e5cbe8904
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferFrom.mdx
@@ -0,0 +1,58 @@
+---
+title: "IB20.transferFrom"
+description: "Generated B20 reference for transferFrom(address,address,uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function transferFrom(address from, address to, uint256 amount) external returns (bool);
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0x23b872dd` |
+| Canonical signature | `transferFrom(address,address,uint256)` |
+
+## Description
+
+Transfers `amount` from `from` to `to` using `msg.sender`'s allowance. Emits `Transfer`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `from` | Source address. |
+| `to` | Destination address. |
+| `amount` | Amount to transfer. |
+
+## Returns
+
+Always `true` on success.
+
+## Reverts
+
+- `ContractPaused(TRANSFER)` when `TRANSFER` is paused.
+- `InvalidReceiver` when `to == address(0)`.
+- `InvalidSender` when `from == address(0)`.
+- `InsufficientAllowance` when the caller's allowance from `from` is below `amount`.
+- `PolicyForbids(TRANSFER_EXECUTOR_POLICY, ...)` when `msg.sender != from` and `msg.sender` is not authorized.
+- `PolicyForbids(TRANSFER_SENDER_POLICY, ...)` when `from` is not authorized.
+- `PolicyForbids(TRANSFER_RECEIVER_POLICY, ...)` when `to` is not authorized.
+- `InsufficientBalance` when `from`'s balance is below `amount`.
+
+## Access control
+
+Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
+
+## Policy interaction
+
+Checks `TRANSFER_EXECUTOR_POLICY` when `msg.sender != from`, plus sender and receiver transfer scopes.
+
+## Example
+
+```solidity
+IB20(target).transferFrom(from, to, amount);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFromWithMemo.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferFromWithMemo.mdx
similarity index 59%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFromWithMemo.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/transferFromWithMemo.mdx
index 5c8a2f699..6e3d97019 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFromWithMemo.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferFromWithMemo.mdx
@@ -18,13 +18,20 @@ function transferFromWithMemo(address from, address to, uint256 amount, bytes32
## Description
-Same as `transferFrom`, plus emits `Memo` immediately after the standard `Transfer` event.
-A memo of `bytes32(0)` is permitted.
-Param: from Source address.
-Param: to Destination address.
-Param: amount Amount to transfer.
-Param: memo Off-chain memo payload.
-Return: Always `true` on success.
+Same as `transferFrom`, plus emits `Memo` immediately after the standard `Transfer` event. A memo of `bytes32(0)` is permitted.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `from` | Source address. |
+| `to` | Destination address. |
+| `amount` | Amount to transfer. |
+| `memo` | Off-chain memo payload. |
+
+## Returns
+
+Always `true` on success.
## Access control
@@ -37,10 +44,5 @@ Checks `TRANSFER_EXECUTOR_POLICY` when `msg.sender != from`, plus sender and rec
## Example
```solidity
-IB20(target).transferFromWithMemo(arg0, arg1, arg2, arg3);
+IB20(target).transferFromWithMemo(from, to, amount, memo);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferWithMemo.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferWithMemo.mdx
similarity index 60%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferWithMemo.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/transferWithMemo.mdx
index 890ade686..00973abc1 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferWithMemo.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/transferWithMemo.mdx
@@ -18,12 +18,19 @@ function transferWithMemo(address to, uint256 amount, bytes32 memo) external ret
## Description
-Same as `transfer`, plus emits `Memo` immediately after the standard `Transfer` event.
-A memo of `bytes32(0)` is permitted.
-Param: to Destination address.
-Param: amount Amount to transfer.
-Param: memo Off-chain memo payload.
-Return: Always `true` on success.
+Same as `transfer`, plus emits `Memo` immediately after the standard `Transfer` event. A memo of `bytes32(0)` is permitted.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `to` | Destination address. |
+| `amount` | Amount to transfer. |
+| `memo` | Off-chain memo payload. |
+
+## Returns
+
+Always `true` on success.
## Access control
@@ -36,10 +43,5 @@ Checks `TRANSFER_SENDER_POLICY` and `TRANSFER_RECEIVER_POLICY`; `approve` and `p
## Example
```solidity
-IB20(target).transferWithMemo(arg0, arg1, arg2);
+IB20(target).transferWithMemo(to, amount, memo);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/unpause.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/unpause.mdx
similarity index 51%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/unpause.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/unpause.mdx
index 16d74d680..dd03c0869 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/unpause.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/unpause.mdx
@@ -18,11 +18,18 @@ function unpause(PausableFeature[] calldata features) external;
## Description
-Unpauses each of `features`. Features not listed are unaffected; duplicates are idempotent.
-Emits `Unpaused`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `UNPAUSE_ROLE`.
-Dev: Reverts with `EmptyFeatureSet` when `features.length == 0`.
-Param: features Features to unpause.
+Unpauses each of `features`. Features not listed are unaffected; duplicates are idempotent. Emits `Unpaused`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `features` | Features to unpause. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `UNPAUSE_ROLE`.
+- `EmptyFeatureSet` when `features.length == 0`.
## Access control
@@ -35,10 +42,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).unpause(arg0);
+IB20(target).unpause(features);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/updateContractURI.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateContractURI.mdx
new file mode 100644
index 000000000..59fd85800
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateContractURI.mdx
@@ -0,0 +1,45 @@
+---
+title: "IB20.updateContractURI"
+description: "Generated B20 reference for updateContractURI(string)."
+---
+
+
+
+## Signature
+
+```solidity
+function updateContractURI(string calldata newURI) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0x7e5b1e24` |
+| Canonical signature | `updateContractURI(string)` |
+
+## Description
+
+Updates `contractURI`. Emits the parameterless `ContractURIUpdated` event per ERC-7572; integrators re-fetch `contractURI()` after observing it.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `newURI` | New contract URI. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
+
+## Access control
+
+`METADATA_ROLE` gates this call.
+
+## Policy interaction
+
+No direct policy interaction.
+
+## Example
+
+```solidity
+IB20(target).updateContractURI(newURI);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateName.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateName.mdx
similarity index 53%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateName.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/updateName.mdx
index f64a59fd6..444b57690 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateName.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateName.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for updateName(string)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,8 +19,16 @@ function updateName(string calldata newName) external;
## Description
Updates the token's `name`. Emits `NameUpdated` followed by `EIP712DomainChanged`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
-Param: newName New token name.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `newName` | New token name. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).updateName(arg0);
+IB20(target).updateName(newName);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updatePolicy.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/updatePolicy.mdx
similarity index 50%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updatePolicy.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/updatePolicy.mdx
index f81d858c1..6d31d5103 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updatePolicy.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/updatePolicy.mdx
@@ -18,13 +18,20 @@ function updatePolicy(bytes32 policyScope, uint64 newPolicyId) external;
## Description
-Updates the policy ID assigned to `policyScope`. Takes effect immediately for the next
-operation that consults this slot. Emits `PolicyUpdated`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `DEFAULT_ADMIN_ROLE`.
-Dev: Reverts with `UnsupportedPolicyType` when `policyScope` is not recognized by this token.
-Dev: Reverts with `PolicyNotFound` when `newPolicyId` is not a built-in sentinel and does not exist in the registry.
-Param: policyScope Policy slot scope.
-Param: newPolicyId Policy ID to assign to the slot.
+Updates the policy ID assigned to `policyScope`. Takes effect immediately for the next operation that consults this slot. Emits `PolicyUpdated`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `policyScope` | Policy slot scope. |
+| `newPolicyId` | Policy ID to assign to the slot. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `DEFAULT_ADMIN_ROLE`.
+- `UnsupportedPolicyType` when `policyScope` is not recognized by this token.
+- `PolicyNotFound` when `newPolicyId` is not a built-in sentinel and does not exist in the registry.
## Access control
@@ -39,8 +46,3 @@ Reads or writes a token policy-scope pointer into the PolicyRegistry.
```solidity
IB20(token).updatePolicy(B20Constants.MINT_RECEIVER_POLICY, policyId);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20/updateSupplyCap.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateSupplyCap.mdx
new file mode 100644
index 000000000..11c506b70
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateSupplyCap.mdx
@@ -0,0 +1,46 @@
+---
+title: "IB20.updateSupplyCap"
+description: "Generated B20 reference for updateSupplyCap(uint256)."
+---
+
+
+
+## Signature
+
+```solidity
+function updateSupplyCap(uint256 newSupplyCap) external;
+```
+
+| Field | Value |
+|---|---|
+| Selector | `0xe5a97f07` |
+| Canonical signature | `updateSupplyCap(uint256)` |
+
+## Description
+
+Sets a new supply cap. May be raised or lowered freely, but never below current `totalSupply` and never above `type(uint128).max`. Emits `SupplyCapUpdated`.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `newSupplyCap` | New supply cap. Must not exceed `type(uint128).max`. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `DEFAULT_ADMIN_ROLE`.
+- `InvalidSupplyCap` when `newSupplyCap < totalSupply()` or `newSupplyCap > type(uint128).max`.
+
+## Access control
+
+`DEFAULT_ADMIN_ROLE` gates this call. Factory initCalls bypass the role gate during creation.
+
+## Policy interaction
+
+No direct policy interaction.
+
+## Example
+
+```solidity
+IB20(target).updateSupplyCap(newSupplyCap);
+```
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSymbol.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateSymbol.mdx
similarity index 52%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSymbol.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20/updateSymbol.mdx
index 61ae4c378..1ca0d3e22 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSymbol.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20/updateSymbol.mdx
@@ -4,7 +4,6 @@ description: "Generated B20 reference for updateSymbol(string)."
---
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
## Signature
@@ -20,8 +19,16 @@ function updateSymbol(string calldata newSymbol) external;
## Description
Updates the token's `symbol`. Emits `SymbolUpdated`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
-Param: newSymbol New token symbol.
+
+## Parameters
+
+| Parameter | Description |
+|---|---|
+| `newSymbol` | New token symbol. |
+
+## Reverts
+
+- `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
## Access control
@@ -34,10 +41,5 @@ No direct policy interaction.
## Example
```solidity
-IB20(target).updateSymbol(arg0);
+IB20(target).updateSymbol(newSymbol);
```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20Asset.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset.mdx
new file mode 100644
index 000000000..f48276cb0
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset.mdx
@@ -0,0 +1,60 @@
+---
+title: "IB20Asset reference"
+description: "Generated B20 reference for IB20Asset functions, events, and errors."
+---
+
+
+## Functions
+
+| Function | Selector | Summary |
+|---|---|---|
+| [`OPERATOR_ROLE`](/base-chain/specs/reference/b20/interfaces/IB20Asset/OPERATOR_ROLE) | `0xf5b541a6` | Required to call `announce`, `updateUIMultiplier`, `cancelUIMultiplierUpdate`, and |
+| [`WAD_PRECISION`](/base-chain/specs/reference/b20/interfaces/IB20Asset/WAD_PRECISION) | `0x664808a8` | Fixed-point precision used to scale `multiplier`. Equal to `1e18`. |
+| [`MAX_UI_MULTIPLIER`](/base-chain/specs/reference/b20/interfaces/IB20Asset/MAX_UI_MULTIPLIER) | `0x785c0cf0` | Maximum multiplier accepted by the setter functions. |
+| [`announce`](/base-chain/specs/reference/b20/interfaces/IB20Asset/announce) | `0x595135dd` | Posts a holder-impacting announcement and atomically dispatches each entry in |
+| [`isAnnouncementIdUsed`](/base-chain/specs/reference/b20/interfaces/IB20Asset/isAnnouncementIdUsed) | `0xc0da474e` | Whether `id` has previously been consumed by `announce`. |
+| [`multiplier`](/base-chain/specs/reference/b20/interfaces/IB20Asset/multiplier) | `0x1b3ed722` | The current multiplier, scaled to `WAD_PRECISION`. Holder balances are stored |
+| [`toScaledBalance`](/base-chain/specs/reference/b20/interfaces/IB20Asset/toScaledBalance) | `0x04f04c99` | Converts a raw balance to its scaled view: `rawBalance * multiplier / WAD_PRECISION`. |
+| [`toRawBalance`](/base-chain/specs/reference/b20/interfaces/IB20Asset/toRawBalance) | `0x0ca06c44` | Converts a scaled balance back to its raw representation: |
+| [`scaledBalanceOf`](/base-chain/specs/reference/b20/interfaces/IB20Asset/scaledBalanceOf) | `0x1da24f3e` | Convenience for `toUIAmount(balanceOf(account))`. |
+| [`updateUIMultiplier`](/base-chain/specs/reference/b20/interfaces/IB20Asset/updateUIMultiplier) | `0x628e600f` | Schedules a UI-multiplier update to take effect at `effectiveAt`. |
+| [`cancelUIMultiplierUpdate`](/base-chain/specs/reference/b20/interfaces/IB20Asset/cancelUIMultiplierUpdate) | `0x2c97a0f0` | Cancels the single live pending update, restoring the no-pending state. |
+| [`updateMultiplier`](/base-chain/specs/reference/b20/interfaces/IB20Asset/updateMultiplier) | `0x5ffe6146` | Instant failsafe / emergency override — sets the current multiplier immediately and |
+| [`batchMint`](/base-chain/specs/reference/b20/interfaces/IB20Asset/batchMint) | `0x68573107` | Mints `amounts[i]` to `recipients[i]` in one call. All-or-nothing: any element |
+| [`extraMetadata`](/base-chain/specs/reference/b20/interfaces/IB20Asset/extraMetadata) | `0x4ddf9da0` | The value of the named metadata entry, or the empty string if not set. A |
+| [`updateExtraMetadata`](/base-chain/specs/reference/b20/interfaces/IB20Asset/updateExtraMetadata) | `0xb2851ef5` | Sets, updates, or removes an extra-metadata entry. An empty `value` removes the |
+| [`uiMultiplier`](/base-chain/specs/reference/b20/interfaces/IB20Asset/uiMultiplier) | `0xa60bf13d` | Returns the current ERC-8056 UI multiplier. |
+| [`newUIMultiplier`](/base-chain/specs/reference/b20/interfaces/IB20Asset/newUIMultiplier) | `0xdc767007` | Returns the pending UI multiplier. |
+| [`effectiveAt`](/base-chain/specs/reference/b20/interfaces/IB20Asset/effectiveAt) | `0x97a4064f` | Returns the effective-at timestamp for the pending multiplier. |
+| [`balanceOfUI`](/base-chain/specs/reference/b20/interfaces/IB20Asset/balanceOfUI) | `0x437a9958` | Returns an account's UI-adjusted balance. |
+| [`totalSupplyUI`](/base-chain/specs/reference/b20/interfaces/IB20Asset/totalSupplyUI) | `0x9bea6429` | Returns the UI-adjusted total supply. |
+| [`toUIAmount`](/base-chain/specs/reference/b20/interfaces/IB20Asset/toUIAmount) | `0x3248d4ff` | Converts a raw amount to its UI representation. |
+| [`fromUIAmount`](/base-chain/specs/reference/b20/interfaces/IB20Asset/fromUIAmount) | `0x65cd9b3c` | Converts a UI amount to its raw representation. |
+
+## Events
+
+| Event | Topic0 | Summary |
+|---|---|---|
+| `UIMultiplierUpdated` | `0x2205df4534432b2f60654a3fdb48737ffdaf3e9edb1a498bd985bc026b15b055` | Emitted when the UI multiplier is updated. |
+| `MultiplierUpdated` | `0x4dbe4840d7465bd162f67814cea0b519567a2e0e578bcde61e7f4ced361e5a3d` | Deprecated multiplier-change event emitted by `updateMultiplier`. |
+| `UIMultiplierUpdateCancelled` | `0x883856335ba5f60c18b9817c4505d3c7d3f6223dcf39516b30c508c46a5e1cad` | A scheduled multiplier update was cancelled. |
+| `ExtraMetadataUpdated` | `0xd7bb345be29e78d635203d40fe0567e7ef19d5cd5cc5fcd25f768b8063e82aa1` | Emitted by `updateExtraMetadata`. An empty `value` indicates removal. |
+| `Announcement` | `0xccebf8218a62875909564adef86a6f4df81503cb617221e793357d62f8e813f7` | Emitted by `announce` to open an announcement bracket. |
+| `EndAnnouncement` | `0x96d64dafe2c790596430196b982ad1da3221cb3b0f4e6e2df77f2e4f71a90037` | Emitted by `announce` to close the bracket opened by the paired `Announcement` with the same `id`. |
+
+## Errors
+
+| Error | Selector | Summary |
+|---|---|---|
+| `AnnouncementIdAlreadyUsed` | `0xd10b3c9e` | `announce` was called with an `id` that has already been consumed. |
+| `InvalidMetadataKey` | `0x86ea3abb` | `updateExtraMetadata` was called with an empty `key`. |
+| `InvalidMultiplier` | `0x6f12f3dc` | A multiplier setter (`updateUIMultiplier` or `updateMultiplier`) was called with a |
+| `EffectiveAtInPast` | `0x14119cf6` | `updateUIMultiplier` was called with an `effectiveAt` that is not in the future |
+| `EffectiveAtTooFar` | `0x1ce214fa` | `updateUIMultiplier` was called with an `effectiveAt` above `type(uint64).max`, the |
+| `UIMultiplierUpdateExists` | `0x4481a68e` | `updateUIMultiplier` was called while a live pending update already exists |
+| `UIMultiplierUpdateDoesNotExist` | `0xa7d6a5ca` | `cancelUIMultiplierUpdate` was called when there is no live pending update |
+| `LengthMismatch` | `0xab8b67c6` | A batched function was called with parallel arrays of differing lengths. |
+| `EmptyBatch` | `0xc2e5347d` | A batched function was called with empty arrays. |
+| `AnnouncementInProgress` | `0x5c5f0829` | An inner call dispatched by `announce` tried to re-invoke `announce`. |
+| `InternalCallMalformed` | `0x4e2f143e` | An inner call dispatched by `announce` was shorter than four bytes. |
+| `InternalCallFailed` | `0xb288a127` | An inner call dispatched by `announce` reverted with an ordinary revert; its reason is |
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx
similarity index 79%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx
index aaa4c5224..84228fdd2 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/MAX_UI_MULTIPLIER.mdx
@@ -23,7 +23,3 @@ Returns the maximum multiplier the setter functions accept: `type(uint128).max`.
```solidity
IB20Asset(target).MAX_UI_MULTIPLIER();
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/OPERATOR_ROLE.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/OPERATOR_ROLE.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/OPERATOR_ROLE.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/OPERATOR_ROLE.mdx
index af787dcef..eaa362ea6 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/OPERATOR_ROLE.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/OPERATOR_ROLE.mdx
@@ -36,8 +36,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).OPERATOR_ROLE();
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/WAD_PRECISION.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/WAD_PRECISION.mdx
similarity index 72%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/WAD_PRECISION.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/WAD_PRECISION.mdx
index 7dc3d2b9b..cbb40f9be 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/WAD_PRECISION.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/WAD_PRECISION.mdx
@@ -34,8 +34,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).WAD_PRECISION();
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/announce.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/announce.mdx
similarity index 88%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/announce.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/announce.mdx
index ef8d7b469..d71ddbad3 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/announce.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/announce.mdx
@@ -47,8 +47,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).announce(arg0, arg1, arg2, arg3);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/balanceOfUI.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/balanceOfUI.mdx
similarity index 75%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/balanceOfUI.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/balanceOfUI.mdx
index 5fdf0b1d3..35fa9cbba 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/balanceOfUI.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/balanceOfUI.mdx
@@ -17,7 +17,3 @@ function balanceOfUI(address account) external view returns (uint256);
## Description
Returns the UI-adjusted balance of `account`.
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/batchMint.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/batchMint.mdx
similarity index 86%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/batchMint.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/batchMint.mdx
index fd4ca2e6b..ba9a13eb8 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/batchMint.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/batchMint.mdx
@@ -44,8 +44,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).batchMint(arg0, arg1);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx
index 9d673cb30..45a95c952 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/cancelUIMultiplierUpdate.mdx
@@ -36,8 +36,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).cancelUIMultiplierUpdate();
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/effectiveAt.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/effectiveAt.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/effectiveAt.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/effectiveAt.mdx
index 756fc7bd7..a84c8db1b 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/effectiveAt.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/effectiveAt.mdx
@@ -17,7 +17,3 @@ function effectiveAt() external view returns (uint256);
## Description
Returns the timestamp at which the pending UI multiplier becomes effective.
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/extraMetadata.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/extraMetadata.mdx
similarity index 78%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/extraMetadata.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/extraMetadata.mdx
index 6c33e1711..e93438e93 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/extraMetadata.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/extraMetadata.mdx
@@ -37,8 +37,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).extraMetadata(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/fromUIAmount.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/fromUIAmount.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/fromUIAmount.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/fromUIAmount.mdx
index f117a5940..4eccf97c5 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/fromUIAmount.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/fromUIAmount.mdx
@@ -17,7 +17,3 @@ function fromUIAmount(uint256 uiAmount) external view returns (uint256);
## Description
Converts `uiAmount` to its raw token representation at the effective multiplier.
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/isAnnouncementIdUsed.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/isAnnouncementIdUsed.mdx
similarity index 75%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/isAnnouncementIdUsed.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/isAnnouncementIdUsed.mdx
index d5770c808..ba73e4118 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/isAnnouncementIdUsed.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/isAnnouncementIdUsed.mdx
@@ -35,8 +35,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).isAnnouncementIdUsed(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/multiplier.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/multiplier.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/multiplier.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/multiplier.mdx
index 04a498870..0538fe95e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/multiplier.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/multiplier.mdx
@@ -37,8 +37,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).multiplier();
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/newUIMultiplier.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/newUIMultiplier.mdx
similarity index 78%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/newUIMultiplier.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/newUIMultiplier.mdx
index 8561ae239..bf80e7dff 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/newUIMultiplier.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/newUIMultiplier.mdx
@@ -17,7 +17,3 @@ function newUIMultiplier() external view returns (uint256);
## Description
Returns the pending UI multiplier scheduled to take effect at `effectiveAt`, represented with 18 decimals (`1e18 = 1.0`).
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/scaledBalanceOf.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/scaledBalanceOf.mdx
similarity index 75%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/scaledBalanceOf.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/scaledBalanceOf.mdx
index e94e67ecb..33fbf0048 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/scaledBalanceOf.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/scaledBalanceOf.mdx
@@ -35,8 +35,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).scaledBalanceOf(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toRawBalance.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toRawBalance.mdx
similarity index 80%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toRawBalance.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toRawBalance.mdx
index 3ab243139..2453edc39 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toRawBalance.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toRawBalance.mdx
@@ -39,8 +39,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).toRawBalance(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toScaledBalance.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toScaledBalance.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toScaledBalance.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toScaledBalance.mdx
index 11afc15d4..31669f2c0 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toScaledBalance.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toScaledBalance.mdx
@@ -35,8 +35,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).toScaledBalance(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toUIAmount.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toUIAmount.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toUIAmount.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toUIAmount.mdx
index 9f17eca96..1a5e323b0 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toUIAmount.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/toUIAmount.mdx
@@ -17,7 +17,3 @@ function toUIAmount(uint256 rawAmount) external view returns (uint256);
## Description
Converts `rawAmount` to its UI representation at the effective multiplier.
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/totalSupplyUI.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/totalSupplyUI.mdx
similarity index 73%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/totalSupplyUI.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/totalSupplyUI.mdx
index 91b718307..76e57949e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/totalSupplyUI.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/totalSupplyUI.mdx
@@ -17,7 +17,3 @@ function totalSupplyUI() external view returns (uint256);
## Description
Returns the UI-adjusted total supply.
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/uiMultiplier.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/uiMultiplier.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/uiMultiplier.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/uiMultiplier.mdx
index deb9c85ce..255ff9110 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/uiMultiplier.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/uiMultiplier.mdx
@@ -17,7 +17,3 @@ function uiMultiplier() external view returns (uint256);
## Description
Returns the current ERC-8056 UI multiplier, represented with 18 decimals (`1e18 = 1.0`).
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateExtraMetadata.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateExtraMetadata.mdx
similarity index 80%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateExtraMetadata.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateExtraMetadata.mdx
index f24993187..cedf8bfe2 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateExtraMetadata.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateExtraMetadata.mdx
@@ -38,8 +38,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).updateExtraMetadata(arg0, arg1);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateMultiplier.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateMultiplier.mdx
similarity index 82%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateMultiplier.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateMultiplier.mdx
index 70eb2f2f8..f9eecb2ed 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateMultiplier.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateMultiplier.mdx
@@ -38,8 +38,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).updateMultiplier(arg0);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateUIMultiplier.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateUIMultiplier.mdx
similarity index 85%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateUIMultiplier.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateUIMultiplier.mdx
index 5c87f7a68..445f443ec 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateUIMultiplier.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Asset/updateUIMultiplier.mdx
@@ -41,8 +41,3 @@ No direct policy interaction.
```solidity
IB20Asset(target).updateUIMultiplier(arg0, arg1);
```
-
-## Related
-
-- [IB20Asset reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory.mdx
similarity index 52%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Factory.mdx
index 108a8c83b..2b5a1d58d 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory.mdx
@@ -8,10 +8,10 @@ description: "Generated B20 reference for IB20Factory functions, events, and err
| Function | Selector | Summary |
|---|---|---|
-| [`createB20`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/createB20) | `0x62975e6a` | Creates a B-20 token of the given `variant` at the deterministic address derived |
-| [`getB20Address`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/getB20Address) | `0x8c30260f` | Returns the deterministic address `createB20` would assign for `(variant, sender, salt)`. Never reverts. |
-| [`isB20`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20) | `0xfa19b927` | Returns whether `token` was created by this factory, recovered from the address prefix. Never reverts. |
-| [`isB20Initialized`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20Initialized) | `0x6a45ba98` | Returns whether `createB20` has run to completion at `token`. Flips exactly once, |
+| [`createB20`](/base-chain/specs/reference/b20/interfaces/IB20Factory/createB20) | `0x62975e6a` | Creates a B-20 token of the given `variant` at the deterministic address derived |
+| [`getB20Address`](/base-chain/specs/reference/b20/interfaces/IB20Factory/getB20Address) | `0x8c30260f` | Returns the deterministic address `createB20` would assign for `(variant, sender, salt)`. Never reverts. |
+| [`isB20`](/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20) | `0xfa19b927` | Returns whether `token` was created by this factory, recovered from the address prefix. Never reverts. |
+| [`isB20Initialized`](/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20Initialized) | `0x6a45ba98` | Returns whether `createB20` has run to completion at `token`. Flips exactly once, |
## Events
@@ -31,8 +31,3 @@ description: "Generated B20 reference for IB20Factory functions, events, and err
| `InvalidCurrency` | `0x997c1de8` | The stablecoin `currency` was non-empty but contained a non-`A`-`Z` byte. |
| `InvalidDecimals` | `0xca950391` | The asset `decimals` was outside the allowed inclusive range |
| `InitCallFailed` | `0x4eae0860` | One of the `initCalls` reverted. The factory bubbles the underlying revert reason |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/createB20.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/createB20.mdx
similarity index 93%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/createB20.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Factory/createB20.mdx
index ac12620fe..bd7d6199e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/createB20.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/createB20.mdx
@@ -62,8 +62,3 @@ No direct policy interaction.
```solidity
address token = StdPrecompiles.B20_FACTORY.createB20(variant, salt, params, initCalls);
```
-
-## Related
-
-- [IB20Factory reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/getB20Address.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/getB20Address.mdx
similarity index 79%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/getB20Address.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Factory/getB20Address.mdx
index 1ea4e0747..8aa7057d4 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/getB20Address.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/getB20Address.mdx
@@ -37,8 +37,3 @@ No direct policy interaction.
```solidity
IB20Factory(target).getB20Address(arg0, arg1, arg2);
```
-
-## Related
-
-- [IB20Factory reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20.mdx
similarity index 75%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20.mdx
index 98ccb0e0b..cbeb492d5 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20.mdx
@@ -35,8 +35,3 @@ No direct policy interaction.
```solidity
IB20Factory(target).isB20(arg0);
```
-
-## Related
-
-- [IB20Factory reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20Initialized.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20Initialized.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20Initialized.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20Initialized.mdx
index 3539918ee..3f93f7020 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory/isB20Initialized.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Factory/isB20Initialized.mdx
@@ -36,8 +36,3 @@ No direct policy interaction.
```solidity
IB20Factory(target).isB20Initialized(arg0);
```
-
-## Related
-
-- [IB20Factory reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin.mdx
new file mode 100644
index 000000000..11da8417c
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin.mdx
@@ -0,0 +1,23 @@
+---
+title: "IB20Stablecoin reference"
+description: "Generated B20 reference for IB20Stablecoin functions, events, and errors."
+---
+
+
+## Functions
+
+| Function | Selector | Summary |
+|---|---|---|
+| [`currency`](/base-chain/specs/reference/b20/interfaces/IB20Stablecoin/currency) | `0xe5a6b10f` | The currency code this stablecoin tracks (e.g. `"USD"`, `"EUR"`, `"JPY"`). |
+
+## Events
+
+| Event | Topic0 | Summary |
+|---|---|---|
+| — | — | — |
+
+## Errors
+
+| Error | Selector | Summary |
+|---|---|---|
+| — | — | — |
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin/currency.mdx b/docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin/currency.mdx
similarity index 71%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin/currency.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin/currency.mdx
index 73d48da3d..1834ece3b 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin/currency.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IB20Stablecoin/currency.mdx
@@ -34,8 +34,3 @@ No direct policy interaction.
```solidity
IB20Stablecoin(target).currency();
```
-
-## Related
-
-- [IB20Stablecoin reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry.mdx
new file mode 100644
index 000000000..c8cddcc9b
--- /dev/null
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry.mdx
@@ -0,0 +1,51 @@
+---
+title: "IPolicyRegistry reference"
+description: "Generated B20 reference for IPolicyRegistry functions, events, and errors."
+---
+
+
+## Functions
+
+| Function | Selector | Summary |
+|---|---|---|
+| [`createPolicy`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicy) | `0xca5d55f6` | Creates a new simple policy with no initial members. Permissionless. |
+| [`createPolicyWithAccounts`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicyWithAccounts) | `0xa2d3044f` | Creates a new simple policy seeded with `accounts` as initial members. Permissionless. |
+| [`createCompositePolicy`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createCompositePolicy) | `0x6fdd1491` | Creates a new composite policy that combines existing simple policies under a logic |
+| [`stageUpdateAdmin`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/stageUpdateAdmin) | `0x1d7ae695` | Stages a proposed new admin for `policyId`. The active admin does not change |
+| [`finalizeUpdateAdmin`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/finalizeUpdateAdmin) | `0x33031a9c` | Completes a two-step admin transfer. Promotes the caller to active admin and clears the pending slot. |
+| [`renounceAdmin`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/renounceAdmin) | `0xefdb7fa3` | Permanently relinquishes administration of `policyId`. The member set is frozen |
+| [`updateAllowlist`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateAllowlist) | `0x3388fb5b` | Sets `accounts` membership in an ALLOWLIST policy to `allowed` in one batch. |
+| [`updateBlocklist`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateBlocklist) | `0x5c4e51b8` | Sets `accounts` membership in a BLOCKLIST policy to `blocked` in one batch. |
+| [`updateComposite`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateComposite) | `0xbfe142c0` | Replaces a composite policy's child-policy set in full with `childPolicyIds`. |
+| [`isAuthorized`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/isAuthorized) | `0x55a1179e` | Returns whether `account` is authorized under `policyId`. Never reverts; unknown |
+| [`MIN_COMPOSITE_CHILD_POLICIES`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES) | `0xb3ae29f7` | Minimum number of child policies a composite must reference, inclusive. Never reverts. |
+| [`MAX_COMPOSITE_CHILD_POLICIES`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES) | `0x54309870` | Maximum number of child policies a composite may reference, inclusive. Never reverts. |
+| [`policyExists`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyExists) | `0x330f5637` | Returns whether `policyId` is a built-in sentinel or a previously-assigned custom ID. Never reverts. |
+| [`policyAdmin`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyAdmin) | `0x09dd0a47` | Returns the current admin of `policyId`, or `address(0)` for built-in sentinels, |
+| [`pendingPolicyAdmin`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/pendingPolicyAdmin) | `0x017548b7` | Returns the currently-staged pending admin for `policyId`, or `address(0)` when |
+| [`compositePolicyChildIds`](/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/compositePolicyChildIds) | `0x7c40df74` | Returns the child-policy set of the composite `policyId`. |
+
+## Events
+
+| Event | Topic0 | Summary |
+|---|---|---|
+| `PolicyCreated` | `0xdc870ce85be577234b8548f42b93f84bbff6d0c1f38ee725c809c49932a13885` | A new policy was created. |
+| `PolicyAdminStaged` | `0xdbf3b34a4c956c56ca05cd4b8f9293a4347ad61994445a4b89817d4a19561136` | A new admin was staged. `pendingAdmin == address(0)` clears a prior nomination. |
+| `PolicyAdminUpdated` | `0x98925cfb1bc09c5b43dd0dd56d3d95aa04fb3300927580cc588c3f5dd58c15e1` | The active admin changed. `newAdmin == address(0)` indicates renunciation; |
+| `AllowlistUpdated` | `0x18c46532f90187ba11e436e21da087b684801d7f0787f2043f26f079c91e9ef0` | One or more accounts had their ALLOWLIST membership set to `allowed` in a single batch. |
+| `BlocklistUpdated` | `0x2ff63c102b1b9fd7f5d39f83039c5d6aaf50a414a4f2def2704e41be2628f1e3` | One or more accounts had their BLOCKLIST membership set to `blocked` in a single batch. |
+| `CompositePolicyUpdated` | `0x4ff6adaab31b0df87aa7b8b7320c52b8b3b5eede3bf28a6baaaa8b8b7e1d6363` | A composite policy's child set was set or replaced in full with `childPolicyIds`. Emitted |
+
+## Errors
+
+| Error | Selector | Summary |
+|---|---|---|
+| `NonPayable` | `0x6fb1b0e9` | ETH was attached to a call targeting a nonpayable policy registry selector. |
+| `Unauthorized` | `0x82b42900` | Caller is not the admin required by the attempted operation. |
+| `PolicyNotFound` | `0x720caa4f` | The referenced policy ID does not exist. |
+| `IncompatiblePolicyType` | `0xf1011ef5` | The operation is incompatible with the policy's type. |
+| `ZeroAddress` | `0xd92e233d` | A required address argument was the zero address. |
+| `BatchSizeTooLarge` | `0x083e2f67` | A membership batch exceeded the registry limit. |
+| `NoPendingAdmin` | `0xb4539afa` | `finalizeUpdateAdmin` was called with no pending admin staged. |
+| `ChildPoliciesOutsideOfRange` | `0x697ec868` | A composite policy was created or updated with a child-policy count outside the |
+| `InvalidChildPolicy` | `0x46508ef6` | Composite policies are not simple policies. Child policies must be existing |
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx
index f8ccad09c..30284ab3e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES.mdx
@@ -34,8 +34,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).MAX_COMPOSITE_CHILD_POLICIES();
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx
index 8a0781269..32fe2f064 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES.mdx
@@ -34,8 +34,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).MIN_COMPOSITE_CHILD_POLICIES();
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx
similarity index 82%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx
index d0d1fe4e6..33a83fc94 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/compositePolicyChildIds.mdx
@@ -41,8 +41,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).compositePolicyChildIds(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createCompositePolicy.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createCompositePolicy.mdx
similarity index 88%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createCompositePolicy.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createCompositePolicy.mdx
index 73e56bd69..9a6ed58a9 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createCompositePolicy.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createCompositePolicy.mdx
@@ -48,8 +48,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).createCompositePolicy(arg0, arg1, arg2);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicy.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicy.mdx
similarity index 82%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicy.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicy.mdx
index 6a1bfc21c..6d6caf119 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicy.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicy.mdx
@@ -38,8 +38,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
uint64 policyId = StdPrecompiles.POLICY_REGISTRY.createPolicy(admin, IPolicyRegistry.PolicyType.ALLOWLIST);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx
similarity index 86%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx
index 5588c01ce..c7111ae28 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/createPolicyWithAccounts.mdx
@@ -41,8 +41,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
uint64 policyId = StdPrecompiles.POLICY_REGISTRY.createPolicyWithAccounts(admin, IPolicyRegistry.PolicyType.ALLOWLIST, accounts);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx
similarity index 81%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx
index 0552b67ab..2ba476199 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/finalizeUpdateAdmin.mdx
@@ -37,8 +37,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).finalizeUpdateAdmin(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/isAuthorized.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/isAuthorized.mdx
similarity index 81%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/isAuthorized.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/isAuthorized.mdx
index e7839b44a..347aee02d 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/isAuthorized.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/isAuthorized.mdx
@@ -39,8 +39,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
bool ok = StdPrecompiles.POLICY_REGISTRY.isAuthorized(policyId, account);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx
similarity index 78%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx
index 7a95e8aaa..a34e2e1a3 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/pendingPolicyAdmin.mdx
@@ -37,8 +37,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).pendingPolicyAdmin(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyAdmin.mdx
similarity index 77%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyAdmin.mdx
index 19098d974..d4476e819 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyAdmin.mdx
@@ -36,8 +36,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).policyAdmin(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyExists.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyExists.mdx
similarity index 76%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyExists.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyExists.mdx
index c01c2b877..e7b698e50 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyExists.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/policyExists.mdx
@@ -35,8 +35,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).policyExists(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/renounceAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/renounceAdmin.mdx
similarity index 79%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/renounceAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/renounceAdmin.mdx
index f4a1fcc3c..673ea0dbb 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/renounceAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/renounceAdmin.mdx
@@ -37,8 +37,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).renounceAdmin(arg0);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx
similarity index 80%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx
index 8e99c0542..8bc4c7ed4 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/stageUpdateAdmin.mdx
@@ -38,8 +38,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).stageUpdateAdmin(arg0, arg1);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateAllowlist.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateAllowlist.mdx
similarity index 83%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateAllowlist.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateAllowlist.mdx
index 3b79a9bf3..b2b2df85e 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateAllowlist.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateAllowlist.mdx
@@ -40,8 +40,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).updateAllowlist(arg0, arg1, arg2);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateBlocklist.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateBlocklist.mdx
similarity index 83%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateBlocklist.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateBlocklist.mdx
index 0aded3929..578b0b3c1 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateBlocklist.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateBlocklist.mdx
@@ -40,8 +40,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).updateBlocklist(arg0, arg1, arg2);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateComposite.mdx b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateComposite.mdx
similarity index 86%
rename from docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateComposite.mdx
rename to docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateComposite.mdx
index 34b8d1364..42b10a73f 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateComposite.mdx
+++ b/docs/base-chain/specs/reference/b20/interfaces/IPolicyRegistry/updateComposite.mdx
@@ -45,8 +45,3 @@ This is part of the singleton PolicyRegistry surface used by B20 policy scopes.
```solidity
IPolicyRegistry(target).updateComposite(arg0, arg1);
```
-
-## Related
-
-- [IPolicyRegistry reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/reference/native-account-abstraction.mdx b/docs/base-chain/specs/reference/native-account-abstraction.mdx
new file mode 100644
index 000000000..e6a80a6c6
--- /dev/null
+++ b/docs/base-chain/specs/reference/native-account-abstraction.mdx
@@ -0,0 +1,161 @@
+---
+title: "Native Account Abstraction Reference"
+sidebarTitle: "Native Account Abstraction"
+description: "EIP-8130 reference for Base: vibenet chain details, client setup, transaction structure, account configuration, authenticators, and payers."
+---
+
+This is the technical reference for EIP-8130 on Base. For what native account abstraction is and why the protocol implements it, start with [Native Account Abstraction](/base-chain/network-information/native-account-abstraction).
+
+[EIP-8130](https://eip.tools/eip/8130) builds account abstraction into the protocol. An account registers who can act for it, and how its signatures are checked, in an onchain system contract. The chain validates each transaction against that configuration, so smart accounts work without bundlers, relays, or a separate mempool.
+
+
+EIP-8130 is experimental and currently runs only on the [vibenet devnet](https://chain.base.org/vibenet). You can learn more about connecting to vibenet [here](/base-chain/quickstart/connecting-to-base#vibenet).
+
+
+## Network details
+
+| Field | Value |
+|---|---|
+| Network | vibenet devnet |
+| Chain ID | `84538453` |
+| RPC | `https://rpc.vibes.base.org` |
+| Faucet | `POST https://api.vibes.base.org/api/vibenet/faucet/drip` |
+
+## Client setup
+
+Client support lives in an experimental viem fork:
+
+```bash
+bun add "viem@github:chunter-cb/viem#feat/eip-8130"
+```
+
+## Create an account and send a batch
+
+The example below performs the full flow:
+
+1. Creates an account.
+2. Funds it from the faucet.
+3. Sends a batch of calls that succeed or revert together.
+4. Verifies that every phase succeeded.
+
+```ts create-and-send.ts highlight={19,30-40,43-44}
+import { createPublicClient, http, parseEther } from "viem";
+import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
+import {
+ newSmartAccount8130, sendCalls8130, estimateGas8130,
+ encodeWalletCalls, waitForTransactionReceipt8130, allPhasesSucceeded,
+} from "viem/experimental/eip8130";
+
+const RPC_URL = "https://rpc.vibes.base.org";
+const chain = {
+ id: 84538453,
+ name: "vibenet",
+ nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
+ rpcUrls: { default: { http: [RPC_URL] } },
+};
+const client = createPublicClient({ chain, transport: http(RPC_URL) });
+
+// The account address is deterministic and exists before any deployment
+const signer = privateKeyToAccount(generatePrivateKey());
+const account = newSmartAccount8130({ signer });
+
+// Fund it from the vibenet faucet
+await fetch("https://api.vibes.base.org/api/vibenet/faucet/drip", {
+ method: "POST",
+ headers: { "content-type": "application/json" },
+ body: JSON.stringify({ address: account.address }),
+});
+
+// Estimate, then send a batch. Account creation rides along in the same transaction
+const calls = [{ to: "0x…recipient", value: parseEther("0.001") }];
+const gas = await estimateGas8130(client, {
+ sender: account.address,
+ accountChanges: [account.createChange],
+ calls: encodeWalletCalls({ account: account.address, calls: [calls] }),
+});
+const hash = await sendCalls8130(client, {
+ account,
+ accountChanges: [account.createChange],
+ calls,
+ gas: (gas * 120n) / 100n,
+});
+
+// An 8130 receipt reports per-phase results, so check all of them
+const receipt = await waitForTransactionReceipt8130(client, { hash });
+if (!allPhasesSucceeded(receipt)) throw new Error("a phase reverted");
+```
+
+One transaction creates the account, executes the batch, and pays for gas.
+
+## Transaction structure
+
+An 8130 transaction names a sender account, proves the sender is authorized to act for it, and carries a batch of calls.
+
+| Field | Purpose |
+|---|---|
+| `sender` | The account the transaction acts for. |
+| `accountChanges` | Configuration changes applied before execution, including account creation. |
+| `calls` | The batch to execute atomically. |
+| `payer` | Optional account that covers gas on the sender's behalf. |
+
+Receipts report results per phase rather than as a single status, so a transaction can succeed at the transaction level while an individual phase reverts. Check every phase; `allPhasesSucceeded` does this in the reference client.
+
+## Accounts
+
+Account addresses are derived with `CREATE2`, so a client computes them locally and the address exists before any deployment. That is why `account.address` is available immediately and `account.createChange` can ride along in the first transaction.
+
+Each account is a small proxy contract that forwards calls to a shared implementation.
+
+| Implementation | Notes |
+|---|---|
+| `DefaultAccount` | The minimal building block. Also backs EOAs upgraded via EIP-7702. |
+| High-rate variant | Locks outbound ETH during execution in exchange for higher mempool rate limits. |
+
+## Account configuration
+
+Authorization lives in the `AccountConfiguration` system contract. It records the **actors** an account authorizes: the onchain identities that a signer's authorization resolves to. An account may authorize many actors and revoke each independently.
+
+Each actor entry carries:
+
+| Element | Purpose |
+|---|---|
+| Scope flags | `SCOPE_NONCE` and `SCOPE_POLICY` bound what the actor may do. |
+| Policy binding | Optional onchain policy: per-token spend limits, and allowed contracts and functions. |
+| Authenticator | The contract that validates this actor's signatures. |
+
+Binding an actor to a policy is the native session key model: an app receives an actor with exactly the permissions it needs, revocable at any time.
+
+## Authenticators
+
+Signature validation is pluggable. Authenticator contracts implement:
+
+```solidity
+interface IAuthenticator {
+ function authenticate(bytes32 hash, bytes calldata data) external view returns (bool);
+}
+```
+
+The reference set covers:
+
+| Authenticator | Keys |
+|---|---|
+| secp256k1 | Standard EVM keys |
+| P-256 | NIST P-256 |
+| WebAuthn | Passkeys and platform authenticators |
+
+Passkeys therefore validate at the protocol level, not through wrapper contracts.
+
+## Payers
+
+A transaction can name a **payer** that covers gas on the sender's behalf, with no paymaster contract involved. Draft [ERC-8168](https://eip.tools/eip/8168) standardizes the payer service flow: how apps discover a payer and request sponsorship.
+
+## Go deeper
+
+
+
+ `AccountConfiguration`, account implementations, and authenticators, with Foundry tests.
+
+
+ The EIP-8130 draft, and companion draft [ERC-8168](https://eip.tools/eip/8168) for payer services.
+
+
diff --git a/docs/base-chain/specs/upgrades/beryl/b20-playground.mdx b/docs/base-chain/specs/upgrades/beryl/b20-playground.mdx
index 1b2d81ec5..fa681b046 100644
--- a/docs/base-chain/specs/upgrades/beryl/b20-playground.mdx
+++ b/docs/base-chain/specs/upgrades/beryl/b20-playground.mdx
@@ -16,7 +16,7 @@ B20 is a superset of ERC-20: every ERC-20 call works unchanged, so there's no co
## A compliance order arrives
-A court order targets one account. Freeze it so it can't send, then seize the balance with one call. Seizure only works on an account that is already frozen. Every other holder is untouched and the token keeps trading. See [transfer policies](/base-chain/specs/upgrades/beryl/b20/specification#policy-integration) and [seizure](/base-chain/specs/upgrades/beryl/b20/specification#seize) in the specification.
+A court order targets one account. Freeze it so it can't send, then seize the balance with one call. Seizure only works on an account that is already frozen. Every other holder is untouched and the token keeps trading. See [transfer policies](/base-chain/specs/reference/b20#policy-integration) and [seizure](/base-chain/specs/reference/b20#seize) in the specification.
@@ -32,7 +32,7 @@ Your customer pays to one address. The transfer carries the invoice reference, s
## A new user approves without gas
-A new user shouldn't have to buy ETH first. With `permit`, they sign an approval offchain and your platform relays it. They start transacting with zero gas, and nonces stop signature replay. See [permit](/base-chain/specs/upgrades/beryl/b20/specification#erc-2612-permit--eip-712) in the spec.
+A new user shouldn't have to buy ETH first. With `permit`, they sign an approval offchain and your platform relays it. They start transacting with zero gas, and nonces stop signature replay. See [permit](/base-chain/specs/reference/b20#erc-2612-permit--eip-712) in the spec.
@@ -40,7 +40,7 @@ A new user shouldn't have to buy ETH first. With `permit`, they sign an approval
## The stock splits
-A 2-for-1 split is one call. Every balance doubles without a migration or a new contract. Dividends run inside a public announcement window, so the disclosure lives onchain next to the action. The token also stores identifiers like a CUSIP. See the [Asset variant](/base-chain/specs/upgrades/beryl/b20/specification#asset) in the spec.
+A 2-for-1 split is one call. Every balance doubles without a migration or a new contract. Dividends run inside a public announcement window, so the disclosure lives onchain next to the action. The token also stores identifiers like a CUSIP. See the [Asset variant](/base-chain/specs/reference/b20#asset) in the spec.
@@ -55,7 +55,7 @@ A 2-for-1 split is one call. Every balance doubles without a migration or a new
Integration code for memo-tagged payments and B20-specific reverts.
-
+
Every method, event, role, and policy in the standard.
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/demos.mdx b/docs/base-chain/specs/upgrades/beryl/b20/demos.mdx
deleted file mode 100644
index 1eb59898a..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/demos.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: "B20 Demos"
-url: "https://chain.base.org/demos/b20"
----
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry.mdx
deleted file mode 100644
index 3b9d07084..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: "IActivationRegistry reference"
-description: "Generated B20 reference for IActivationRegistry functions, events, and errors."
----
-
-
-## Functions
-
-| Function | Selector | Summary |
-|---|---|---|
-| [`isActivated`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/isActivated) | `0xba87af80` | Whether `feature` is currently activated. Never reverts. |
-| [`checkActivated`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/checkActivated) | `0xde5bfd9b` | Reverts with `FeatureNotActivated(feature)` if `feature` is not currently activated. |
-| [`admin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/admin) | `0xf851a440` | The address authorized to call `activate` and `deactivate`. |
-| [`activate`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/activate) | `0x59db6e85` | Activates `feature`. Emits `FeatureActivated`. |
-| [`deactivate`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry/deactivate) | `0x22eee84c` | Deactivates `feature`. Emits `FeatureDeactivated`. |
-
-## Events
-
-| Event | Topic0 | Summary |
-|---|---|---|
-| `FeatureActivated` | `0x8c7a0ecdbb8d96e867e43ec1aef80027976ee493c18bef399fa799ed19752451` | Emitted when `feature` is activated. |
-| `FeatureDeactivated` | `0x15bf65a782c3258c63268ba9d7aed710cf9f9315d3687d9a4632ccdad7926c84` | Emitted when `feature` is deactivated. |
-
-## Errors
-
-| Error | Selector | Summary |
-|---|---|---|
-| `Unauthorized` | `0x8e4a23d6` | Caller is not the activation admin. |
-| `AlreadyActivated` | `0x866b0041` | Feature is already activated. |
-| `FeatureNotActivated` | `0xb9b2a425` | Feature is not activated. |
-| `DelegateCallNotAllowed` | `0x0d89438e` | The precompile was invoked via `DELEGATECALL` or `CALLCODE`. |
-| `StaticCallNotAllowed` | `0xbeaba5b7` | A state-mutating entry point was invoked from a `STATICCALL` frame. |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20.mdx
deleted file mode 100644
index a8ab7ec79..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20.mdx
+++ /dev/null
@@ -1,120 +0,0 @@
----
-title: "IB20 reference"
-description: "Generated B20 reference for IB20 functions, events, and errors."
----
-
-
-## Functions
-
-| Function | Selector | Summary |
-|---|---|---|
-| [`DEFAULT_ADMIN_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DEFAULT_ADMIN_ROLE) | `0xa217fddf` | The default top-level admin role (`bytes32(0)`). Required to call `grantRole`, `revokeRole`, |
-| [`MINT_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_ROLE) | `0xe9a9c850` | Required to call `mint` and `mintWithMemo`. |
-| [`BURN_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_ROLE) | `0xb930908f` | Required to call `burn` and `burnWithMemo`. |
-| [`BURN_BLOCKED_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/BURN_BLOCKED_ROLE) | `0x32ad9be8` | Required to call the deprecated `burnBlocked` (retained for |
-| [`SEIZE_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_ROLE) | `0x3c7e9ba5` | Required to call `seizeWithMemo`. |
-| [`PAUSE_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/PAUSE_ROLE) | `0x389ed267` | Required to call `pause`. |
-| [`UNPAUSE_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/UNPAUSE_ROLE) | `0x309756fb` | Required to call `unpause`. |
-| [`METADATA_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/METADATA_ROLE) | `0x38841782` | Required to call `updateName`, `updateSymbol`, and `updateContractURI`. |
-| [`TRANSFER_SENDER_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_SENDER_POLICY) | `0xd116fc21` | Policy slot consulted against `from` on every transfer (including `transferFrom`). |
-| [`TRANSFER_RECEIVER_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_RECEIVER_POLICY) | `0x210f521b` | Policy slot consulted against `to` on every transfer. |
-| [`TRANSFER_EXECUTOR_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/TRANSFER_EXECUTOR_POLICY) | `0x724e9c53` | Policy slot consulted against `msg.sender` on `transferFrom` when distinct from `from`. |
-| [`MINT_RECEIVER_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/MINT_RECEIVER_POLICY) | `0x6e5b013d` | Policy slot consulted against `to` on every mint. |
-| [`SEIZE_HOLDER_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_HOLDER_POLICY) | `0xb279d311` | Policy slot consulted against `from` by `seizeWithMemo`. |
-| [`SEIZE_RECEIVER_POLICY`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/SEIZE_RECEIVER_POLICY) | `0xb31da27f` | Policy slot consulted against `to` by `seizeWithMemo`. |
-| [`name`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/name) | `0x06fdde03` | Token name. Set at creation, mutable via `updateName`. |
-| [`symbol`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/symbol) | `0x95d89b41` | Token symbol. Set at creation, mutable via `updateSymbol`. |
-| [`decimals`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/decimals) | `0x313ce567` | Number of decimal places. Immutable per token variant. |
-| [`totalSupply`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/totalSupply) | `0x18160ddd` | Total token supply currently in circulation. |
-| [`balanceOf`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/balanceOf) | `0x70a08231` | Balance of `account`. |
-| [`allowance`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/allowance) | `0xdd62ed3e` | Allowance granted by `owner` to `spender`. |
-| [`transfer`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transfer) | `0xa9059cbb` | Transfers `amount` from `msg.sender` to `to`. Emits `Transfer`. |
-| [`transferFrom`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFrom) | `0x23b872dd` | Transfers `amount` from `from` to `to` using `msg.sender`'s allowance. Emits `Transfer`. |
-| [`approve`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/approve) | `0x095ea7b3` | Sets `spender`'s allowance to `amount`. Not gated by any policy or by pause. Emits `Approval`. |
-| [`updateName`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateName) | `0x84da92a7` | Updates the token's `name`. Emits `NameUpdated` followed by `EIP712DomainChanged`. |
-| [`updateSymbol`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSymbol) | `0x537f5312` | Updates the token's `symbol`. Emits `SymbolUpdated`. |
-| [`transferWithMemo`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferWithMemo) | `0x95777d59` | Same as `transfer`, plus emits `Memo` immediately after the standard `Transfer` event. |
-| [`transferFromWithMemo`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFromWithMemo) | `0x929c2539` | Same as `transferFrom`, plus emits `Memo` immediately after the standard `Transfer` event. |
-| [`mint`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mint) | `0x40c10f19` | Mints `amount` to `to`. Emits `Transfer(address(0), to, amount)`. |
-| [`mintWithMemo`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mintWithMemo) | `0xe44f0b12` | Same as `mint`, plus emits `Memo` immediately after the standard `Transfer` event. |
-| [`burn`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burn) | `0x42966c68` | Burns `amount` from the caller's own balance. Not subject to any policy. |
-| [`burnWithMemo`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnWithMemo) | `0x38f23b0b` | Same as `burn`, plus emits `Memo` immediately after the standard `Transfer` event. |
-| [`burnBlocked`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnBlocked) | `0xec0cf3dc` | DEPRECATED. Burns `amount` from a `from` account that is blocked under `TRANSFER_SENDER_POLICY`. |
-| [`seizeWithMemo`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/seizeWithMemo) | `0xf916d81b` | Seizes `amount` of `from`'s balance and reassigns it to `to` in a single admin operation. |
-| [`hasRole`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/hasRole) | `0x91d14854` | Whether `account` is a member of `role`. User-defined roles are supported and have no |
-| [`getRoleAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/getRoleAdmin) | `0x248a9ca3` | The role required to grant or revoke `role`. Defaults to `DEFAULT_ADMIN_ROLE` if not |
-| [`grantRole`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/grantRole) | `0x2f2ff15d` | Grants `role` to `account`. Emits `RoleGranted`. |
-| [`revokeRole`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/revokeRole) | `0xd547741f` | Revokes `role` from `account`. Emits `RoleRevoked`. |
-| [`renounceRole`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceRole) | `0x36568abe` | Caller renounces `role` for themselves. Emits `RoleRevoked`. |
-| [`renounceLastAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/renounceLastAdmin) | `0x6f79e3d7` | Permanently transitions the token to a zero-admin state. Revokes `DEFAULT_ADMIN_ROLE` |
-| [`setRoleAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/setRoleAdmin) | `0x1e4e0091` | Sets the admin role for `role`. Emits `RoleAdminChanged`. |
-| [`pausedFeatures`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pausedFeatures) | `0xde9997e3` | The `PausableFeature`s currently paused on this token. Order is implementation-defined; |
-| [`isPaused`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/isPaused) | `0x165c44bc` | Whether `feature` is currently paused. O(1). |
-| [`pause`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/pause) | `0x9f98bd2d` | Pauses each of `features`. Additive: features already paused remain paused; duplicates |
-| [`unpause`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/unpause) | `0xb61b2ebc` | Unpauses each of `features`. Features not listed are unaffected; duplicates are idempotent. |
-| [`policyId`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/policyId) | `0xdb3de624` | The current policy ID configured for `policyScope`. Returns `0` (always-allow built-in) |
-| [`updatePolicy`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updatePolicy) | `0xadf9c4ea` | Updates the policy ID assigned to `policyScope`. Takes effect immediately for the next |
-| [`supplyCap`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/supplyCap) | `0x8f770ad0` | The maximum total supply enforced on `mint`. Capped at `type(uint128).max`, which |
-| [`updateSupplyCap`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSupplyCap) | `0xe5a97f07` | Sets a new supply cap. May be raised or lowered freely, but never below current |
-| [`DOMAIN_SEPARATOR`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/DOMAIN_SEPARATOR) | `0x3644e515` | The current EIP-712 domain separator for this token. Recomputed on each call so it |
-| [`nonces`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/nonces) | `0x7ecebe00` | The current EIP-2612 permit nonce for `owner`. Incremented by 1 on each successful `permit`. |
-| [`permit`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/permit) | `0xd505accf` | EIP-2612 permit. Recovers `owner` via ECDSA from `(v, r, s)`. EOA signatures only; |
-| [`eip712Domain`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/eip712Domain) | `0x84b0196e` | ERC-5267 EIP-712 domain introspection. |
-| [`contractURI`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/contractURI) | `0xe8a3d485` | Off-chain URI pointing at contract-level metadata for this token, per ERC-7572. |
-| [`updateContractURI`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateContractURI) | `0x7e5b1e24` | Updates `contractURI`. Emits the parameterless `ContractURIUpdated` event per ERC-7572; |
-
-## Events
-
-| Event | Topic0 | Summary |
-|---|---|---|
-| `Transfer` | `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef` | ERC-20 transfer event. Emitted on every successful transfer (including memo'd variants), |
-| `Approval` | `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` | ERC-20 approval event. Emitted by `approve` and `permit`. |
-| `Memo` | `0x6989f5818dcfd11f8cd53b27c94cec33dae1589735f03e639cba54553a1825e8` | Emitted by `transferWithMemo`, `transferFromWithMemo`, `mintWithMemo`, and `burnWithMemo` |
-| `BurnedBlocked` | `0x0b552e96653fd6842da37c477005d3b5c08a8c7d3631b1f43787b2dc9a1006a3` | Emitted by the deprecated `burnBlocked` in addition to `Transfer(from, address(0), amount)`. |
-| `Seized` | `0xa9aec5d8b86e2fa2fd6ac3af62f2622e3dfdab1967d4cbbb56a5df7d74cb887c` | Emitted by `seizeWithMemo` in addition to `Transfer(from, to, amount)` (and the |
-| `RoleGranted` | `0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d` | Emitted when `account` is granted `role`. `sender` is the originating caller. |
-| `RoleRevoked` | `0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b` | Emitted when `role` is revoked from `account`. `sender` is the originating caller |
-| `RoleAdminChanged` | `0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff` | Emitted by `setRoleAdmin` when the admin role for `role` changes. |
-| `LastAdminRenounced` | `0xe8d3a9872e7ca325571ff1e4c51ddd69090a0345240cc605ccde365ec867cc67` | Emitted by `renounceLastAdmin` in addition to the standard |
-| `Paused` | `0x43e072977b8112813d7c2aa0b63d3c121c1fe3e714e6d2eacb5735fe4027e976` | Emitted by `pause`. `features` is the argument to the call (not the resulting paused state). |
-| `Unpaused` | `0xdc6281474ea3dea2a856e225c7ba3edf427de9164495817c4d49a595e683fed4` | Emitted by `unpause`. `features` is the argument to the call (not the resulting paused state). |
-| `PolicyUpdated` | `0x8b4790f7ff717fc8f60f07ae099e47ef318dc04b37ae98056b50a22b79056626` | Emitted by `updatePolicy` when a token's policy slot is changed. Initial slot assignment at |
-| `SupplyCapUpdated` | `0x6d14f44808ce024f263432bc38d019a9951fbe674e9898b54844dbc8dc09c23a` | Emitted by `updateSupplyCap`. |
-| `ContractURIUpdated` | `0xa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962` | Emitted by `updateContractURI`. Per ERC-7572, parameterless: integrators re-fetch `contractURI()`. |
-| `NameUpdated` | `0x74321da206c1b9fa34367f7ece59ca49371dcd13820b9a5c3767ae1ecceed51a` | Emitted by `updateName`. Carries the new name string. |
-| `SymbolUpdated` | `0x64e8b5c6dcea43dd79766bb3b8af7c45968d12b68c960cf2da23856f34d598d4` | Emitted by `updateSymbol`. Carries the new symbol string. |
-| `EIP712DomainChanged` | `0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31` | ERC-5267 domain-change signal. Emitted exactly once per successful `updateName` call, |
-
-## Errors
-
-| Error | Selector | Summary |
-|---|---|---|
-| `NonPayable` | `0x6fb1b0e9` | ETH was attached to a call targeting a nonpayable token selector. |
-| `AccessControlUnauthorizedAccount` | `0xe2517d3f` | `account` does not hold `neededRole`. |
-| `Unauthorized` | `0x82b42900` | Caller failed a positional authorization check that is not expressible as "missing role X". |
-| `ContractPaused` | `0xf9df5ac9` | The `PausableFeature` covering this operation is currently paused. |
-| `InsufficientAllowance` | `0x192b9e4e` | `spender`'s allowance is less than `needed` for the requested `transferFrom`. |
-| `InsufficientBalance` | `0xdb42144d` | `sender`'s balance is less than `needed` for the requested transfer or burn. |
-| `InvalidSender` | `0x4c14f64c` | The transfer's source address is invalid (typically `address(0)`). |
-| `InvalidReceiver` | `0x9cfea583` | The transfer's destination address is invalid (typically `address(0)`). |
-| `InvalidApprover` | `0x8bc146c4` | The approval's `owner` address is invalid (typically `address(0)`). |
-| `InvalidSpender` | `0x4e15efda` | The approval's `spender` address is invalid (typically `address(0)`). |
-| `InvalidAmount` | `0x2c5211c6` | An amount argument was zero where a non-zero value is required. Not used for ERC-20 amount arguments. |
-| `EmptyFeatureSet` | `0x4861ff45` | An empty array was passed to a function that requires at least one element. |
-| `InvalidSupplyCap` | `0x0a3780ce` | The proposed supply cap is outside the permitted range: below the current |
-| `SupplyCapExceeded` | `0x4b344b11` | The mint would push `totalSupply` past the configured cap. |
-| `PolicyForbids` | `0xa43fec12` | A policy slot denied the operation. |
-| `PolicyNotFound` | `0xcccad523` | The provided policy ID does not exist in the policy registry. |
-| `UnsupportedPolicyType` | `0xcdd98a4a` | `policyScope` is not a slot this token (or its variant) supports. |
-| `AccountNotSeizable` | `0x91dbbc8d` | `seizeWithMemo` was called against a `from` that is currently authorized under |
-| `AccountNotBlocked` | `0x64a5cb46` | The deprecated `burnBlocked` was called against a `from` that is currently authorized under |
-| `ExpiredSignature` | `0xbd2a913c` | An EIP-2612 `permit` was submitted with a `deadline` strictly less than `block.timestamp`. |
-| `InvalidSigner` | `0x7ba5ffb5` | ECDSA recovery on an EIP-2612 `permit` returned `signer`, which does not match the claimed `owner`. |
-| `LastAdminCannotRenounce` | `0x361513e7` | `renounceRole(DEFAULT_ADMIN_ROLE, ...)` was called by the sole remaining admin. |
-| `NotSoleAdmin` | `0x2a98e73b` | `renounceLastAdmin()` was called when other accounts also hold `DEFAULT_ADMIN_ROLE`. |
-| `AccessControlBadConfirmation` | `0x6697b232` | The `callerConfirmation` argument to `renounceRole` was not `msg.sender`. |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burn.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burn.mdx
deleted file mode 100644
index 3ecfb6ef8..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burn.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: "IB20.burn"
-description: "Generated B20 reference for burn(uint256)."
----
-
-
-
-## Signature
-
-```solidity
-function burn(uint256 amount) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0x42966c68` |
-| Canonical signature | `burn(uint256)` |
-
-## Description
-
-Burns `amount` from the caller's own balance. Not subject to any policy.
-Emits `Transfer(caller, address(0), amount)`.
-Dev: Reverts with `ContractPaused(BURN)` when `BURN` is paused.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `BURN_ROLE`.
-Dev: Reverts with `InsufficientBalance` when the caller's balance is below `amount`.
-Param: amount Amount to burn.
-
-## Access control
-
-`BURN_ROLE` gates self-burn calls.
-
-## Policy interaction
-
-No direct policy interaction.
-
-## Example
-
-```solidity
-IB20(target).burn(arg0);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnBlocked.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnBlocked.mdx
deleted file mode 100644
index 4206415a6..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/burnBlocked.mdx
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: "IB20.burnBlocked"
-description: "Generated B20 reference for burnBlocked(address,uint256)."
----
-
-
-
-## Signature
-
-```solidity
-function burnBlocked(address from, uint256 amount) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xec0cf3dc` |
-| Canonical signature | `burnBlocked(address,uint256)` |
-
-## Description
-
-DEPRECATED. Burns `amount` from a `from` account that is blocked under
-`TRANSFER_SENDER_POLICY`, without spending an allowance. Retained for back-compat;
-prefer `seizeWithMemo` (to a treasury/self address) followed by `burn`.
-Emits `Transfer(from, address(0), amount)` and `BurnedBlocked(caller, from, amount)`.
-Dev: Gated by `BURN_BLOCKED_ROLE` and the `BURN` pause vector (not `SEIZE`). Its blocked check
-reads `TRANSFER_SENDER_POLICY`, distinct from `seizeWithMemo`'s `SEIZE_HOLDER_POLICY`.
-Dev: Reverts with `ContractPaused(BURN)` when `BURN` is paused.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `BURN_BLOCKED_ROLE`.
-Dev: Reverts with `AccountNotBlocked` when `from` is currently authorized under `TRANSFER_SENDER_POLICY`.
-Dev: Reverts with `InsufficientBalance` when `from`'s balance is below `amount`.
-Param: from Account whose blocked balance is being burned.
-Param: amount Amount to burn.
-
-## Access control
-
-`BURN_BLOCKED_ROLE` gates deprecated blocked-burn calls.
-
-## Policy interaction
-
-Checks `TRANSFER_SENDER_POLICY`; the account can be burned only when not authorized by that policy.
-
-## Example
-
-```solidity
-IB20(token).burnBlocked(from, amount);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mint.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mint.mdx
deleted file mode 100644
index 4b189a4a6..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/mint.mdx
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: "IB20.mint"
-description: "Generated B20 reference for mint(address,uint256)."
----
-
-
-
-## Signature
-
-```solidity
-function mint(address to, uint256 amount) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0x40c10f19` |
-| Canonical signature | `mint(address,uint256)` |
-
-## Description
-
-Mints `amount` to `to`. Emits `Transfer(address(0), to, amount)`.
-Dev: Reverts with `ContractPaused(MINT)` when `MINT` is paused.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `MINT_ROLE`.
-Dev: Reverts with `InvalidReceiver` when `to == address(0)`.
-Dev: Reverts with `PolicyForbids(MINT_RECEIVER_POLICY, ...)` when `to` is not authorized.
-Dev: Reverts with `SupplyCapExceeded` when `totalSupply + amount > supplyCap`.
-Param: to Mint recipient.
-Param: amount Amount to mint.
-
-## Access control
-
-`MINT_ROLE` gates state-changing mint calls.
-
-## Policy interaction
-
-Checks `MINT_RECEIVER_POLICY`, including during factory initCalls.
-
-## Example
-
-```solidity
-IB20(target).mint(arg0, arg1);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/permit.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/permit.mdx
deleted file mode 100644
index 9bc9b639f..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/permit.mdx
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: "IB20.permit"
-description: "Generated B20 reference for permit(address,address,uint256,uint256,uint8,bytes32,bytes32)."
----
-
-
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
-
-## Signature
-
-```solidity
-function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xd505accf` |
-| Canonical signature | `permit(address,address,uint256,uint256,uint8,bytes32,bytes32)` |
-
-## Description
-
-EIP-2612 permit. Recovers `owner` via ECDSA from `(v, r, s)`. EOA signatures only;
-ERC-1271 contract signatures are NOT supported. Emits `Approval`.
-Dev: Reverts with `ExpiredSignature` when `block.timestamp > deadline`.
-Dev: Reverts with `InvalidSigner` when ECDSA recovery does not yield `owner`.
-Dev: Reverts with `InvalidSpender` when `spender == address(0)`.
-Param: owner Token holder granting the allowance.
-Param: spender Account being granted the allowance.
-Param: value Allowance amount.
-Param: deadline Unix timestamp after which the signature is invalid.
-Param: v ECDSA recovery byte.
-Param: r ECDSA signature r component.
-Param: s ECDSA signature s component.
-
-## Access control
-
-Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
-
-## Policy interaction
-
-No direct policy interaction.
-
-## Example
-
-```solidity
-IB20(target).permit(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/revokeRole.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/revokeRole.mdx
deleted file mode 100644
index d202963ee..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/revokeRole.mdx
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: "IB20.revokeRole"
-description: "Generated B20 reference for revokeRole(bytes32,address)."
----
-
-
-
-## Signature
-
-```solidity
-function revokeRole(bytes32 role, address account) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xd547741f` |
-| Canonical signature | `revokeRole(bytes32,address)` |
-
-## Description
-
-Revokes `role` from `account`. Emits `RoleRevoked`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold the admin role for `role`,
-or when the token has been transitioned to admin-less via `renounceLastAdmin`.
-Dev: Reverts with `LastAdminCannotRenounce` when `role == DEFAULT_ADMIN_ROLE` and `account` is the last default admin.
-Use `renounceLastAdmin` to clear the final admin.
-Param: role Role to revoke.
-Param: account Account to revoke from.
-
-## Access control
-
-Uses the B20 access-control role graph. Factory initCalls bypass role gates during creation.
-
-## Policy interaction
-
-No direct policy interaction.
-
-## Example
-
-```solidity
-IB20(target).revokeRole(arg0, arg1);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/seizeWithMemo.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/seizeWithMemo.mdx
deleted file mode 100644
index 25fd0a689..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/seizeWithMemo.mdx
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: "IB20.seizeWithMemo"
-description: "Generated B20 reference for seizeWithMemo(address,address,uint256,bytes32)."
----
-
-
-
-## Signature
-
-```solidity
-function seizeWithMemo(address from, address to, uint256 amount, bytes32 memo) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xf916d81b` |
-| Canonical signature | `seizeWithMemo(address,address,uint256,bytes32)` |
-
-## Description
-
-Seizes `amount` of `from`'s balance and reassigns it to `to` in a single admin operation.
-Emits, in order, `Transfer(from, to, amount)`, `Memo(caller, memo)`, and
-`Seized(caller, from, to, amount)`. A memo of `bytes32(0)` is permitted.
-Dev: Admin operation: skips allowance and the transfer policies. The membership checks are that
-`from` is blocked under `SEIZE_HOLDER_POLICY` and `to` is authorized under `SEIZE_RECEIVER_POLICY`.
-Dev: `to` is gated by `SEIZE_RECEIVER_POLICY`, which defaults to always-allow when unset, so an
-unconfigured token may seize to any destination (a treasury need not be allowlisted).
-Dev: Reverts with `ContractPaused(SEIZE)` when `SEIZE` is paused.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `SEIZE_ROLE`.
-Dev: Reverts with `InvalidReceiver` when `to == address(0)`.
-Dev: Reverts with `AccountNotSeizable` when `from` is currently authorized under `SEIZE_HOLDER_POLICY`.
-Dev: Reverts with `PolicyForbids(SEIZE_RECEIVER_POLICY, ...)` when `to` is not authorized under `SEIZE_RECEIVER_POLICY`.
-Dev: Reverts with `InsufficientBalance` when `from`'s balance is below `amount`.
-Param: from Account whose balance is being seized.
-Param: to Destination address for the seized balance.
-Param: amount Amount to seize.
-Param: memo Memo payload.
-
-## Access control
-
-`SEIZE_ROLE` gates seizure calls.
-
-## Policy interaction
-
-Checks `SEIZE_HOLDER_POLICY` for the holder and `SEIZE_RECEIVER_POLICY` for the destination.
-
-## Example
-
-```solidity
-IB20(token).seizeWithMemo(holder, destination, amount, memo);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transfer.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transfer.mdx
deleted file mode 100644
index efb393f52..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transfer.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: "IB20.transfer"
-description: "Generated B20 reference for transfer(address,uint256)."
----
-
-
-
-## Signature
-
-```solidity
-function transfer(address to, uint256 amount) external returns (bool);
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xa9059cbb` |
-| Canonical signature | `transfer(address,uint256)` |
-
-## Description
-
-Transfers `amount` from `msg.sender` to `to`. Emits `Transfer`.
-Dev: Reverts with `ContractPaused(TRANSFER)` when `TRANSFER` is paused.
-Dev: Reverts with `InvalidReceiver` when `to == address(0)`.
-Dev: Reverts with `InvalidSender` when `msg.sender == address(0)`.
-Dev: Reverts with `PolicyForbids(TRANSFER_SENDER_POLICY, ...)` when `msg.sender` is not authorized.
-Dev: Reverts with `PolicyForbids(TRANSFER_RECEIVER_POLICY, ...)` when `to` is not authorized.
-Dev: Reverts with `InsufficientBalance` when `msg.sender`'s balance is below `amount`.
-Param: to Destination address.
-Param: amount Amount to transfer.
-Return: Always `true` on success.
-
-## Access control
-
-Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
-
-## Policy interaction
-
-Checks `TRANSFER_SENDER_POLICY` and `TRANSFER_RECEIVER_POLICY`; `approve` and `permit` are not policy-gated.
-
-## Example
-
-```solidity
-IB20(target).transfer(arg0, arg1);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFrom.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFrom.mdx
deleted file mode 100644
index d3c436d0e..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/transferFrom.mdx
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: "IB20.transferFrom"
-description: "Generated B20 reference for transferFrom(address,address,uint256)."
----
-
-
-
-## Signature
-
-```solidity
-function transferFrom(address from, address to, uint256 amount) external returns (bool);
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0x23b872dd` |
-| Canonical signature | `transferFrom(address,address,uint256)` |
-
-## Description
-
-Transfers `amount` from `from` to `to` using `msg.sender`'s allowance. Emits `Transfer`.
-Dev: Reverts with `ContractPaused(TRANSFER)` when `TRANSFER` is paused.
-Dev: Reverts with `InvalidReceiver` when `to == address(0)`.
-Dev: Reverts with `InvalidSender` when `from == address(0)`.
-Dev: Reverts with `InsufficientAllowance` when the caller's allowance from `from` is below `amount`.
-Dev: Reverts with `PolicyForbids(TRANSFER_EXECUTOR_POLICY, ...)` when `msg.sender != from` and `msg.sender` is not authorized.
-Dev: Reverts with `PolicyForbids(TRANSFER_SENDER_POLICY, ...)` when `from` is not authorized.
-Dev: Reverts with `PolicyForbids(TRANSFER_RECEIVER_POLICY, ...)` when `to` is not authorized.
-Dev: Reverts with `InsufficientBalance` when `from`'s balance is below `amount`.
-Param: from Source address.
-Param: to Destination address.
-Param: amount Amount to transfer.
-Return: Always `true` on success.
-
-## Access control
-
-Read-only or ERC-20-standard access rules unless the NatSpec states otherwise.
-
-## Policy interaction
-
-Checks `TRANSFER_EXECUTOR_POLICY` when `msg.sender != from`, plus sender and receiver transfer scopes.
-
-## Example
-
-```solidity
-IB20(target).transferFrom(arg0, arg1, arg2);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateContractURI.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateContractURI.mdx
deleted file mode 100644
index eb81fdc8c..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateContractURI.mdx
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: "IB20.updateContractURI"
-description: "Generated B20 reference for updateContractURI(string)."
----
-
-
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
-
-## Signature
-
-```solidity
-function updateContractURI(string calldata newURI) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0x7e5b1e24` |
-| Canonical signature | `updateContractURI(string)` |
-
-## Description
-
-Updates `contractURI`. Emits the parameterless `ContractURIUpdated` event per ERC-7572;
-integrators re-fetch `contractURI()` after observing it.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `METADATA_ROLE`.
-Param: newURI New contract URI.
-
-## Access control
-
-`METADATA_ROLE` gates this call.
-
-## Policy interaction
-
-No direct policy interaction.
-
-## Example
-
-```solidity
-IB20(target).updateContractURI(arg0);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSupplyCap.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSupplyCap.mdx
deleted file mode 100644
index 3a9b32283..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20/updateSupplyCap.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: "IB20.updateSupplyCap"
-description: "Generated B20 reference for updateSupplyCap(uint256)."
----
-
-
-[Related concept](/base-chain/specs/upgrades/beryl/b20/specification)
-
-## Signature
-
-```solidity
-function updateSupplyCap(uint256 newSupplyCap) external;
-```
-
-| Field | Value |
-|---|---|
-| Selector | `0xe5a97f07` |
-| Canonical signature | `updateSupplyCap(uint256)` |
-
-## Description
-
-Sets a new supply cap. May be raised or lowered freely, but never below current
-`totalSupply` and never above `type(uint128).max`. Emits `SupplyCapUpdated`.
-Dev: Reverts with `AccessControlUnauthorizedAccount` when the caller does not hold `DEFAULT_ADMIN_ROLE`.
-Dev: Reverts with `InvalidSupplyCap` when `newSupplyCap < totalSupply()` or `newSupplyCap > type(uint128).max`.
-Param: newSupplyCap New supply cap. Must not exceed `type(uint128).max`.
-
-## Access control
-
-`DEFAULT_ADMIN_ROLE` gates this call. Factory initCalls bypass the role gate during creation.
-
-## Policy interaction
-
-No direct policy interaction.
-
-## Example
-
-```solidity
-IB20(target).updateSupplyCap(arg0);
-```
-
-## Related
-
-- [IB20 reference](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20)
-- [Constants & addresses](/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses)
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset.mdx
deleted file mode 100644
index 8f2a9a05c..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: "IB20Asset reference"
-description: "Generated B20 reference for IB20Asset functions, events, and errors."
----
-
-
-## Functions
-
-| Function | Selector | Summary |
-|---|---|---|
-| [`OPERATOR_ROLE`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/OPERATOR_ROLE) | `0xf5b541a6` | Required to call `announce`, `updateUIMultiplier`, `cancelUIMultiplierUpdate`, and |
-| [`WAD_PRECISION`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/WAD_PRECISION) | `0x664808a8` | Fixed-point precision used to scale `multiplier`. Equal to `1e18`. |
-| [`MAX_UI_MULTIPLIER`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/MAX_UI_MULTIPLIER) | `0x785c0cf0` | Maximum multiplier accepted by the setter functions. |
-| [`announce`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/announce) | `0x595135dd` | Posts a holder-impacting announcement and atomically dispatches each entry in |
-| [`isAnnouncementIdUsed`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/isAnnouncementIdUsed) | `0xc0da474e` | Whether `id` has previously been consumed by `announce`. |
-| [`multiplier`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/multiplier) | `0x1b3ed722` | The current multiplier, scaled to `WAD_PRECISION`. Holder balances are stored |
-| [`toScaledBalance`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toScaledBalance) | `0x04f04c99` | Converts a raw balance to its scaled view: `rawBalance * multiplier / WAD_PRECISION`. |
-| [`toRawBalance`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toRawBalance) | `0x0ca06c44` | Converts a scaled balance back to its raw representation: |
-| [`scaledBalanceOf`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/scaledBalanceOf) | `0x1da24f3e` | Convenience for `toUIAmount(balanceOf(account))`. |
-| [`updateUIMultiplier`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateUIMultiplier) | `0x628e600f` | Schedules a UI-multiplier update to take effect at `effectiveAt`. |
-| [`cancelUIMultiplierUpdate`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/cancelUIMultiplierUpdate) | `0x2c97a0f0` | Cancels the single live pending update, restoring the no-pending state. |
-| [`updateMultiplier`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateMultiplier) | `0x5ffe6146` | Instant failsafe / emergency override — sets the current multiplier immediately and |
-| [`batchMint`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/batchMint) | `0x68573107` | Mints `amounts[i]` to `recipients[i]` in one call. All-or-nothing: any element |
-| [`extraMetadata`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/extraMetadata) | `0x4ddf9da0` | The value of the named metadata entry, or the empty string if not set. A |
-| [`updateExtraMetadata`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/updateExtraMetadata) | `0xb2851ef5` | Sets, updates, or removes an extra-metadata entry. An empty `value` removes the |
-| [`uiMultiplier`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/uiMultiplier) | `0xa60bf13d` | Returns the current ERC-8056 UI multiplier. |
-| [`newUIMultiplier`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/newUIMultiplier) | `0xdc767007` | Returns the pending UI multiplier. |
-| [`effectiveAt`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/effectiveAt) | `0x97a4064f` | Returns the effective-at timestamp for the pending multiplier. |
-| [`balanceOfUI`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/balanceOfUI) | `0x437a9958` | Returns an account's UI-adjusted balance. |
-| [`totalSupplyUI`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/totalSupplyUI) | `0x9bea6429` | Returns the UI-adjusted total supply. |
-| [`toUIAmount`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/toUIAmount) | `0x3248d4ff` | Converts a raw amount to its UI representation. |
-| [`fromUIAmount`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset/fromUIAmount) | `0x65cd9b3c` | Converts a UI amount to its raw representation. |
-
-## Events
-
-| Event | Topic0 | Summary |
-|---|---|---|
-| `UIMultiplierUpdated` | `0x2205df4534432b2f60654a3fdb48737ffdaf3e9edb1a498bd985bc026b15b055` | Emitted when the UI multiplier is updated. |
-| `MultiplierUpdated` | `0x4dbe4840d7465bd162f67814cea0b519567a2e0e578bcde61e7f4ced361e5a3d` | Deprecated multiplier-change event emitted by `updateMultiplier`. |
-| `UIMultiplierUpdateCancelled` | `0x883856335ba5f60c18b9817c4505d3c7d3f6223dcf39516b30c508c46a5e1cad` | A scheduled multiplier update was cancelled. |
-| `ExtraMetadataUpdated` | `0xd7bb345be29e78d635203d40fe0567e7ef19d5cd5cc5fcd25f768b8063e82aa1` | Emitted by `updateExtraMetadata`. An empty `value` indicates removal. |
-| `Announcement` | `0xccebf8218a62875909564adef86a6f4df81503cb617221e793357d62f8e813f7` | Emitted by `announce` to open an announcement bracket. |
-| `EndAnnouncement` | `0x96d64dafe2c790596430196b982ad1da3221cb3b0f4e6e2df77f2e4f71a90037` | Emitted by `announce` to close the bracket opened by the paired `Announcement` with the same `id`. |
-
-## Errors
-
-| Error | Selector | Summary |
-|---|---|---|
-| `AnnouncementIdAlreadyUsed` | `0xd10b3c9e` | `announce` was called with an `id` that has already been consumed. |
-| `InvalidMetadataKey` | `0x86ea3abb` | `updateExtraMetadata` was called with an empty `key`. |
-| `InvalidMultiplier` | `0x6f12f3dc` | A multiplier setter (`updateUIMultiplier` or `updateMultiplier`) was called with a |
-| `EffectiveAtInPast` | `0x14119cf6` | `updateUIMultiplier` was called with an `effectiveAt` that is not in the future |
-| `EffectiveAtTooFar` | `0x1ce214fa` | `updateUIMultiplier` was called with an `effectiveAt` above `type(uint64).max`, the |
-| `UIMultiplierUpdateExists` | `0x4481a68e` | `updateUIMultiplier` was called while a live pending update already exists |
-| `UIMultiplierUpdateDoesNotExist` | `0xa7d6a5ca` | `cancelUIMultiplierUpdate` was called when there is no live pending update |
-| `LengthMismatch` | `0xab8b67c6` | A batched function was called with parallel arrays of differing lengths. |
-| `EmptyBatch` | `0xc2e5347d` | A batched function was called with empty arrays. |
-| `AnnouncementInProgress` | `0x5c5f0829` | An inner call dispatched by `announce` tried to re-invoke `announce`. |
-| `InternalCallMalformed` | `0x4e2f143e` | An inner call dispatched by `announce` was shorter than four bytes. |
-| `InternalCallFailed` | `0xb288a127` | An inner call dispatched by `announce` reverted with an ordinary revert; its reason is |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin.mdx
deleted file mode 100644
index e9d66398d..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin.mdx
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: "IB20Stablecoin reference"
-description: "Generated B20 reference for IB20Stablecoin functions, events, and errors."
----
-
-
-## Functions
-
-| Function | Selector | Summary |
-|---|---|---|
-| [`currency`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin/currency) | `0xe5a6b10f` | The currency code this stablecoin tracks (e.g. `"USD"`, `"EUR"`, `"JPY"`). |
-
-## Events
-
-| Event | Topic0 | Summary |
-|---|---|---|
-| — | — | — |
-
-## Errors
-
-| Error | Selector | Summary |
-|---|---|---|
-| — | — | — |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry.mdx b/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry.mdx
deleted file mode 100644
index f93ca6245..000000000
--- a/docs/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry.mdx
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: "IPolicyRegistry reference"
-description: "Generated B20 reference for IPolicyRegistry functions, events, and errors."
----
-
-
-## Functions
-
-| Function | Selector | Summary |
-|---|---|---|
-| [`createPolicy`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicy) | `0xca5d55f6` | Creates a new simple policy with no initial members. Permissionless. |
-| [`createPolicyWithAccounts`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createPolicyWithAccounts) | `0xa2d3044f` | Creates a new simple policy seeded with `accounts` as initial members. Permissionless. |
-| [`createCompositePolicy`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/createCompositePolicy) | `0x6fdd1491` | Creates a new composite policy that combines existing simple policies under a logic |
-| [`stageUpdateAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/stageUpdateAdmin) | `0x1d7ae695` | Stages a proposed new admin for `policyId`. The active admin does not change |
-| [`finalizeUpdateAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/finalizeUpdateAdmin) | `0x33031a9c` | Completes a two-step admin transfer. Promotes the caller to active admin and clears the pending slot. |
-| [`renounceAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/renounceAdmin) | `0xefdb7fa3` | Permanently relinquishes administration of `policyId`. The member set is frozen |
-| [`updateAllowlist`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateAllowlist) | `0x3388fb5b` | Sets `accounts` membership in an ALLOWLIST policy to `allowed` in one batch. |
-| [`updateBlocklist`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateBlocklist) | `0x5c4e51b8` | Sets `accounts` membership in a BLOCKLIST policy to `blocked` in one batch. |
-| [`updateComposite`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/updateComposite) | `0xbfe142c0` | Replaces a composite policy's child-policy set in full with `childPolicyIds`. |
-| [`isAuthorized`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/isAuthorized) | `0x55a1179e` | Returns whether `account` is authorized under `policyId`. Never reverts; unknown |
-| [`MIN_COMPOSITE_CHILD_POLICIES`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MIN_COMPOSITE_CHILD_POLICIES) | `0xb3ae29f7` | Minimum number of child policies a composite must reference, inclusive. Never reverts. |
-| [`MAX_COMPOSITE_CHILD_POLICIES`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/MAX_COMPOSITE_CHILD_POLICIES) | `0x54309870` | Maximum number of child policies a composite may reference, inclusive. Never reverts. |
-| [`policyExists`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyExists) | `0x330f5637` | Returns whether `policyId` is a built-in sentinel or a previously-assigned custom ID. Never reverts. |
-| [`policyAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/policyAdmin) | `0x09dd0a47` | Returns the current admin of `policyId`, or `address(0)` for built-in sentinels, |
-| [`pendingPolicyAdmin`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/pendingPolicyAdmin) | `0x017548b7` | Returns the currently-staged pending admin for `policyId`, or `address(0)` when |
-| [`compositePolicyChildIds`](/base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry/compositePolicyChildIds) | `0x7c40df74` | Returns the child-policy set of the composite `policyId`. |
-
-## Events
-
-| Event | Topic0 | Summary |
-|---|---|---|
-| `PolicyCreated` | `0xdc870ce85be577234b8548f42b93f84bbff6d0c1f38ee725c809c49932a13885` | A new policy was created. |
-| `PolicyAdminStaged` | `0xdbf3b34a4c956c56ca05cd4b8f9293a4347ad61994445a4b89817d4a19561136` | A new admin was staged. `pendingAdmin == address(0)` clears a prior nomination. |
-| `PolicyAdminUpdated` | `0x98925cfb1bc09c5b43dd0dd56d3d95aa04fb3300927580cc588c3f5dd58c15e1` | The active admin changed. `newAdmin == address(0)` indicates renunciation; |
-| `AllowlistUpdated` | `0x18c46532f90187ba11e436e21da087b684801d7f0787f2043f26f079c91e9ef0` | One or more accounts had their ALLOWLIST membership set to `allowed` in a single batch. |
-| `BlocklistUpdated` | `0x2ff63c102b1b9fd7f5d39f83039c5d6aaf50a414a4f2def2704e41be2628f1e3` | One or more accounts had their BLOCKLIST membership set to `blocked` in a single batch. |
-| `CompositePolicyUpdated` | `0x4ff6adaab31b0df87aa7b8b7320c52b8b3b5eede3bf28a6baaaa8b8b7e1d6363` | A composite policy's child set was set or replaced in full with `childPolicyIds`. Emitted |
-
-## Errors
-
-| Error | Selector | Summary |
-|---|---|---|
-| `NonPayable` | `0x6fb1b0e9` | ETH was attached to a call targeting a nonpayable policy registry selector. |
-| `Unauthorized` | `0x82b42900` | Caller is not the admin required by the attempted operation. |
-| `PolicyNotFound` | `0x720caa4f` | The referenced policy ID does not exist. |
-| `IncompatiblePolicyType` | `0xf1011ef5` | The operation is incompatible with the policy's type. |
-| `ZeroAddress` | `0xd92e233d` | A required address argument was the zero address. |
-| `BatchSizeTooLarge` | `0x083e2f67` | A membership batch exceeded the registry limit. |
-| `NoPendingAdmin` | `0xb4539afa` | `finalizeUpdateAdmin` was called with no pending admin staged. |
-| `ChildPoliciesOutsideOfRange` | `0x697ec868` | A composite policy was created or updated with a child-policy count outside the |
-| `InvalidChildPolicy` | `0x46508ef6` | Composite policies are not simple policies. Child policies must be existing |
-
-
-
-
-
diff --git a/docs/base-chain/specs/upgrades/beryl/overview.mdx b/docs/base-chain/specs/upgrades/beryl/overview.mdx
index 76cd4773c..7301954b7 100644
--- a/docs/base-chain/specs/upgrades/beryl/overview.mdx
+++ b/docs/base-chain/specs/upgrades/beryl/overview.mdx
@@ -1,14 +1,15 @@
---
title: "Overview"
+sidebarTitle: "Beryl"
description: "Overview of the Beryl hardfork, introducing the B20 native token standard, reduced withdrawal delays, and Reth V2."
---
## Summary
-- Introduce [B20](/base-chain/specs/upgrades/beryl/b20/specification): Base's native token standard for stablecoin, real-world asset (RWA), and long-tail token issuers
+- Introduce [B20](/base-chain/network-information/b20-token-standard): Base's native token standard for stablecoin, real-world asset (RWA), and long-tail token issuers
- Reduce the single-proof withdrawal finalization period from 7 days to 5 days for increased capital efficiency
- Reth V2: up to 50% disk reduction and a rewritten state root pipeline delivering +33% throughput
-- Upcoming in a later Cobalt phase: [native account abstraction (EIP-8130)](/base-chain/specs/upgrades/cobalt/eip-8130), currently previewing on the vibenet devnet
+- Upcoming in [Cobalt](/base-chain/specs/upgrades/cobalt/overview): [native account abstraction (EIP-8130)](/base-chain/network-information/native-account-abstraction), currently previewing on the vibenet devnet
## Activation Timestamps
@@ -33,19 +34,22 @@ Action required before activation. Upgrade to the required version before each n
B20 is Base's native token standard - ERC-20 compatible tokens implemented as Rust precompiles, designed for stablecoin, real-world asset, and long-tail token issuers.
-- [B20 Overview](/base-chain/specs/upgrades/beryl/b20/specification)
-- [Roles Model](/base-chain/specs/upgrades/beryl/b20/specification#roles-model)
-- [Policy Integration](/base-chain/specs/upgrades/beryl/b20/specification#policy-integration)
-- [Factory](/base-chain/specs/upgrades/beryl/b20/specification#factory)
-- [Policy Registry](/base-chain/specs/upgrades/beryl/b20/specification#policy-registry)
-- [Mint & Burn](/base-chain/specs/upgrades/beryl/b20/specification#mint)
-- [Variants](/base-chain/specs/upgrades/beryl/b20/specification#variants)
+- [B20 Token Standard](/base-chain/network-information/b20-token-standard)
+- [B20 Specification](/base-chain/specs/reference/b20)
+- [Roles Model](/base-chain/specs/reference/b20#roles-model)
+- [Policy Integration](/base-chain/specs/reference/b20#policy-integration)
+- [Factory](/base-chain/specs/reference/b20#factory)
+- [Policy Registry](/base-chain/specs/reference/b20#policy-registry)
+- [Mint & Burn](/base-chain/specs/reference/b20#mint)
+- [Variants](/base-chain/specs/reference/b20#variants)
+- [B20 changelog](/base-chain/specs/reference/b20/changelog)
## Native Account Abstraction (EIP-8130)
-A later Beryl phase brings account abstraction into the protocol. Accounts configure authorized actors and signature validation onchain. Apps get portable smart accounts, scoped session keys, atomic batching, and native gas sponsorship without bundler or relay infrastructure. EIP-8130 is experimental and currently runs only on the vibenet devnet.
+The [Cobalt upgrade](/base-chain/specs/upgrades/cobalt/overview) brings account abstraction into the protocol. Accounts configure authorized actors and signature validation onchain. Apps get portable smart accounts, scoped session keys, atomic batching, and native gas sponsorship without bundler or relay infrastructure. EIP-8130 is experimental and currently runs only on the vibenet devnet.
-- [Native Account Abstraction (EIP-8130)](/base-chain/specs/upgrades/cobalt/eip-8130)
+- [Native Account Abstraction](/base-chain/network-information/native-account-abstraction)
+- [Native Account Abstraction Reference](/base-chain/specs/reference/native-account-abstraction)
## Withdrawals
diff --git a/docs/base-chain/specs/upgrades/cobalt/eip-8130.mdx b/docs/base-chain/specs/upgrades/cobalt/eip-8130.mdx
deleted file mode 100644
index 329e138d4..000000000
--- a/docs/base-chain/specs/upgrades/cobalt/eip-8130.mdx
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title: "Native Account Abstraction"
-description: "Build with native account abstraction on Base. EIP-8130 smart accounts send ordinary transactions, with no bundlers or relays."
----
-
-[EIP-8130](https://eip.tools/eip/8130) builds account abstraction into the protocol. An account registers who can act for it, and how its signatures are checked, in an onchain system contract. The chain validates each transaction against that configuration, so smart accounts work without bundlers, relays, or a separate mempool.
-
-
-EIP-8130 is experimental and currently runs only on the [vibenet devnet](https://chain.base.org/vibenet). You can learn more about connecting to vibenet [here](/base-chain/quickstart/connecting-to-base#vibenet).
-
-
-## Build with EIP-8130
-
-EIP-8130 is live on vibenet (chain ID `84538453`, RPC `https://rpc.vibes.base.org`). Client support lives in an experimental viem fork:
-
-```bash
-bun add "viem@github:chunter-cb/viem#feat/eip-8130"
-```
-
-The example below performs the full flow:
-
-1. Creates an account.
-2. Funds it from the faucet.
-3. Sends a batch of calls that succeed or revert together.
-4. Verifies that every phase succeeded.
-
-```ts create-and-send.ts highlight={19,30-40,43-44}
-import { createPublicClient, http, parseEther } from "viem";
-import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
-import {
- newSmartAccount8130, sendCalls8130, estimateGas8130,
- encodeWalletCalls, waitForTransactionReceipt8130, allPhasesSucceeded,
-} from "viem/experimental/eip8130";
-
-const RPC_URL = "https://rpc.vibes.base.org";
-const chain = {
- id: 84538453,
- name: "vibenet",
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
- rpcUrls: { default: { http: [RPC_URL] } },
-};
-const client = createPublicClient({ chain, transport: http(RPC_URL) });
-
-// The account address is deterministic and exists before any deployment
-const signer = privateKeyToAccount(generatePrivateKey());
-const account = newSmartAccount8130({ signer });
-
-// Fund it from the vibenet faucet
-await fetch("https://api.vibes.base.org/api/vibenet/faucet/drip", {
- method: "POST",
- headers: { "content-type": "application/json" },
- body: JSON.stringify({ address: account.address }),
-});
-
-// Estimate, then send a batch. Account creation rides along in the same transaction
-const calls = [{ to: "0x…recipient", value: parseEther("0.001") }];
-const gas = await estimateGas8130(client, {
- sender: account.address,
- accountChanges: [account.createChange],
- calls: encodeWalletCalls({ account: account.address, calls: [calls] }),
-});
-const hash = await sendCalls8130(client, {
- account,
- accountChanges: [account.createChange],
- calls,
- gas: (gas * 120n) / 100n,
-});
-
-// An 8130 receipt reports per-phase results, so check all of them
-const receipt = await waitForTransactionReceipt8130(client, { hash });
-if (!allPhasesSucceeded(receipt)) throw new Error("a phase reverted");
-```
-
-One transaction creates the account, executes the batch, and pays for gas.
-
-## How it works
-
-Everything in the example maps to one of five concepts. An 8130 transaction names a sender account, proves the sender is authorized to act for it, and carries a batch of calls.
-
-### Account
-
-Account addresses are deterministic: viem computes them locally with `CREATE2`. That is why `account.address` exists before any deployment and `account.createChange` rides along in the first transaction. Each account is a small proxy contract that forwards calls to a shared implementation. `DefaultAccount` is the minimal building block and backs externally owned accounts (EOAs) upgraded via EIP-7702. A variant built for high transaction rates locks outbound ETH during execution in exchange for higher mempool rate limits.
-
-### Signer and Actor
-
-A **signer** produces the transaction's authorization (`privateKeyToAccount` above). An **actor** is the onchain identity that authorization resolves to, recorded in the `AccountConfiguration` system contract. An account can authorize many actors and revoke each independently.
-
-### Scope and Policy
-
-Each actor carries **scope** flags (`SCOPE_NONCE`, `SCOPE_POLICY`) that limit what it may do. It can also bind to an onchain **policy**: per-token spend limits and restrictions on which contracts and functions it may call. This is the native session-key model: an app gets an actor with exactly the permissions it needs, revocable at any time.
-
-### Authenticators
-
-Signature validation is pluggable. Authenticator contracts implement `IAuthenticator.authenticate(hash, data)`. The reference set covers secp256k1 (standard Ethereum keys), P-256, and WebAuthn. Passkeys therefore validate at the protocol level, not through wrapper contracts.
-
-### Payer
-
-A transaction can name a **payer** that covers gas on the sender's behalf. Draft [ERC-8168](https://eip.tools/eip/8168) standardizes the payer service flow: how apps discover and request sponsorship.
-
-## Why native account abstraction
-
-Smart accounts on Ethereum today are bolted on from outside the protocol. [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) requires an alternate mempool, bundlers, and an EntryPoint contract; every app inherits that infrastructure and its costs. [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) delegates an EOA to contract code, but the account still validates against its single original key.
-
-EIP-8130 moves the abstraction into the chain, so the features 4337 provides through external services come built into ordinary transactions:
-
-| | ERC-4337 | EIP-7702 | EIP-8130 |
-|---|---|---|---|
-| Validation | EntryPoint contract via bundlers | One fixed key | Protocol, against onchain configuration |
-| Infrastructure | Bundlers + alternate mempool | None | None - standard transactions |
-| Session keys | Per-wallet plugin systems | Not native | Native actors with scoped policies |
-| Gas sponsorship | Paymaster contracts | Not native | Native payers ([ERC-8168](https://eip.tools/eip/8168)) |
-| Batching | Via account contract | Via delegated code | Native, atomic, per-transaction |
-
-## Go deeper
-
-
-
- `AccountConfiguration`, account implementations, and authenticators, with Foundry tests.
-
-
- The EIP-8130 draft, and companion draft [ERC-8168](https://eip.tools/eip/8168) for payer services.
-
-
diff --git a/docs/base-chain/specs/upgrades/cobalt/overview.mdx b/docs/base-chain/specs/upgrades/cobalt/overview.mdx
new file mode 100644
index 000000000..3b9b3d66b
--- /dev/null
+++ b/docs/base-chain/specs/upgrades/cobalt/overview.mdx
@@ -0,0 +1,33 @@
+---
+title: "Overview"
+sidebarTitle: "Cobalt"
+description: "Overview of the Cobalt hardfork, which brings native account abstraction (EIP-8130) into the Base protocol."
+---
+
+## Summary
+
+- Introduce [native account abstraction (EIP-8130)](/base-chain/network-information/native-account-abstraction): accounts configure authorized actors and signature validation onchain, so smart accounts send ordinary transactions
+- Apps get portable smart accounts, scoped session keys, atomic batching, and native gas sponsorship without bundler or relay infrastructure
+
+## Activation Timestamps
+
+| Network | Timestamp | Date |
+|---------|-----------|------|
+| `mainnet` | TBD | TBD |
+| `sepolia` | TBD | TBD |
+| `vibenet` | Active | Previewing today |
+
+
+Cobalt has not been scheduled on mainnet or Sepolia. EIP-8130 is experimental and currently runs only on the [vibenet devnet](https://chain.base.org/vibenet).
+
+
+## Required Software
+
+Node software requirements will be published here once Cobalt is scheduled. To follow along today, connect to [vibenet](/base-chain/quickstart/connecting-to-base#vibenet).
+
+## Native Account Abstraction (EIP-8130)
+
+Cobalt brings account abstraction into the protocol. An account registers who can act for it, and how its signatures are checked, in an onchain system contract. The chain validates each transaction against that configuration, so smart accounts work without bundlers, relays, or a separate mempool.
+
+- [Native Account Abstraction](/base-chain/network-information/native-account-abstraction): what it is, how it compares to ERC-4337 and EIP-7702, and what it unlocks
+- [Native Account Abstraction Reference](/base-chain/specs/reference/native-account-abstraction): chain details, client setup, transaction structure, account configuration, authenticators, and payers
diff --git a/docs/docs.json b/docs/docs.json
index c837b0656..63dc9de5c 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -98,13 +98,6 @@
{
"tab": "Chain",
"groups": [
- {
- "group": "Beryl Upgrade",
- "tag": "New",
- "pages": [
- "base-chain/specs/upgrades/beryl/overview"
- ]
- },
{
"group": "Introduction",
"pages": [
@@ -118,6 +111,8 @@
"base-chain/network-information/transaction-finality",
"base-chain/network-information/throughput-and-limits",
"base-chain/network-information/network-fees",
+ "base-chain/network-information/b20-token-standard",
+ "base-chain/network-information/native-account-abstraction",
"base-chain/network-information/bridging-and-withdrawals"
]
},
@@ -259,38 +254,8 @@
{
"group": "Upgrades",
"pages": [
- {
- "group": "Cobalt",
- "pages": [
- "base-chain/specs/upgrades/cobalt/eip-8130"
- ]
- },
- {
- "group": "Beryl",
- "pages": [
- "base-chain/specs/upgrades/beryl/overview",
- "base-chain/specs/upgrades/beryl/b20/demos",
- {
- "group": "B20 Specification",
- "pages": [
- "base-chain/specs/upgrades/beryl/b20/specification/index",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/errors-and-events-index",
- {
- "group": "Interfaces",
- "pages": [
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IActivationRegistry",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Asset",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Factory",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IB20Stablecoin",
- "base-chain/specs/upgrades/beryl/b20/specification/reference/interfaces/IPolicyRegistry"
- ]
- }
- ]
- }
- ]
- },
+ "base-chain/specs/upgrades/cobalt/overview",
+ "base-chain/specs/upgrades/beryl/overview",
{
"group": "Azul",
"pages": [
@@ -379,7 +344,28 @@
"group": "Reference",
"pages": [
"base-chain/specs/reference/glossary",
- "base-chain/specs/reference/configurability"
+ "base-chain/specs/reference/configurability",
+ {
+ "group": "B20",
+ "pages": [
+ "base-chain/specs/reference/b20/index",
+ "base-chain/specs/reference/b20/constants-and-addresses",
+ "base-chain/specs/reference/b20/errors-and-events",
+ {
+ "group": "Interfaces",
+ "pages": [
+ "base-chain/specs/reference/b20/interfaces/IActivationRegistry",
+ "base-chain/specs/reference/b20/interfaces/IB20",
+ "base-chain/specs/reference/b20/interfaces/IB20Asset",
+ "base-chain/specs/reference/b20/interfaces/IB20Factory",
+ "base-chain/specs/reference/b20/interfaces/IB20Stablecoin",
+ "base-chain/specs/reference/b20/interfaces/IPolicyRegistry"
+ ]
+ },
+ "base-chain/specs/reference/b20/changelog"
+ ]
+ },
+ "base-chain/specs/reference/native-account-abstraction"
]
}
]
@@ -397,7 +383,7 @@
"anchors": [
{
"anchor": "B20 Specification",
- "href": "/base-chain/specs/upgrades/beryl/b20/specification"
+ "href": "https://docs.base.org/base-chain/specs/upgrades/beryl/b20/specification"
},
{
"anchor": "GitHub",
@@ -847,9 +833,33 @@
]
},
"redirects": [
+ {
+ "source": "/base-chain/specs/upgrades/beryl/b20/demos",
+ "destination": "/base-chain/network-information/b20-token-standard"
+ },
+ {
+ "source": "/base-chain/specs/upgrades/beryl/b20/specification/reference/errors-and-events-index",
+ "destination": "/base-chain/specs/reference/b20/errors-and-events"
+ },
+ {
+ "source": "/base-chain/specs/upgrades/beryl/b20/specification/reference/:slug*",
+ "destination": "/base-chain/specs/reference/b20/:slug*"
+ },
+ {
+ "source": "/base-chain/specs/upgrades/beryl/b20/specification",
+ "destination": "/base-chain/specs/reference/b20"
+ },
+ {
+ "source": "/base-chain/specs/upgrades/beryl/b20/changelog",
+ "destination": "/base-chain/specs/reference/b20/changelog"
+ },
+ {
+ "source": "/base-chain/specs/upgrades/cobalt/eip-8130",
+ "destination": "/base-chain/specs/reference/native-account-abstraction"
+ },
{
"source": "/base-chain/specs/upgrades/beryl/b20",
- "destination": "/base-chain/specs/upgrades/beryl/b20/specification"
+ "destination": "/base-chain/specs/reference/b20"
},
{
"source": "/ledger/overview",
diff --git a/docs/get-started/launch-b20-token.mdx b/docs/get-started/launch-b20-token.mdx
index 23111b226..532c8b9e1 100644
--- a/docs/get-started/launch-b20-token.mdx
+++ b/docs/get-started/launch-b20-token.mdx
@@ -5,7 +5,7 @@ description: "Launch a B20 token on Base with one call to the B20 Factory precom
B20 is an ERC-20 superset that runs as a native precompile on Base, which makes transfers cheaper and higher-throughput than a standard contract token while keeping full ERC-20 compatibility. Roles, supply caps, pausing, policy gating, memos, and `permit` are built into the chain.
-A standard ERC-20 leaves that logic for you to build, audit, and maintain. With B20, you call the singleton [**B20 Factory**](/base-chain/specs/upgrades/beryl/b20/specification#factory) to create a token, fully configured, in a single transaction.
+A standard ERC-20 leaves that logic for you to build, audit, and maintain. With B20, you call the singleton [**B20 Factory**](/base-chain/specs/reference/b20#factory) to create a token, fully configured, in a single transaction.
This guide creates an Asset token, mints its initial supply, and verifies the balance onchain. To accept the token as payment in an app, continue with [Accept B20 payments](/apps/guides/accept-b20-payments).
@@ -327,4 +327,4 @@ All without writing, deploying, or auditing a token contract.
## Next steps
* [Accept B20 payments in an app](/apps/guides/accept-b20-payments): wire this token into a checkout flow that tags each payment with an order ID and reconciles it from onchain events.
-* Gate transfers or mints with PolicyRegistry policies, add granular pause, or manage roles. See the [B20 token standard](/base-chain/specs/upgrades/beryl/b20/specification).
\ No newline at end of file
+* Gate transfers or mints with PolicyRegistry policies, add granular pause, or manage roles. See the [B20 token standard](/base-chain/specs/reference/b20).
\ No newline at end of file