@@ -134,6 +134,11 @@ contract CCIPv1_5LockReleasePoolFork is Test {
134134 CCIPLocalSimulatorFork public ccipLocalSimulatorFork;
135135 MockERC20TokenOwner public mockERC20TokenEthSepolia;
136136 MockERC20TokenOwner public mockERC20TokenBaseSepolia;
137+ LockReleaseTokenPool public lockReleaseTokenPoolEthSepolia;
138+ LockReleaseTokenPool public lockReleaseTokenPoolBaseSepolia;
139+
140+ Register.NetworkDetails ethSepoliaNetworkDetails;
141+ Register.NetworkDetails baseSepoliaNetworkDetails;
137142
138143 uint256 ethSepoliaFork;
139144 uint256 baseSepoliaFork;
@@ -195,12 +200,14 @@ contract CCIPv1_5LockReleasePoolFork is Test {
195200 function test_forkSupportNewCCIPToken() public {
196201 // Step 3) Deploy LockReleaseTokenPool on Ethereum Sepolia
197202 vm.selectFork(ethSepoliaFork);
198- Register.NetworkDetails memory ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
203+ ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
199204 address[] memory allowlist = new address[](0);
205+ uint8 localTokenDecimals = 18;
200206
201207 vm.startPrank(alice);
202- LockReleaseTokenPool lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
208+ lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
203209 IERC20(address(mockERC20TokenEthSepolia)),
210+ localTokenDecimals,
204211 allowlist,
205212 ethSepoliaNetworkDetails.rmnProxyAddress,
206213 true, // acceptLiquidity
@@ -220,11 +227,12 @@ contract CCIPv1_5LockReleasePoolFork is Test {
220227
221228 // Step 4) Deploy LockReleaseTokenPool on Base Sepolia
222229 vm.selectFork(baseSepoliaFork);
223- Register.NetworkDetails memory baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
230+ baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
224231
225232 vm.startPrank(alice);
226- LockReleaseTokenPool lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
233+ lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
227234 IERC20(address(mockERC20TokenBaseSepolia)),
235+ localTokenDecimals,
228236 allowlist,
229237 baseSepoliaNetworkDetails.rmnProxyAddress,
230238 true, // acceptLiquidity
@@ -407,15 +415,17 @@ contract CCIPv1_5LockReleasePoolFork is Test {
407415
408416 vm.startPrank(alice);
409417 TokenPool.ChainUpdate[] memory chains = new TokenPool.ChainUpdate[](1);
418+ bytes[] memory remotePoolAddressesEthSepolia = new bytes[](1);
419+ remotePoolAddressesEthSepolia[0] = abi.encode(address(lockReleaseTokenPoolBaseSepolia));
410420 chains[0] = TokenPool.ChainUpdate({
411421 remoteChainSelector: baseSepoliaNetworkDetails.chainSelector,
412- allowed: true,
413- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolBaseSepolia)),
422+ remotePoolAddresses: remotePoolAddressesEthSepolia,
414423 remoteTokenAddress: abi.encode(address(mockERC20TokenBaseSepolia)),
415424 outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
416425 inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
417426 });
418- lockReleaseTokenPoolEthSepolia.applyChainUpdates(chains);
427+ uint64[] memory remoteChainSelectorsToRemove = new uint64[](0);
428+ lockReleaseTokenPoolEthSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
419429 vm.stopPrank();
420430 }
421431}
@@ -433,15 +443,16 @@ contract CCIPv1_5LockReleasePoolFork is Test {
433443
434444 vm.startPrank(alice);
435445 chains = new TokenPool.ChainUpdate[](1);
446+ bytes[] memory remotePoolAddressesBaseSepolia = new bytes[](1);
447+ remotePoolAddressesBaseSepolia[0] = abi.encode(address(lockReleaseTokenPoolEthSepolia));
436448 chains[0] = TokenPool.ChainUpdate({
437449 remoteChainSelector: ethSepoliaNetworkDetails.chainSelector,
438- allowed: true,
439- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolEthSepolia)),
450+ remotePoolAddresses: remotePoolAddressesBaseSepolia,
440451 remoteTokenAddress: abi.encode(address(mockERC20TokenEthSepolia)),
441452 outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
442453 inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
443454 });
444- lockReleaseTokenPoolBaseSepolia.applyChainUpdates(chains);
455+ lockReleaseTokenPoolBaseSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
445456 vm.stopPrank();
446457 }
447458}
@@ -534,6 +545,11 @@ contract CCIPv1_5LockReleasePoolFork is Test {
534545 CCIPLocalSimulatorFork public ccipLocalSimulatorFork;
535546 MockERC20TokenOwner public mockERC20TokenEthSepolia;
536547 MockERC20TokenOwner public mockERC20TokenBaseSepolia;
548+ LockReleaseTokenPool public lockReleaseTokenPoolEthSepolia;
549+ LockReleaseTokenPool public lockReleaseTokenPoolBaseSepolia;
550+
551+ Register.NetworkDetails ethSepoliaNetworkDetails;
552+ Register.NetworkDetails baseSepoliaNetworkDetails;
537553
538554 uint256 ethSepoliaFork;
539555 uint256 baseSepoliaFork;
@@ -567,12 +583,14 @@ contract CCIPv1_5LockReleasePoolFork is Test {
567583 function test_forkSupportNewCCIPToken() public {
568584 // Step 3) Deploy LockReleaseTokenPool on Ethereum Sepolia
569585 vm.selectFork(ethSepoliaFork);
570- Register.NetworkDetails memory ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
586+ ethSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
571587 address[] memory allowlist = new address[](0);
588+ uint8 localTokenDecimals = 18;
572589
573590 vm.startPrank(alice);
574- LockReleaseTokenPool lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
591+ lockReleaseTokenPoolEthSepolia = new LockReleaseTokenPool(
575592 IERC20(address(mockERC20TokenEthSepolia)),
593+ localTokenDecimals,
576594 allowlist,
577595 ethSepoliaNetworkDetails.rmnProxyAddress,
578596 true, // acceptLiquidity
@@ -582,11 +600,12 @@ contract CCIPv1_5LockReleasePoolFork is Test {
582600
583601 // Step 4) Deploy LockReleaseTokenPool on Base Sepolia
584602 vm.selectFork(baseSepoliaFork);
585- Register.NetworkDetails memory baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
603+ baseSepoliaNetworkDetails = ccipLocalSimulatorFork.getNetworkDetails(block.chainid);
586604
587605 vm.startPrank(alice);
588- LockReleaseTokenPool lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
606+ lockReleaseTokenPoolBaseSepolia = new LockReleaseTokenPool(
589607 IERC20(address(mockERC20TokenBaseSepolia)),
608+ localTokenDecimals,
590609 allowlist,
591610 baseSepoliaNetworkDetails.rmnProxyAddress,
592611 true, // acceptLiquidity
@@ -679,31 +698,34 @@ contract CCIPv1_5LockReleasePoolFork is Test {
679698
680699 vm.startPrank(alice);
681700 TokenPool.ChainUpdate[] memory chains = new TokenPool.ChainUpdate[](1);
701+ bytes[] memory remotePoolAddressesEthSepolia = new bytes[](1);
702+ remotePoolAddressesEthSepolia[0] = abi.encode(address(lockReleaseTokenPoolBaseSepolia));
682703 chains[0] = TokenPool.ChainUpdate({
683704 remoteChainSelector: baseSepoliaNetworkDetails.chainSelector,
684- allowed: true,
685- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolBaseSepolia)),
705+ remotePoolAddresses: remotePoolAddressesEthSepolia,
686706 remoteTokenAddress: abi.encode(address(mockERC20TokenBaseSepolia)),
687707 outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
688708 inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
689709 });
690- lockReleaseTokenPoolEthSepolia.applyChainUpdates(chains);
710+ uint64[] memory remoteChainSelectorsToRemove = new uint64[](0);
711+ lockReleaseTokenPoolEthSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
691712 vm.stopPrank();
692713
693714 // Step 14) Configure Token Pool on Base Sepolia
694715 vm.selectFork(baseSepoliaFork);
695716
696717 vm.startPrank(alice);
697718 chains = new TokenPool.ChainUpdate[](1);
719+ bytes[] memory remotePoolAddressesBaseSepolia = new bytes[](1);
720+ remotePoolAddressesBaseSepolia[0] = abi.encode(address(lockReleaseTokenPoolEthSepolia));
698721 chains[0] = TokenPool.ChainUpdate({
699722 remoteChainSelector: ethSepoliaNetworkDetails.chainSelector,
700- allowed: true,
701- remotePoolAddress: abi.encode(address(lockReleaseTokenPoolEthSepolia)),
723+ remotePoolAddresses: remotePoolAddressesBaseSepolia,
702724 remoteTokenAddress: abi.encode(address(mockERC20TokenEthSepolia)),
703725 outboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 }),
704726 inboundRateLimiterConfig: RateLimiter.Config({ isEnabled: true, capacity: liquidityAmount, rate: 167 })
705727 });
706- lockReleaseTokenPoolBaseSepolia.applyChainUpdates(chains);
728+ lockReleaseTokenPoolBaseSepolia.applyChainUpdates(remoteChainSelectorsToRemove, chains);
707729 vm.stopPrank();
708730
709731 // Step 15) Transfer tokens from Ethereum Sepolia to Base Sepolia
0 commit comments