Multichain
Search…
⌃K

Quickstart (Cross-chain text example)

This part goes over a simple example as well as how to send and receive message using anyCall.
Please fork the repo above and follow the readme.
This repo would deploy a solidity contract on two chains and send a text message from chain A to chain B. This is purposed to showcase anyCall V7 cross-chain messaging capability.
  1. 1.
    Set up the environments with yarn or npm yarn || npm install
  2. 2.
    add prvkey in .env.example file and add etherscan apis if you want to auto verify. Change the .env.example filename to .env
  3. 3.
    Deploy the example contract on ftm testnet and bnb testnet. Make sure you have gas tokens on both chains. Run these two commands:
"yarn hardhat deploy --network ftmtest"
"yarn hardhat deploy --network bnbtest"
4. Test the flow by running the below command. (You can change customMessage in 1testanycall.js to change the message sent)
"yarn hardhat run ./scripts/1testanycall.js --network ftmtest"

Code Breakdown

Sending the message

The function below is an example. This sends a simple text message to the destination chain by using the anyCall funciton.
function step1_initiateAnyCallSimple_srcfee(string calldata _msg) payable external {
emit NewMsg(_msg);
if (msg.sender == owneraddress){
CallProxy(anycallcontract).anyCall{value: msg.value}(
receivercontract, //Destination Contract Address
abi.encode(_msg), //encoded string as bytes
destchain, //destination chain id
0, // Using 0 flag to pay fee on the source chain
"" //extra data used for advanced use cases
);
}
}
Here's a more detailed breakdown of the parameters.

anyCall Interfaces

anyCall (Called by Dapps)

function anyCall( address _to, bytes calldata _data, uint256 _toChainID, uint256 _flags, bytes calldata )
The destination chain would call anyExecute function on the _to address with _data passed in the function. And you can customize what you do with such _data.

Parameters

Param
Type
Description
_to
address
The target contract to interact with on _toChainID
_data
bytes
The calldata supplied for the interaction with _to
anyExecute will be run with this _data on the receiver contract you deployed.
_toChainID
uint256
The target chain id to interact with
_flags
uint256
How dapps are paying gas fee of tx execution:
2: Gas fee paid on destination chain.
4: Allow fallback

Receiving the message

The following function named anyExecute would process the data sent. In this case, it'd simply decode the data and emit an event. The function must be called anyExecute.
function anyExecute(bytes memory _data) external returns (bool success, bytes memory result){
(string memory _msg) = abi.decode(_data, (string));
emit NewMsg(_msg);
success=true;
result='';
}

anyExecute Parameters (This exact format needs to be implemented in your dapp, what would be called on the destination chain)

function anyExecute(bytes calldata data) external override onlyExecutor returns (bool success, bytes memory result)

Parameters

Param
Type
Description
data
bytes
The calldata supplied for the interaction with subsequent contracts
Returned Values
success
bool
The address to call on _fromChainID if the cross chain interaction fails
result
bytes
The originating chain id