@@ -134,6 +134,11 @@ contract CCIPv1_5LockReleasePoolFork is Test {
134
134
CCIPLocalSimulatorFork public ccipLocalSimulatorFork;
135
135
MockERC20TokenOwner public mockERC20TokenEthSepolia;
136
136
MockERC20TokenOwner public mockERC20TokenBaseSepolia;
137
+ LockReleaseTokenPool public lockReleaseTokenPoolEthSepolia;
138
+ LockReleaseTokenPool public lockReleaseTokenPoolBaseSepolia;
139
+
140
+ Register.NetworkDetails ethSepoliaNetworkDetails;
141
+ Register.NetworkDetails baseSepoliaNetworkDetails;
137
142
138
143
uint256 ethSepoliaFork;
139
144
uint256 baseSepoliaFork;
@@ -195,12 +200,14 @@ contract CCIPv1_5LockReleasePoolFork is Test {
195
200
function test_forkSupportNewCCIPToken() public {
196
201
// Step 3) Deploy LockReleaseTokenPool on Ethereum Sepolia
197
202
vm.selectFork(ethSepoliaFork);
198
- Register.NetworkDetails memory ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
203
+ ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
199
204
address[] memory allowlist = new address[](0);
205
+ uint8 localTokenDecimals = 18;
200
206
201
207
vm.startPrank(alice);
202
- LockReleaseTokenPool lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
208
+ lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
203
209
IERC20(address(mockERC20TokenEthSepolia)),
210
+ localTokenDecimals,
204
211
allowlist,
205
212
ethSepoliaNetworkDetails.rmnProxyAddress,
206
213
true, // acceptLiquidity
@@ -220,11 +227,12 @@ contract CCIPv1_5LockReleasePoolFork is Test {
220
227
221
228
// Step 4) Deploy LockReleaseTokenPool on Base Sepolia
222
229
vm.selectFork(baseSepoliaFork);
223
- Register.NetworkDetails memory baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
230
+ baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
224
231
225
232
vm.startPrank(alice);
226
- LockReleaseTokenPool lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
233
+ lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
227
234
IERC20(address(mockERC20TokenBaseSepolia)),
235
+ localTokenDecimals,
228
236
allowlist,
229
237
baseSepoliaNetworkDetails.rmnProxyAddress,
230
238
true, // acceptLiquidity
@@ -407,15 +415,17 @@ contract CCIPv1_5LockReleasePoolFork is Test {
407
415
408
416
vm.startPrank(alice);
409
417
TokenPool.ChainUpdate[] memory chains = new TokenPool.ChainUpdate[](1);
418
+ bytes[] memory remotePoolAddressesEthSepolia = new bytes[](1);
419
+ remotePoolAddressesEthSepolia[0] = abi.encode(address(lockReleaseTokenPoolBaseSepolia));
410
420
chains[0] = TokenPool.ChainUpdate({
411
421
remoteChainSelector: baseSepoliaNetworkDetails.chainSelector,
412
- allowed: true,
413
- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolBaseSepolia)),
422
+ remotePoolAddresses: remotePoolAddressesEthSepolia,
414
423
remoteTokenAddress: abi.encode(address(mockERC20TokenBaseSepolia)),
415
424
outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
416
425
inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
417
426
});
418
- lockReleaseTokenPoolEthSepolia.applyChainUpdates(chains);
427
+ uint64[] memory remoteChainSelectorsToRemove = new uint64[](0);
428
+ lockReleaseTokenPoolEthSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
419
429
vm.stopPrank();
420
430
}
421
431
}
@@ -433,15 +443,16 @@ contract CCIPv1_5LockReleasePoolFork is Test {
433
443
434
444
vm.startPrank(alice);
435
445
chains = new TokenPool.ChainUpdate[](1);
446
+ bytes[] memory remotePoolAddressesBaseSepolia = new bytes[](1);
447
+ remotePoolAddressesBaseSepolia[0] = abi.encode(address(lockReleaseTokenPoolEthSepolia));
436
448
chains[0] = TokenPool.ChainUpdate({
437
449
remoteChainSelector: ethSepoliaNetworkDetails.chainSelector,
438
- allowed: true,
439
- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolEthSepolia)),
450
+ remotePoolAddresses: remotePoolAddressesBaseSepolia,
440
451
remoteTokenAddress: abi.encode(address(mockERC20TokenEthSepolia)),
441
452
outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
442
453
inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
443
454
});
444
- lockReleaseTokenPoolBaseSepolia.applyChainUpdates(chains);
455
+ lockReleaseTokenPoolBaseSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
445
456
vm.stopPrank();
446
457
}
447
458
}
@@ -534,6 +545,11 @@ contract CCIPv1_5LockReleasePoolFork is Test {
534
545
CCIPLocalSimulatorFork public ccipLocalSimulatorFork;
535
546
MockERC20TokenOwner public mockERC20TokenEthSepolia;
536
547
MockERC20TokenOwner public mockERC20TokenBaseSepolia;
548
+ LockReleaseTokenPool public lockReleaseTokenPoolEthSepolia;
549
+ LockReleaseTokenPool public lockReleaseTokenPoolBaseSepolia;
550
+
551
+ Register.NetworkDetails ethSepoliaNetworkDetails;
552
+ Register.NetworkDetails baseSepoliaNetworkDetails;
537
553
538
554
uint256 ethSepoliaFork;
539
555
uint256 baseSepoliaFork;
@@ -567,12 +583,14 @@ contract CCIPv1_5LockReleasePoolFork is Test {
567
583
function test_forkSupportNewCCIPToken() public {
568
584
// Step 3) Deploy LockReleaseTokenPool on Ethereum Sepolia
569
585
vm.selectFork(ethSepoliaFork);
570
- Register.NetworkDetails memory ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
586
+ ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
571
587
address[] memory allowlist = new address[](0);
588
+ uint8 localTokenDecimals = 18;
572
589
573
590
vm.startPrank(alice);
574
- LockReleaseTokenPool lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
591
+ lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
575
592
IERC20(address(mockERC20TokenEthSepolia)),
593
+ localTokenDecimals,
576
594
allowlist,
577
595
ethSepoliaNetworkDetails.rmnProxyAddress,
578
596
true, // acceptLiquidity
@@ -582,11 +600,12 @@ contract CCIPv1_5LockReleasePoolFork is Test {
582
600
583
601
// Step 4) Deploy LockReleaseTokenPool on Base Sepolia
584
602
vm.selectFork(baseSepoliaFork);
585
- Register.NetworkDetails memory baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
603
+ baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
586
604
587
605
vm.startPrank(alice);
588
- LockReleaseTokenPool lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
606
+ lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
589
607
IERC20(address(mockERC20TokenBaseSepolia)),
608
+ localTokenDecimals,
590
609
allowlist,
591
610
baseSepoliaNetworkDetails.rmnProxyAddress,
592
611
true, // acceptLiquidity
@@ -679,31 +698,34 @@ contract CCIPv1_5LockReleasePoolFork is Test {
679
698
680
699
vm.startPrank(alice);
681
700
TokenPool.ChainUpdate[] memory chains = new TokenPool.ChainUpdate[](1);
701
+ bytes[] memory remotePoolAddressesEthSepolia = new bytes[](1);
702
+ remotePoolAddressesEthSepolia[0] = abi.encode(address(lockReleaseTokenPoolBaseSepolia));
682
703
chains[0] = TokenPool.ChainUpdate({
683
704
remoteChainSelector: baseSepoliaNetworkDetails.chainSelector,
684
- allowed: true,
685
- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolBaseSepolia)),
705
+ remotePoolAddresses: remotePoolAddressesEthSepolia,
686
706
remoteTokenAddress: abi.encode(address(mockERC20TokenBaseSepolia)),
687
707
outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
688
708
inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
689
709
});
690
- lockReleaseTokenPoolEthSepolia.applyChainUpdates(chains);
710
+ uint64[] memory remoteChainSelectorsToRemove = new uint64[](0);
711
+ lockReleaseTokenPoolEthSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
691
712
vm.stopPrank();
692
713
693
714
// Step 14) Configure Token Pool on Base Sepolia
694
715
vm.selectFork(baseSepoliaFork);
695
716
696
717
vm.startPrank(alice);
697
718
chains = new TokenPool.ChainUpdate[](1);
719
+ bytes[] memory remotePoolAddressesBaseSepolia = new bytes[](1);
720
+ remotePoolAddressesBaseSepolia[0] = abi.encode(address(lockReleaseTokenPoolEthSepolia));
698
721
chains[0] = TokenPool.ChainUpdate({
699
722
remoteChainSelector: ethSepoliaNetworkDetails.chainSelector,
700
- allowed: true,
701
- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolEthSepolia)),
723
+ remotePoolAddresses: remotePoolAddressesBaseSepolia,
702
724
remoteTokenAddress: abi.encode(address(mockERC20TokenEthSepolia)),
703
725
outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
704
726
inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
705
727
});
706
- lockReleaseTokenPoolBaseSepolia.applyChainUpdates(chains);
728
+ lockReleaseTokenPoolBaseSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
707
729
vm.stopPrank();
708
730
709
731
// Step 15) Transfer tokens from Ethereum Sepolia to Base Sepolia
0 commit comments