Hello World
Here is a hello-world example that sends and receives cross-chain messages with simple logics:
- Users call
sendMessage
on the source chain to send a cross-chain message. - The receiver side implements
executeMessage
to receive and emit the message at the destination chain.
1
// A HelloWorld example for basic cross-chain message passing
2
contract MsgExampleBasic is MessageApp {
3
event MessageReceived(
4
address srcContract,
5
uint64 srcChainId,
6
address sender,
7
bytes message
8
);
9
10
constructor(address _messageBus) MessageApp(_messageBus) {}
11
12
// called by user on source chain to send cross-chain messages
13
function sendMessage(
14
address _dstContract,
15
uint64 _dstChainId,
16
bytes calldata _message
17
) external payable {
18
bytes memory message = abi.encode(msg.sender, _message);
19
sendMessage(_dstContract, _dstChainId, message, msg.value);
20
}
21
22
// called by MessageBus on destination chain to receive cross-chain messages
23
function executeMessage(
24
address _srcContract,
25
uint64 _srcChainId,
26
bytes calldata _message,
27
address // executor
28
) external payable override onlyMessageBus returns (ExecutionStatus) {
29
(address sender, bytes memory message) = abi.decode(
30
(_message),
31
(address, bytes)
32
);
33
emit MessageReceived(_srcContract, _srcChainId, sender, message);
34
return ExecutionStatus.Success;
35
}
36
}
Last modified 1yr ago