Token Remote
Learn about the Token Remote, the asset destination component of the ICTT
TokenRemote
An abstract implementation of ITokenTransferrer
for a token transfer contract on a "remote" chain that receives transferred assets from a specific TokenHome
instance. Each TokenRemote
instance has a single TokenHome
instance that it receives token transfers from to mint tokens. It also handles sending messages (and correspondingly burning tokens) to route tokens back to other chains (either its TokenHome
, or other TokenRemote
instances).
Once deployed, a TokenRemote
instance must be registered with its specified TokenHome
contract. This is done by calling registerWithHome
on the remote contract, which will send a Interchain Messaging message to the home contract with the information to register.
All messages sent by TokenRemote
instances are sent to the specified TokenHome
contract, whether they are to redeem the collateral from the TokenHome
instance or route the tokens to another TokenRemote
instance.
Routing tokens from one TokenRemote
instance to another is referred to as a "multi-hop", where the tokens are first sent back to their TokenHome
contract to update its accounting, and then automatically routed on to their intended destination TokenRemote
instance.
TokenRemote contracts allow for scaling token amounts, which should be used when the remote asset has a higher or lower denomination than the home asset, such as allowing for a ERC20 home asset with a denomination of 6 to be used as the native EVM asset on a remote chain (with a denomination of 18).
ERC20TokenRemote
A concrete implementation of TokenRemote
, IERC20TokenTransferrer
, and IERC20
that handles the minting and burning of an ERC20 asset. Note that the ERC20TokenRemote
contract is an ERC20 implementation itself, which is why it takes the tokenName
, tokenSymbol
, and tokenDecimals
in its constructor.
All of the ERC20 interface implementations are inherited from the standard OpenZeppelin ERC20 implementation and can be overridden in other implementations if desired.
NativeTokenRemote
A concrete implementation of TokenRemote
, INativeTokenTransferrer
, and IWrappedNativeToken
that handles the minting and burning of the native EVM asset on its chain using the native minter precompile.
Deployments of this contract must be permitted to mint native coins in the chain's configuration. Note that the NativeTokenRemote
is also an implementation of IWrappedNativeToken
itself, which is why the nativeAssetSymbol
must be provided in its constructor.
NativeTokenRemote
instances always have a denomination of 18, which is the denomination of the native asset of EVM chains.
Register with Home
TBD