# Challenger Operations Guide ## Overview This guide explains how to become a challenger and detect fraudulent claims in the trustless bridge system. Challengers monitor claims and submit fraud proofs to earn rewards. ## Becoming a Challenger ### Requirements 1. **Ethereum Wallet**: Wallet with ETH for gas fees 2. **Monitoring Infrastructure**: Ability to monitor both ChainID 138 and Ethereum Mainnet 3. **Technical Knowledge**: Understanding of fraud proofs, Merkle proofs, and bridge mechanics 4. **Capital**: ETH for gas fees (rewards cover costs if successful) ### Setup Steps 1. **Deploy Monitoring Service**: - Monitor `Deposit` events on ChainID 138 - Monitor `ClaimSubmitted` events on Ethereum Mainnet - Compare claims against source chain state 2. **Prepare Fraud Proof Generation**: - Set up Merkle proof generation - Implement fraud proof encoding - Test fraud proof verification 3. **Test on Testnet**: - Test challenge submission - Verify fraud proof format - Practice fraud detection ## Challenger Operations ### Monitoring for Fraud **What to Monitor**: 1. **Claims on Ethereum**: All `ClaimSubmitted` events 2. **Deposits on ChainID 138**: All `Deposit` events 3. **Compare**: Verify claims match deposits **Fraud Detection**: - **Non-Existent Deposit**: Claim for deposit that doesn't exist - **Incorrect Amount**: Claim amount differs from actual deposit - **Incorrect Recipient**: Claim recipient differs from actual deposit - **Double Spend**: Same deposit claimed twice ### Submitting Challenges **Function**: `ChallengeManager.challengeClaim()` **Parameters**: - `depositId`: Deposit ID of the claim to challenge - `proofType`: Type of fraud proof (NonExistentDeposit, IncorrectAmount, etc.) - `proof`: Encoded fraud proof data **Process**: ```solidity // Generate fraud proof bytes memory fraudProof = generateFraudProof(depositId, claim, proofType); // Submit challenge challengeManager.challengeClaim( depositId, proofType, fraudProof ); ``` **Fraud Proof Types**: 1. **NonExistentDeposit**: Merkle proof showing deposit doesn't exist 2. **IncorrectAmount**: Merkle proof with actual deposit amount 3. **IncorrectRecipient**: Merkle proof with actual recipient 4. **DoubleSpend**: Proof of previous claim for same deposit ### Fraud Proof Generation **Non-Existent Deposit Proof**: 1. Get state root from ChainID 138 block 2. Hash claimed deposit data 3. Generate Merkle proof showing non-existence 4. Encode proof according to `FraudProofTypes.NonExistentDepositProof` **Incorrect Amount Proof**: 1. Get actual deposit from ChainID 138 2. Generate Merkle proof for actual deposit 3. Encode proof with actual amount 4. Submit challenge with proof **See**: `docs/bridge/trustless/FRAUD_PROOFS.md` for detailed proof formats ## Economics ### Costs - **Gas Fees**: For submitting challenges - **Infrastructure**: Monitoring and proof generation costs - **Time**: Time to monitor and generate proofs ### Revenue - **Challenger Reward**: 50% of slashed bond - **Example**: If bond is 1.1 ETH, challenger receives 0.55 ETH ### Profitability - Calculate: Reward - Gas Costs - Infrastructure - Time - Consider success rate, gas prices, bond amounts - Monitor market conditions ## Best Practices ### 1. Detection - **Fast Detection**: Detect fraud quickly (within challenge window) - **Accurate Proofs**: Ensure fraud proofs are correct - **Comprehensive Monitoring**: Monitor all claims and deposits - **Pattern Recognition**: Identify patterns in fraudulent claims ### 2. Proof Generation - **Correct Format**: Use proper fraud proof encoding - **Valid Proofs**: Ensure proofs are verifiable - **Complete Data**: Include all required proof elements - **Testing**: Test proof generation thoroughly ### 3. Risk Management - **Gas Costs**: Monitor gas prices - **Success Rate**: Track challenge success rate - **Competition**: Consider other challengers - **Timing**: Submit challenges within challenge window ## Automation ### Automated Monitoring - Set up event watchers for both chains - Compare claims against deposits automatically - Alert on potential fraud - Generate fraud proofs automatically ### Automated Challenging - Automatically submit challenges when fraud detected - Optimize gas usage - Monitor challenge success - Track rewards ## Troubleshooting ### Challenge Rejected - **Check Proof**: Verify fraud proof is correct - **Verify Format**: Ensure proof encoding is correct - **Check Timing**: Ensure within challenge window - **Review Errors**: Check error messages ### Invalid Fraud Proof - **Verify Merkle Proof**: Ensure Merkle proof is valid - **Check State Root**: Verify state root is correct - **Review Encoding**: Check proof encoding format - **Test Locally**: Test proof verification locally ### High Gas Costs - **Wait**: Consider waiting for lower gas prices - **Batch**: Batch multiple challenges if possible - **Optimize**: Optimize proof generation ## Monitoring ### Key Metrics - **Challenges Submitted**: Total challenges submitted - **Success Rate**: Percentage of successful challenges - **Rewards Earned**: Total rewards from successful challenges - **Gas Costs**: Average gas costs per challenge - **Detection Time**: Time to detect fraud ### Alerts - **Fraud Detected**: Alert when fraud is detected - **Challenge Success**: Alert on successful challenges - **Gas Prices**: Alert on high gas prices - **Patterns**: Alert on fraud patterns ## References - Fraud Proofs: `docs/bridge/trustless/FRAUD_PROOFS.md` - Challenge Manager: `contracts/bridge/trustless/ChallengeManager.sol` - Architecture: `docs/bridge/trustless/ARCHITECTURE.md`