# ALL Mainnet (651940) Routing Logic

**Date**: 2026-01-26  
**Status**: ✅ **IMPLEMENTED**

---

## Overview

This document describes the routing logic for ALL Mainnet (651940) based on verified support status:

- **CCIP**: ❌ NOT SUPPORTED
- **LiFi**: ❌ NOT SUPPORTED
- **USDC**: ✅ DEPLOYED - `0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881` (AUSDC)

---

## Routing Decision Tree

```typescript
// Pseudo-code for routing decisions

function routePayment(sourceChainId: number, destinationChainId: number) {
  // Check if destination is ALL Mainnet
  if (destinationChainId === 651940) {
    // ALL Mainnet routing
    if (isCCIPSupported(sourceChainId) && isCCIPSupported(651940)) {
      // Use CCIP bridge
      return routeViaCCIP(sourceChainId, 651940);
    } else {
      // Use AlltraAdapter (custom bridge)
      return routeViaAlltraAdapter(sourceChainId, 651940);
    }
  }
  
  // Check if source is ALL Mainnet
  if (sourceChainId === 651940) {
    // Outbound from ALL Mainnet
    if (isCCIPSupported(651940) && isCCIPSupported(destinationChainId)) {
      // Use CCIP bridge
      return routeViaCCIP(651940, destinationChainId);
    } else {
      // Use AlltraAdapter (custom bridge)
      return routeViaAlltraAdapter(651940, destinationChainId);
    }
  }
  
  // Standard routing for other chains
  if (isLiFiSupported(sourceChainId) && isLiFiSupported(destinationChainId)) {
    return routeViaLiFi(sourceChainId, destinationChainId);
  }
  
  // Fallback to CCIP if supported
  if (isCCIPSupported(sourceChainId) && isCCIPSupported(destinationChainId)) {
    return routeViaCCIP(sourceChainId, destinationChainId);
  }
  
  throw new Error(`No routing path available: ${sourceChainId} → ${destinationChainId}`);
}
```

---

## Inbound Payments (Public Chain → ALL Mainnet)

### Current Status: Use AlltraAdapter

Since CCIP and LiFi are not supported for ALL Mainnet:

1. **Payment arrives on public chain** (Ethereum, Base, Arbitrum)
2. **LiFi routes to vault** (if LiFi supported for source chain)
3. **Vault receives USDC** on public chain
4. **Settlement service detects deposit**
5. **Mint CompliantUSDC on ChainID 138** (not ALL Mainnet directly)
6. **Bridge to ALL Mainnet** (if needed) via AlltraAdapter

**Note**: The current architecture settles on ChainID 138, not directly on ALL Mainnet. If settlement on ALL Mainnet is required, use AlltraAdapter for the final leg.

---

## Outbound Payments (ALL Mainnet → Public Chain)

### Current Status: Use AlltraAdapter

1. **User initiates withdrawal** from ALL Mainnet
2. **Check CCIP support**: ❌ Not available
3. **Use AlltraAdapter** to bridge to intermediate chain
4. **Bridge to destination** via CCIP/LiFi if supported

**Alternative Flow** (if intermediate chain needed):
1. ALL Mainnet → ChainID 138 (via AlltraAdapter)
2. ChainID 138 → Public Chain (via CCIP)

---

## Implementation Examples

### Example 1: Payment to ALL Mainnet Vault

```typescript
import { isLiFiSupported, isCCIPSupported, getChainConfig } from './config/chains';
import { LiFiRoutingService } from './payments/lifi/lifi-routing.service';
import { AlltraAdapter } from './bridge/adapters/AlltraAdapter';

async function routeToAllMainnet(
  sourceChainId: number,
  amount: string,
  recipient: string
) {
  const allMainnetConfig = getChainConfig(651940);
  
  // Step 1: Route to public chain vault (if LiFi supported)
  if (isLiFiSupported(sourceChainId)) {
    const lifiService = new LiFiRoutingService();
    const route = await lifiService.getRoute({
      fromChainId: sourceChainId,
      fromToken: 'native',
      amount,
      toAddress: vaultAddress, // Vault on source chain
      slippageBps: 30,
    });
    // Execute route...
  }
  
  // Step 2: Bridge to ALL Mainnet (if needed)
  // Note: Current architecture settles on ChainID 138
  // If direct settlement on ALL Mainnet is required:
  if (needsAllMainnetSettlement) {
    // Use AlltraAdapter for bridging
    const adapter = new AlltraAdapter(admin, bridgeAddress);
    await adapter.bridge(
      tokenAddress,
      amount,
      recipientAddress,
      additionalData
    );
  }
}
```

### Example 2: Withdrawal from ALL Mainnet

```typescript
async function withdrawFromAllMainnet(
  amount: string,
  destinationChainId: number,
  recipient: string
) {
  // Check routing options
  if (isCCIPSupported(651940) && isCCIPSupported(destinationChainId)) {
    // Use CCIP (not available currently)
    return routeViaCCIP(651940, destinationChainId);
  }
  
  // Use AlltraAdapter
  const adapter = new AlltraAdapter(admin, bridgeAddress);
  
  // Option 1: Direct bridge (if supported)
  try {
    return await adapter.bridge(
      tokenAddress,
      amount,
      recipientAddress,
      additionalData
    );
  } catch (error) {
    // Option 2: Bridge via intermediate chain (ChainID 138)
    // ALL Mainnet → ChainID 138 → Destination
    return routeViaIntermediateChain(651940, 138, destinationChainId);
  }
}
```

---

## Telemetry Labels

Use consistent labels for ALL Mainnet metrics:

```typescript
import { getTelemetryLabels } from './config/chains';

const labels = getTelemetryLabels(651940);
// Returns:
// {
//   chainId: 651940,
//   chainKey: "all-mainnet",
//   displayName: "ALL Mainnet"
// }
```

---

## Error Handling

### LiFi Not Supported

```typescript
try {
  const route = await lifiService.getRoute(params);
} catch (error) {
  if (error.message.includes('LiFi is not supported')) {
    // Fallback to direct transfer or alternative routing
    return routeViaAlternative(params);
  }
  throw error;
}
```

### CCIP Not Supported

```typescript
if (!isCCIPSupported(chainId)) {
  // Use AlltraAdapter or alternative bridge
  return useCustomBridge(chainId);
}
```

---

## Configuration Updates

✅ **USDC Verification Complete** (2026-01-26):

1. ✅ Updated `chains.ts`:
   ```typescript
   ALL_MAINNET: {
     // ...
     usdcAddress: '0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881', // AUSDC
   }
   ```

2. ⚠️ Register vault for ALL Mainnet (when vault deployed):
   ```typescript
   vaultService.registerVault(
     651940,
     vaultAddress,
     '0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881' // AUSDC
   );
   ```

3. ✅ USDC available - routing can use AUSDC for settlements

---

## Next Steps

1. ✅ CCIP support verified: NOT SUPPORTED
2. ✅ LiFi support verified: NOT SUPPORTED
3. ⚠️ Verify USDC deployment on ALL Mainnet
4. ⚠️ Test AlltraAdapter with actual ALL Mainnet network
5. ⚠️ Update routing services to use AlltraAdapter for ALL Mainnet
6. ⚠️ Add telemetry/metrics for ALL Mainnet transactions
