Skip to main content
ERC20Plus is an enhanced, upgradeable ERC20 token that works consistently across EVM chains supported by LayerZero, without relying on native token standard quirks that vary by chain. It provides administrative controls directly at the token level.

Feature Comparison

FeatureStandard ERC20ERC20Plus
Transfer / Approve / AllowanceYesYes
Role-based mintNoYes (MINTER_ROLE)
Role-based burnNoYes (BURNER_ROLE)
Allowlist (3-mode)NoYes (Open / Blacklist / Whitelist)
Global pauseNoYes (separate PAUSER_ROLE / UNPAUSER_ROLE)
Fund recoveryNoYes (DEFAULT_ADMIN_ROLE)
ERC20Permit (EIP-2612)OptionalBuilt-in
Enumerable address listsNoYes (paginated blacklist/whitelist queries)
UpgradeableDependsYes (EIP-7201 namespaced storage)
RBAC (AccessControl2Step)NoYes (OpenZeppelin)

Features

Role-Based Minting and Burning

ERC20Plus defines two roles for token supply management:
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
  • MINTER_ROLE: Can call mint(address _to, uint256 _amount) to create new tokens
  • BURNER_ROLE: Can call burn(address _from, uint256 _amount) to destroy tokens
When used with OFTs, the OFT contract must be granted both MINTER_ROLE and BURNER_ROLE so it can mint tokens on the receive path and burn tokens on the send path.

Allowlist, Pause, and Fund Recovery

ERC20Plus includes a three-mode allowlist (Open / Blacklist / Whitelist), a global pause with separate pauser/unpauser roles, and a fund recovery function for compliance seizures from non-allowlisted addresses. These are documented in detail on the Extensions page alongside the OFT-level extensions.

ERC20Permit (EIP-2612)

Built-in support for gasless approvals via signed messages. Users can authorize token spending by signing an off-chain message instead of submitting an on-chain approve transaction:
function permit(
    address owner,
    address spender,
    uint256 value,
    uint256 deadline,
    uint8 v, bytes32 r, bytes32 s
) external;
Nonces are available via nonces(address owner).

Working with OFTs

When ERC20Plus is used with the OFT Burn/Mint variant:
  1. Deploy ERC20Plus on each chain
  2. Deploy OFTBurnMint on each chain, pointing to the ERC20Plus token address
  3. Grant MINTER_ROLE and BURNER_ROLE to the OFTBurnMint address on each chain’s ERC20Plus
  4. Set peers and LZ messaging configurations between OFTBurnMint contracts across chains
The OFT uses configurable function selectors to call the token’s mint/burn functions. For ERC20Plus, the default selectors are:
  • Mint: 0x40c10f19 (mint(address,uint256))
  • Burn: 0x9dc29fac (burn(address,uint256))

Next Steps

  • OFTs for choosing the right variant
  • RBAC Reference for roles and access-controlled functions on ERC20Plus