IntroductionCosmos GMPSolidity UtilitiesSandbox
InterchainTokenServiceInterchainTokenFactoryTokenManagerAxelarGateway AxelarGasServiceAxelarExecutableAxelarJS SDK
Bug Bounty
Crosschain Message FlowaxlUSDCSecurity OverviewInterchain Transaction DurationEVM Contract Governance

Upgrade existing tokens into Interchain Token(s)

The Token Whitelisting for Squid Router form is now live! Download the axelar-configs repo, install dependencies, and npm run wizard on the command line to access the interactive form through the wizard.

There are two ways upgrade an existing ERC-20 token into an Interchain Token, depending on your situation:

  1. If your token only exists on one chain and you want to make it available on multiple chains as an Interchain Token, you can turn it into a canonical token.
  2. If your token exists on multiple chains, and you want to link them all into one Interchain Token, you can use a custom token integration and deploy a token manager that does the linking for you.
🚨

NOTE: The security of your token is limited to the security of the chains it integrates with. Since blockchains can have different security practices, we recommend doing due diligence on all chains your token will be deployed to.

Contract addresses

Make an existing token into a canonical Interchain Token

If you have an ERC-20 token on a single chain and want a wrapped, bridgeable version on other chains, register and deploy it as a canonical token via the Interchain Token Service using Interchain Token Factory. Each token can only be registered a single time as a canonical chain.

Register your token as a canonical Interchain Token

Register your token as a canonical token by calling registerCanonicalInterchainToken() on the InterchainTokenFactory contract. This will deploy a Lock/Release token manager on the source chain.

Deploy your new remote canonical Interchain Token

  1. Call the deployRemoteCanonicalInterchainToken() method on the InterchainTokenFactory contract for each destination chain to deploy a remote canonical Interchain Token for a pre-existing token. This will create and register a Mint/Burn token manager for each token on each destination chain. These tokens do not depend on a deployer address or salt.
  2. Call the approve() method on your token to approve the Interchain Token Service to spend tokens. Specify the Interchain Token Service address and the amount to be approved.
  3. Call the interchainTransfer() method to begin transferring Interchain Tokens between chains.

If you need to pre-mint a supply of tokens, you must also give ERC-20 approval to the InterchainTokenFactory contract. When tokens are moved from the origin chain to another chain, the token will be locked on the origin chain and minted on the destination chain. If you moved tokens directly from one non-origin chain to another, the token would be burned on the source chain and minted on the destination chain.

Tutorial

For detailed steps on deploying a canonical Interchain Token and transferring it between chains, check out the Programmatically Create a Canonical Interchain Token Using the Interchain Token Service tutorial.

To link tokens on multiple chains into one Interchain Token, you should already have a custom token deployed on multiple chains, or have existing versions of an ERC-20 token on multiple chains.

If you want to build your token with the IInterchainToken feature yourself, make sure your token implements the IInterchainTokenStandard interface so you can offer interchainTransfer() and interchainTransferFrom() methods directly on the token.

  1. Call deployTokenManager() on the Interchain Token Service to deploy a token manager for the existing version of the token on all chains.
  • You can use the Online Ethereum ABI Encoder to create the params for initializing the token manager. The token manager operator will be of type bytes, and the token address will be an address.
  • You can specify at most one chain (likely the primary or origin) to have a Lock/Unlock token manager. The rest must be Mint/Burn.
  1. Call interchainTransfer() to transfer Interchain Tokens between chains.

What’s next

For further examples utilizing the Interchain Token Service, take a look at the axelar-examples repo on GitHub.

Edit this page