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

Commit eff19d2

Browse files
authored
Continuously send messages to create load (#118)
* save * Continuously send messages to create load * add metrics
1 parent 92dbc20 commit eff19d2

File tree

10 files changed

+1266
-156
lines changed

10 files changed

+1266
-156
lines changed

ethereum/contracts/mock/MockRelayerIntegration.sol

+30-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ import "../interfaces/IWormholeReceiver.sol";
1010

1111
import "forge-std/console.sol";
1212

13+
interface Structs {
14+
struct XAddress {
15+
uint16 chainId;
16+
bytes32 addr;
17+
}
18+
}
19+
1320
contract MockRelayerIntegration is IWormholeReceiver {
1421
using BytesLib for bytes;
1522

@@ -28,7 +35,8 @@ contract MockRelayerIntegration is IWormholeReceiver {
2835
// mapping of other MockRelayerIntegration contracts
2936
mapping(uint16 => bytes32) registeredContracts;
3037

31-
bytes[] messages;
38+
// bytes[] messages;
39+
bytes[][] messageHistory;
3240

3341
struct FurtherInstructions {
3442
bool keepSending;
@@ -139,14 +147,17 @@ contract MockRelayerIntegration is IWormholeReceiver {
139147
function receiveWormholeMessages(bytes[] memory wormholeObservations, bytes[] memory) public payable override {
140148
// loop through the array of wormhole observations from the batch and store each payload
141149
uint256 numObservations = wormholeObservations.length;
142-
messages = new bytes[](wormholeObservations.length - 2);
150+
bytes[] memory messages = new bytes[](wormholeObservations.length - 2);
151+
uint16 emitterChainId;
143152
for (uint256 i = 0; i < numObservations - 2; i++) {
144153
(IWormhole.VM memory parsed, bool valid, string memory reason) =
145154
wormhole.parseAndVerifyVM(wormholeObservations[i]);
146155
require(valid, reason);
147156
require(registeredContracts[parsed.emitterChainId] == parsed.emitterAddress);
157+
emitterChainId = parsed.emitterChainId;
148158
messages[i] = parsed.payload;
149159
}
160+
messageHistory.push(messages);
150161

151162
(IWormhole.VM memory parsed, bool valid, string memory reason) =
152163
wormhole.parseAndVerifyVM(wormholeObservations[wormholeObservations.length - 2]);
@@ -183,14 +194,21 @@ contract MockRelayerIntegration is IWormholeReceiver {
183194
}
184195

185196
function getMessage() public view returns (bytes memory) {
186-
if (messages.length == 0) {
197+
if (messageHistory.length == 0 || messageHistory[messageHistory.length - 1].length == 0) {
187198
return new bytes(0);
188199
}
189-
return messages[0];
200+
return messageHistory[messageHistory.length - 1][0];
190201
}
191202

192203
function getMessages() public view returns (bytes[] memory) {
193-
return messages;
204+
if (messageHistory.length == 0 || messageHistory[messageHistory.length - 1].length == 0) {
205+
return new bytes[](0);
206+
}
207+
return messageHistory[messageHistory.length - 1];
208+
}
209+
210+
function getMessageHistory() public view returns (bytes[][] memory) {
211+
return messageHistory;
194212
}
195213

196214
function clearPayload(bytes32 hash) public {
@@ -210,6 +228,13 @@ contract MockRelayerIntegration is IWormholeReceiver {
210228
registeredContracts[chainId] = emitterAddress;
211229
}
212230

231+
function registerEmitters(Structs.XAddress[] calldata emitters) public {
232+
require(msg.sender == owner);
233+
for (uint256 i = 0; i < emitters.length; i++) {
234+
registeredContracts[emitters[i].chainId] = emitters[i].addr;
235+
}
236+
}
237+
213238
function encodeFurtherInstructions(FurtherInstructions memory furtherInstructions)
214239
public
215240
view

ethereum/forge-test/CoreRelayer.t.sol

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {IWormhole} from "../contracts/interfaces/IWormhole.sol";
2323
import {WormholeSimulator, FakeWormholeSimulator} from "./WormholeSimulator.sol";
2424
import {IWormholeReceiver} from "../contracts/interfaces/IWormholeReceiver.sol";
2525
import {AttackForwardIntegration} from "../contracts/mock/AttackForwardIntegration.sol";
26-
import {MockRelayerIntegration} from "../contracts/mock/MockRelayerIntegration.sol";
26+
import {MockRelayerIntegration, Structs} from "../contracts/mock/MockRelayerIntegration.sol";
2727
import "../contracts/libraries/external/BytesLib.sol";
2828

2929
import "forge-std/Test.sol";
@@ -255,6 +255,9 @@ contract TestCoreRelayer is Test {
255255
);
256256
map[i].relayProvider.updateMaximumBudget(j, maxBudget);
257257
map[i].integration.registerEmitter(j, bytes32(uint256(uint160(address(map[j].integration)))));
258+
Structs.XAddress[] memory addresses = new Structs.XAddress[](1);
259+
addresses[0] = Structs.XAddress(j, bytes32(uint256(uint160(address(map[j].integration)))));
260+
map[i].integration.registerEmitters(addresses);
258261
}
259262
}
260263
}

0 commit comments

Comments
 (0)