redelivery test changes
This commit is contained in:
parent
4f3a603839
commit
f0cb171533
|
@ -135,6 +135,7 @@ contract TestCoreRelayer is Test {
|
|||
struct StandardSetupTwoChains {
|
||||
uint16 sourceChainId;
|
||||
uint16 targetChainId;
|
||||
uint16 differentChainId;
|
||||
Contracts source;
|
||||
Contracts target;
|
||||
}
|
||||
|
@ -182,6 +183,7 @@ contract TestCoreRelayer is Test {
|
|||
|
||||
s.sourceChainId = 1;
|
||||
s.targetChainId = 2;
|
||||
s.differentChainId = 3;
|
||||
s.source = map[s.sourceChainId];
|
||||
s.target = map[s.targetChainId];
|
||||
|
||||
|
@ -833,416 +835,8 @@ contract TestCoreRelayer is Test {
|
|||
INVALID_REDELIVERY
|
||||
}
|
||||
|
||||
function testRevertResendMsgValueTooLow(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
vm.deal(address(this), stack.payment);
|
||||
vm.expectRevert(abi.encodeWithSignature("MsgValueTooLow()"));
|
||||
setup.source.coreRelayer.resend{value: stack.payment - 1}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function testRevertRedeliveryInvalidOriginalDeliveryVaa(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
vm.deal(address(this), stack.payment);
|
||||
|
||||
setup.source.coreRelayer.resend{value: stack.payment}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
|
||||
stack.entries = vm.getRecordedLogs();
|
||||
|
||||
stack.redeliveryVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
|
||||
);
|
||||
|
||||
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
|
||||
|
||||
bytes memory fakeVM = abi.encodePacked(stack.originalEncodedVMs[2]);
|
||||
invalidateVM(fakeVM, setup.target.wormholeSimulator);
|
||||
stack.originalEncodedVMs[2] = fakeVM;
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
stack.redeliveryVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
stack.parsed = relayerWormhole.parseVM(stack.redeliveryVM);
|
||||
stack.instruction = setup.target.coreRelayerFull.decodeRedeliveryInstruction(stack.parsed.payload);
|
||||
|
||||
stack.budget = stack.instruction.newMaximumRefundTarget + stack.instruction.newReceiverValueTarget
|
||||
+ setup.target.wormhole.messageFee();
|
||||
|
||||
vm.deal(setup.target.relayer, stack.budget);
|
||||
|
||||
vm.prank(setup.target.relayer);
|
||||
vm.expectRevert(abi.encodeWithSignature("InvalidVaa(uint8,string)", 2, ""));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
|
||||
}
|
||||
|
||||
function testRevertRedeliveryInvalidEmitterInOriginalDeliveryVaa(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
|
||||
setup.source.coreRelayer.resend{value: stack.payment}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
|
||||
stack.entries = vm.getRecordedLogs();
|
||||
|
||||
stack.redeliveryVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
|
||||
);
|
||||
|
||||
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
|
||||
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
stack.redeliveryVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
stack.parsed = relayerWormhole.parseVM(stack.redeliveryVM);
|
||||
stack.instruction = setup.target.coreRelayerFull.decodeRedeliveryInstruction(stack.parsed.payload);
|
||||
|
||||
stack.budget = stack.instruction.newMaximumRefundTarget + stack.instruction.newReceiverValueTarget
|
||||
+ setup.target.wormhole.messageFee();
|
||||
|
||||
stack.originalEncodedVMs[2] = stack.originalEncodedVMs[0];
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
stack.redeliveryVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
vm.prank(setup.target.relayer);
|
||||
vm.expectRevert(abi.encodeWithSignature("InvalidEmitterInOriginalDeliveryVM(uint8)", 2));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
}
|
||||
|
||||
function testRevertRedeliveryInvalidRedeliveryVaa(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
|
||||
setup.source.coreRelayer.resend{value: stack.payment}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
|
||||
stack.entries = vm.getRecordedLogs();
|
||||
|
||||
stack.redeliveryVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
|
||||
);
|
||||
|
||||
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
|
||||
|
||||
stack.parsed = relayerWormhole.parseVM(stack.redeliveryVM);
|
||||
stack.instruction = setup.target.coreRelayerFull.decodeRedeliveryInstruction(stack.parsed.payload);
|
||||
|
||||
stack.budget = stack.instruction.newMaximumRefundTarget + stack.instruction.newReceiverValueTarget
|
||||
+ setup.target.wormhole.messageFee();
|
||||
|
||||
bytes memory fakeVM = abi.encodePacked(stack.redeliveryVM);
|
||||
invalidateVM(fakeVM, setup.target.wormholeSimulator);
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
fakeVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
vm.prank(setup.target.relayer);
|
||||
vm.expectRevert(abi.encodeWithSignature("InvalidRedeliveryVM(string)", ""));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
}
|
||||
|
||||
function testRevertRedeliveryInvalidEmitterInRedeliveryVM(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
|
||||
setup.source.coreRelayer.resend{value: stack.payment}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
|
||||
stack.entries = vm.getRecordedLogs();
|
||||
|
||||
stack.redeliveryVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
|
||||
);
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
stack.redeliveryVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
stack.parsed = relayerWormhole.parseVM(stack.redeliveryVM);
|
||||
stack.instruction = setup.target.coreRelayerFull.decodeRedeliveryInstruction(stack.parsed.payload);
|
||||
|
||||
stack.budget = stack.instruction.newMaximumRefundTarget + stack.instruction.newReceiverValueTarget
|
||||
+ setup.target.wormhole.messageFee();
|
||||
|
||||
|
||||
bytes memory fakeVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.integration)
|
||||
);
|
||||
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
fakeVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
vm.prank(setup.target.relayer);
|
||||
vm.expectRevert(abi.encodeWithSignature("InvalidEmitterInRedeliveryVM()"));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
|
||||
}
|
||||
|
||||
function testRevertRedeliveryMismatchingRelayProviderDeliveryAddresses(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
bytes memory message
|
||||
) public {
|
||||
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
|
||||
|
||||
vm.recordLogs();
|
||||
|
||||
RedeliveryStackTooDeep memory stack;
|
||||
|
||||
setup.source.integration.sendMessageWithRefundAddress{
|
||||
value: setup.source.coreRelayer.quoteGas(setup.targetChainId, 21000, address(setup.source.relayProvider))
|
||||
+ uint256(3) * setup.source.wormhole.messageFee()
|
||||
}(message, setup.targetChainId, address(setup.target.integration), address(setup.target.refundAddress));
|
||||
|
||||
genericRelayer.relay(setup.sourceChainId);
|
||||
|
||||
assertTrue(
|
||||
(keccak256(setup.target.integration.getMessage()) != keccak256(message))
|
||||
|| (keccak256(message) == keccak256(bytes("")))
|
||||
);
|
||||
|
||||
stack.deliveryVaaHash = getDeliveryVAAHash();
|
||||
|
||||
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
|
||||
|
||||
stack.payment = setup.source.coreRelayer.quoteGas(
|
||||
setup.targetChainId, gasParams.targetGasLimit, address(setup.source.relayProvider)
|
||||
) + setup.source.wormhole.messageFee();
|
||||
|
||||
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
|
||||
sourceChain: setup.sourceChainId,
|
||||
sourceTxHash: stack.deliveryVaaHash,
|
||||
sourceNonce: 1,
|
||||
targetChain: setup.targetChainId,
|
||||
deliveryIndex: 2,
|
||||
multisendIndex: 0,
|
||||
newMaxTransactionFee: stack.payment - setup.source.wormhole.messageFee(),
|
||||
newReceiverValue: 0,
|
||||
newRelayParameters: setup.source.coreRelayer.getDefaultRelayParams()
|
||||
});
|
||||
|
||||
setup.source.relayProvider.updateDeliveryAddress(setup.targetChainId, bytes32(uint256(uint160(address(this)))));
|
||||
vm.deal(address(this), stack.payment);
|
||||
vm.getRecordedLogs();
|
||||
setup.source.coreRelayer.resend{value: stack.payment}(
|
||||
stack.redeliveryRequest, address(setup.source.relayProvider)
|
||||
);
|
||||
stack.entries = vm.getRecordedLogs();
|
||||
|
||||
stack.redeliveryVM = relayerWormholeSimulator.fetchSignedMessageFromLogs(
|
||||
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
|
||||
);
|
||||
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
|
||||
stack.redeliveryVM, stack.originalEncodedVMs, payable(setup.target.relayer)
|
||||
);
|
||||
|
||||
vm.prank(setup.target.relayer);
|
||||
vm.expectRevert(abi.encodeWithSignature("MismatchingRelayProvidersInRedelivery()"));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delivery 18-24
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
pragma solidity ^0.8.0;
|
||||
|
||||
interface IWormholeRelayerInstructionParser {
|
||||
|
||||
struct DeliveryInstructionsContainer {
|
||||
uint8 payloadId; //1
|
||||
bool sufficientlyFunded;
|
||||
|
@ -51,5 +50,4 @@ interface IWormholeRelayerInstructionParser {
|
|||
function toWormholeFormat(address addr) external pure returns (bytes32 whFormat);
|
||||
|
||||
function fromWormholeFormat(bytes32 whFormatAddress) external pure returns (address addr);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import {WormholeSimulator} from "./WormholeSimulator.sol";
|
|||
import "../contracts/libraries/external/BytesLib.sol";
|
||||
import "forge-std/Vm.sol";
|
||||
|
||||
|
||||
contract MockGenericRelayer {
|
||||
using BytesLib for bytes;
|
||||
|
||||
|
@ -18,8 +17,7 @@ contract MockGenericRelayer {
|
|||
WormholeSimulator relayerWormholeSimulator;
|
||||
IWormholeRelayerInstructionParser parser;
|
||||
|
||||
address constant private VM_ADDRESS =
|
||||
address(bytes20(uint160(uint256(keccak256('hevm cheat code')))));
|
||||
address private constant VM_ADDRESS = address(bytes20(uint160(uint256(keccak256("hevm cheat code")))));
|
||||
|
||||
Vm public constant vm = Vm(VM_ADDRESS);
|
||||
|
||||
|
@ -28,7 +26,7 @@ contract MockGenericRelayer {
|
|||
mapping(uint16 => address) relayers;
|
||||
|
||||
mapping(uint16 => uint256) wormholeFees;
|
||||
|
||||
|
||||
mapping(uint256 => bool) nonceCompleted;
|
||||
|
||||
mapping(bytes32 => bytes[]) pastEncodedVMs;
|
||||
|
@ -50,7 +48,7 @@ contract MockGenericRelayer {
|
|||
}
|
||||
|
||||
function setProviderDeliveryAddress(uint16 chainId, address deliveryAddress) public {
|
||||
relayers[chainId] = deliveryAddress;
|
||||
relayers[chainId] = deliveryAddress;
|
||||
}
|
||||
|
||||
function setWormholeFee(uint16 chainId, uint256 fee) public {
|
||||
|
@ -126,20 +124,21 @@ contract MockGenericRelayer {
|
|||
multisendIndex: k,
|
||||
relayerRefundAddress: payable(relayers[targetChain])
|
||||
});
|
||||
if(container.sufficientlyFunded) {
|
||||
if (container.sufficientlyFunded) {
|
||||
vm.prank(relayers[targetChain]);
|
||||
IDelivery(wormholeRelayerContracts[targetChain]).deliverSingle{value: (budget + wormholeFees[targetChain])}(package);
|
||||
}
|
||||
IDelivery(wormholeRelayerContracts[targetChain]).deliverSingle{
|
||||
value: (budget + wormholeFees[targetChain])
|
||||
}(package);
|
||||
}
|
||||
}
|
||||
pastEncodedVMs[parsedInstruction.hash] = encodedVMsToBeDelivered;
|
||||
} else if (payloadId == 2) {
|
||||
IWormholeRelayerInstructionParser.RedeliveryByTxHashInstruction memory instruction =
|
||||
parser.decodeRedeliveryInstruction(parsedInstruction.payload);
|
||||
bytes[] memory originalEncodedVMs =
|
||||
pastEncodedVMs[instruction.sourceTxHash];
|
||||
bytes[] memory originalEncodedVMs = pastEncodedVMs[instruction.sourceTxHash];
|
||||
uint16 targetChain = instruction.targetChain;
|
||||
uint256 budget = instruction.newMaximumRefundTarget + instruction.newReceiverValueTarget
|
||||
+ wormholeFees[targetChain];
|
||||
uint256 budget =
|
||||
instruction.newMaximumRefundTarget + instruction.newReceiverValueTarget + wormholeFees[targetChain];
|
||||
IDelivery.TargetRedeliveryByTxHashParamsSingle memory package = IDelivery
|
||||
.TargetRedeliveryByTxHashParamsSingle({
|
||||
redeliveryVM: encodedDeliveryInstructionsContainer,
|
||||
|
|
Loading…
Reference in New Issue