Permissionless Token bridging
Last updated
Last updated
Permissionless bridging is easy with anyCall. Anyone can deploy a working bridge for any tokens in minutes.
When users bridge, the tokens are burnt on the source chain and you use anyCall to pass a message cross-chain to mint the same amount of tokens on the destination chain.
The following instructions would be partnered with examples. We would showcase this with a permissionless bridge from fantom testnet to rinkeby.
Example:
Fork the following contract and constructor arguments should be anycall contract address and admin address.
Callproxy
should be set to anycall contract address. This information can be found here:
Example:
Minting and burning rights need to be given on both the destination and source chain:
a. Bridge Contract: Your bridge contract will be burning and minting tokens in the bridge process.
The default anyerc20 implementation contains a timelock, you have to call applyMinter
after timelock is finished.
Example:
Client peers: setClientPeers(uint256[] _chainIds, address[] _peers)
This stores information of the destination chain bridge contract address to issue anycall on the correct destination contracts.
Token peers: setTokenPeers(address srcToken, uint256[] chainIds, address[] dstTokens)
This stores information of destination chain token address. This makes sure the right token is interacted.
Example:
Set Client Peers
This is an example of the bridge process in production. We are bridging from fantom testnet to rinkeby.
The fantom testnet tx is done with flags 2
as the argument and the tx was sent with some ftm as msg.value. This means we would cover the gas fee of destination chain execution on the source chain.
Step 1: Swapout (Bridge out/Burn the tokens)
Step 2: AnyExec (Bridge In/Mint the tokens)
After you build out the permissionless bridge, you can host the frontend on your ui or apply to be included on our website. If you wish to be listed on our website, please contact our team through this email: contact@multichain.org.