@@ -37,20 +37,9 @@ struct ActiveFork {
37
37
38
38
abstract contract WormholeRelayerTest is Test {
39
39
/**
40
- * @dev virtual function to initialize source chain before each test
41
- */
42
- function setUpSource () public virtual ;
43
-
44
- /**
45
- * @dev virtual function to initialize target chain before each test
40
+ * @dev virtual function to initialize active forks before each test
46
41
*/
47
- function setUpTarget () public virtual ;
48
-
49
- /**
50
- * @dev virtual function to initialize other active forks before each test
51
- * Note: not called for source/target forks
52
- */
53
- function setUpOther (ActiveFork memory fork ) public virtual {}
42
+ function setUpFork (ActiveFork memory fork ) public virtual ;
54
43
55
44
uint256 constant DEVNET_GUARDIAN_PK = 0xcfb12303a19cde580bb4dd771639b0d26bc68353645571a8cff516ab2ee113a0 ;
56
45
@@ -64,40 +53,17 @@ abstract contract WormholeRelayerTest is Test {
64
53
65
54
MockOffchainRelayer public mockOffchainRelayer;
66
55
67
- /*
68
- * aliases for activeForks
69
- */
70
-
71
- ChainInfo public sourceChainInfo;
72
- ChainInfo public targetChainInfo;
73
-
74
- uint16 public sourceChain;
75
- uint16 public targetChain;
76
-
77
- uint256 public sourceFork;
78
- uint256 public targetFork;
79
-
80
- IWormholeRelayer public relayerSource;
81
- ITokenBridge public tokenBridgeSource;
82
- IWormhole public wormholeSource;
83
-
84
- IWormholeRelayer public relayerTarget;
85
- ITokenBridge public tokenBridgeTarget;
86
- IWormhole public wormholeTarget;
87
-
88
- WormholeSimulator public guardianSource;
89
- WormholeSimulator public guardianTarget;
90
-
91
- /*
92
- * end activeForks aliases
93
- */
94
-
95
56
constructor () {
96
57
initChainInfo ();
97
- setTestnetForkChains (6 , 14 );
58
+
59
+ // set default active forks. These can be overridden in your test
60
+ ChainInfo[] memory forks = new ChainInfo [](2 );
61
+ forks[0 ] = chainInfosTestnet[6 ]; // fuji avax
62
+ forks[1 ] = chainInfosTestnet[14 ]; // alfajores celo
63
+ setActiveForks (forks);
98
64
}
99
65
100
- function setActiveForks (ChainInfo[] memory chainInfos ) public {
66
+ function _setActiveForks (ChainInfo[] memory chainInfos ) internal virtual {
101
67
if (chainInfos.length < 2 ) {
102
68
console.log ("setActiveForks: 2 or more forks must be specified " );
103
69
revert ("setActiveForks: 2 or more forks must be specified " );
@@ -117,34 +83,17 @@ abstract contract WormholeRelayerTest is Test {
117
83
guardian: WormholeSimulator (address (0 ))
118
84
});
119
85
}
120
- sourceChainInfo = chainInfos[0 ];
121
- sourceChain = sourceChainInfo.chainId;
122
- relayerSource = sourceChainInfo.relayer;
123
- tokenBridgeSource = sourceChainInfo.tokenBridge;
124
- wormholeSource = sourceChainInfo.wormhole;
125
-
126
- targetChainInfo = chainInfos[1 ];
127
- targetChain = targetChainInfo.chainId;
128
- relayerTarget = targetChainInfo.relayer;
129
- tokenBridgeTarget = targetChainInfo.tokenBridge;
130
- wormholeTarget = targetChainInfo.wormhole;
131
86
}
132
87
133
- function setTestnetForkChains (uint16 _sourceChain , uint16 _targetChain ) public {
134
- ChainInfo[] memory forks = new ChainInfo [](2 );
135
- forks[0 ] = chainInfosTestnet[_sourceChain];
136
- forks[1 ] = chainInfosTestnet[_targetChain];
137
- setActiveForks (forks);
88
+ function setActiveForks (ChainInfo[] memory chainInfos ) public virtual {
89
+ _setActiveForks (chainInfos);
138
90
}
139
91
140
- function setMainnetForkChains (uint16 _sourceChain , uint16 _targetChain ) public {
141
- ChainInfo[] memory forks = new ChainInfo [](2 );
142
- forks[0 ] = chainInfosMainnet[_sourceChain];
143
- forks[1 ] = chainInfosMainnet[_targetChain];
144
- setActiveForks (forks);
92
+ function setUp () public virtual {
93
+ _setUp ();
145
94
}
146
95
147
- function setUp () public {
96
+ function _setUp () internal {
148
97
// create fork and guardian for each active fork
149
98
for (uint256 i = 0 ; i < activeForksList.length ; ++ i) {
150
99
uint16 chainId = activeForksList[i];
@@ -155,27 +104,17 @@ abstract contract WormholeRelayerTest is Test {
155
104
DEVNET_GUARDIAN_PK
156
105
);
157
106
}
158
- // set up aliases for the source and target forks
159
- guardianSource = activeForks[sourceChain].guardian;
160
- guardianTarget = activeForks[targetChain].guardian;
161
- sourceFork = activeForks[sourceChain].fork;
162
- targetFork = activeForks[targetChain].fork;
163
107
164
108
// run setUp virtual functions for each fork
165
- vm.selectFork (sourceFork);
166
- setUpSource ();
167
- vm.selectFork (targetFork);
168
- setUpTarget ();
169
109
for (uint256 i = 0 ; i < activeForksList.length ; ++ i) {
170
- uint16 chainId = activeForksList[i];
171
- if (chainId != sourceChain && chainId != targetChain) {
172
- vm.selectFork (activeForks[chainId].fork);
173
- setUpOther (activeForks[chainId]);
174
- }
110
+ ActiveFork memory fork = activeForks[activeForksList[i]];
111
+ vm.selectFork (fork.fork);
112
+ setUpFork (fork);
175
113
}
176
114
177
- vm.selectFork (sourceFork);
178
- mockOffchainRelayer = new MockOffchainRelayer (address (wormholeSource), address (guardianSource), vm);
115
+ ActiveFork memory firstFork = activeForks[activeForksList[0 ]];
116
+ vm.selectFork (firstFork.fork);
117
+ mockOffchainRelayer = new MockOffchainRelayer (address (firstFork.wormhole), address (firstFork.guardian), vm);
179
118
// register all active forks with the 'offchain' relayer
180
119
for (uint256 i = 0 ; i < activeForksList.length ; ++ i) {
181
120
ActiveFork storage fork = activeForks[activeForksList[i]];
@@ -366,3 +305,102 @@ abstract contract WormholeRelayerTest is Test {
366
305
367
306
receive () external payable {}
368
307
}
308
+
309
+ abstract contract WormholeRelayerBasicTest is WormholeRelayerTest {
310
+ /**
311
+ * @dev virtual function to initialize source chain before each test
312
+ */
313
+ function setUpSource () public virtual ;
314
+
315
+ /**
316
+ * @dev virtual function to initialize target chain before each test
317
+ */
318
+ function setUpTarget () public virtual ;
319
+
320
+ /**
321
+ * @dev virtual function to initialize other active forks before each test
322
+ * Note: not called for source/target forks
323
+ */
324
+ function setUpOther (ActiveFork memory fork ) public virtual {}
325
+
326
+ /*
327
+ * aliases for activeForks
328
+ */
329
+
330
+ ChainInfo public sourceChainInfo;
331
+ ChainInfo public targetChainInfo;
332
+
333
+ uint16 public sourceChain;
334
+ uint16 public targetChain;
335
+
336
+ uint256 public sourceFork;
337
+ uint256 public targetFork;
338
+
339
+ IWormholeRelayer public relayerSource;
340
+ ITokenBridge public tokenBridgeSource;
341
+ IWormhole public wormholeSource;
342
+
343
+ IWormholeRelayer public relayerTarget;
344
+ ITokenBridge public tokenBridgeTarget;
345
+ IWormhole public wormholeTarget;
346
+
347
+ WormholeSimulator public guardianSource;
348
+ WormholeSimulator public guardianTarget;
349
+
350
+ /*
351
+ * end activeForks aliases
352
+ */
353
+
354
+ constructor () WormholeRelayerTest () {
355
+ setTestnetForkChains (6 , 14 );
356
+ }
357
+
358
+ function setUp () public override {
359
+ _setUp ();
360
+ // aliases can't be set until after setUp
361
+ guardianSource = activeForks[activeForksList[0 ]].guardian;
362
+ guardianTarget = activeForks[activeForksList[1 ]].guardian;
363
+ sourceFork = activeForks[activeForksList[0 ]].fork;
364
+ targetFork = activeForks[activeForksList[1 ]].fork;
365
+ }
366
+
367
+ function setUpFork (ActiveFork memory fork ) public override {
368
+ if (fork.chainId == sourceChain) {
369
+ setUpSource ();
370
+ } else if (fork.chainId == targetChain) {
371
+ setUpTarget ();
372
+ } else {
373
+ setUpOther (fork);
374
+ }
375
+ }
376
+
377
+ function setActiveForks (ChainInfo[] memory chainInfos ) public override {
378
+ _setActiveForks (chainInfos);
379
+
380
+ sourceChainInfo = chainInfos[0 ];
381
+ sourceChain = sourceChainInfo.chainId;
382
+ relayerSource = sourceChainInfo.relayer;
383
+ tokenBridgeSource = sourceChainInfo.tokenBridge;
384
+ wormholeSource = sourceChainInfo.wormhole;
385
+
386
+ targetChainInfo = chainInfos[1 ];
387
+ targetChain = targetChainInfo.chainId;
388
+ relayerTarget = targetChainInfo.relayer;
389
+ tokenBridgeTarget = targetChainInfo.tokenBridge;
390
+ wormholeTarget = targetChainInfo.wormhole;
391
+ }
392
+
393
+ function setTestnetForkChains (uint16 _sourceChain , uint16 _targetChain ) public {
394
+ ChainInfo[] memory forks = new ChainInfo [](2 );
395
+ forks[0 ] = chainInfosTestnet[_sourceChain];
396
+ forks[1 ] = chainInfosTestnet[_targetChain];
397
+ setActiveForks (forks);
398
+ }
399
+
400
+ function setMainnetForkChains (uint16 _sourceChain , uint16 _targetChain ) public {
401
+ ChainInfo[] memory forks = new ChainInfo [](2 );
402
+ forks[0 ] = chainInfosMainnet[_sourceChain];
403
+ forks[1 ] = chainInfosMainnet[_targetChain];
404
+ setActiveForks (forks);
405
+ }
406
+ }
0 commit comments