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

# IB20 reference

> 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` (no longer part of this interface; 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`.                                       |
| [`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.             |
| [`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`.                             |

<CardGroup cols={2}>
  <Card title="Errors & events index" href="/base-chain/specs/upgrades/beryl/b20/specification/reference/errors-and-events-index" />

  <Card title="Constants & addresses" href="/base-chain/specs/upgrades/beryl/b20/specification/reference/constants-and-addresses" />
</CardGroup>
