diff --git a/services/token-aggregation/config/bridge-routes-chain138-default.json b/services/token-aggregation/config/bridge-routes-chain138-default.json new file mode 100644 index 0000000..be6ecce --- /dev/null +++ b/services/token-aggregation/config/bridge-routes-chain138-default.json @@ -0,0 +1,59 @@ +{ + "description": "Canonical CCIP WETH9/WETH10 destination receivers and Chain 138 bridge contracts. Consumed by token-aggregation (BRIDGE_LIST_JSON_PATH), info.defi-oracle.io SPA fallback, and public-site verification scripts.", + "updated": "2026-05-23", + "routes": { + "weth9": { + "Ethereum Mainnet (1)": "0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939", + "BNB Chain (56)": "0x886C6A4ABC064dbf74E7caEc460b7eeC31F1b78C", + "Polygon (137)": "0xF7736443f02913e7e0773052103296CfE1637448", + "Avalanche C-Chain (43114)": "0x3f8C409C6072a2B6a4Ff17071927bA70F80c725F", + "Base (8453)": "0x24293CA562aE1100E60a4640FF49bd656cFf93B4", + "Arbitrum One (42161)": "0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c", + "Optimism (10)": "0x6e94e53F73893b2a6784Df663920D31043A6dE07", + "Gnosis (100)": "0xc8656F24488cb90c452058da92d1a25BA464eaAE", + "Cronos (25)": "0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab", + "Celo (42220)": "0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7", + "Wemix (1111)": "0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04" + }, + "weth10": { + "Ethereum Mainnet (1)": "0x04E1e22B0D41e99f4275bd40A50480219bc9A223", + "BNB Chain (56)": "0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c", + "Polygon (137)": "0x0CA60e6f8589c540200daC9D9Cb27BC2e48eE66A", + "Avalanche C-Chain (43114)": "0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c", + "Base (8453)": "0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c", + "Arbitrum One (42161)": "0x73376eB92c16977B126dB9112936A20Fa0De3442", + "Optimism (10)": "0x24293CA562aE1100E60a4640FF49bd656cFf93B4", + "Gnosis (100)": "0xa846aeAD3071df1b6439d5D813156aCE7C2c1DA1", + "Cronos (25)": "0x105F8A15b819948a89153505762444Ee9f324684", + "Celo (42220)": "0xa780ef19A041745d353c9432f2a7f5A241335ffE", + "Wemix (1111)": "0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08" + } + }, + "chain138Bridges": { + "weth9": "0xcacfd227A040002e49e2e01626363071324f820a", + "weth10": "0xe0E93247376aa097dB308B92e6Ba36bA015535D0", + "trustless": "0xFce6f50B312B3D936Ea9693C5C9531CF92a3324c", + "cwMultiTokenL1": "0x152ed3e9912161b76bdfd368d0c84b7c31c10de7", + "ccipRouter": "0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817", + "alltraAdapter": "0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc" + }, + "mainnetContracts": { + "ccipRelayRouter": "0xAd9A228CcEB4cbB612cD165FFB72fE090ff10Afb", + "ccipRelayBridge": "0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939", + "ccipWeth9Hub": "0xc9901ce2Ddb6490FAA183645147a87496d8b20B6", + "ccipWeth10Hub": "0x04E1e22B0D41e99f4275bd40A50480219bc9A223", + "cwBridgeL2": "0x2bF74583206A49Be07E0E8A94197C12987AbD7B5" + }, + "tokenMappingApi": { + "basePath": "/api/v1/token-mapping", + "pairs": "/api/v1/token-mapping/pairs", + "resolve": "/api/v1/token-mapping/resolve", + "note": "Resolve bridged token addresses between chains; requires monorepo config/token-mapping-multichain.json on server." + }, + "notes": { + "ethereumMainnetWeth9": "138→1 WETH9 uses relay release at CCIPRelayBridge (0xF9A32F…). CCIPWETH9 hub 0xc9901ce2… is the on-chain CCIP receiver for hub traffic.", + "deprecatedChain138Weth9": "Do not use 0x971cD9D156f193df8051E48043C476e53ECd4693 or 0x89dd12025bfCD38A168455A44B400e913ED33BE2 on Chain 138.", + "arbitrum": "Arbitrum hub leg may revert until mainnet hub path is repaired; treat as route-blocked for operators.", + "configReadyChains": "Gnosis, Cronos, Celo, and Wemix use deployed CCIPWETH9/10 bridge receivers from smom-dbis-138/.env (2026-05-23 alignment). Fund LINK on each remote bridge before live traffic." + } +} diff --git a/services/token-aggregation/src/api/utils/default-bridge-routes.ts b/services/token-aggregation/src/api/utils/default-bridge-routes.ts index b06c352..ffeb31e 100644 --- a/services/token-aggregation/src/api/utils/default-bridge-routes.ts +++ b/services/token-aggregation/src/api/utils/default-bridge-routes.ts @@ -34,11 +34,33 @@ const DEFAULT_WETH9_138 = '0xcacfd227A040002e49e2e01626363071324f820a'; const DEFAULT_WETH10_138 = '0xe0E93247376aa097dB308B92e6Ba36bA015535D0'; const DEFAULT_LOCKBOX_138 = '0xFce6f50B312B3D936Ea9693C5C9531CF92a3324c'; -/** Destination-side WETH9 receivers (relay-backed where noted in CCIP docs). */ +/** Destination-side WETH9 receivers (relay-backed on mainnet per CCIP_BRIDGE_MAINNET_CONNECTION.md). */ const WETH9_DESTINATIONS: Record = { 'Ethereum Mainnet (1)': '0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939', 'BNB Chain (56)': '0x886C6A4ABC064dbf74E7caEc460b7eeC31F1b78C', + 'Polygon (137)': '0xF7736443f02913e7e0773052103296CfE1637448', 'Avalanche C-Chain (43114)': '0x3f8C409C6072a2B6a4Ff17071927bA70F80c725F', + 'Base (8453)': '0x24293CA562aE1100E60a4640FF49bd656cFf93B4', + 'Arbitrum One (42161)': '0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c', + 'Optimism (10)': '0x6e94e53F73893b2a6784Df663920D31043A6dE07', + 'Gnosis (100)': '0xc8656F24488cb90c452058da92d1a25BA464eaAE', + 'Cronos (25)': '0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab', + 'Celo (42220)': '0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7', + 'Wemix (1111)': '0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04', +}; + +const WETH10_DESTINATIONS: Record = { + 'Ethereum Mainnet (1)': '0x04E1e22B0D41e99f4275bd40A50480219bc9A223', + 'BNB Chain (56)': '0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c', + 'Polygon (137)': '0x0CA60e6f8589c540200daC9D9Cb27BC2e48eE66A', + 'Avalanche C-Chain (43114)': '0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c', + 'Base (8453)': '0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c', + 'Arbitrum One (42161)': '0x73376eB92c16977B126dB9112936A20Fa0De3442', + 'Optimism (10)': '0x24293CA562aE1100E60a4640FF49bd656cFf93B4', + 'Gnosis (100)': '0xa846aeAD3071df1b6439d5D813156aCE7C2c1DA1', + 'Cronos (25)': '0x105F8A15b819948a89153505762444Ee9f324684', + 'Celo (42220)': '0xa780ef19A041745d353c9432f2a7f5A241335ffE', + 'Wemix (1111)': '0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08', }; function envAddr(key: string, fallback: string): string { @@ -58,7 +80,7 @@ export function buildDefaultBridgeRoutes(): BridgeRoutesPayload { return { routes: { weth9: { ...WETH9_DESTINATIONS }, - weth10: { ...WETH9_DESTINATIONS }, + weth10: { ...WETH10_DESTINATIONS }, ...(Object.keys(trustlessRoutes).length > 0 ? { trustless: trustlessRoutes } : {}), }, chain138Bridges: {