diff --git a/config/chains.json b/config/chains.json index 880bde6..e166613 100644 --- a/config/chains.json +++ b/config/chains.json @@ -1,15 +1,18 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "Public chain IDs and hub stable per chain for cW* edge pools (EVM). Non-EVM networks used for interoperability are listed under nonEvm (no EIP-155 id).", - "version": "1.1.0", - "updated": "2026-04-03", + "description": "Public chain IDs and hub stable per chain for cW* edge pools (EVM). Non-EVM networks used for interoperability are listed under nonEvm (no EIP-155 id) with their own execution/oracle topology references.", + "version": "1.2.0", + "updated": "2026-04-17", "nonEvm": [ { "identifier": "Solana", "vmKind": "SVM", "caip2": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "hubStableNote": "SPL USDC/USDT hubs differ from EVM; cW* edge PMM topology TBD when a wrapped representation is defined", - "adapter": "SolanaAdapter" + "hubStableNote": "Primary Solana hubs are SPL USDC then SPL USDT; deep liquidity and single-sided edge pools are defined in the dedicated Solana configs rather than the EVM DODO PMM matrix.", + "adapter": "SolanaAdapter", + "liquidityMode": "non_evm_deep_plus_single_sided_edge", + "oraclePolicy": "cross-chain-pmm-lps/config/solana-oracle-policy.json", + "poolMatrix": "cross-chain-pmm-lps/config/solana-pool-matrix.json" } ], "chains": [ diff --git a/config/deployment-status.json b/config/deployment-status.json index 011abc3..30f7b76 100644 --- a/config/deployment-status.json +++ b/config/deployment-status.json @@ -1,8 +1,8 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Deployed graph: per-chain cW* addresses, anchor addresses, PMM pool existence and params. Gas-native rollout adds gasMirrors, gasPmmPools, gasReferenceVenues, and gasQuoteAddresses so compliant cW gas lanes can publish DODO PMM, Uniswap v3 reference, Balancer, Curve, and 1inch exposure state alongside the stable mesh.", - "version": "1.2.0", - "updated": "2026-04-10", + "version": "1.3.0", + "updated": "2026-04-17", "homeChainId": 138, "chains": { "1": { @@ -126,6 +126,42 @@ "k": 0, "role": "public_routing", "publicRoutingEnabled": true + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x9cF3DeDAaC0984c530801b9b4881c8f99Bb329c3", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "publicRoutingEnabled": true + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0xA42566bb730AD6D551Db32d50c0877132fc07c32", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "publicRoutingEnabled": true + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0xf6470219ce7749f8860dEABe9c347Ef2c1075E08", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "publicRoutingEnabled": true + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0x1D51a38C924382287d770AbB61deb9C39ACa96E9", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "publicRoutingEnabled": true } ], "pmmPoolsVolatile": [ @@ -247,6 +283,28 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x422608c5dDff909675ac2C5F872fD42f16B9287A", + "factoryAddress": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", + "routerAddress": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWUSDC", + "quote": "USDC", + "poolAddress": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "factoryAddress": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", + "routerAddress": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "10": { @@ -272,13 +330,124 @@ }, "pmmPools": [ { - "base": "cWUSDT", - "quote": "USDT", - "poolAddress": "0xFCB0b0Ac36d67EDBA91100c75C27De945357CD62", + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0x4B452800f6cD50326F14a6f089f4bB04e8079250", "feeBps": 3, - "k": 500000000000000000, + "k": "500000000000000000", "role": "public_routing", - "publicRoutingEnabled": true + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0x19e1fdd037F1651AcEE11c5A5Aa246b85FA63f8e", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0xA97D7dfB93CBf0C10243931d93FFEda745222ec6", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x78C6aC6D7CbFcd85A3291D656F2154979a92c00B", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x631DfC86A03cB05319d7165198f8099dacF78e56", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0x79BE2b70A94E954d095f9F537FAf0741D15dfA31", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0x5D6b5d7CA165c39c350083255774DdBf1c858e12", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0x68C1c8a945ddCF3482b73aC09b6B5D4177D564AF", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] }, { "base": "cWUSDC", @@ -288,6 +457,45 @@ "k": 500000000000000000, "role": "public_routing", "publicRoutingEnabled": true + }, + { + "base": "cWUSDT", + "quote": "USDT", + "poolAddress": "0xFCB0b0Ac36d67EDBA91100c75C27De945357CD62", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "publicRoutingEnabled": true + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0xCE25c324e41049D75abfB81c23257984A2A97a79", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0xb3Ee650019d7F756ce0F79b69614Fa2761871775", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] } ], "bridgeAvailable": true, @@ -389,6 +597,18 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0xe28BFf306442a8A512d2441847c27211a7C4C613", + "factoryAddress": "0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf", + "routerAddress": "0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "25": { @@ -430,6 +650,156 @@ "k": 500000000000000000, "role": "public_routing", "publicRoutingEnabled": true + }, + { + "base": "cWAUDC", + "quote": "USDT", + "poolAddress": "0x5b5fA8664FC1eb630b2D76deAf57Dd35ef326eAE", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDT", + "poolAddress": "0xFFe56BE4628f2863Cd7c38d3fFa70d6A3255FBD3", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDT", + "poolAddress": "0x937E86f21007C15F28081DBD419ea39ef5bc87F2", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDT", + "poolAddress": "0xbe68d6ae47049ce0EA5B6a82AB1c388f4023aec8", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDT", + "poolAddress": "0xE3bb64f8F05dB65C9bb1103f5D7C445C402161Ec", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDT", + "poolAddress": "0xDa60b22cDb3D3Ec67c309457Bd50C4e67D4611a4", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDT", + "poolAddress": "0x1935d14D513E158D630488f2D20Cd28CFe23aAe6", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDT", + "poolAddress": "0x97fD4E88490D8c4bcbe1930Cece12e8DD22529bE", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDT", + "poolAddress": "0xAA450B4Cf4EEc28C440850665546D85C67b4B2A6", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDT", + "poolAddress": "0x8B11f71C0ABF2f8031c47cFd20d22b2ab2799183", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] } ], "bridgeAvailable": true, @@ -525,6 +895,18 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x438d8E1a8E311d2ae4b75a38E0044675fD324133", + "factoryAddress": "0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15", + "routerAddress": "0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "56": { @@ -549,7 +931,158 @@ "anchorAddresses": { "USDT": "0x55d398326f99059fF775485246999027B3197955" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDT", + "poolAddress": "0x85E2C97a931D1e5Ed31F4D6cb4094fB036AE4ED4", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDT", + "poolAddress": "0xE193bd2f602CaC833330c6835f934f3958a7785b", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDT", + "poolAddress": "0x02F70D646B57439faF5dF1B16d2B174Ee2A9F373", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDT", + "poolAddress": "0xaF1EA2c0105C90C819849FBFE931D61a11De4793", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDT", + "poolAddress": "0x6b97090c974eCAf77dC4e390B044F87Ec71f5fA1", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDT", + "poolAddress": "0x5e19913eDaAcaB436AbF635e58f2453323cB2CB3", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDT", + "poolAddress": "0x439C447b4FDa58fcAF587F0A042662A46029dC7c", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDT", + "poolAddress": "0xBEceD3b25448F648a36Fa9dd6D17a68CB6e61f36", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDT", + "poolAddress": "0xe9306557758c19cb8FbeEb4777dc7b14f251f67c", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDT", + "poolAddress": "0xfB094EC50d932bCD004E4136EfB62119c0f576E1", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWBNB": "0x179034a08ac2c9c35d2e41239f68c79dca6f18fa" @@ -643,6 +1176,38 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x7e308c12bd609607DF9C4137E30235D5A9Da2A64", + "factoryAddress": "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", + "routerAddress": "0x10ED43C718714eb63d5aA57B78B54704E256024E", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDT", + "poolAddress": "0xe9b082bAa73Fa4DEc7CB3CbD99B19D30BbfE1523", + "factoryAddress": "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", + "routerAddress": "0x10ED43C718714eb63d5aA57B78B54704E256024E", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDC", + "poolAddress": "0x639D7e64C6f1fC676226f20a0C42aEcDD66545E8", + "factoryAddress": "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", + "routerAddress": "0x10ED43C718714eb63d5aA57B78B54704E256024E", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "100": { @@ -665,7 +1230,158 @@ "anchorAddresses": { "USDC": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0xeb5A688dF70be2F790719872Be9Ecc5648aEE460", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0x45177D998F4022aeaa046C60e734aEf8c18aCb70", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0x9ff24E16c5687330c271a52655971c7C2498FaC8", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x8c8d6cc14111443Ef8572D58Df387a1E497b7C43", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0xB73e4C13757EE99540A1F0e973980E423987De19", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0xf060E1B29FF714f5Ac89F8Bd3869cF300C5b387f", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0x3adB3fB8451727fDEBe3D00617170dAF3725F6B4", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0xe11936EcE13B5f04156898a510B86493F2862042", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0x02BE3C506FD5541c8225dB43C6FFC5a39ADd803E", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0x7069d10A0E4496D0CEa08Ff27EaE9de0BB7D0d23", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWXDAI": "0x9f833b4f1012f52eb3317b09922a79c6edfca77d" @@ -765,6 +1481,18 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x064d782Be0113Cb427f3Af0De9335C9F34A1de34", + "factoryAddress": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", + "routerAddress": "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "137": { @@ -807,6 +1535,156 @@ "k": 500000000000000000, "role": "public_routing", "publicRoutingEnabled": true + }, + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0xbD34966FE5Eed81AFffF8081e9BB527Fc8066783", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0xc79da1E8B33E580d53C683923685B26FFC653650", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0x30dAeF9a8Dd4aEc2949013Fe18b5Ab3C2505D825", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x0c6F5D3d8d52cBC52849327F6eC6aE52C8497A8D", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x36aB6bef2B3335ebf6a762665978bf5e845FDEC0", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0x7a95f67E31f271A6a83219d8368D963Ee2fC106B", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0xC3645c7153b7B72556e322aA1E72D77536d9A3DE", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0x09658d8d81aa8fa7a21eD973787638f245bc3fe0", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0x3c3b9Bd130fB3aBcC0E0CE6552795DD56BCCc55c", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0x37D5587Bbe17571cDe96DAB7b2e7EA234C87f525", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] } ], "bridgeAvailable": true, @@ -908,6 +1786,38 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x3411A20C39773d1A18cb53864893b236f41f1e99", + "factoryAddress": "0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32", + "routerAddress": "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDT", + "poolAddress": "0x8cD2Cb42B81F894eb10D15446DB22A3B31d6fB2E", + "factoryAddress": "0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32", + "routerAddress": "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDC", + "poolAddress": "0xe6a5Cb164D4AF7E9794AEd09EC373392D0E7216c", + "factoryAddress": "0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32", + "routerAddress": "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "1111": { @@ -1036,7 +1946,158 @@ "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "USDT": "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0xE450F94Dc06036aa80055Db298948C6692819545", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0x5E7448AA0e3172AEFE79439E14F7E59bc1C858E0", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0x0673Fa737f813Af2e37A0ae2CBCf7E225498ed6a", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x72E6D93E9aF317321DF763a34068178c773FdA50", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x51c2C4Dd1fc54E20207D0732f12802B33e0E2251", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0x5b8B474659A5BA675E74Ef364CcF559C53071B5b", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0xD035e0a6b82cDd9653261DC8259a3dbA1cF02C14", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0x64D91B738026fE1577773F3F36063d16C834F042", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0xb47776505B8E2bFC63197Cf2133857CD91e7abBb", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0xE1C2bC36438B29E3b5092C0cB80531199874080D", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWETHL2": "0x2a0840e5117683b11682ac46f5cf5621e67269e3" @@ -1136,6 +2197,18 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x56eb93f747D3B8251d43849cC72B39c1899fcaca", + "factoryAddress": "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E", + "routerAddress": "0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "42161": { @@ -1159,7 +2232,158 @@ "USDC": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", "USDT": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0x97f78713f5899a652d955B996BAb99E2CbbEcC5c", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0x6D3b55935F58b9433fc26743cd9E0F8963a4F6D8", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0x88437Cd15CB6b07Fd8cC9830f1b8fFf50275e691", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x34c3Ae728a985Fd27f1887474bCf4e52847Cbb2c", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0xEEE8C51107aE64824c4a08a502202fA3E6213702", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0xFBa6D6d1471302Bf28CE7d94Be33f034b95d9AD0", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0xDcA29dfa59C8faF90e4437DEAe74474F78735cDe", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0xB6eaF7cEB4A6e9Bc6A57fEb51011B6Bb01632C1F", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0x41e67b8b5929e44C2b7A0D772E151FAD8D5303cd", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0xB6b15Ba233C95d164504e24209C1fAc3304059C7", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWETHL2": "0xe27be001bc55cb2a8ed5ba5a62c834ca135244a3" @@ -1259,6 +2483,18 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x2b2ea2EA9e7617de09FCb5063BEfafa01A9ef2b4", + "factoryAddress": "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E", + "routerAddress": "0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "42220": { @@ -1283,7 +2519,158 @@ "anchorAddresses": { "USDC": "0xcebA9300f2b948710d2653dD7B07f33A8B32118C" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0xA9EC7819a009d05B16907FEC96426ed35D5fa0e3", + "feeBps": 3, + "k": 500000000000000000, + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0xBB7f2A2360eC02CaFe433d8b6D8BB7a418B2342f", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0xfD8E36E2a4A462A33b5faF18DF927d3FA19daaEa", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0x0Bb6fCd38D5CeB702d4B359159dE7734619c5c32", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x0d7a90CA1FfFC3Fa6F1A12D38c34F2628D8F6b4e", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0xd0dC102c96AF36f4a99DA435bE4Ee4758E5B3cf2", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0x4f87cf23f503810253fac18aEd5797bE04A88CEC", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0x15Db8FD5bAAb52511c7dF94d793AFe7d1dad06d0", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0xa9d3fdE50A5843682A9477E5DF7643D273ae36C9", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0x2900a6FA8Cef1bd5e6511172dc8580ECa6eE316b", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWCELO": "0xb0fa7ec4123c7c275b3a89d9239569707ea3c66a" @@ -1380,6 +2767,38 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x6F97dE8AB68c722DcBC02cEA0cE6B587b8210052", + "factoryAddress": "0x62d5b84bE28a183aBB507E125B384122D2C25fAE", + "routerAddress": "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDT", + "poolAddress": "0xEe9eEBf89C1424e63eFc888929E43a9423357D39", + "factoryAddress": "0x62d5b84bE28a183aBB507E125B384122D2C25fAE", + "routerAddress": "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDC", + "poolAddress": "0xd3B55d6d7C08fDbF5F201e486992643cfF410d91", + "factoryAddress": "0x62d5b84bE28a183aBB507E125B384122D2C25fAE", + "routerAddress": "0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } ] }, "43114": { @@ -1404,7 +2823,158 @@ "anchorAddresses": { "USDC": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E" }, - "pmmPools": [], + "pmmPools": [ + { + "base": "cWAUDC", + "quote": "USDC", + "poolAddress": "0x287edaBDA35195592d7CACe2C1A75eC66caF1D70", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCADC", + "quote": "USDC", + "poolAddress": "0x75Ec85467927512b01C9e0481Fb1902d2d7210dC", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWCHFC", + "quote": "USDC", + "poolAddress": "0x3a224eae91ac813a03E15d0c37B641bC6c2237d7", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURC", + "quote": "USDC", + "poolAddress": "0xEE2742Fa6f70A40aB16c9b613c5cF6933bA92Cc3", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWEURT", + "quote": "USDC", + "poolAddress": "0x8507F3F3cB121072c1e3f2D912d269CA9829eEF8", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPC", + "quote": "USDC", + "poolAddress": "0x73542F7B1CBd4552Eb8FeFEB3D1884527424da58", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWGBPT", + "quote": "USDC", + "poolAddress": "0xa07dEe884555f2E9D04d0039FEF0b746987a8441", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWJPYC", + "quote": "USDC", + "poolAddress": "0x6175D065c602dab71A03753987D1ebEc99eFcC2e", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUC", + "quote": "USDC", + "poolAddress": "0x5d3a4A3Dae9FEcFe979A784F55d994c9a9fBeAfB", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + }, + { + "base": "cWXAUT", + "quote": "USDC", + "poolAddress": "0x1392bb9f23F938E6c1cDaAAE5c45d29BE5f8C828", + "feeBps": 3, + "k": "500000000000000000", + "role": "public_routing", + "poolType": "stable_quote", + "venue": "dodo_pmm", + "publicRoutingEnabled": true, + "notes": [ + "created_live_2026-04-16", + "unseeded_pending_base_and_quote_liquidity" + ] + } + ], "bridgeAvailable": true, "gasMirrors": { "cWAVAX": "0xe1d4aee2ef8f48a20338935188a8fe7f7c7de7d0" @@ -1501,6 +3071,90 @@ ], "indexRequired": true } + ], + "uniswapV2Pools": [ + { + "base": "cWUSDT", + "quote": "cWUSDC", + "poolAddress": "0x79c8eA153e77BC69b989f59F69BfA44c466D5DEE", + "factoryAddress": "0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10", + "routerAddress": "0x60aE616a2155Ee3d9A68541Ba4544862310933d4", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDT", + "poolAddress": "0x418322F48D857277ec4BCc96Bc1580aCCB7EA253", + "factoryAddress": "0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10", + "routerAddress": "0x60aE616a2155Ee3d9A68541Ba4544862310933d4", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + }, + { + "base": "cWAUSDT", + "quote": "cWUSDC", + "poolAddress": "0xaaD6aed8d28B0195D19B4d17F8ee9A1837ff2DCE", + "factoryAddress": "0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10", + "routerAddress": "0x60aE616a2155Ee3d9A68541Ba4544862310933d4", + "startBlock": 0, + "venue": "uniswap_v2_pair", + "publicRoutingEnabled": false + } + ] + } + }, + "nonEvm": { + "Solana": { + "adapter": "SolanaAdapter", + "bridgeStatus": "live", + "runtimeConfig": "config/solana-relay-runtime.json", + "lineupManifest": "config/solana-gru-bridge-lineup.json", + "oraclePolicy": { + "status": "designed", + "path": "cross-chain-pmm-lps/config/solana-oracle-policy.json", + "referencePrimacy": "docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md", + "hubStables": [ + "USDC", + "USDT" + ] + }, + "deepLiquidity": { + "status": "planned", + "path": "cross-chain-pmm-lps/config/solana-pool-matrix.json", + "venues": [ + "phoenix_clob", + "orca_clmm" + ], + "note": "Venue topology and target depth are defined; concrete market addresses are not published until deployed on Solana." + }, + "singleSidedEdgePools": { + "status": "planned", + "path": "cross-chain-pmm-lps/config/solana-pool-matrix.json", + "venues": [ + "meteora_dlmm", + "orca_clmm" + ], + "note": "Edge pools stay single-sided and subordinate to the Solana oracle policy plus GRU reference primacy." + }, + "launchSet": [ + "WETH", + "WETH10", + "cWUSDT", + "cWUSDC", + "cWAUSDT", + "cWEURC", + "cWEURT", + "cWGBPC", + "cWGBPT", + "cWAUDC", + "cWCADC", + "cWCHFC", + "cWJPYC", + "cWXAUC", + "cWXAUT" ] } }, @@ -1508,11 +3162,13 @@ "cwTokens": "e.g. { \"cWUSDT\": \"0x...\", \"cWUSDC\": \"0x...\" }", "anchorAddresses": "e.g. { \"USDC\": \"0x...\", \"USDT\": \"0x...\" }", "pmmPools": "array of { \"base\", \"quote\", \"poolAddress\", \"feeBps\", \"k\", \"initialLiquidity\", \"role\": \"defense\"|\"public_routing\"; optional routing controls: maxTradeSizeUnits, maxDailyNotional, cooldownBlocksAfterIntervention, minImprovementBpsToTrade, publicRoutingEnabled }", + "uniswapV2Pools": "array of { \"base\", \"quote\", \"poolAddress\", \"factoryAddress\", \"routerAddress\", \"startBlock\", \"venue\": \"uniswap_v2_pair\", \"publicRoutingEnabled\" } used when live cW pools are promoted on Uniswap V2-compatible venues", "bridgeAvailable": "true | false | null (unknown)", "gasMirrors": "map of gas-family mirrored cW* symbols to addresses, e.g. { \"cWETH\": \"0x...\" }", "gasQuoteAddresses": "wrapped-native and stable quote token addresses used by gasPmmPools, e.g. { \"WETH\": \"0x...\", \"USDC\": \"0x...\" }", "gasPmmPools": "array of DODO PMM rows for gas mirrors, each with familyKey, base, quote, poolAddress, feeBps, k, role, poolType, venue, and publicRoutingEnabled", - "gasReferenceVenues": "array of per-family venue rows for uniswap_v3, balancer, curve, and 1inch with supported/live/routingVisible flags and optional reference=true" + "gasReferenceVenues": "array of per-family venue rows for uniswap_v3, balancer, curve, and 1inch with supported/live/routingVisible flags and optional reference=true", + "nonEvm": "non-EVM execution surfaces keyed by identifier; use for bridge/runtime/oracle/deep-liquidity status that does not fit the EVM pool schema" }, "routingControlsDoc": "config/routing-controls.json for defaults and per-pool overrides" } diff --git a/config/solana-oracle-policy.json b/config/solana-oracle-policy.json new file mode 100644 index 0000000..4250b61 --- /dev/null +++ b/config/solana-oracle-policy.json @@ -0,0 +1,149 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Solana execution-oracle policy for the GRU v2 launch set bridged from Chain 138. Reference primacy remains upstream of public execution pools.", + "version": "1.0.0", + "updated": "2026-04-17", + "references": { + "referencePrimacyDoc": "docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md", + "solanaRuntimeConfig": "config/solana-relay-runtime.json", + "lineupManifest": "config/solana-gru-bridge-lineup.json" + }, + "hubStables": { + "primary": { + "symbol": "USDC", + "mintEnv": "SOLANA_HUB_USDC_MINT", + "mintFallback": "operator_fill_before_pool_deploy", + "role": "deep_and_edge_primary_quote" + }, + "secondary": { + "symbol": "USDT", + "mintEnv": "SOLANA_HUB_USDT_MINT", + "mintFallback": "operator_fill_before_secondary_pool_deploy", + "role": "overflow_quote_and_route_diversifier" + } + }, + "oracleClasses": { + "weth_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 30, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_eth_usd", + "chain138_wrapper_parity_eth_usd", + "svm_market_sanity_eth_usd" + ] + }, + "usd_parity": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 60, + "maxExecutionDeviationBps": 25, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_usd_parity", + "chain138_canonical_reserve_parity", + "svm_market_sanity_stable_usd" + ] + }, + "eur_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_eur_usd", + "chain138_canonical_eur_usd", + "institutional_fx_backup_eur_usd" + ] + }, + "gbp_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_gbp_usd", + "chain138_canonical_gbp_usd", + "institutional_fx_backup_gbp_usd" + ] + }, + "aud_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_aud_usd", + "chain138_canonical_aud_usd", + "institutional_fx_backup_aud_usd" + ] + }, + "cad_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_cad_usd", + "chain138_canonical_cad_usd", + "institutional_fx_backup_cad_usd" + ] + }, + "chf_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_chf_usd", + "chain138_canonical_chf_usd", + "institutional_fx_backup_chf_usd" + ] + }, + "jpy_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 90, + "maxExecutionDeviationBps": 50, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_jpy_usd", + "chain138_canonical_jpy_usd", + "institutional_fx_backup_jpy_usd" + ] + }, + "xau_usd": { + "targetQuote": "USDC", + "maxOracleAgeSeconds": 60, + "maxExecutionDeviationBps": 40, + "pauseOnStale": true, + "sources": [ + "gru_reference_service_xau_usd", + "chain138_canonical_xau_usd", + "institutional_commodity_backup_xau_usd" + ] + } + }, + "assetOracleAssignments": { + "WETH": "weth_usd", + "WETH10": "weth_usd", + "cWUSDT": "usd_parity", + "cWUSDC": "usd_parity", + "cWAUSDT": "usd_parity", + "cWEURC": "eur_usd", + "cWEURT": "eur_usd", + "cWGBPC": "gbp_usd", + "cWGBPT": "gbp_usd", + "cWAUDC": "aud_usd", + "cWCADC": "cad_usd", + "cWCHFC": "chf_usd", + "cWJPYC": "jpy_usd", + "cWXAUC": "xau_usd", + "cWXAUT": "xau_usd" + }, + "operatorRequirements": { + "requireFreshReference": true, + "requireDualSourceForFiatAndGold": true, + "pausePoolActionsWhenReferenceMissing": true, + "recordOracleSnapshotWithEachPoolAction": true + } +} diff --git a/config/solana-pool-matrix.json b/config/solana-pool-matrix.json new file mode 100644 index 0000000..e5ff4df --- /dev/null +++ b/config/solana-pool-matrix.json @@ -0,0 +1,185 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Deep-pool and single-sided edge-pool topology for the Solana GRU v2 launch set.", + "version": "1.0.0", + "updated": "2026-04-17", + "references": { + "solanaRuntimeConfig": "config/solana-relay-runtime.json", + "oraclePolicy": "cross-chain-pmm-lps/config/solana-oracle-policy.json", + "lineupManifest": "config/solana-gru-bridge-lineup.json" + }, + "hubStables": [ + { + "symbol": "USDC", + "role": "primary", + "mintEnv": "SOLANA_HUB_USDC_MINT" + }, + { + "symbol": "USDT", + "role": "secondary", + "mintEnv": "SOLANA_HUB_USDT_MINT" + } + ], + "deepVenueOrder": [ + "phoenix_clob", + "orca_clmm" + ], + "edgeVenueOrder": [ + "meteora_dlmm", + "orca_clmm" + ], + "assets": [ + { + "symbol": "WETH", + "oracleClass": "weth_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 500000, "singleSided": false }, + { "quoteSymbol": "USDC", "venue": "orca_clmm", "targetDepthUsd": 250000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 100000, "singleSided": true } + ] + }, + { + "symbol": "WETH10", + "oracleClass": "weth_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 250000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 75000, "singleSided": true } + ] + }, + { + "symbol": "cWUSDT", + "oracleClass": "usd_parity", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 400000, "singleSided": false }, + { "quoteSymbol": "USDT", "venue": "orca_clmm", "targetDepthUsd": 300000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 125000, "singleSided": true } + ] + }, + { + "symbol": "cWUSDC", + "oracleClass": "usd_parity", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 400000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDT", "venue": "meteora_dlmm", "targetDepthUsd": 125000, "singleSided": true } + ] + }, + { + "symbol": "cWAUSDT", + "oracleClass": "usd_parity", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 250000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 100000, "singleSided": true } + ] + }, + { + "symbol": "cWEURC", + "oracleClass": "eur_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 200000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 75000, "singleSided": true } + ] + }, + { + "symbol": "cWEURT", + "oracleClass": "eur_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 150000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 60000, "singleSided": true } + ] + }, + { + "symbol": "cWGBPC", + "oracleClass": "gbp_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 150000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 60000, "singleSided": true } + ] + }, + { + "symbol": "cWGBPT", + "oracleClass": "gbp_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 125000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 50000, "singleSided": true } + ] + }, + { + "symbol": "cWAUDC", + "oracleClass": "aud_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 125000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 50000, "singleSided": true } + ] + }, + { + "symbol": "cWCADC", + "oracleClass": "cad_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 125000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 50000, "singleSided": true } + ] + }, + { + "symbol": "cWCHFC", + "oracleClass": "chf_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 125000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 50000, "singleSided": true } + ] + }, + { + "symbol": "cWJPYC", + "oracleClass": "jpy_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 125000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 50000, "singleSided": true } + ] + }, + { + "symbol": "cWXAUC", + "oracleClass": "xau_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 225000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 80000, "singleSided": true } + ] + }, + { + "symbol": "cWXAUT", + "oracleClass": "xau_usd", + "deepPools": [ + { "quoteSymbol": "USDC", "venue": "phoenix_clob", "targetDepthUsd": 225000, "singleSided": false } + ], + "edgePools": [ + { "quoteSymbol": "USDC", "venue": "meteora_dlmm", "targetDepthUsd": 80000, "singleSided": true } + ] + } + ] +} diff --git a/scripts/README.md b/scripts/README.md index 92a69b5..9c46f80 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -31,6 +31,8 @@ Validates `config/deployment-status.json` for minimum viable deployed graph. Use - If `bridgeAvailable === true` on a chain, `cwTokens` must include at least **cWUSDT** and **cWUSDC** (phase 1). - For each `pmmPool` and each `pmmPoolsVolatile[]` entry: `role` ∈ {defense, public_routing, truu_routing}; `feeBps` and `k` present; `base`/`quote` (or `tokenIn`/`tokenOut`) exist in `cwTokens` or `anchorAddresses` (e.g. mainnet **TRUU** under `anchorAddresses.TRUU`). Non-zero `poolAddress` must not be the zero address. +- For each `gasReferenceVenues[]` entry: `supported` must be explicit, `aggregatorOnly` is only valid for `1inch`, `supported=false` means the lane is explicitly unsupported (and can never be live), and `supported=true` with `live=false` / `routingVisible=false` means the lane is planned or staged. +- `aggregatorOnly=true` rows are routing overlays, not stand-alone live venues. **Run:** diff --git a/scripts/validate-deployment-status.cjs b/scripts/validate-deployment-status.cjs index 266772a..bf8ae0a 100644 --- a/scripts/validate-deployment-status.cjs +++ b/scripts/validate-deployment-status.cjs @@ -78,6 +78,30 @@ function validatePoolEntries(chainId, pools, listLabel, knownTokens, errors) { } } +function validateUniswapV2Entries(chainId, pools, knownTokens, errors) { + for (let i = 0; i < pools.length; i++) { + const pool = pools[i]; + const base = pool.base; + const quote = pool.quote; + + if (!base || !knownTokens.has(base)) { + errors.push(`Chain ${chainId} uniswapV2Pools[${i}]: base "${base}" not in cwTokens or anchorAddresses`); + } + if (!quote || !knownTokens.has(quote)) { + errors.push(`Chain ${chainId} uniswapV2Pools[${i}]: quote "${quote}" not in cwTokens or anchorAddresses`); + } + if (!pool.poolAddress || looksPlaceholderAddress(String(pool.poolAddress).toLowerCase())) { + errors.push(`Chain ${chainId} uniswapV2Pools[${i}]: poolAddress must use a real deployed pair address`); + } + if (pool.venue && pool.venue !== 'uniswap_v2_pair') { + errors.push(`Chain ${chainId} uniswapV2Pools[${i}]: venue must be "uniswap_v2_pair" when set`); + } + if (pool.publicRoutingEnabled === true && (!pool.factoryAddress || !pool.routerAddress)) { + errors.push(`Chain ${chainId} uniswapV2Pools[${i}]: publicRoutingEnabled rows require factoryAddress and routerAddress`); + } + } +} + function main() { const status = loadJson(DEPLOYMENT_STATUS_PATH); const chains = status.chains || {}; @@ -89,6 +113,7 @@ function main() { const anchorAddresses = chain.anchorAddresses || {}; const gasQuoteAddresses = chain.gasQuoteAddresses || {}; const pmmPools = chain.pmmPools || []; + const uniswapV2Pools = chain.uniswapV2Pools || []; const pmmPoolsVolatile = chain.pmmPoolsVolatile || []; const gasPmmPools = chain.gasPmmPools || []; const gasReferenceVenues = chain.gasReferenceVenues || []; @@ -110,6 +135,7 @@ function main() { ]); validatePoolEntries(chainId, pmmPools, 'pmmPools', knownTokens, errors); + validateUniswapV2Entries(chainId, uniswapV2Pools, knownTokens, errors); validatePoolEntries(chainId, pmmPoolsVolatile, 'pmmPoolsVolatile', knownTokens, errors); validatePoolEntries(chainId, gasPmmPools, 'gasPmmPools', knownTokens, errors); @@ -139,12 +165,18 @@ function main() { if (!VALID_REFERENCE_PROTOCOLS.includes(venue.protocol)) { errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: protocol must be one of ${VALID_REFERENCE_PROTOCOLS.join(', ')}`); } + if (typeof venue.supported !== 'boolean') { + errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: supported must be set explicitly to true or false`); + } if (!venue.familyKey || typeof venue.familyKey !== 'string') { errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: familyKey required`); continue; } if (!referenceVenuesByFamily.has(venue.familyKey)) referenceVenuesByFamily.set(venue.familyKey, []); referenceVenuesByFamily.get(venue.familyKey).push(venue); + if (venue.aggregatorOnly === true && venue.protocol !== '1inch') { + errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: aggregatorOnly rows must use protocol "1inch"`); + } if (isLiveRow(venue)) { if (!VALID_NATIVE_REFERENCE_PROTOCOLS.includes(venue.protocol)) { errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: live/routingVisible rows must use a native protocol contract, not "${venue.protocol}"`); @@ -153,6 +185,12 @@ function main() { errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: live/routingVisible venueAddress must use a native protocol contract, not a placeholder scaffold (${venue.venueAddress})`); } } + if (venue.supported === false && isLiveRow(venue)) { + errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: supported=false rows cannot be live/routingVisible`); + } + if (venue.supported === false && venue.protocol === '1inch' && venue.aggregatorOnly !== true) { + errors.push(`Chain ${chainId} gasReferenceVenues[${i}]: unsupported 1inch rows must be marked aggregatorOnly=true`); + } } for (const [familyKey, venues] of referenceVenuesByFamily.entries()) {