# Task 4: Cross-Chain Integration Testing Plan **Date**: 2025-01-18 **Status**: ⏳ **TESTING PLAN READY** (Depends on Bridge Configuration) **Priority**: 🔴 CRITICAL ## Overview Comprehensive testing plan for cross-chain integration between ChainID 138 and Ethereum Mainnet using CCIP bridges. ## Prerequisites ### 1. Bridge Configuration ✅ REQUIRED **Current Status**: ⚠️ **NOT CONFIGURED** (from Task 7) **Required Actions**: - Configure Mainnet bridges with ChainID 138 as destination - Configure ChainID 138 bridges with Mainnet as destination - Verify destination chain selectors are correct **See**: `TASK7_BRIDGE_CONFIG_VERIFICATION.md` for configuration details ### 2. Off-Chain Services ✅ REQUIRED **Current Status**: ⏳ **TEMPLATES READY** (from Tasks 2-3) **Required Actions**: - Implement state anchoring service (template available) - Implement transaction mirroring service (template available) **See**: - `TASK2_STATE_ANCHORING_SERVICE.md` - Service implementation guide - `TASK3_TRANSACTION_MIRRORING_SERVICE.md` - Service implementation guide ### 3. Test Environment Setup ✅ **RPC Endpoints**: - Mainnet: `https://eth.llamarpc.com` or Infura - ChainID 138: `http://192.168.11.211:8545` (VMID 2101) **Test Accounts**: - Test account with ETH on Mainnet - Test account with ETH on ChainID 138 - Sufficient LINK tokens for CCIP fees ## Test Plan ### Phase 1: Bridge Configuration Verification #### Test 1.1: Verify Destination Chain Configuration **Objective**: Verify bridges are configured with correct destination chains **Steps**: 1. Query `getDestinationChains()` on Mainnet CCIPWETH9Bridge 2. Verify ChainID 138 selector is in the list 3. Query `destinations(chainSelector)` to verify receiver bridge address 4. Repeat for CCIPWETH10Bridge 5. Repeat on ChainID 138 bridges (Mainnet as destination) **Expected Results**: - ChainID 138 bridges configured on Mainnet - Mainnet configured on ChainID 138 bridges - Correct receiver bridge addresses set **Command**: ```bash # Check Mainnet bridge destinations cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \ "getDestinationChains()(uint64[])" \ --rpc-url https://eth.llamarpc.com # Check specific destination cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \ "destinations(uint64)(uint64,address,bool)" \ \ --rpc-url https://eth.llamarpc.com ``` #### Test 1.2: Verify CCIP Router Connection **Objective**: Verify bridges are connected to CCIP Routers **Steps**: 1. Query `ccipRouter()` on all bridges 2. Verify router addresses match expected values: - Mainnet: `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D` - ChainID 138: Verify router address **Expected Results**: - Correct CCIP Router addresses on all bridges ### Phase 2: Small Amount Test Transfers #### Test 2.1: Mainnet → ChainID 138 (WETH9) **Objective**: Test WETH9 transfer from Mainnet to ChainID 138 **Steps**: 1. Approve WETH9 on Mainnet for bridge 2. Call `sendCrossChain()` on Mainnet CCIPWETH9Bridge 3. Monitor CCIP message ID 4. Wait for CCIP confirmation 5. Verify WETH9 received on ChainID 138 6. Verify balance on destination chain **Test Amount**: 0.001 WETH9 (small test amount) **Expected Results**: - Transaction succeeds on Mainnet - CCIP message ID emitted - WETH9 received on ChainID 138 at recipient address #### Test 2.2: ChainID 138 → Mainnet (WETH9) **Objective**: Test WETH9 transfer from ChainID 138 to Mainnet **Steps**: 1. Approve WETH9 on ChainID 138 for bridge 2. Call `sendCrossChain()` on ChainID 138 CCIPWETH9Bridge 3. Monitor CCIP message ID 4. Wait for CCIP confirmation 5. Verify WETH9 received on Mainnet **Test Amount**: 0.001 WETH9 #### Test 2.3: Mainnet → ChainID 138 (WETH10) **Objective**: Test WETH10 transfer from Mainnet to ChainID 138 **Steps**: Same as Test 2.1 but using WETH10 bridge #### Test 2.4: ChainID 138 → Mainnet (WETH10) **Objective**: Test WETH10 transfer from ChainID 138 to Mainnet **Steps**: Same as Test 2.2 but using WETH10 bridge ### Phase 3: State Synchronization Testing #### Test 3.1: State Anchoring Service Test **Objective**: Verify state anchoring service works **Steps**: 1. Deploy/start state anchoring service 2. Monitor ChainID 138 blocks 3. Verify state proofs submitted to MainnetTether 4. Verify state proofs stored on-chain 5. Query `getStateProof()` to verify data **Expected Results**: - State proofs anchored regularly - Data accessible via `getStateProof()` on MainnetTether - Events emitted correctly #### Test 3.2: Transaction Mirroring Service Test **Objective**: Verify transaction mirroring service works **Steps**: 1. Deploy/start transaction mirroring service 2. Perform test transaction on ChainID 138 3. Verify transaction mirrored to TransactionMirror 4. Verify transaction data queryable 5. Verify events indexed correctly **Expected Results**: - Transactions mirrored to Mainnet - Transaction data accessible - Events searchable on Etherscan ### Phase 4: Integration End-to-End Tests #### Test 4.1: Complete Bridge Flow (Both Directions) **Objective**: Test complete bridge flow in both directions **Steps**: 1. Mainnet → ChainID 138 transfer 2. Verify on ChainID 138 3. ChainID 138 → Mainnet transfer (same amount back) 4. Verify on Mainnet 5. Verify state anchored 6. Verify transactions mirrored **Expected Results**: - Round-trip transfer succeeds - Balances correct on both chains - State synchronization works - Transaction mirroring works #### Test 4.2: Multiple Concurrent Transfers **Objective**: Test multiple transfers happening simultaneously **Steps**: 1. Initiate 3 transfers from Mainnet to ChainID 138 2. Initiate 2 transfers from ChainID 138 to Mainnet 3. Monitor all transfers complete 4. Verify all amounts received correctly **Expected Results**: - All transfers complete successfully - No double-spending or replay issues - Correct amounts on both chains ### Phase 5: Edge Cases and Error Handling #### Test 5.1: Insufficient LINK Fees **Objective**: Verify error handling for insufficient LINK **Steps**: 1. Attempt transfer with insufficient LINK balance 2. Verify transaction reverts with clear error **Expected Results**: - Transaction reverts - Clear error message about insufficient fees #### Test 5.2: Invalid Destination Chain **Objective**: Verify error handling for invalid destination **Steps**: 1. Attempt transfer to unconfigured chain selector 2. Verify transaction reverts **Expected Results**: - Transaction reverts - Error about destination not enabled #### Test 5.3: Zero Amount Transfer **Objective**: Verify zero amount is rejected **Steps**: 1. Attempt transfer with amount = 0 2. Verify transaction reverts **Expected Results**: - Transaction reverts - Error about invalid amount ## Test Execution Checklist ### Pre-Testing Setup - [ ] Bridge destinations configured (Mainnet ↔ ChainID 138) - [ ] Test accounts funded with ETH on both chains - [ ] LINK tokens available for CCIP fees - [ ] WETH9/WETH10 approved for bridges - [ ] State anchoring service running (optional) - [ ] Transaction mirroring service running (optional) ### Test Execution - [ ] Phase 1: Configuration verification complete - [ ] Phase 2: Small amount test transfers complete - [ ] Phase 3: State synchronization tests complete - [ ] Phase 4: End-to-end integration tests complete - [ ] Phase 5: Edge cases tested ### Post-Testing Verification - [ ] All balances correct on both chains - [ ] State proofs anchored correctly - [ ] Transactions mirrored correctly - [ ] No errors in logs - [ ] All CCIP messages confirmed ## Testing Scripts ### Manual Testing Use `cast` commands for manual testing: ```bash # Send cross-chain transfer cast send 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \ "sendCrossChain(uint64,address,uint256)" \ \ \ 1000000000000000 \ --rpc-url https://eth.llamarpc.com \ --private-key $PRIVATE_KEY ``` ### Automated Testing Create test scripts using Foundry/Forge: - `test/ccip/CrossChainIntegration.t.sol` - Integration tests - `test/ccip/BridgeFlow.t.sol` - Bridge flow tests ## Dependencies 1. ✅ **Bridge Configuration** - Required before testing (Task 7 shows not configured) 2. ✅ **Off-Chain Services** - Optional but recommended (Templates ready) 3. ✅ **Test Accounts** - Required for transfers 4. ✅ **CCIP Fee Tokens** - LINK tokens required ## Current Status **Blockers**: - ⚠️ Bridge destinations not configured (from Task 7) - ⏳ Off-chain services not implemented (templates ready) **Ready for Testing**: - ✅ RPC endpoints available - ✅ Contracts deployed and verified - ✅ Test plan documented ## Next Steps 1. **Configure Bridge Destinations** (Task 7 finding) 2. **Implement Off-Chain Services** (if needed for state anchoring/mirroring) 3. **Execute Test Plan** - Phase 1 through Phase 5 4. **Document Test Results** --- **Status**: ⏳ **TESTING PLAN READY - AWAITING BRIDGE CONFIGURATION**