Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit 9cc0c25

Browse files
committed
Fix mock forge generic relayer to not use vaa hashes
1 parent 0f898f2 commit 9cc0c25

File tree

2 files changed

+22
-20
lines changed

2 files changed

+22
-20
lines changed

ethereum/forge-test/MockGenericRelayer.sol

+12-10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ contract MockGenericRelayer {
1717
IWormhole relayerWormhole;
1818
WormholeSimulator relayerWormholeSimulator;
1919
IWormholeRelayerInstructionParser parser;
20+
uint256 transactionIndex;
2021

2122
address private constant VM_ADDRESS = address(bytes20(uint160(uint256(keccak256("hevm cheat code")))));
2223

@@ -38,14 +39,15 @@ contract MockGenericRelayer {
3839
relayerWormhole = IWormhole(_wormhole);
3940
relayerWormholeSimulator = WormholeSimulator(_wormholeSimulator);
4041
parser = IWormholeRelayerInstructionParser(wormholeRelayer);
42+
transactionIndex = 0;
4143
}
4244

43-
function getPastEncodedVMs(bytes32 vaaHash) public view returns (bytes[] memory) {
44-
return pastEncodedVMs[vaaHash];
45+
function getPastEncodedVMs(uint16 chainId, uint64 deliveryVAASequence) public view returns (bytes[] memory) {
46+
return pastEncodedVMs[keccak256(abi.encodePacked(chainId, deliveryVAASequence))];
4547
}
4648

47-
function getPastDeliveryVAA(bytes32 vaaHash) public view returns (bytes memory) {
48-
return pastEncodedDeliveryVAA[vaaHash];
49+
function getPastDeliveryVAA(uint16 chainId, uint64 deliveryVAASequence) public view returns (bytes memory) {
50+
return pastEncodedDeliveryVAA[keccak256(abi.encodePacked(chainId, deliveryVAASequence))];
4951
}
5052

5153
function setWormholeRelayerContract(uint16 chainId, address contractAddress) public {
@@ -102,8 +104,6 @@ contract MockGenericRelayer {
102104
}
103105
}
104106

105-
// TODO: Make the key 'txHash + sequence' instead of 'VAAHASH'
106-
107107
function genericRelay(
108108
bytes memory encodedDeliveryVAA,
109109
bytes[] memory encodedVMs,
@@ -142,20 +142,22 @@ contract MockGenericRelayer {
142142
}(package);
143143
}
144144
}
145-
pastEncodedVMs[parsedDeliveryVAA.hash] = encodedVMsToBeDelivered;
146-
pastEncodedDeliveryVAA[parsedDeliveryVAA.hash] = encodedDeliveryVAA;
145+
bytes32 key = keccak256(abi.encodePacked(parsedDeliveryVAA.emitterChainId, parsedDeliveryVAA.sequence));
146+
pastEncodedVMs[key] = encodedVMsToBeDelivered;
147+
pastEncodedDeliveryVAA[key] = encodedDeliveryVAA;
147148
} else if (payloadId == 2) {
148149
IWormholeRelayerInstructionParser.RedeliveryByTxHashInstruction memory instruction =
149150
parser.decodeRedeliveryInstruction(parsedDeliveryVAA.payload);
150-
bytes[] memory originalEncodedVMs = pastEncodedVMs[instruction.sourceTxHash];
151+
bytes32 key = keccak256(abi.encodePacked(instruction.sourceChain, instruction.deliveryVAASequence));
152+
bytes[] memory originalEncodedVMs = pastEncodedVMs[key];
151153
uint16 targetChain = instruction.targetChain;
152154
uint256 budget =
153155
instruction.newMaximumRefundTarget + instruction.newReceiverValueTarget + wormholeFees[targetChain];
154156
IDelivery.TargetRedeliveryByTxHashParamsSingle memory package = IDelivery
155157
.TargetRedeliveryByTxHashParamsSingle({
156158
redeliveryVM: encodedDeliveryVAA,
157159
sourceEncodedVMs: originalEncodedVMs,
158-
originalEncodedDeliveryVAA: pastEncodedDeliveryVAA[instruction.sourceTxHash],
160+
originalEncodedDeliveryVAA: pastEncodedDeliveryVAA[key],
159161
relayerRefundAddress: payable(relayers[targetChain])
160162
});
161163
vm.prank(relayers[targetChain]);

ethereum/forge-test/WormholeRelayer.t.sol

+10-10
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,7 @@ contract WormholeRelayerTests is Test {
837837

838838
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
839839
sourceChain: setup.sourceChainId,
840-
sourceTxHash: stack.deliveryVaaHash,
840+
sourceTxHash: 0,
841841
deliveryVAASequence: stack.sequence,
842842
targetChain: setup.targetChainId,
843843
multisendIndex: 0,
@@ -858,9 +858,9 @@ contract WormholeRelayerTests is Test {
858858
stack.entries[0], setup.sourceChainId, address(setup.source.coreRelayer)
859859
);
860860

861-
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(stack.deliveryVaaHash);
861+
stack.originalEncodedVMs = genericRelayer.getPastEncodedVMs(setup.sourceChainId, stack.sequence);
862862

863-
stack.originalDeliveryVAA = genericRelayer.getPastDeliveryVAA(stack.deliveryVaaHash);
863+
stack.originalDeliveryVAA = genericRelayer.getPastDeliveryVAA(setup.sourceChainId, stack.sequence);
864864

865865
stack.package = IDelivery.TargetRedeliveryByTxHashParamsSingle(
866866
stack.redeliveryVM, stack.originalEncodedVMs, stack.originalDeliveryVAA, payable(setup.target.relayer)
@@ -908,7 +908,7 @@ contract WormholeRelayerTests is Test {
908908

909909
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
910910
sourceChain: setup.sourceChainId,
911-
sourceTxHash: stack.deliveryVaaHash,
911+
sourceTxHash: 0,
912912
deliveryVAASequence: stack.sequence,
913913
targetChain: setup.targetChainId,
914914
multisendIndex: 0,
@@ -1117,7 +1117,7 @@ contract WormholeRelayerTests is Test {
11171117

11181118
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
11191119
sourceChain: setup.sourceChainId,
1120-
sourceTxHash: stack.deliveryVaaHash,
1120+
sourceTxHash: 0,
11211121
deliveryVAASequence: stack.sequence,
11221122
targetChain: setup.targetChainId,
11231123
multisendIndex: 0,
@@ -1163,7 +1163,7 @@ contract WormholeRelayerTests is Test {
11631163

11641164
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
11651165
sourceChain: setup.sourceChainId,
1166-
sourceTxHash: stack.deliveryVaaHash,
1166+
sourceTxHash: 0,
11671167
deliveryVAASequence: stack.sequence,
11681168
targetChain: setup.sourceChainId,
11691169
multisendIndex: 0,
@@ -1230,7 +1230,7 @@ contract WormholeRelayerTests is Test {
12301230

12311231
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
12321232
sourceChain: setup.sourceChainId,
1233-
sourceTxHash: stack.deliveryVaaHash,
1233+
sourceTxHash: 0,
12341234
deliveryVAASequence: sequence,
12351235
targetChain: setup.targetChainId,
12361236
multisendIndex: 0,
@@ -1274,7 +1274,7 @@ contract WormholeRelayerTests is Test {
12741274

12751275
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
12761276
sourceChain: setup.sourceChainId,
1277-
sourceTxHash: stack.deliveryVaaHash,
1277+
sourceTxHash: 0,
12781278
deliveryVAASequence: stack.sequence,
12791279
targetChain: setup.targetChainId,
12801280
multisendIndex: 0,
@@ -1640,7 +1640,7 @@ contract WormholeRelayerTests is Test {
16401640

16411641
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
16421642
sourceChain: setup.sourceChainId,
1643-
sourceTxHash: stack.deliveryVaaHash,
1643+
sourceTxHash: 0,
16441644
deliveryVAASequence: stack.sequence,
16451645
targetChain: setup.targetChainId,
16461646
multisendIndex: 0,
@@ -1678,7 +1678,7 @@ contract WormholeRelayerTests is Test {
16781678

16791679
stack.redeliveryRequest = IWormholeRelayer.ResendByTx({
16801680
sourceChain: setup.sourceChainId,
1681-
sourceTxHash: stack.deliveryVaaHash,
1681+
sourceTxHash: 0,
16821682
deliveryVAASequence: stack.sequence,
16831683
targetChain: setup.targetChainId,
16841684
multisendIndex: 0,

0 commit comments

Comments
 (0)