logoAcademy

Interchain Token Transfer Design

Get familiar with the ICTT design

Each token transferrer instance consists of one "home" contract and at least one but possibly many "remote" contracts. Each home contract instance manages one asset to be transferred out to TokenRemote instances. The home contract lives on the Avalanche L1 where the asset to be transferred exists.

A transfer involves locking the asset as collateral on the home Avalanche L1 and minting a representation of the asset on the remote Avalanche L1. The remote contracts, each with a single specified home contract, live on other Avalanche L1s that want to import the asset transferred by their specified home.

The token transferrers are designed to be permissionless: anyone can register compatible TokenRemote instances to transfer tokens from the TokenHome instance to that new TokenRemote instance.

The home contract keeps track of token balances transferred to each TokenRemote instance and handles returning the original tokens to the user when assets are transferred back to the TokenHome instance.

TokenRemote instances are registered with their home contract via a Interchain Messaging message upon creation.

Home contract instances specify the asset to be transferred as either an ERC20 token or the native token, and they allow for transferring the token to any registered TokenRemote instances. The token representation on the remote chain can also either be an ERC20 or native token, allowing users to have any combination of ERC20 and native tokens between home and remote chains:

  • ERC20 -> ERC20
  • ERC20 -> Native
  • Native -> ERC20
  • Native -> Native

The remote tokens are designed to have compatibility with the token transferrer on the home chain by default, and they allow custom logic to be implemented in addition. For example, developers can inherit and extend the ERC20TokenRemote contract to add additional functionality, such as a custom minting, burning, or transfer logic.

Updated:

On this page

No Headings
Edit on Github