# Executor Allowlist Matrix

**Purpose:** Single source of truth for canonical addresses and permitted call graph for the Chain 138 → Ethereum Mainnet export path. Reference this in contract NatSpec and the CCIP-live runbook.

---

## Table 1 — Canonical addresses

### Chain 138 canonical inputs

Used only by StrategyExecutor138 / TreasuryVault as allowed tokens.

| Symbol      | Address (checksummed)                              |
| ----------- | -------------------------------------------------- |
| cUSDC_138   | `0xf22258f57794CC8E06237084b353Ab30fFfa640b`       |
| cUSDT_138   | `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22`       |
| WETH9_138   | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`       |
| WETH10_138  | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f`       |

### Ethereum Mainnet canonical outputs

Used only by ReceiverExecutorMainnet for swaps/unwrap.

| Symbol         | Address (checksummed)                              |
| -------------- | -------------------------------------------------- |
| WETH9_mainnet  | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`       |
| USDC_mainnet   | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`       |
| USDT_mainnet   | `0xdAC17F958D2ee523a2206206994597C13D831ec7`       |

### CCIP core

| Role                    | Chain   | Address (checksummed)                              |
| ----------------------- | ------- | -------------------------------------------------- |
| CCIP Router             | Mainnet | `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D`       |
| CCIP Router             | 138     | `0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817`       |
| CCIPWETH9 Bridge        | 138     | `0xcacfd227A040002e49e2e01626363071324f820a`      |
| Ethereum Mainnet selector (decimal) | — | `5009297550715157269`                              |

---

## Table 2 — Permitted call graph

| Callee                  | Caller(s)                                                                 | Purpose |
| ----------------------- | ------------------------------------------------------------------------- | ------- |
| TreasuryVault           | StrategyExecutor138, CcipBridgeAdapter138, (optional LPManager)           | requestTransfer / pull for harvest, rebalance, export |
| TreasuryVault           | Admin only                                                               | Config: modules, token allowlist, caps |
| StrategyExecutor138     | Keeper / bot or multisig                                                 | harvestFees, rebalanceLp, exportToMainnet |
| StrategyExecutor138     | Admin only                                                               | ExportPolicy, router/LP allowlist |
| CcipBridgeAdapter138   | StrategyExecutor138 only                                                 | sendWeth9ToMainnet(amount, minAmount, deadline) |
| ReceiverExecutorMainnet | CCIP Router (or bridge callback)                                         | Receive CCIP transfer (WETH9) |
| ReceiverExecutorMainnet | Keeper (optional)                                                        | swap/unwrap to USDC, USDT, ETH |

---

## Table 3 — Token flow

| Stage                    | Token(s) allowed |
| ------------------------ | ---------------- |
| Leave TreasuryVault     | cUSDC_138, cUSDT_138, WETH9_138, WETH10_138 (canonical 138 list only) |
| Sent via CcipBridgeAdapter138 | WETH9_138 only |
| Received on Mainnet (ReceiverExecutorMainnet) | WETH9_mainnet only (from CCIP) |
| Swap/unwrap on Mainnet  | WETH9_mainnet, USDC_mainnet, USDT_mainnet, ETH (hardcoded addresses only) |

No calldata-provided token or receiver addresses for export or swap destinations.
