Message And Relay
Example Requirement: There is a key on source chain A. As it passes through the relay chain, the corresponding value of the key on the relay chain is transmitted to chain B for storage, so that chain B can also retrieve the value corresponding to the key.
Necessary Conditions:
On the source chain, the Omni service interface and contract address are required to initiate a cross-chain event.
On the relay chain, there needs to be a relay contract that implements the
mapoExecutemethod and returns standard encodedMessageDatafor cross-chain transmission.On the target chain, the
IMapoExecutorinterface must be introduced to implement themapoExecutemethod.
We initiate a cross-chain event on source chain A.
"@butternetwork/omniservice/contracts/interface/IMOSV3.sol";
contract A {
//The contract address of OmniService on chain A
IMOSV3 public imosv3;
function sendDictionaryMessage(
uint256 _tochainId, //The chain ID of the target chain.
bytes memory _target, //The contract address on the target chain.
string memory _key //The message key on chain A.
) external payable {
//Encode the message that needs to be cross-chain.
bytes memory data = abi.encode(_key);
IMOSV3.MessageData memory mData = IMOSV3.MessageData(
//It means that cross-chain transactions will undergo processing on the relay chain
//and then proceed with the cross-chain operation.
true,
IMOSV3.MessageType.MESSAGE,
//When relay is true, you need to use the target address on the relay chain.
_target,
data,
500000,
0
);
//Encode the MessageData structure for cross-chain transmission.
bytes memory mDataBytes = abi.encode(mData);
//Retrieve the amount of fee required for cross-chain transaction.
(uint256 amount, ) = imosv3.getMessageFee(_tochainId, address(0), 500000);
//Initiate the cross-chain request using OmniChain Service
imosv3.transferOut{value: amount}(_tochainId, mDataBytes, address(0));
}
}After messager detects the cross-chain log, it processes the cross-chain message on the relay chain, then continues to send the newMessage received to initiate a cross-chain event on the target chain.
We implement mapoExecute on chain B to finalize the cross-chain message execution.
Advantages of MESSAGE with Relay:
Enables data processing through the relay chain.
Provides a unified orderId for cross-chain transactions, ensuring clarity in the cross-chain path.
Allows for more refined handling of cross-chain data.
Last updated