Relayer: Natspec documentation in IWormholeRelayer (#3032)
* WIP * Fixes * Updated interfaces
This commit is contained in:
parent
93916a5606
commit
3d676996c1
|
@ -2,12 +2,22 @@
|
|||
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
/**
|
||||
* @title WormholeRelayer
|
||||
* @author
|
||||
* @notice This project allows developers to build cross-chain applications powered by Wormhole without needing to
|
||||
* write and run their own relaying infrastructure
|
||||
*
|
||||
* We implement the IWormholeRelayer interface that allows users to request a delivery provider to relay a payload (and/or additional VAAs)
|
||||
* to a chain and address of their choice.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @notice VaaKey identifies a wormhole message
|
||||
*
|
||||
* @custom:member chainId - only specified if `infoType == VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member emitterAddress - only specified if `infoType = VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member sequence - only specified if `infoType = VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member chainId Wormhole chain ID of the chain where this VAA was emitted from
|
||||
* @custom:member emitterAddress Address of the emitter of the VAA, in Wormhole bytes32 format
|
||||
* @custom:member sequence Sequence number of the VAA
|
||||
*/
|
||||
struct VaaKey {
|
||||
uint16 chainId;
|
||||
|
@ -24,11 +34,30 @@ interface IWormholeRelayerBase {
|
|||
}
|
||||
|
||||
/**
|
||||
* IWormholeRelayer
|
||||
* @notice Users may use this interface to have payloads and/or wormhole VAAs
|
||||
* relayed to destination contract(s) of their choice.
|
||||
* @title IWormholeRelayerSend
|
||||
* @notice The interface to request deliveries
|
||||
*/
|
||||
interface IWormholeRelayerSend is IWormholeRelayerBase {
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the `sendPayloadToEvm` function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -37,6 +66,26 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint256 gasLimit
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -47,6 +96,26 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address refundAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the `sendVaasToEvm` function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -56,6 +125,27 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -67,6 +157,34 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address refundAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit, deliveryProviderAddress) + paymentForExtraReceiverValue
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -80,7 +198,35 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys,
|
||||
uint8 consistencyLevel
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteDeliveryPrice(targetChain, receiverValue, encodedExecutionParameters, deliveryProviderAddress) + paymentForExtraReceiverValue
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function send(
|
||||
uint16 targetChain,
|
||||
bytes32 targetAddress,
|
||||
|
@ -95,6 +241,34 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the same delivery provider (or default, if the same one doesn't support the new target chain)
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f)]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the 'forwardToEvm' function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
*/
|
||||
function forwardPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -103,6 +277,35 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint256 gasLimit
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the same delivery provider (or default, if the same one doesn't support the new target chain)
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f)]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the 'forwardToEvm' function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
*/
|
||||
function forwardVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -112,6 +315,44 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f, deliveryProviderAddress_f) + paymentForExtraReceiverValue_f]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
*/
|
||||
function forwardToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -126,6 +367,44 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteDeliveryPrice(targetChain_f, receiverValue_f, encodedExecutionParameters_f, deliveryProviderAddress_f) + paymentForExtraReceiverValue_f]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
*/
|
||||
function forward(
|
||||
uint16 targetChain,
|
||||
bytes32 targetAddress,
|
||||
|
@ -140,6 +419,22 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Requests a previously published delivery instruction to be redelivered
|
||||
* (e.g. with a different delivery provider)
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteEVMDeliveryPrice(targetChain, newReceiverValue, newGasLimit, newDeliveryProviderAddress)
|
||||
*
|
||||
* @param deliveryVaaKey VaaKey identifying the wormhole message containing the
|
||||
* previously published delivery instructions
|
||||
* @param targetChain The target chain that the original delivery targeted. Must match targetChain from original delivery instructions
|
||||
* @param newReceiverValue new msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param newGasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider, to the refund chain and address specified in the original request
|
||||
* @param newDeliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return sequence sequence number of published VAA containing redelivery instructions
|
||||
*/
|
||||
function resendToEvm(
|
||||
VaaKey memory deliveryVaaKey,
|
||||
uint16 targetChain,
|
||||
|
@ -148,6 +443,22 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address newDeliveryProviderAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Requests a previously published delivery instruction to be redelivered
|
||||
*
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteDeliveryPrice(targetChain, newReceiverValue, newEncodedExecutionParameters, newDeliveryProviderAddress)
|
||||
*
|
||||
* @param deliveryVaaKey VaaKey identifying the wormhole message containing the
|
||||
* previously published delivery instructions
|
||||
* @param targetChain The target chain that the original delivery targeted. Must match targetChain from original delivery instructions
|
||||
* @param newReceiverValue new msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param newEncodedExecutionParameters new encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param newDeliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return sequence sequence number of published VAA containing redelivery instructions
|
||||
*/
|
||||
function resend(
|
||||
VaaKey memory deliveryVaaKey,
|
||||
uint16 targetChain,
|
||||
|
@ -156,12 +467,33 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address newDeliveryProviderAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using the default delivery provider
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return targetChainRefundPerGasUnused amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified
|
||||
*/
|
||||
function quoteEVMDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
uint256 receiverValue,
|
||||
uint256 gasLimit
|
||||
) external view returns (uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using delivery provider `deliveryProviderAddress`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return targetChainRefundPerGasUnused amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified
|
||||
*/
|
||||
function quoteEVMDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
uint256 receiverValue,
|
||||
|
@ -169,6 +501,20 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address deliveryProviderAddress
|
||||
) external view returns (uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using delivery provider `deliveryProviderAddress`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return encodedExecutionInfo encoded information on how the delivery will be executed
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` and `targetChainRefundPerGasUnused`
|
||||
* (which is the amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified)
|
||||
*/
|
||||
function quoteDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
uint256 receiverValue,
|
||||
|
@ -176,6 +522,16 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address deliveryProviderAddress
|
||||
) external view returns (uint256 nativePriceQuote, bytes memory encodedExecutionInfo);
|
||||
|
||||
/**
|
||||
* @notice Returns the (extra) amount of target chain currency that `targetAddress`
|
||||
* will be called with, if the `paymentForExtraReceiverValue` field is set to `currentChainAmount`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param currentChainAmount The value that `paymentForExtraReceiverValue` will be set to
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return targetChainAmount The amount such that if `targetAddress` will be called with `msg.value` equal to
|
||||
* receiverValue + targetChainAmount
|
||||
*/
|
||||
function quoteNativeForChain(
|
||||
uint16 targetChain,
|
||||
uint256 currentChainAmount,
|
||||
|
@ -190,6 +546,10 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
function getDefaultDeliveryProvider() external view returns (address deliveryProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title IWormholeRelayerDelivery
|
||||
* @notice The interface to execute deliveries. Only relevant for Delivery Providers
|
||||
*/
|
||||
interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
||||
enum DeliveryStatus {
|
||||
SUCCESS,
|
||||
|
@ -214,8 +574,7 @@ interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
|||
* corresponding to this delivery request
|
||||
* @custom:member deliveryVaaHash - The hash of the delivery VAA corresponding to this delivery
|
||||
* request
|
||||
* @custom:member gasUsed - The amount of gas that was used to call your target contract (and, if
|
||||
* there was a forward, to ensure that there were enough funds to complete the forward)
|
||||
* @custom:member gasUsed - The amount of gas that was used to call your target contract
|
||||
* @custom:member status:
|
||||
* - RECEIVER_FAILURE, if the target contract reverts
|
||||
* - SUCCESS, if the target contract doesn't revert and no forwards were requested
|
||||
|
@ -248,17 +607,16 @@ interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
|||
);
|
||||
|
||||
/**
|
||||
* @notice The relay provider calls `deliver` to relay messages as described by one delivery instruction
|
||||
* @notice The delivery provider calls `deliver` to relay messages as described by one delivery instruction
|
||||
*
|
||||
* The relay provider must pass in the specified (by VaaKeys[]) signed wormhole messages (VAAs) from the source chain
|
||||
* The delivery provider must pass in the specified (by VaaKeys[]) signed wormhole messages (VAAs) from the source chain
|
||||
* as well as the signed wormhole message with the delivery instructions (the delivery VAA)
|
||||
*
|
||||
* The messages will be relayed to the target address (with the specified gas limit and receiver value) iff the following checks are met:
|
||||
* - the delivery VAA has a valid signature
|
||||
* - the delivery VAA's emitter is one of these WormholeRelayer contracts
|
||||
* - the delivery instruction container in the delivery VAA was fully funded
|
||||
* - msg.sender is the permissioned address allowed to execute this instruction
|
||||
* - the relay provider passed in at least enough of this chain's currency as msg.value (enough meaning the maximum possible refund) * - the instruction's target chain is this chain
|
||||
* - the delivery provider passed in at least enough of this chain's currency as msg.value (enough meaning the maximum possible refund)
|
||||
* - the instruction's target chain is this chain
|
||||
* - the relayed signed VAAs match the descriptions in container.messages (the VAA hashes match, or the emitter address, sequence number pair matches, depending on the description given)
|
||||
*
|
||||
* @param encodedVMs - An array of signed wormhole messages (all from the same source chain
|
||||
|
@ -289,7 +647,7 @@ interface IWormholeRelayer is IWormholeRelayerDelivery, IWormholeRelayerSend {}
|
|||
// In the case of a `require` revert with error message, this should provide 2 memory word's worth of data.
|
||||
uint256 constant RETURNDATA_TRUNCATION_THRESHOLD = 132;
|
||||
|
||||
//When msg.value was not equal to (one wormhole message fee) + `maxTransactionFee` + `receiverValue`
|
||||
//When msg.value was not equal to `delivery provider's quoted delivery price` + `paymentForExtraReceiverValue`
|
||||
error InvalidMsgValue(uint256 msgValue, uint256 totalFee);
|
||||
|
||||
error RequestedGasLimitTooLow();
|
||||
|
@ -326,10 +684,10 @@ error ForwardNotSufficientlyFunded(uint256 amountOfFunds, uint256 amountOfFundsN
|
|||
error InvalidOverrideGasLimit();
|
||||
//When a `DeliveryOverride` contains a receiver value that's less than the original
|
||||
error InvalidOverrideReceiverValue();
|
||||
//When a `DeliveryOverride` contains a refund per gas unused that's less than the original
|
||||
//When a `DeliveryOverride` contains a 'refund per unit of gas unused' that's less than the original
|
||||
error InvalidOverrideRefundPerGasUnused();
|
||||
|
||||
//When the relay provider doesn't pass in sufficient funds (i.e. msg.value does not cover the
|
||||
//When the delivery provider doesn't pass in sufficient funds (i.e. msg.value does not cover the
|
||||
// maximum possible refund to the user)
|
||||
error InsufficientRelayerFunds(uint256 msgValue, uint256 minimum);
|
||||
|
||||
|
|
|
@ -4,12 +4,22 @@ pragma solidity ^0.8.19;
|
|||
|
||||
import "./TypedUnits.sol";
|
||||
|
||||
/**
|
||||
* @title WormholeRelayer
|
||||
* @author
|
||||
* @notice This project allows developers to build cross-chain applications powered by Wormhole without needing to
|
||||
* write and run their own relaying infrastructure
|
||||
*
|
||||
* We implement the IWormholeRelayer interface that allows users to request a delivery provider to relay a payload (and/or additional VAAs)
|
||||
* to a chain and address of their choice.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @notice VaaKey identifies a wormhole message
|
||||
*
|
||||
* @custom:member chainId - only specified if `infoType == VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member emitterAddress - only specified if `infoType = VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member sequence - only specified if `infoType = VaaKeyType.EMITTER_SEQUENCE`
|
||||
* @custom:member chainId Wormhole chain ID of the chain where this VAA was emitted from
|
||||
* @custom:member emitterAddress Address of the emitter of the VAA, in Wormhole bytes32 format
|
||||
* @custom:member sequence Sequence number of the VAA
|
||||
*/
|
||||
struct VaaKey {
|
||||
uint16 chainId;
|
||||
|
@ -26,11 +36,30 @@ interface IWormholeRelayerBase {
|
|||
}
|
||||
|
||||
/**
|
||||
* IWormholeRelayer
|
||||
* @notice Users may use this interface to have payloads and/or wormhole VAAs
|
||||
* relayed to destination contract(s) of their choice.
|
||||
* @title IWormholeRelayerSend
|
||||
* @notice The interface to request deliveries
|
||||
*/
|
||||
interface IWormholeRelayerSend is IWormholeRelayerBase {
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the `sendPayloadToEvm` function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -39,6 +68,26 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
Gas gasLimit
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -49,6 +98,26 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address refundAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the `sendVaasToEvm` function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -58,6 +127,27 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the default delivery provider
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit)`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -69,6 +159,34 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address refundAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteEVMDeliveryPrice(targetChain, receiverValue, gasLimit, deliveryProviderAddress) + paymentForExtraReceiverValue
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function sendToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -82,7 +200,35 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys,
|
||||
uint8 consistencyLevel
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
|
||||
/**
|
||||
* @notice Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteDeliveryPrice(targetChain, receiverValue, encodedExecutionParameters, deliveryProviderAddress) + paymentForExtraReceiverValue
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
* @return sequence sequence number of published VAA containing delivery instructions
|
||||
*/
|
||||
function send(
|
||||
uint16 targetChain,
|
||||
bytes32 targetAddress,
|
||||
|
@ -97,6 +243,34 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the same delivery provider (or default, if the same one doesn't support the new target chain)
|
||||
* to relay a payload to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f)]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the 'forwardToEvm' function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
*/
|
||||
function forwardPayloadToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -105,6 +279,35 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
Gas gasLimit
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the same delivery provider (or default, if the same one doesn't support the new target chain)
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to `receiverValue`
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f)]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* Any refunds (from leftover gas) will be paid to the delivery provider. In order to receive the refunds, use the 'forwardToEvm' function
|
||||
* with `refundChain` and `refundAddress` as parameters
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
*/
|
||||
function forwardVaasToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -114,6 +317,44 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
VaaKey[] memory vaaKeys
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with gas limit `gasLimit` and with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteEVMDeliveryPrice(targetChain_f, receiverValue_f, gasLimit_f, deliveryProviderAddress_f) + paymentForExtraReceiverValue_f]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
*/
|
||||
function forwardToEvm(
|
||||
uint16 targetChain,
|
||||
address targetAddress,
|
||||
|
@ -128,6 +369,44 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Performs the same function as a `send`, except:
|
||||
* 1) Can only be used during a delivery (i.e. in execution of `receiveWormholeMessages`)
|
||||
* 2) Is paid for (along with any other calls to forward) by (any msg.value passed in) + (refund leftover from current delivery)
|
||||
* 3) Only executes after `receiveWormholeMessages` is completed (and thus does not return a sequence number)
|
||||
*
|
||||
* The refund from the delivery currently in progress will not be sent to the user; it will instead
|
||||
* be paid to the delivery provider to perform the instruction specified here
|
||||
*
|
||||
* Publishes an instruction for the delivery provider at `deliveryProviderAddress`
|
||||
* to relay a payload and VAAs specified by `vaaKeys` to the address `targetAddress` on chain `targetChain`
|
||||
* with `msg.value` equal to
|
||||
* receiverValue + (arbitrary amount that is paid for by paymentForExtraReceiverValue of this chain's wei) in targetChain wei.
|
||||
*
|
||||
* Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
|
||||
* `targetAddress` must implement the IWormholeReceiver interface
|
||||
*
|
||||
* The following equation must be satisfied (sum_f indicates summing over all forwards requested in `receiveWormholeMessages`):
|
||||
* (refund amount from current execution of receiveWormholeMessages) + sum_f [msg.value_f]
|
||||
* >= sum_f [quoteDeliveryPrice(targetChain_f, receiverValue_f, encodedExecutionParameters_f, deliveryProviderAddress_f) + paymentForExtraReceiverValue_f]
|
||||
*
|
||||
* The difference between the two sides of the above inequality will be added to `paymentForExtraReceiverValue` of the first forward requested
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param targetAddress address to call on targetChain (that implements IWormholeReceiver), in Wormhole bytes32 format
|
||||
* @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param paymentForExtraReceiverValue amount (in current chain currency units) to spend on extra receiverValue
|
||||
* (in addition to the `receiverValue` specified)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
|
||||
* @param refundAddress The address on `refundChain` to deliver any refund to, in Wormhole bytes32 format
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @param vaaKeys Additional VAAs to pass in as parameter in call to `targetAddress`
|
||||
* @param consistencyLevel Consistency level with which to publish the delivery instructions - see
|
||||
* https://book.wormhole.com/wormhole/3_coreLayerContracts.html?highlight=consistency#consistency-levels
|
||||
*/
|
||||
function forward(
|
||||
uint16 targetChain,
|
||||
bytes32 targetAddress,
|
||||
|
@ -142,6 +421,22 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
uint8 consistencyLevel
|
||||
) external payable;
|
||||
|
||||
/**
|
||||
* @notice Requests a previously published delivery instruction to be redelivered
|
||||
* (e.g. with a different delivery provider)
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteEVMDeliveryPrice(targetChain, newReceiverValue, newGasLimit, newDeliveryProviderAddress)
|
||||
*
|
||||
* @param deliveryVaaKey VaaKey identifying the wormhole message containing the
|
||||
* previously published delivery instructions
|
||||
* @param targetChain The target chain that the original delivery targeted. Must match targetChain from original delivery instructions
|
||||
* @param newReceiverValue new msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param newGasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according to the
|
||||
* `targetChainRefundPerGasUnused` rate quoted by the delivery provider, to the refund chain and address specified in the original request
|
||||
* @param newDeliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return sequence sequence number of published VAA containing redelivery instructions
|
||||
*/
|
||||
function resendToEvm(
|
||||
VaaKey memory deliveryVaaKey,
|
||||
uint16 targetChain,
|
||||
|
@ -150,6 +445,22 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address newDeliveryProviderAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Requests a previously published delivery instruction to be redelivered
|
||||
*
|
||||
*
|
||||
* This function must be called with `msg.value` equal to
|
||||
* quoteDeliveryPrice(targetChain, newReceiverValue, newEncodedExecutionParameters, newDeliveryProviderAddress)
|
||||
*
|
||||
* @param deliveryVaaKey VaaKey identifying the wormhole message containing the
|
||||
* previously published delivery instructions
|
||||
* @param targetChain The target chain that the original delivery targeted. Must match targetChain from original delivery instructions
|
||||
* @param newReceiverValue new msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param newEncodedExecutionParameters new encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param newDeliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return sequence sequence number of published VAA containing redelivery instructions
|
||||
*/
|
||||
function resend(
|
||||
VaaKey memory deliveryVaaKey,
|
||||
uint16 targetChain,
|
||||
|
@ -158,12 +469,33 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address newDeliveryProviderAddress
|
||||
) external payable returns (uint64 sequence);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using the default delivery provider
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return targetChainRefundPerGasUnused amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified
|
||||
*/
|
||||
function quoteEVMDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
TargetNative receiverValue,
|
||||
Gas gasLimit
|
||||
) external view returns (LocalNative nativePriceQuote, GasPrice targetChainRefundPerGasUnused);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using delivery provider `deliveryProviderAddress`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param gasLimit gas limit with which to call `targetAddress`.
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return targetChainRefundPerGasUnused amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified
|
||||
*/
|
||||
function quoteEVMDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
TargetNative receiverValue,
|
||||
|
@ -171,6 +503,20 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address deliveryProviderAddress
|
||||
) external view returns (LocalNative nativePriceQuote, GasPrice targetChainRefundPerGasUnused);
|
||||
|
||||
/**
|
||||
* @notice Returns the price to request a relay to chain `targetChain`, using delivery provider `deliveryProviderAddress`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain currency units)
|
||||
* @param encodedExecutionParameters encoded information on how to execute delivery that may impact pricing
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` with which to call `targetAddress`
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform the relay
|
||||
* @return encodedExecutionInfo encoded information on how the delivery will be executed
|
||||
* e.g. for version EVM_V1, this is a struct that encodes the `gasLimit` and `targetChainRefundPerGasUnused`
|
||||
* (which is the amount of target chain currency that will be refunded per unit of gas unused,
|
||||
* if a refundAddress is specified)
|
||||
*/
|
||||
function quoteDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
TargetNative receiverValue,
|
||||
|
@ -178,6 +524,16 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
address deliveryProviderAddress
|
||||
) external view returns (LocalNative nativePriceQuote, bytes memory encodedExecutionInfo);
|
||||
|
||||
/**
|
||||
* @notice Returns the (extra) amount of target chain currency that `targetAddress`
|
||||
* will be called with, if the `paymentForExtraReceiverValue` field is set to `currentChainAmount`
|
||||
*
|
||||
* @param targetChain in Wormhole Chain ID format
|
||||
* @param currentChainAmount The value that `paymentForExtraReceiverValue` will be set to
|
||||
* @param deliveryProviderAddress The address of the desired delivery provider's implementation of IDeliveryProvider
|
||||
* @return targetChainAmount The amount such that if `targetAddress` will be called with `msg.value` equal to
|
||||
* receiverValue + targetChainAmount
|
||||
*/
|
||||
function quoteNativeForChain(
|
||||
uint16 targetChain,
|
||||
LocalNative currentChainAmount,
|
||||
|
@ -192,6 +548,10 @@ interface IWormholeRelayerSend is IWormholeRelayerBase {
|
|||
function getDefaultDeliveryProvider() external view returns (address deliveryProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title IWormholeRelayerDelivery
|
||||
* @notice The interface to execute deliveries. Only relevant for Delivery Providers
|
||||
*/
|
||||
interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
||||
enum DeliveryStatus {
|
||||
SUCCESS,
|
||||
|
@ -216,8 +576,7 @@ interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
|||
* corresponding to this delivery request
|
||||
* @custom:member deliveryVaaHash - The hash of the delivery VAA corresponding to this delivery
|
||||
* request
|
||||
* @custom:member gasUsed - The amount of gas that was used to call your target contract (and, if
|
||||
* there was a forward, to ensure that there were enough funds to complete the forward)
|
||||
* @custom:member gasUsed - The amount of gas that was used to call your target contract
|
||||
* @custom:member status:
|
||||
* - RECEIVER_FAILURE, if the target contract reverts
|
||||
* - SUCCESS, if the target contract doesn't revert and no forwards were requested
|
||||
|
@ -250,17 +609,16 @@ interface IWormholeRelayerDelivery is IWormholeRelayerBase {
|
|||
);
|
||||
|
||||
/**
|
||||
* @notice The relay provider calls `deliver` to relay messages as described by one delivery instruction
|
||||
* @notice The delivery provider calls `deliver` to relay messages as described by one delivery instruction
|
||||
*
|
||||
* The relay provider must pass in the specified (by VaaKeys[]) signed wormhole messages (VAAs) from the source chain
|
||||
* The delivery provider must pass in the specified (by VaaKeys[]) signed wormhole messages (VAAs) from the source chain
|
||||
* as well as the signed wormhole message with the delivery instructions (the delivery VAA)
|
||||
*
|
||||
* The messages will be relayed to the target address (with the specified gas limit and receiver value) iff the following checks are met:
|
||||
* - the delivery VAA has a valid signature
|
||||
* - the delivery VAA's emitter is one of these WormholeRelayer contracts
|
||||
* - the delivery instruction container in the delivery VAA was fully funded
|
||||
* - msg.sender is the permissioned address allowed to execute this instruction
|
||||
* - the relay provider passed in at least enough of this chain's currency as msg.value (enough meaning the maximum possible refund) * - the instruction's target chain is this chain
|
||||
* - the delivery provider passed in at least enough of this chain's currency as msg.value (enough meaning the maximum possible refund)
|
||||
* - the instruction's target chain is this chain
|
||||
* - the relayed signed VAAs match the descriptions in container.messages (the VAA hashes match, or the emitter address, sequence number pair matches, depending on the description given)
|
||||
*
|
||||
* @param encodedVMs - An array of signed wormhole messages (all from the same source chain
|
||||
|
@ -291,7 +649,7 @@ interface IWormholeRelayer is IWormholeRelayerDelivery, IWormholeRelayerSend {}
|
|||
// In the case of a `require` revert with error message, this should provide 2 memory word's worth of data.
|
||||
uint256 constant RETURNDATA_TRUNCATION_THRESHOLD = 132;
|
||||
|
||||
//When msg.value was not equal to (one wormhole message fee) + `maxTransactionFee` + `receiverValue`
|
||||
//When msg.value was not equal to `delivery provider's quoted delivery price` + `paymentForExtraReceiverValue`
|
||||
error InvalidMsgValue(LocalNative msgValue, LocalNative totalFee);
|
||||
|
||||
error RequestedGasLimitTooLow();
|
||||
|
@ -328,10 +686,10 @@ error ForwardNotSufficientlyFunded(LocalNative amountOfFunds, LocalNative amount
|
|||
error InvalidOverrideGasLimit();
|
||||
//When a `DeliveryOverride` contains a receiver value that's less than the original
|
||||
error InvalidOverrideReceiverValue();
|
||||
//When a `DeliveryOverride` contains a refund per gas unused that's less than the original
|
||||
//When a `DeliveryOverride` contains a 'refund per unit of gas unused' that's less than the original
|
||||
error InvalidOverrideRefundPerGasUnused();
|
||||
|
||||
//When the relay provider doesn't pass in sufficient funds (i.e. msg.value does not cover the
|
||||
//When the delivery provider doesn't pass in sufficient funds (i.e. msg.value does not cover the
|
||||
// maximum possible refund to the user)
|
||||
error InsufficientRelayerFunds(LocalNative msgValue, LocalNative minimum);
|
||||
|
||||
|
|
Loading…
Reference in New Issue