# CCIP Token Pool Architecture Documentation **Date**: 2025-01-12 **Network**: ChainID 138 --- ## Overview This document describes the architecture of token pools in the CCIP system and how tokens are managed for cross-chain bridging. --- ## Token Pool Concept ### Purpose Token pools manage the liquidity and accounting for tokens being bridged across chains. They ensure that: - Tokens are properly accounted for on source and destination chains - Rate limits are enforced - Token mechanisms (lock & release, burn & mint) are implemented --- ## Pool Types ### Lock & Release Pools **Mechanism**: Tokens are locked on source chain and released on destination chain. **Process**: 1. User sends tokens to pool on source chain 2. Tokens are locked in pool 3. CCIP message sent to destination 4. Pool on destination chain releases tokens to receiver ### Burn & Mint Pools **Mechanism**: Tokens are burned on source chain and minted on destination chain. **Process**: 1. User sends tokens to pool on source chain 2. Tokens are burned 3. CCIP message sent to destination 4. Pool on destination chain mints tokens to receiver --- ## Pool Configuration ### Remote Chain Configuration Pools must know about remote chains (destination chains) to: - Track token flow per chain - Enforce rate limits per chain - Account for tokens correctly ### Rate Limits Pools enforce rate limits: - **Outbound**: Maximum tokens that can be sent to a destination chain - **Inbound**: Maximum tokens that can be received from a source chain - **Per-Lane**: Limits specific to each source-destination pair ### Permissions Pools require permissions for: - **Minting**: If using burn & mint mechanism - **Burning**: If using burn & mint mechanism - **Transferring**: For lock & release mechanism --- ## TokenAdminRegistry ### Purpose The TokenAdminRegistry maintains the mapping between tokens and their pools. ### Functions **`getPool(address token)`** - Returns the pool address for a given token - Used by OffRamp to find the correct pool **`registerToken(address token, address pool)`** (admin only) - Registers a token with its pool - Required for CCIP to route tokens correctly --- ## Pool Addresses ### Current Status: ⚠️ Unknown Pool addresses for WETH9 and WETH10 are not yet identified. They may be: 1. Embedded in bridge contracts 2. Separate contracts managed by TokenAdminRegistry 3. Part of the CCIP infrastructure ### Finding Pool Addresses **Method 1: TokenAdminRegistry** ```bash ./scripts/verify-token-admin-registry.sh ``` **Method 2: Bridge Contract Analysis** - Analyze bridge contract code - Check bridge contract storage - Review deployment transactions **Method 3: CCIP Documentation** - Check Chainlink documentation - Review CCIP deployment records - Contact Chainlink support --- ## Pool Operations ### Outbound Flow (Source Chain) 1. **User Initiates Transfer** - User approves bridge to spend tokens - User calls bridge `sendCrossChain()` 2. **Bridge Processes** - Bridge transfers tokens to pool (or burns) - Bridge calls CCIP Router 3. **Pool Handles Tokens** - Pool locks/burns tokens - Pool tracks outbound amount - Pool enforces rate limits 4. **CCIP Message Sent** - Router sends message to oracle network - Message includes token amount and pool info ### Inbound Flow (Destination Chain) 1. **CCIP Message Received** - OffRamp receives message - OffRamp queries TokenAdminRegistry for pool 2. **Pool Processes** - Pool verifies message - Pool checks rate limits - Pool releases/mints tokens 3. **Tokens Delivered** - Pool transfers tokens to receiver - Pool tracks inbound amount --- ## Rate Limit Architecture ### Rate Limit Structure ``` Pool ├── Outbound Rate Limits │ ├── Per Chain Selector │ │ ├── Limit Amount │ │ ├── Time Window │ │ └── Current Usage │ └── Global Outbound Limit └── Inbound Rate Limits ├── Per Chain Selector │ ├── Limit Amount │ ├── Time Window │ └── Current Usage └── Global Inbound Limit ``` ### Rate Limit Enforcement 1. **Check Limits**: Before processing, check if limit allows operation 2. **Update Usage**: After processing, update usage counter 3. **Reset Windows**: Periodically reset time windows 4. **Alert**: Alert when approaching limits --- ## Pool Liquidity Management ### Liquidity Requirements Pools need adequate liquidity for: - **Lock & Release**: Tokens locked must match tokens released - **Burn & Mint**: Minting capability must be available ### Liquidity Monitoring 1. **Balance Tracking**: Monitor pool balances 2. **Flow Tracking**: Track inbound and outbound flows 3. **Rebalancing**: Rebalance liquidity as needed 4. **Alerts**: Alert on low liquidity --- ## Verification ### Verify Pool Configuration ```bash ./scripts/verify-token-pool-config.sh ``` ### Verify Token Registration ```bash ./scripts/verify-token-admin-registry.sh ``` --- ## Related Documentation - [CCIP Rate Limits](./CCIP_RATE_LIMITS.md) (Tasks 33, 46) - [Token Mechanism Documentation](./TOKEN_MECHANISM_DOCUMENTATION.md) (Task 39) - [CCIP Configuration Status](./CCIP_CONFIGURATION_STATUS.md) --- **Last Updated**: 2025-01-12