// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; /** * @notice Interface for a contract which can receive Wormhole messages. */ interface IWormholeReceiver { /** * @notice When a `send` is performed with this contract as the target, this function will be * invoked by the WormholeRelayer contract * * NOTE: This function should be restricted such that only the Wormhole Relayer contract can call it. * * We also recommend that this function checks that `sourceChain` and `sourceAddress` are indeed who * you expect to have requested the calling of `send` on the source chain * * The invocation of this function corresponding to the `send` request will have msg.value equal * to the receiverValue specified in the send request. * * If the invocation of this function reverts or exceeds the gas limit * specified by the send requester, this delivery will result in a `ReceiverFailure`. * * @param payload - an arbitrary message which was included in the delivery by the * requester. This message's signature will already have been verified (as long as msg.sender is the Wormhole Relayer contract) * @param additionalMessages - Additional messages which were requested to be included in this delivery. * Note: There are no contract-level guarantees that the messages in this array are what was requested * so **you should verify any sensitive information given here!** * * For example, if a 'VaaKey' was specified on the source chain, then MAKE SURE the corresponding message here * has valid signatures (by calling `parseAndVerifyVM(message)` on the Wormhole core contract) * * This field can be used to perform and relay TokenBridge or CCTP transfers, and there are example * usages of this at * https://github.com/wormhole-foundation/hello-token * https://github.com/wormhole-foundation/hello-cctp * * @param sourceAddress - the (wormhole format) address on the sending chain which requested * this delivery. * @param sourceChain - the wormhole chain ID where this delivery was requested. * @param deliveryHash - the VAA hash of the deliveryVAA. * */ function receiveWormholeMessages( bytes memory payload, bytes[] memory additionalMessages, bytes32 sourceAddress, uint16 sourceChain, bytes32 deliveryHash ) external payable; }