// SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IMessageRecipient} from "../interfaces/IMessageRecipient.sol"; import {IInterchainSecurityModule, ISpecifiesInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol"; contract TestRecipient is Ownable, IMessageRecipient, ISpecifiesInterchainSecurityModule { IInterchainSecurityModule public interchainSecurityModule; bytes32 public lastSender; bytes public lastData; address public lastCaller; string public lastCallMessage; event ReceivedMessage( uint32 indexed origin, bytes32 indexed sender, uint256 indexed value, string message ); event ReceivedCall(address indexed caller, uint256 amount, string message); function handle( uint32 _origin, bytes32 _sender, bytes calldata _data ) external payable virtual override { emit ReceivedMessage(_origin, _sender, msg.value, string(_data)); lastSender = _sender; lastData = _data; } function fooBar(uint256 amount, string calldata message) external { emit ReceivedCall(msg.sender, amount, message); lastCaller = msg.sender; lastCallMessage = message; } function setInterchainSecurityModule(address _ism) external onlyOwner { interchainSecurityModule = IInterchainSecurityModule(_ism); } receive() external payable {} }