wormhole/ethereum/contracts/relayer/libraries/RelayerInternalStructs.sol

67 lines
2.2 KiB
Solidity

// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.19;
import "../../interfaces/relayer/TypedUnits.sol";
import "../../interfaces/relayer/IWormholeRelayerTyped.sol";
struct DeliveryInstruction {
uint16 targetChain;
bytes32 targetAddress;
bytes payload;
TargetNative requestedReceiverValue;
TargetNative extraReceiverValue;
bytes encodedExecutionInfo;
uint16 refundChain;
bytes32 refundAddress;
bytes32 refundDeliveryProvider;
bytes32 sourceDeliveryProvider;
bytes32 senderAddress;
MessageKey[] messageKeys;
}
// Meant to hold all necessary values for `CoreRelayerDelivery::executeInstruction`
// Nothing more and nothing less.
struct EvmDeliveryInstruction {
uint16 sourceChain;
bytes32 targetAddress;
bytes payload;
Gas gasLimit;
TargetNative totalReceiverValue;
GasPrice targetChainRefundPerGasUnused;
bytes32 senderAddress;
bytes32 deliveryHash;
bytes[] signedVaas;
}
struct RedeliveryInstruction {
VaaKey deliveryVaaKey;
uint16 targetChain;
TargetNative newRequestedReceiverValue;
bytes newEncodedExecutionInfo;
bytes32 newSourceDeliveryProvider;
bytes32 newSenderAddress;
}
/**
* @notice When a user requests a `resend()`, a `RedeliveryInstruction` is emitted by the
* WormholeRelayer and in turn converted by the relay provider into an encoded (=serialized)
* `DeliveryOverride` struct which is then passed to `delivery()` to override the parameters of
* a previously failed delivery attempt.
*
* @custom:member newReceiverValue - must >= than the `receiverValue` specified in the original
* `DeliveryInstruction`
* @custom:member newExecutionInfo - for EVM_V1, must contain a gasLimit and targetChainRefundPerGasUnused
* such that
* - gasLimit is >= the `gasLimit` specified in the `executionParameters`
* of the original `DeliveryInstruction`
* - targetChainRefundPerGasUnused is >= the `targetChainRefundPerGasUnused` specified in the original
* `DeliveryInstruction`
* @custom:member redeliveryHash - the hash of the redelivery which is being performed
*/
struct DeliveryOverride {
TargetNative newReceiverValue;
bytes newExecutionInfo;
bytes32 redeliveryHash;
}