# CCIP Rate Limits Documentation

**Date**: 2025-01-12  
**Network**: ChainID 138

---

## Overview

This document describes the rate limits configured for CCIP token pools and cross-chain transfers.

---

## Rate Limit Types

### Outbound Rate Limits
Controls the maximum amount of tokens that can be sent from the source chain to a destination chain within a time period.

### Inbound Rate Limits
Controls the maximum amount of tokens that can be received on the destination chain from the source chain within a time period.

### Per-Lane Rate Limits
Rate limits specific to each source-destination chain pair (lane).

---

## Current Configuration

### Status: ⚠️ Unknown

Rate limit configuration cannot be verified from scripts without admin access or contract verification.

### Verification Methods

1. **Query Pool Contracts**:
   ```bash
   cast call <pool_address> "getOutboundRateLimit()" --rpc-url <rpc_url>
   cast call <pool_address> "getInboundRateLimit()" --rpc-url <rpc_url>
   ```

2. **Check TokenAdminRegistry**:
   ```bash
   ./scripts/verify-token-admin-registry.sh
   ```

3. **Query Pool Configuration**:
   ```bash
   ./scripts/verify-token-pool-config.sh <pool_address>
   ```

---

## Rate Limit Configuration

### Recommended Settings

#### Outbound Rate Limits
- **Per Lane**: Based on expected volume
- **Time Window**: 24 hours
- **Purpose**: Prevent excessive outbound transfers

#### Inbound Rate Limits
- **Per Lane**: Based on expected volume
- **Time Window**: 24 hours
- **Purpose**: Prevent excessive inbound transfers

#### Global Limits
- **Total Outbound**: Sum of all lane limits
- **Total Inbound**: Sum of all lane limits
- **Purpose**: Overall system protection

---

## Rate Limit Update Procedures

### Prerequisites
1. Admin access to pool contracts
2. Understanding of current usage patterns
3. Risk assessment of proposed changes

### Update Steps

1. **Analyze Current Usage**:
   - Review historical transfer volumes
   - Identify peak usage periods
   - Calculate average and maximum rates

2. **Determine New Limits**:
   - Consider expected growth
   - Add safety margin
   - Balance usability and security

3. **Update Configuration**:
   ```solidity
   pool.setOutboundRateLimit(chainSelector, newLimit);
   pool.setInboundRateLimit(chainSelector, newLimit);
   ```

4. **Verify Changes**:
   ```bash
   ./scripts/verify-token-pool-config.sh <pool_address>
   ```

---

## Monitoring

### Rate Limit Usage

Monitor current usage vs limits:
- Current outbound usage
- Current inbound usage
- Time until limit reset
- Approaching limits alerts

### Alerts

Set up alerts for:
- Approaching rate limits (80% threshold)
- Rate limit reached
- Unusual rate limit activity

---

## Troubleshooting

### Rate Limit Reached

**Symptoms**:
- Transfers failing with rate limit error
- High rate limit usage

**Solutions**:
1. Wait for rate limit reset
2. Request rate limit increase (if needed)
3. Distribute transfers across time

### Rate Limit Too Low

**Symptoms**:
- Frequent rate limit errors
- Legitimate transfers blocked

**Solutions**:
1. Analyze usage patterns
2. Request rate limit increase
3. Update rate limit configuration

---

## Best Practices

1. **Set Appropriate Limits**:
   - Based on expected usage
   - Include safety margin
   - Review regularly

2. **Monitor Usage**:
   - Track rate limit usage
   - Set up alerts
   - Review trends

3. **Plan for Growth**:
   - Anticipate increased usage
   - Adjust limits proactively
   - Document changes

---

## Related Documentation

- [Token Pool Architecture](./CCIP_TOKEN_POOL_ARCHITECTURE.md) (Task 25)
- [CCIP Configuration Status](./CCIP_CONFIGURATION_STATUS.md)
- [Complete Task Catalog](./CCIP_COMPLETE_TASK_CATALOG.md)

---

**Last Updated**: 2025-01-12

