Skip to main content

Manage Warp Route Limits on xERC20 and FiatToken

xERC20 Deployments

Warp Routes support xERC20 tokens. Follow these steps to configure xERC20 for Warp Route usage:

  1. Ownership Transfer:
  • Ensure that the ownership of the xERC20 contract is transferred to a secure multisig for security purposes. This step is crucial to prevent unauthorized changes.
  • The xERC20 contract uses OpenZeppelin's Ownable interface. Use the transferOwnership function to complete this step.
  1. Mint Limit Configuration:
  • The minting and burning limits for the Warp Route contract are managed through the setLimits function in the xERC20 contract. This function must be called by the contract owner.
    • The xERC20 contract uses a 24-hour window to manage limits. This is defined by the _DURATION variable, which is set to 1 days (24 hours). The current available limits are calculated dynamically using the _getCurrentLimit function.
    • If 24 hours (_DURATION) have passed since the last use, the limit will automatically restore to the full maxLimit.
  • Ensure limits are appropriate for the expected volume to prevent disruptions. Review and adjust the limits based on transaction volumes and expected usage patterns.

FiatToken Deployments

Warp Routes support Circle's Bridged USDC in the form of a minter for FiatToken (See more on the repo for documentation). There are three roles that are relevant on the FiatToken and MasterMinter contracts:

  1. MasterMinter owner is the account that can set controllers and minters.
  2. MasterMinter controller is the account that can set the mint limits for its assigned minters.
  3. MasterMinter minter is the account that can actually call mint on FiatToken.

Owner and controller should be typically set to a Safe multisig for enhanced security, the minter is the warp route contract address on the local chain.

There are three actions that should be set on the MasterMinter contract to be ready for usage:

  1. As the owner, remove the previous test controller via the removeController(address _controller) function
  2. As the owner, you should set the controller and minter via the configureController(address controller, address worker) funcition. The controller can be the same as the owner, the minter should be the warp route address.
  3. As the controller, you should set the mint limit for the minter via the configureMinter(uint256 _newAllowance) function. This limit is not being continuously reset, so either set it to a sufficiently large value (like cast max-uint) or monitor the usage and adjust accordingly.