{"license":"CC-BY-4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"ChainChoice (https://chainchoice.io)","category":"token_standards","evidenceReadAt":"2026-09-28","generatedAt":"2026-11-12","criteria":[{"id":"mint_authority_and_revocation","label":"Who can mint my token on a chain I don't run — and can I take that away?","weight":34},{"id":"authorised_deployment_and_provenance","label":"Can somebody stand up my token on a chain without asking me — and can a holder tell which one is mine?","weight":24},{"id":"blast_radius_caps","label":"If one of my minters is compromised at 3am, how much of my supply gets printed before anything stops it?","weight":22},{"id":"exit_and_token_captivity","label":"If I want off this standard next year, do I take my token with me — or do my holders have to migrate?","weight":20}],"providers":{"chainlink_cct":{"mint_authority_and_revocation":{"s":9,"q":"Token developers retain ownership and control of token contracts, token pools (orchestration layer) and all cross-chain configuration by default. | Setting a pool enables the token on CCIP; setting it to address(0) delists it.","u":"https://docs.chain.link/ccip/concepts/cross-chain-token/overview","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":9,"q":"registerAdminViaOwner(token) Calls token.owner() and requires msg.sender equals the returned address. | The pending administrator calls TokenAdminRegistry.acceptAdminRole(token) to become the token's active administrator in the local TokenAdminRegistry | This two-step pattern prevents accidental or…","u":"https://docs.chain.link/ccip/concepts/cross-chain-token/token-issuer-guide","d":"2026-09-28"},"blast_radius_caps":{"s":6,"q":"Rate limiting is disabled by default ( isEnabled: false ). | With rate limiting disabled, there are no restrictions on the volume of tokens that can be transferred through the pool in any direction.","u":"https://docs.chain.link/ccip/evm/tutorials/cross-chain-tokens/register-from-eoa-burn-mint-hardhat","d":"2026-09-28"},"exit_and_token_captivity":{"s":8,"q":"Setting the pool to address(0) effectively delists the token from CCIP. | When upgrading a pool, add the new pool as a remote pool on all counterpart chains before switching the active pool via TokenAdminRegistry.setPool | Keep the old pool registered as a remote pool until all inflight messages…","u":"https://docs.chain.link/ccip/concepts/cross-chain-token/token-issuer-guide","d":"2026-09-28"}},"xerc20_erc7281":{"mint_authority_and_revocation":{"s":9,"q":"function setLimits(address _bridge, uint256 _mintingLimit, uint256 _burningLimit) external onlyOwner { | uint256 _currentLimit = mintingCurrentLimitOf(_caller); | if (_caller != lockbox) { | if (msg.sender != FACTORY) revert IXERC20_NotFactory();","u":"https://github.com/defi-wonderland/xERC20/blob/main/solidity/contracts/XERC20.sol","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":5,"q":"function deployLockbox( | if (XERC20(_xerc20).owner() != msg.sender) revert IXERC20Factory_NotOwner(); | bytes32 _salt = keccak256(abi.encodePacked(_name, _symbol, msg.sender)); | EnumerableSet.AddressSet internal _xerc20RegistryArray;","u":"https://github.com/defi-wonderland/xERC20/blob/main/solidity/contracts/XERC20Factory.sol","d":"2026-09-28"},"blast_radius_caps":{"s":10,"q":"uint256 private constant _DURATION = 1 days; | bridges[_bridge].minterParams.ratePerSecond = _limit / _DURATION; | uint256 _currentLimit = mintingCurrentLimitOf(_caller); | revert IXERC20_NotHighEnoughLimits(); | function setLimits(address _bridge, uint256 _mintingLimit, uint256 _burningLimit)…","u":"https://github.com/defi-wonderland/xERC20/blob/main/solidity/contracts/XERC20.sol","d":"2026-09-28"},"exit_and_token_captivity":{"s":5,"q":"Add EIP: Sovereign Bridged Token | SamWilsn closed this Oct 25, 2023 | For all of us landing here: this ERC was migrated to ethereum/ERCs#89 | Add ERC: Sovereign Bridged Token ethereum/ERCs#89 Closed","u":"https://github.com/ethereum/EIPs/pull/7281","d":"2026-09-28"}},"wormhole_ntt":{"mint_authority_and_revocation":{"s":9,"q":"The final step in the deployment process is to set the NTT Manager as a minter of your token on all chains you have deployed to in burning mode. | When performing a hub-and-spoke deployment, it is only necessary to set the NTT Manager as a minter of the token on each spoke chain.","u":"https://wormhole.com/docs/products/token-transfers/native-token-transfers/guides/deploy-to-evm/","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":5,"q":"Ensure ecosystem actors such as block explorers, automated security tools (such as BlockAid and Blowfish), and wallets (such as MetaMask, Backpack, and Phantom) are aware of your multichain deployment and that it is labeled appropriately.","u":"https://wormhole.com/docs/products/token-transfers/native-token-transfers/guides/post-deployment/","d":"2026-09-28"},"blast_radius_caps":{"s":7,"q":"By default, limits are set to 0 and must be updated before deployment. | Default NTT Manager with rate limiting enabled. Suitable for most deployments. | Rate limit duration. A day is normal but worth deciding | If rate limit should be disabled (when the manager supports it)","u":"https://wormhole.com/docs/products/token-transfers/native-token-transfers/guides/deploy-to-evm/","d":"2026-09-28"},"exit_and_token_captivity":{"s":7,"q":"If you are using Wormhole Connect and currently configure NTT routes with nttRoutes() , you should migrate to nttExecutorRoute() . | since the Standard Relayer is being deprecated, the recommended path forward is to use the Executor route explicitly.","u":"https://wormhole.com/docs/protocol/infrastructure/relayers/executor-vs-sr/","d":"2026-09-28"}},"circle_cctp":{"mint_authority_and_revocation":{"s":4,"q":"Circle cannot assume control of a custom-configured connection. | The issuer grants the local TokenManager the minter role on tokens using BURN_MINT . | The deployer sets the owner and operator at configuration, configures rate limits and max transfer amount, and holds the pauser role.","u":"https://developers.circle.com/cctp/expanded-assets/concepts/ownerless-vs-custom-tokens","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":5,"q":"Anyone can configure either type. | The protocol guarantees that any pre-existing token has at least one ownerless bridge available, while still letting issuers run their own bridge when they need to. | Connections start ownerless.","u":"https://developers.circle.com/cctp/expanded-assets/concepts/ownerless-vs-custom-tokens","d":"2026-09-28"},"blast_radius_caps":{"s":6,"q":"Custom token issuers must configure rate limits and a max transfer amount before allowing public transfers. | A rate limit configured as 0 blocks inbound and outbound flows. | The default window length is six hours. | Attestation does not bypass destination TokenManager checks.","u":"https://developers.circle.com/cctp/expanded-assets/howtos/configure-rate-limits-and-caps","d":"2026-09-28"},"exit_and_token_captivity":{"s":5,"q":"CCTP V1 (Legacy) deprecation begins October 31, 2026 and completes on December 1, 2026, in favor of CCTP V2. | You will not lose access to funds during the V1 phase out. | Contracts are deployed at different addresses than V1 contracts.","u":"https://developers.circle.com/cctp/migration-from-v1-to-v2","d":"2026-09-28"}},"hyperlane_warp_routes":{"mint_authority_and_revocation":{"s":4,"q":"Once a mailbox is set up on the chain, anyone can deploy a HWR. | HWRs are commonly deployed by a few different groups - the Abacus Works team, the asset issuer, the chain team, or the application team.","u":"https://docs.hyperlane.xyz/docs/guides/production/warp-route-deployment/transfer-warp-route-ownership","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":1,"q":"Developers can use Hyperlane to permissionlessly deploy HWRs to move assets between chains. | Users transferring interchain tokens should understand the trust assumptions of a Route before using it. | Similarly, Warp frontends should manually curate their HWRs to avoid supporting insecure ones.","u":"https://docs.hyperlane.xyz/docs/protocol/warp-routes/warp-routes-overview","d":"2026-09-28"},"blast_radius_caps":{"s":5,"q":"The Rate Limit ISM caps the total token volume that can be delivered to your HWR on each destination chain within a rolling 24-hour window. | The cap is set by the HWR owner and bounds the worst-case loss from a single incident. | The RateLimitedIsm contract is Ownable .","u":"https://docs.hyperlane.xyz/docs/guides/production/warp-route-deployment/configure-rate-limit-ism","d":"2026-09-28"},"exit_and_token_captivity":{"s":7,"q":"Implemented in HypERC20Collateral.sol , collateral HWRs enable ERC20 tokens to be locked as collateral on the source chain and then used to mint a synthetic representation on the destination chain.","u":"https://docs.hyperlane.xyz/docs/applications/warp-routes/types","d":"2026-09-28"}},"axelar_its":{"mint_authority_and_revocation":{"s":2,"q":"ITS is initially set as the minter for Native Interchain Tokens. | The ITS contract initially holds the minter role for native interchain tokens.","u":"https://docs.axelar.dev/dev/send-tokens/interchain-tokens/minter-operator-roles/","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":5,"q":"function registerCanonicalInterchainToken(address tokenAddress) external payable returns (bytes32 tokenId) { | // Ensure that the ERC20 token has metadata before registering it | deploySalt = keccak256(abi.encode(PREFIX_CANONICAL_TOKEN_SALT, chainNameHash, tokenAddress));","u":"https://github.com/axelarnetwork/interchain-token-service/blob/main/contracts/InterchainTokenFactory.sol","d":"2026-09-28"},"blast_radius_caps":{"s":5,"q":"uint256 flowLimit_ = flowLimit(); | if (flowLimit_ == 0) return;","u":"https://github.com/axelarnetwork/interchain-token-service/blob/main/contracts/utils/FlowLimit.sol","d":"2026-09-28"},"exit_and_token_captivity":{"s":5,"q":"Custom ITS token are not supported in the current version of the ITS Hub. | The Interchain Token Service (ITS) Hub is currently under active development, please check back frequently for updates.","u":"https://docs.axelar.dev/dev/amplifier/its-hub/introduction/","d":"2026-09-28"}},"layerzero_oft":{"mint_authority_and_revocation":{"s":5,"q":"OFTs inherit LayerZero's admin/delegate role model: | Can peer new OApp contracts or remove peers in emergencies. | Can pause or unpause crosschain functionality in emergencies. | Best Practice: Use a multisig to manage both Owner and Delegate privileges.","u":"https://docs.layerzero.network/v2/concepts/technical-reference/oft-reference","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":2,"q":"Deploy your OFT (or OFTAdapter) on each chain you want to support. | You can only have ONE LockUnlock deployment in your entire omnichain mesh. All other chains must use BurnMint.","u":"https://docs.layerzero.network/crosschain/issue-asset/overview","d":"2026-09-28"},"blast_radius_caps":{"s":2,"q":"Robust access controls—through admin and delegate roles—ensure that only authorized parties can update configurations (such as peers, fee settings, security settings, and execution parameters), maintaining a high security standard for all crosschain operations.","u":"https://docs.layerzero.network/v2/concepts/applications/oft-standard","d":"2026-09-28"},"exit_and_token_captivity":{"s":6,"q":"If you already have an active ERC-20 (or SPL, or Move) token with liquidity and integrations, deploying an adapter contract lets you plug into OFT without migrating your token. | Direct Token: You manage roles (Admin, Delegate) within a single contract.","u":"https://docs.layerzero.network/v2/concepts/technical-reference/oft-reference","d":"2026-09-28"}},"superchain_erc20":{"mint_authority_and_revocation":{"s":1,"q":"Allow SuperchainTokenBridge to call crosschainMint and crosschainBurn . | Be deployed at the same address on every chain in the Superchain.","u":"https://specs.optimism.io/interop/token-bridging.html","d":"2026-09-28"},"authorised_deployment_and_provenance":{"s":1,"q":"Anyone can deploy OptimismSuperchainERC20 contracts by using the OptimismSuperchainERC20Factory . | This implies that the same L1 token can have multiple OptimismSuperchainERC20 representations as long as the metadata changes.","u":"https://specs.optimism.io/interop/predeploys.html","d":"2026-09-28"},"blast_radius_caps":{"s":1,"q":"IERC7802 is intentionally lightweight, ensuring minimal overhead for implementation. | These actions also do not require any governance or owner participation, in contrast, for instance, to set rate limits.","u":"https://eips.ethereum.org/EIPS/eip-7802","d":"2026-09-28"},"exit_and_token_captivity":{"s":0,"q":"Be deployed at the same address on every chain in the Superchain. | The fourth property removes the need for cross-chain access control lists. | Same address abstracts away cross-chain validation.","u":"https://specs.optimism.io/interop/token-bridging.html","d":"2026-09-28"}}}}