Deploy ERC20 Token Remote
Deploy and register the ERC20TokenRemote contract to the Avalanche C-Chain.
Deploy ERC20TokenRemote
on C-Chain
Using the forge create
command, we will deploy the ERC20TokenRemote.sol contract, passing in the following constructor arguments:
- Interchain Messaging Registry Address (for C-Chain)
- Interchain Messaging Manager (our funded address)
- Source Blockchain ID (hexidecimal representation of our Avalanche L1's Blockchain ID
myblockchain
) - Token Home Address (address of NativeTokenHome.sol deployed on our Avalanche L1
myblockchain
in the last step) - Token Name (input in the constructor of the wrapped token contract)
- Token Symbol (input in the constructor of the wrapped token contract)
- Token Decimals (uint8 integer representing number of decimal places for the ERC20 token being created; typically 18 decimals)
forge create --rpc-url local-c --private-key $PK lib/avalanche-interchain-token-transfer/contracts/src/TokenRemote/ERC20TokenRemote.sol:ERC20TokenRemote \
--constructor-args "(${TELEPORTER_REGISTRY_C_CHAIN}, ${FUNDED_ADDRESS}, ${SOURCE_BLOCKCHAIN_ID_HEX}, ${ERC20_HOME_BRIDGE_L1}, 18)" "Wrapped NATV" "WNATV" 18
[⠊] Compiling...
[⠆] Compiling 5 files with Solc 0.8.18
[⠰] Solc 0.8.18 finished in 1.23s
Compiler run successful!
Deployer: 0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC
Deployed to: 0x5DB9A7629912EBF95876228C24A848de0bfB43A9 // [!code highlight]
Transaction hash: 0x3d437a3421f7b2b1bf0276e9a80f57815291e62313584ff48afb69fb206b5daf
Save the ERC20 Token Remote Address
export ERC20_TOKEN_REMOTE_C_CHAIN=0x5DB9A7629912EBF95876228C24A848de0bfB43A9
Register ERC20TokenRemote
on C-Chain with NativeTokenHome
on myblockchain
After deploying the bridge contracts, you'll need to register the remote bridge by sending a dummy message using the registerWithHome
method. This message includes details which inform the home bridge about your destination blockchain and bridge settings, eg. initialReserveImbalance
.
cast send --rpc-url local-c --private-key $PK $ERC20_TOKEN_REMOTE_C_CHAIN "registerWithHome((address, uint256))" "(0x0000000000000000000000000000000000000000, 0)"
Edit on GitHub
Last updated on 1/9/2025