Created
August 30, 2023 18:02
-
-
Save gat786/176eb16e0e9af44f5327f78cbf618cb1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity 0.8.19; | |
import {Client} from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol"; | |
import {CCIPReceiver} from "@chainlink/contracts-ccip/src/v0.8/ccip/applications/CCIPReceiver.sol"; | |
/** | |
* THIS IS AN EXAMPLE CONTRACT THAT USES HARDCODED VALUES FOR CLARITY. | |
* THIS IS AN EXAMPLE CONTRACT THAT USES UN-AUDITED CODE. | |
* DO NOT USE THIS CODE IN PRODUCTION. | |
*/ | |
/// @title - A simple contract for receiving string data across chains. | |
contract Receiver is CCIPReceiver { | |
// Event emitted when a message is received from another chain. | |
event MessageReceived( | |
bytes32 indexed messageId, // The unique ID of the message. | |
uint64 indexed sourceChainSelector, // The chain selector of the source chain. | |
address sender, // The address of the sender from the source chain. | |
string text // The text that was received. | |
); | |
bytes32 private lastReceivedMessageId; // Store the last received messageId. | |
string private lastReceivedText; // Store the last received text. | |
/// @notice Constructor initializes the contract with the router address. | |
/// @param router The address of the router contract. | |
constructor(address router) CCIPReceiver(router) {} | |
/// handle a received message | |
function _ccipReceive( | |
Client.Any2EVMMessage memory any2EvmMessage | |
) internal override { | |
lastReceivedMessageId = any2EvmMessage.messageId; // fetch the messageId | |
lastReceivedText = abi.decode(any2EvmMessage.data, (string)); // abi-decoding of the sent text | |
emit MessageReceived( | |
any2EvmMessage.messageId, | |
any2EvmMessage.sourceChainSelector, // fetch the source chain identifier (aka selector) | |
abi.decode(any2EvmMessage.sender, (address)), // abi-decoding of the sender address, | |
abi.decode(any2EvmMessage.data, (string)) | |
); | |
} | |
/// @notice Fetches the details of the last received message. | |
/// @return messageId The ID of the last received message. | |
/// @return text The last received text. | |
function getLastReceivedMessageDetails() | |
external | |
view | |
returns (bytes32 messageId, string memory text) | |
{ | |
return (lastReceivedMessageId, lastReceivedText); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment