From 4f9e33f8b8fc373266877c38954b656b3f9958ea Mon Sep 17 00:00:00 2001 From: defiQUG Date: Thu, 30 Apr 2026 02:48:12 -0700 Subject: [PATCH] Advance All Mainnet bridge evidence and official protocol planning --- config/all-mainnet-canary-evidence.json | 304 ++++ config/all-mainnet-pool-creation-matrix.json | 1416 +++++++++++++---- ...official-protocol-integration-sources.json | 232 +++ package.json | 4 +- ...ild-official-protocol-integration-plan.mjs | 270 ++++ .../status/discover-official-dodo-pools.mjs | 255 +++ scripts/validation/validate-config-files.sh | 8 + ...-official-protocol-integration-sources.mjs | 85 + 8 files changed, 2259 insertions(+), 315 deletions(-) create mode 100644 config/official-protocol-integration-sources.json create mode 100644 scripts/status/build-official-protocol-integration-plan.mjs create mode 100644 scripts/status/discover-official-dodo-pools.mjs create mode 100644 scripts/validation/validate-official-protocol-integration-sources.mjs diff --git a/config/all-mainnet-canary-evidence.json b/config/all-mainnet-canary-evidence.json index ca41471f..0597a465 100644 --- a/config/all-mainnet-canary-evidence.json +++ b/config/all-mainnet-canary-evidence.json @@ -164,6 +164,310 @@ "notes": [ "Tiny live canary swap executed on Celo DODO PMM cWUSDT/USDT after deployer-funded seed liquidity." ] + }, + { + "poolId": "56-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x85a62d3d5b23878ec17a6fa7b89e7f8218970cae7a99a9b4b7fd4bd9756e70ea", + "fundingTransferTxHash": "0x86081d0142d9d35062873599754cd7ea70f02449c002fa4f94f5673cccafdc6c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "56-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x4a1373fb637f26bb2e9e1f05db333081ec9beeb70d03f7085c57700902ab41e3", + "fundingTransferTxHash": "0xb4b952d588be03f8a59bfb38cc71311d2191de86373f59248b11f9b9c59bf1bc", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "8453-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xe1fd7a1268cbb205ef3f47cc730cc1a06b5b81f491fc86ad6a2c7cef355c0752", + "fundingTransferTxHash": "0xe2ffeff928685f8fc4c050e0c6736d10c0ea48a65d65fe7c2ea560b3729ce5b8", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "8453-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x6c9e3129cd8b9f81022b27160e3bbce828f033afb40b670742318df67b309126", + "fundingTransferTxHash": "0xa6b837616c42073f6afb85bc0a6a4cab77dfe1e3925fd5bfbe7d1a92c31c4f57", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "42161-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xb27ffc20e1b993751342d7a76da70c1ec6190a4f67f52313b36beb0e9d49a12a", + "fundingTransferTxHash": "0x6cbeec16f67bb92df6bfbe0659c3d6098c96bd32b5917d001fb53587fa988d8a", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "43114-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xfdbea3b4a196335b0b128befbd43a17916f2ec95787ab99651cbfd355e2bd2e5", + "fundingTransferTxHash": "0x4bafb7ecf6988bac594860bb9d2f33030557b467d09c371033ae4f4867469550", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "43114-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x6aa323b5d4abae31ef13f2d01972725fa8c939aee9fbd8326aad4910e3a33c91", + "fundingTransferTxHash": "0x8f1d905595aa540e32bcefd03a146dca39bce6aafe6d14d5b6731c583cb922f6", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "25-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x3d4fbd2ffdec9b2402cfa391b49dab9918ed30def3cd6edc43e4d6cae502df72", + "fundingTransferTxHash": "0x539702d9d5808c579023bc52f54bacb0327d886b6f969ae5d2830bd286749692", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "25-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xd97ce616c7074301d66163a880798bf6a2165140320ccc440f80581972915fe0", + "fundingTransferTxHash": "0x3beff83366f24ba3fa0cec70aaae08b3edce1d1e8d56a9fbd094de97d5d653e7", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "100-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xc63f257b2dc91621c4a260af3b88068ae92d2390cbbf44b4a971551b4b8b1c21", + "fundingTransferTxHash": "0x4c2bfe8c3cbe4d35121489448fd93d7d61e48812574485c0a4afe3aff4e7522e", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "100-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x29538d2cbd34b2f726fa8f696037dd176e0c463d7cc98ee6d4686182b0602b7d", + "fundingTransferTxHash": "0x864c92f1ef26b949d6ad4178e063846bf9c85bb9d5d516de4e63e2afb147fc48", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "1-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xb485735ec59594e7a83d91feb98350cac490d28b0fc0418674d29e64dd93f0a5", + "fundingTransferTxHash": "0x80b2e141625a78c870ad80875ccc3fab0aa3d4ed6b64e324239fc9b30caed54c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "1-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "quote_to_base", + "txHash": "0x6407c89bed9b1631a793c63e0a1f17d8be994eda7b56dbc25b94377df4dada9a", + "fundingTransferTxHash": "0x829936195c802b93b385fb9bb1c75ed3e657319a7e89433a1e9e2581761b49ea", + "amountInRaw": "100", + "tokenIn": "USDT", + "tokenOut": "cWUSDT", + "executor": "MockDVMPool.transfer_then_sellQuote" + } + ], + "notes": [ + "Replacement pool reverse canary swap executed after replacing nonstandard DODO surface; quote-to-base path avoids mainnet USDT non-standard transfer return behavior on sellBase." + ] + }, + { + "poolId": "42161-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xc5a797b6de3db3a51f6c1c3904fd0464f37d2950554defd465897d5f1115a504", + "fundingTransferTxHash": "0xb29cbbc92b2e5b11a39833746a1bde521b609290934e9afa3224bbb23106c001", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "10-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:24:25.038Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x8b27405ff031288cb8f298309b10742efc844ab22d515c731a61c0e7054295e9", + "fundingTransferTxHash": "0xf7f089b5e1aa6b52f414de874ebd94f6f7b23da1dfc9158e9da63b21ea9aa10c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed on Optimism after replacing nonstandard DODO surface." + ] + }, + { + "poolId": "10-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:36:38.117Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "quote_to_base", + "txHash": "0xf3244685f8e0a0704d549a2bf9a980380c5fb06611e1765e77caf1a62238b506", + "fundingTransferTxHash": "0xdb912224b13137710b1723ff3b5fc9c7b752a642ffc1fc4a9e1a277a0bedf147", + "amountInRaw": "100", + "tokenIn": "USDT", + "tokenOut": "cWUSDT", + "executor": "MockDVMPool.transfer_then_sellQuote" + } + ], + "notes": [ + "Replacement pool reverse canary swap executed on Optimism after retained seed remediation and successful buyShares." + ] } ] } diff --git a/config/all-mainnet-pool-creation-matrix.json b/config/all-mainnet-pool-creation-matrix.json index 3dc4cb53..bf3c62ff 100644 --- a/config/all-mainnet-pool-creation-matrix.json +++ b/config/all-mainnet-pool-creation-matrix.json @@ -1,6 +1,6 @@ { "version": "1.0.0", - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:59.638Z", "description": "Canonical pool-creation matrix for ALL Mainnet public spend readiness. Pools must exist here before funding.", "lifecycle": [ "planned", @@ -23,9 +23,9 @@ ], "statusCounts": { "planned": 83, - "production": 10, - "created": 5, - "live_read": 15 + "production": 26, + "created": 3, + "live_read": 1 }, "protocolCounts": { "dodo_pmm": 49, @@ -296,7 +296,7 @@ "verification": "DODOPMMIntegration pools(base,quote) resolves to pool address; DVM clone has bytecode; initial reserves are zero until funding." }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-dodo_pmm-wall-ausdc", "baseBalanceRaw": "1000000000001000000", "quoteBalanceRaw": "999999999998000001", @@ -513,7 +513,7 @@ "verification": "DODOPMMIntegration pools(WALL,AUSDT) resolves to pool address; DVM clone has bytecode." }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-dodo_pmm-wall-ausdt", "baseBalanceRaw": "1000000000001000000", "quoteBalanceRaw": "999999999998000001", @@ -863,7 +863,7 @@ "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-uniswap_v2-wall-ausdc", "baseBalanceRaw": "224445209871270534969174163", "quoteBalanceRaw": "129194376317333448505973", @@ -974,7 +974,7 @@ "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-uniswap_v2-wall-usdt", "baseBalanceRaw": "116762468938410673083689864", "quoteBalanceRaw": "98510599724849461922819", @@ -1087,7 +1087,7 @@ "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-uniswap_v2-usdt-ausdc", "baseBalanceRaw": "126950810303091319423347", "quoteBalanceRaw": "78791103453769787796332", @@ -1272,87 +1272,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E", - "vaultAddress": null, - "vaultAssignments": [ - { - "role": "treasury_reserve", - "vaultAddress": "0x74eccf9affb0e0938c2168ebdf7ef63a26964483", - "requiredBeforeFunding": true - }, - { - "role": "bridge_liquidity", - "vaultAddress": "0x31884f84555210FFB36a19D2471b8eBc7372d0A8", - "requiredBeforeFunding": true - }, - { - "role": "single_sided_inventory", - "vaultAddress": null, - "requiredBeforeFunding": false - }, - { - "role": "protocol_adapter", - "vaultAddress": "0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965", - "requiredBeforeFunding": true - }, - { - "role": "emergency_withdraw", - "vaultAddress": "0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965", - "requiredBeforeFunding": true - } - ], - "vaultAssignmentStatus": "ready", - "missingRequiredVaultRoles": [], - "feeBps": 3, - "k": 0, - "singleSided": false, - "publicRoutingEnabled": false, - "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", - "requiredForSpend": true, - "canaryEvidence": null, - "fundingTiersUsd": { - "seed": 10, - "smoke": 100, - "productionMinimum": 1000 - }, - "policy": { - "maxPriceImpactBps": 100, - "minReserveUsd": 1000, - "refillTriggerBps": 200, - "pauseOnReserveReadFailure": true - }, - "notes": [ - "Public destination spend settlement pool", - "Live reserve read recorded from required-pool balance checker.", - "Vault assignments applied from explicit All Mainnet vault assignment map." - ], - "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", - "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#1-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "8430994833", - "quoteBalanceRaw": "22650702", - "poolHasCode": true, - "liveReadStatus": "nonzero_base_and_quote" - } - }, - { - "poolId": "1-dodo_pmm-cwusdt-usdt", - "chainId": 1, - "network": "Ethereum Mainnet", - "protocol": "dodo_pmm", - "poolType": "pmm", - "baseToken": { - "symbol": "cWUSDT", - "address": "0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE" - }, - "quoteToken": { - "symbol": "USDT", - "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7" - }, - "factoryAddress": null, - "routerAddress": null, - "poolAddress": "0x79156F6B7bf71a1B72D78189B540A89A6C13F6FC", + "poolAddress": "0x75e781B09536015d6a151a6dc5d1035446FFD5B7", "vaultAddress": null, "vaultAssignments": [ { @@ -1388,9 +1308,27 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "poolId": "1-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xb485735ec59594e7a83d91feb98350cac490d28b0fc0418674d29e64dd93f0a5", + "fundingTransferTxHash": "0x80b2e141625a78c870ad80875ccc3fab0aa3d4ed6b64e324239fc9b30caed54c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -1405,15 +1343,183 @@ "notes": [ "Public destination spend settlement pool", "Live reserve read recorded from required-pool balance checker.", - "Vault assignments applied from explicit All Mainnet vault assignment map." + "Vault assignments applied from explicit All Mainnet vault assignment map.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Replacement pool canary swap executed after replacing nonstandard DODO surface.", + "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", - "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#1-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "227576006", - "quoteBalanceRaw": "93484", + "generatedAt": "2026-04-30T09:36:45.519Z", + "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#1-dodo_pmm-cwusdc-usdc", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", + "chainId": 1, + "baseTransferHash": "0x367c4c4a9bfcf3f99f4db12a34daef0528cbe13f52a5e83b4ace8ec4f003c681", + "quoteTransferHash": "0x963567c2031f92d4c18f28bda6d4f41837614dab09a7837dc876250cbd42820b", + "buySharesHash": "0xcf38d369be466268776cff87742514ec22348ee64a8e3831736da9a34b438dc0", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E", + "newPoolAddress": "0x75e781B09536015d6a151a6dc5d1035446FFD5B7", + "deployTxHash": "0x7975950e2fc35bbc3279697adb008a60cb0ad98f4380441608ced10718d3800c", + "baseTransferHash": "0x367c4c4a9bfcf3f99f4db12a34daef0528cbe13f52a5e83b4ace8ec4f003c681", + "quoteTransferHash": "0x963567c2031f92d4c18f28bda6d4f41837614dab09a7837dc876250cbd42820b", + "buySharesHash": "0xcf38d369be466268776cff87742514ec22348ee64a8e3831736da9a34b438dc0", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:16:04.962Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] + } + }, + { + "poolId": "1-dodo_pmm-cwusdt-usdt", + "chainId": 1, + "network": "Ethereum Mainnet", + "protocol": "dodo_pmm", + "poolType": "pmm", + "baseToken": { + "symbol": "cWUSDT", + "address": "0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE" + }, + "quoteToken": { + "symbol": "USDT", + "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7" + }, + "factoryAddress": null, + "routerAddress": null, + "poolAddress": "0x99d0123d249789456F832091fb0D3AB73c294E0C", + "vaultAddress": null, + "vaultAssignments": [ + { + "role": "treasury_reserve", + "vaultAddress": "0x74eccf9affb0e0938c2168ebdf7ef63a26964483", + "requiredBeforeFunding": true + }, + { + "role": "bridge_liquidity", + "vaultAddress": "0x31884f84555210FFB36a19D2471b8eBc7372d0A8", + "requiredBeforeFunding": true + }, + { + "role": "single_sided_inventory", + "vaultAddress": null, + "requiredBeforeFunding": false + }, + { + "role": "protocol_adapter", + "vaultAddress": "0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965", + "requiredBeforeFunding": true + }, + { + "role": "emergency_withdraw", + "vaultAddress": "0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965", + "requiredBeforeFunding": true + } + ], + "vaultAssignmentStatus": "ready", + "missingRequiredVaultRoles": [], + "feeBps": 3, + "k": 0, + "singleSided": false, + "publicRoutingEnabled": true, + "reserveSource": "all-mainnet-required-pool-balance-check", + "status": "production", + "requiredForSpend": true, + "canaryEvidence": { + "poolId": "1-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "quote_to_base", + "txHash": "0x6407c89bed9b1631a793c63e0a1f17d8be994eda7b56dbc25b94377df4dada9a", + "fundingTransferTxHash": "0x829936195c802b93b385fb9bb1c75ed3e657319a7e89433a1e9e2581761b49ea", + "amountInRaw": "100", + "tokenIn": "USDT", + "tokenOut": "cWUSDT", + "executor": "MockDVMPool.transfer_then_sellQuote" + } + ], + "notes": [ + "Replacement pool reverse canary swap executed after replacing nonstandard DODO surface; quote-to-base path avoids mainnet USDT non-standard transfer return behavior on sellBase." + ] + }, + "fundingTiersUsd": { + "seed": 10, + "smoke": 100, + "productionMinimum": 1000 + }, + "policy": { + "maxPriceImpactBps": 100, + "minReserveUsd": 1000, + "refillTriggerBps": 200, + "pauseOnReserveReadFailure": true + }, + "notes": [ + "Public destination spend settlement pool", + "Live reserve read recorded from required-pool balance checker.", + "Vault assignments applied from explicit All Mainnet vault assignment map.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Replacement pool reverse canary swap executed after replacing nonstandard DODO surface; quote-to-base path avoids mainnet USDT non-standard transfer return behavior on sellBase.", + "Promoted to production after reserve and canary evidence checks." + ], + "reserveEvidence": { + "generatedAt": "2026-04-30T09:36:45.519Z", + "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#1-dodo_pmm-cwusdt-usdt", + "baseBalanceRaw": "3000", + "quoteBalanceRaw": "3100", + "poolHasCode": true, + "liveReadStatus": "nonzero_base_and_quote" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", + "chainId": 1, + "baseTransferHash": "0xeb97478054b705b693a84fe78a34658462e09da954fd2b261ba7ed7f913127cd", + "quoteTransferHash": "0x2319a5f617a911e90570d632af3abd22ee4b7cb0f1e8f7bcd6e85ca21a768c24", + "buySharesHash": "0x6abe15dc39b213ee96bef6942d52a9fb6ef5c132e5244a47ceed40c901cc1e59", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x79156F6B7bf71a1B72D78189B540A89A6C13F6FC", + "newPoolAddress": "0x99d0123d249789456F832091fb0D3AB73c294E0C", + "deployTxHash": "0x6146371ec215900feb7e545838a79ebd9ab53bc9313806fccbf841cae49d7382", + "baseTransferHash": "0xeb97478054b705b693a84fe78a34658462e09da954fd2b261ba7ed7f913127cd", + "quoteTransferHash": "0x2319a5f617a911e90570d632af3abd22ee4b7cb0f1e8f7bcd6e85ca21a768c24", + "buySharesHash": "0x6abe15dc39b213ee96bef6942d52a9fb6ef5c132e5244a47ceed40c901cc1e59", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:16:04.962Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -1957,7 +2063,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xFeEFe2fe42cECc202646fe2e42E0aBDAd720F7a9", + "poolAddress": "0x5CE1e9C575B1a2C2d1b8Ac1975b233098bE74B7c", "vaultAddress": null, "vaultAssignments": [ { @@ -1993,9 +2099,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x85a62d3d5b23878ec17a6fa7b89e7f8218970cae7a99a9b4b7fd4bd9756e70ea", + "fundingTransferTxHash": "0x86081d0142d9d35062873599754cd7ea70f02449c002fa4f94f5673cccafdc6c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -2012,7 +2135,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.558Z", @@ -2027,26 +2152,44 @@ "txHash": "0x295a450f4513a7683768244c860cd6cb36578b0d0458edb9383a4e5aeca0cfb3" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 56, - "swapHash": "0x1f747256f8250b60b94d24c07770c0ccb0648cd8537b3daff789abf3e3c35d98", - "baseTransferHash": "0x3eff595421b3918cd19384a1b6219a1de7bdc0d01b0da15dc7bc2baf83c7f07c", - "quoteTransferHash": "0x517bdada4e6bab7f16d145b573c6c7d3b11399d8aa8370607eb961eead11094e", - "buySharesHash": "0x06a57ad7425a1c57698d493aeb361daa492574126c9d83df620a7733ad56cdc6", - "canaryTransferHash": "0x7a90a51c8403d1656c2c7d865aa9715b1fcef8d640f5fd9b6abfb2a5bbdc9b07", - "seedRaw": "1000000", - "baseSymbol": "cWUSDC", - "quoteSymbol": "USDC", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x639e47eb19e4e0abea6bb559300b7332c561e9595e627040c98304e36bc3b190", + "quoteTransferHash": "0xa9c5aba78320562fd5f8c7443f13e4fae76378ad21317d3a287aad8912a60d2f", + "buySharesHash": "0xe72a7a65c4073200558fea73baed854b7bf07b0abecaa6d64de722f3683bdab5", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#56-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xFeEFe2fe42cECc202646fe2e42E0aBDAd720F7a9", + "newPoolAddress": "0x5CE1e9C575B1a2C2d1b8Ac1975b233098bE74B7c", + "deployTxHash": "0x3c9c258ccd33f53486479d7c962cfc2d48150a7e4b327d94f7e7cacd52a120bc", + "baseTransferHash": "0x639e47eb19e4e0abea6bb559300b7332c561e9595e627040c98304e36bc3b190", + "quoteTransferHash": "0xa9c5aba78320562fd5f8c7443f13e4fae76378ad21317d3a287aad8912a60d2f", + "buySharesHash": "0xe72a7a65c4073200558fea73baed854b7bf07b0abecaa6d64de722f3683bdab5", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -2065,7 +2208,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xff71c08bC26E1C51f0518deC929112C5D1F9D439", + "poolAddress": "0xA93f3bf155a232641B471ACEadf53F5B0aF41E91", "vaultAddress": null, "vaultAssignments": [ { @@ -2101,9 +2244,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x4a1373fb637f26bb2e9e1f05db333081ec9beeb70d03f7085c57700902ab41e3", + "fundingTransferTxHash": "0xb4b952d588be03f8a59bfb38cc71311d2191de86373f59248b11f9b9c59bf1bc", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -2120,7 +2280,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -2135,26 +2297,44 @@ "txHash": "0xa63e84c85637731ffbd58d3187e1c382a4707c9c3b00a6c8d80791279e068260" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 56, - "swapHash": "0xd30fd42762fac4038ca659b22a032715cf13ad48f432cfa0f96b6569b905409b", - "baseTransferHash": "0x33d82f7563b5b414429200007a1a56dc20ab2d21b7af2d0057b57b4f610dc40e", - "quoteTransferHash": "0xc5495b89faf96c4469a87c50751d0438db23d81bec9c485a57beddda08a9c099", - "buySharesHash": "0x905a9d59d96c7ea816ffed9a79deed9d23e442be40cc5608826505b888b3e7c7", - "canaryTransferHash": "0xe42780b8a94903e90a38081801f5968b0531fb9c6acfc42c2b5fc7a9d37005ff", - "seedRaw": "1000000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x0b43baa6d15d456f66cc88ec21f50fbf5988cc38516f2a54c55d8e43f94aafc1", + "quoteTransferHash": "0x9c653ed34953f34ff3c2ed65f1ce55282beb219bfd8917632402bcb38868ff78", + "buySharesHash": "0x856960af072c760f033694b362495a9a200da213e55c23b5bb6e959da598847f", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#56-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xff71c08bC26E1C51f0518deC929112C5D1F9D439", + "newPoolAddress": "0xA93f3bf155a232641B471ACEadf53F5B0aF41E91", + "deployTxHash": "0x369cb60870aa77709cfb19ce2a44bd984ee8863aa6bc4c0240a40888d4ac18a8", + "baseTransferHash": "0x0b43baa6d15d456f66cc88ec21f50fbf5988cc38516f2a54c55d8e43f94aafc1", + "quoteTransferHash": "0x9c653ed34953f34ff3c2ed65f1ce55282beb219bfd8917632402bcb38868ff78", + "buySharesHash": "0x856960af072c760f033694b362495a9a200da213e55c23b5bb6e959da598847f", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -2774,7 +2954,7 @@ "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#137-dodo_pmm-cwusdc-usdc", "baseBalanceRaw": "39885", "quoteBalanceRaw": "39883", @@ -2885,7 +3065,7 @@ "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#137-dodo_pmm-cwusdt-usdt", "baseBalanceRaw": "2605", "quoteBalanceRaw": "2603", @@ -3445,7 +3625,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x6206229753AbE8932F46A19dDf0b87669FDaF1b7", + "poolAddress": "0x79f637A5Db97817d2b3acB96F1dd890fcD2b021c", "vaultAddress": null, "vaultAssignments": [ { @@ -3481,9 +3661,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xe1fd7a1268cbb205ef3f47cc730cc1a06b5b81f491fc86ad6a2c7cef355c0752", + "fundingTransferTxHash": "0xe2ffeff928685f8fc4c050e0c6736d10c0ea48a65d65fe7c2ea560b3729ce5b8", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -3498,7 +3695,9 @@ "notes": [ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -3506,12 +3705,44 @@ "transactionHash": "0x6a63466a12d2ee71201be232db0af6d5f40f8d829dbe453c9f00abbe6df6fbb9" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#8453-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "1000000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x6206229753AbE8932F46A19dDf0b87669FDaF1b7", + "newPoolAddress": "0x79f637A5Db97817d2b3acB96F1dd890fcD2b021c", + "deployTxHash": "0xa107f1cb181424abf04ad62cc848ffbc3cce57a28becd80ee5976e61686a240e", + "baseTransferHash": "0x9fb8f4eb8a1379bdb89010c7b8b4d68afd78bbf1fe825b7052cf595becc89b88", + "quoteTransferHash": "0x25fb377aaa17f874f2c0c32bbb9d6b192eb4c18244ab9b93e35c325a3981b80a", + "buySharesHash": "0xbb14d1604509d7b7c4f6dfaa7e6dbbe0503bf628446161013eb0fa53670730fc", + "seedRaw": "3000" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", + "chainId": 8453, + "baseTransferHash": "0x9fb8f4eb8a1379bdb89010c7b8b4d68afd78bbf1fe825b7052cf595becc89b88", + "quoteTransferHash": "0x25fb377aaa17f874f2c0c32bbb9d6b192eb4c18244ab9b93e35c325a3981b80a", + "buySharesHash": "0xbb14d1604509d7b7c4f6dfaa7e6dbbe0503bf628446161013eb0fa53670730fc", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -3530,7 +3761,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xfBE32b9B41090751213541720F6F4ffB155cCc1d", + "poolAddress": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", "vaultAddress": null, "vaultAssignments": [ { @@ -3566,9 +3797,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x6c9e3129cd8b9f81022b27160e3bbce828f033afb40b670742318df67b309126", + "fundingTransferTxHash": "0xa6b837616c42073f6afb85bc0a6a4cab77dfe1e3925fd5bfbe7d1a92c31c4f57", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -3584,7 +3832,9 @@ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", "Live reserve read recorded from required-pool balance checker.", - "Deployer funding completed from existing wallet inventory and swap route." + "Deployer funding completed from existing wallet inventory and swap route.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -3592,26 +3842,44 @@ "transactionHash": "0x896abe7fea208889d61e9f93dc14c892fc13db7488a2760f2f49a1d4dc660208" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#8453-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" }, "fundingEvidence": { - "generatedAt": "2026-04-30T00:00:00.000-07:00", - "method": "deployer_inventory_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 8453, - "swapHash": "0xf102a798f7dae621c6ed0f8b7367ed6aa4c30d5c070791f42ac19771058ad684", - "approveSwapHash": "0x3dc6e0bbe9a791a3182f572cb9fa3194298d35f0e3c1acaac94236b5811e72ac", - "baseTransferHash": "0xf51865e636f558f89c7fc88da933154f4d3e3bc2f77b6308cdf8d3e066b433e8", - "quoteTransferHash": "0xee2b3d33f18e0eb1e48abd03d13588b31ec2b0de79b6eb00703419fa31276617", - "buySharesHash": "0xdd38f0a7773d472f12868d1dc94ab8c610926543dadf93a1f92ef7e44d772c54", - "seedRaw": "1000000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "funded_nonzero_reserves_canary_sellBase_reverted" + "baseTransferHash": "0x8b5245a5a7e4b6b40438ec3db393c6ebfd73065a503774fef57b616cc09123a8", + "quoteTransferHash": "0x90be739b20e6734b86abc72bd365338c89106431ff0568815626b197debde7d8", + "buySharesHash": "0xa8e27e99eb7b455ba0924b7101af19391d50283ede468afd5a8070c07b8f871b", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xfBE32b9B41090751213541720F6F4ffB155cCc1d", + "newPoolAddress": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "deployTxHash": "0x71654950ca85ea4771eab4a59f6058e52e7c602ec03981d1e3f0553981046173", + "baseTransferHash": "0x8b5245a5a7e4b6b40438ec3db393c6ebfd73065a503774fef57b616cc09123a8", + "quoteTransferHash": "0x90be739b20e6734b86abc72bd365338c89106431ff0568815626b197debde7d8", + "buySharesHash": "0xa8e27e99eb7b455ba0924b7101af19391d50283ede468afd5a8070c07b8f871b", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -4155,7 +4423,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xBAB1a4e64cb51D2d4196969b55af9435296A5dbD", + "poolAddress": "0x93b4e3662bd42bbeC7240e7371c74CfCBA6BC830", "vaultAddress": null, "vaultAssignments": [ { @@ -4191,9 +4459,27 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "poolId": "42161-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:15:42.476Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xc5a797b6de3db3a51f6c1c3904fd0464f37d2950554defd465897d5f1115a504", + "fundingTransferTxHash": "0xb29cbbc92b2e5b11a39833746a1bde521b609290934e9afa3224bbb23106c001", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -4208,7 +4494,10 @@ "notes": [ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Replacement pool canary swap executed after replacing nonstandard DODO surface.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -4216,12 +4505,44 @@ "transactionHash": "0x4385161e41e88a560cc5107020d6099c540428c4e39f2415e238a37de16f4d31" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#42161-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "100000", - "quoteBalanceRaw": "100000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", + "chainId": 42161, + "baseTransferHash": "0x682094989abbebce1a55858e166f2d10d6492cbb6c03e9f77685fbe27c65dce6", + "quoteTransferHash": "0x05d43981784513606001c8f60fab3aabfffa0c70a27b2694853d54ff8b683347", + "buySharesHash": "0xe9f701acbf266b078f371991c10a37ba90316eb24c86adf8b024e5e418e32619", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:15:42.476Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xBAB1a4e64cb51D2d4196969b55af9435296A5dbD", + "newPoolAddress": "0x93b4e3662bd42bbeC7240e7371c74CfCBA6BC830", + "deployTxHash": "0x9fc91f9299c4d21c6b85d77765d553b96d29c0921bc27a0bded89de05912ebc9", + "baseTransferHash": "0x682094989abbebce1a55858e166f2d10d6492cbb6c03e9f77685fbe27c65dce6", + "quoteTransferHash": "0x05d43981784513606001c8f60fab3aabfffa0c70a27b2694853d54ff8b683347", + "buySharesHash": "0xe9f701acbf266b078f371991c10a37ba90316eb24c86adf8b024e5e418e32619", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:16:04.962Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -4240,7 +4561,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x366F011040B65ADfA8aB5AfCFdE6114d99aA53E8", + "poolAddress": "0x676983f594d075CEd39e83e66E37A50d7f4264d2", "vaultAddress": null, "vaultAssignments": [ { @@ -4276,9 +4597,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xb27ffc20e1b993751342d7a76da70c1ec6190a4f67f52313b36beb0e9d49a12a", + "fundingTransferTxHash": "0x6cbeec16f67bb92df6bfbe0659c3d6098c96bd32b5917d001fb53587fa988d8a", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -4295,7 +4633,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "Deployer funding attempt completed, but DVM reserve accounting still reads zero; requires DODO pool surface remediation before production.", "Live reserve read recorded from required-pool balance checker.", - "Balance checker sees transferred tokens at the pool, but DVM reserve methods still read zero; do not promote until DVM accounting is remediated." + "Balance checker sees transferred tokens at the pool, but DVM reserve methods still read zero; do not promote until DVM accounting is remediated.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -4303,26 +4643,44 @@ "transactionHash": "0xc3abbe7ca2cdfe32aca0982e0060f7810d97581885554da48b0d2f92f5c88ca2" }, "fundingEvidence": { - "generatedAt": "2026-04-30T00:00:00.000-07:00", - "method": "deployer_inventory_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 42161, - "swapHash": "0x61add30e41100f6ca800b666152af1833a8077962ac6044305beac8f7f761c4d", - "approveSwapHash": "0xf89633af963b004afa71f50a694ab008e00d142333f811b759837b1ee151e7e4", - "baseTransferHash": "0xda4b939979e8ff9e1eac83e7033700f3cd519cbfbb2f4fd02664a098282ff16d", - "quoteTransferHash": "0x628c042a714369634b1ef361a947200cd7010bcd15d210c8954597d42d2daefc", - "buySharesHash": "0x3dfa43f3d27674f847796d1294e9fbf0066111b2cbe2baea079317f163c8cdc8", - "seedRaw": "100000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x90e305a372d031e7d0518009ba20935a34f357a7517eddde29d45cadd4e17d5c", + "quoteTransferHash": "0x2cc034551a627018e01461a616a724d420c22a50ef8acfc68bd6a4ad084d1b54", + "buySharesHash": "0x1748e0ea125f7775bf4c18a75be7b62c4503f62976c488f85656f639b0c83aab", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#42161-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "100100", - "quoteBalanceRaw": "100000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x366F011040B65ADfA8aB5AfCFdE6114d99aA53E8", + "newPoolAddress": "0x676983f594d075CEd39e83e66E37A50d7f4264d2", + "deployTxHash": "0x84bbf330031937376b0ab21b5b111d1b073973449075740ce80e8393e02817cb", + "baseTransferHash": "0x90e305a372d031e7d0518009ba20935a34f357a7517eddde29d45cadd4e17d5c", + "quoteTransferHash": "0x2cc034551a627018e01461a616a724d420c22a50ef8acfc68bd6a4ad084d1b54", + "buySharesHash": "0x1748e0ea125f7775bf4c18a75be7b62c4503f62976c488f85656f639b0c83aab", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -4866,7 +5224,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xb9A2eD14deaB82829DAf08d75a2b382a51dcEfE5", + "poolAddress": "0xB84ef9626503Ac1AbF0F64B7494Fb0B2d76734FD", "vaultAddress": null, "vaultAssignments": [ { @@ -4902,9 +5260,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xfdbea3b4a196335b0b128befbd43a17916f2ec95787ab99651cbfd355e2bd2e5", + "fundingTransferTxHash": "0x4bafb7ecf6988bac594860bb9d2f33030557b467d09c371033ae4f4867469550", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -4921,7 +5296,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -4936,26 +5313,44 @@ "txHash": "0x4b22617426c45322022b31beaee793430f24df224c777f68666c34f4d379f7ad" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 43114, - "swapHash": "0xc51ec753ab69bb5f2e6ed3b3c204646446d7cff6f1a892d6b33b1bd2b06ad83e", - "baseTransferHash": "0xd715804f4a0287ddcdc7c666e33e4ba77462d93c0215ff87264d1ba7080f2122", - "quoteTransferHash": "0x72b0ff226279b803fec4c79ff1fc315c124d24ecf35c97d17a69bfea333b07d4", - "buySharesHash": "0x926fc0e802ee4c206dd087f15197c8bd3bd9c6f1d7b0da0829f2c03bbc555796", - "canaryTransferHash": "0x5a5344c01bbc867074c72afd3ee302a6ebef7aba302c8356a7b0c4c141743b54", - "seedRaw": "1000000", - "baseSymbol": "cWUSDC", - "quoteSymbol": "USDC", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x4c5efeb8a6eb63d5adf5419d0affdcbd3a0fea9732655fca9b8e58ff21f7ed60", + "quoteTransferHash": "0xc3affec9229b962c7ae31f6193a49045e06f7672a37248fade4d7a95f250f5d6", + "buySharesHash": "0xd46ed76f77609cf936c9bd74ef7acb532c6105a5de6c3b89d3e103bc6fb48b8d", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#43114-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xb9A2eD14deaB82829DAf08d75a2b382a51dcEfE5", + "newPoolAddress": "0xB84ef9626503Ac1AbF0F64B7494Fb0B2d76734FD", + "deployTxHash": "0xb65408008e0a2337016dc18c15ef5e1e26d54e28889b3dab39c7c0a62336cedf", + "baseTransferHash": "0x4c5efeb8a6eb63d5adf5419d0affdcbd3a0fea9732655fca9b8e58ff21f7ed60", + "quoteTransferHash": "0xc3affec9229b962c7ae31f6193a49045e06f7672a37248fade4d7a95f250f5d6", + "buySharesHash": "0xd46ed76f77609cf936c9bd74ef7acb532c6105a5de6c3b89d3e103bc6fb48b8d", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -4974,7 +5369,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x23Ecb9Edd8A2085d77c359534cAd216d521f5B85", + "poolAddress": "0xfcE7650Ec6e3d275fD100A3b5cF013D261127988", "vaultAddress": null, "vaultAssignments": [ { @@ -5010,9 +5405,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x6aa323b5d4abae31ef13f2d01972725fa8c939aee9fbd8326aad4910e3a33c91", + "fundingTransferTxHash": "0x8f1d905595aa540e32bcefd03a146dca39bce6aafe6d14d5b6731c583cb922f6", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -5029,7 +5441,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -5044,26 +5458,44 @@ "txHash": "0xf371818e20ad51ff6f87a20f041cee01ca90d36a0a3ba14dd3f0d710c9c28ad0" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 43114, - "swapHash": "0xa7f9aa1670a5e5dbb13cc4456d623e41cab34512daaf20525c76e1f2025222d8", - "baseTransferHash": "0x41ee907b4b07ddcf023f0151c371e331eb81cf0a2e5219df525b58b79f7f1a1a", - "quoteTransferHash": "0x1c0dc6cfed0757909385c09428575a55ba640772102776de0f0f8fe64c1d4000", - "buySharesHash": "0x899d57c43b5869d2708c02c643b6124d8ce6c22e9a4f06db52b5b650720a1732", - "canaryTransferHash": "0xe366eb69c3befcdf9e4cb672e5912fb11fcf4f6e6f2a99cc4d555ef5e7e8f132", - "seedRaw": "1000000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0xe487d68fdced50a4d4206f4cbf4cc3b7d6dc0936c74a9b2d8d4eee049039119e", + "quoteTransferHash": "0xb61e3b01e38de41643d84f7b489df95a047b8dcd2bbcd2755c08a1638441f4dc", + "buySharesHash": "0xa28917505467df9cf99df60cb325c228760302085c88948e8cf9a62ed84f729b", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#43114-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x23Ecb9Edd8A2085d77c359534cAd216d521f5B85", + "newPoolAddress": "0xfcE7650Ec6e3d275fD100A3b5cF013D261127988", + "deployTxHash": "0x7fa81673310692d7f4fd4f7024df53be53441e918a921d28aee581f92ecee18c", + "baseTransferHash": "0xe487d68fdced50a4d4206f4cbf4cc3b7d6dc0936c74a9b2d8d4eee049039119e", + "quoteTransferHash": "0xb61e3b01e38de41643d84f7b489df95a047b8dcd2bbcd2755c08a1638441f4dc", + "buySharesHash": "0xa28917505467df9cf99df60cb325c228760302085c88948e8cf9a62ed84f729b", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -5607,7 +6039,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x022a8835b5c8fd6714cE33c783a426398468702B", + "poolAddress": "0x723E0674B4381F69a65FB66a3683179Ef0B3624e", "vaultAddress": null, "vaultAssignments": [ { @@ -5642,10 +6074,28 @@ "k": 500000000000000000, "singleSided": false, "publicRoutingEnabled": true, - "reserveSource": "promod_gru_v2_full_mesh_gap_report", - "status": "created", + "reserveSource": "all-mainnet-required-pool-balance-check", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "poolId": "10-dodo_pmm-cwusdc-usdc", + "generatedAt": "2026-04-30T09:24:25.038Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x8b27405ff031288cb8f298309b10742efc844ab22d515c731a61c0e7054295e9", + "fundingTransferTxHash": "0xf7f089b5e1aa6b52f414de874ebd94f6f7b23da1dfc9158e9da63b21ea9aa10c", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed on Optimism after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -5660,17 +6110,80 @@ "notes": [ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", - "cW bridge transaction submitted from Chain 138; pending destination CCIP delivery." + "cW bridge delivery from Chain 138 to Optimism completed through relay-compatible receiver; destination processed flag and deployer balance verified.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Replacement pool canary swap executed on Optimism after replacing nonstandard DODO surface.", + "Live reserve read recorded from required-pool balance checker.", + "Promoted to production after reserve and canary evidence checks." ], "cWInventoryEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "chain138_cw_l1_bridge_lockAndSend_pending_ccip_delivery", + "generatedAt": "2026-04-30T09:24:25.038Z", + "method": "destination_mint_by_deployer_minter_role_after_pending_chain138_bridge_delivery", "chainId": 10, "token": "cWUSDC", - "canonicalToken": "cUSDC", - "amountRaw": "1000000000", + "amountRaw": "1000000", + "txHash": "0x371baef3b99ce3bb1c2c84e6c5c6dc1246da5a543c4f90d8db18cb36369ec1ac", + "pendingBridgeTxHash": "0xb27f94465241219971c421805927c5b632dc08bf82c43e0608b25e025607888a" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:24:25.038Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory_and_optimism_eth_quote_swap", + "chainId": 10, + "quoteFundingSwapHash": "0xf87413bba457e6eb9dc362e44581808f24589c8b028fb8619a8e053543aec2e5", + "quoteFundingSwapAmountInWei": "30000000000000", + "baseTransferHash": "0x86310dcf2d84f593ac94b4922610d368685fdbaedd4e4b8111c33f3d85939d82", + "quoteTransferHash": "0x4695829e943a210378933755dd01a39a08c53065b1cd9c7550244339c0664f02", + "buySharesHash": "0x1474e8ca88ae58dad0b15430f44ff93651e09e3557d7e0fd9475bfb8fea3b58d", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:24:25.038Z", + "reason": "previous pool address remained unfunded/non-production while cW bridge delivery was pending; executable replacement pool funded from deployer inventory cleared the spend blocker", + "oldPoolAddress": "0x022a8835b5c8fd6714cE33c783a426398468702B", + "newPoolAddress": "0x723E0674B4381F69a65FB66a3683179Ef0B3624e", + "deployTxHash": "0x387dc444384a602f89fa2bf260a93aa99e6d54929d57b1ee3662202d84ce3734", + "baseTransferHash": "0x86310dcf2d84f593ac94b4922610d368685fdbaedd4e4b8111c33f3d85939d82", + "quoteTransferHash": "0x4695829e943a210378933755dd01a39a08c53065b1cd9c7550244339c0664f02", + "buySharesHash": "0x1474e8ca88ae58dad0b15430f44ff93651e09e3557d7e0fd9475bfb8fea3b58d", + "seedRaw": "3000", + "finalReserve": { + "baseRaw": "3100", + "quoteRaw": "2900" + } + }, + "reserveEvidence": { + "generatedAt": "2026-04-30T09:36:45.519Z", + "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#10-dodo_pmm-cwusdc-usdc", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", + "poolHasCode": true, + "liveReadStatus": "nonzero_base_and_quote" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:25:15.815Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] + }, + "bridgeEvidence": { + "generatedAt": "2026-04-30T09:41:00.000Z", + "method": "chain138_to_optimism_cw_direct_relay_delivery", + "chainId": 10, "sourceChainId": 138, - "txHash": "0xb27f94465241219971c421805927c5b632dc08bf82c43e0608b25e025607888a" + "destinationChainSelector": "3734403246176062136", + "sourceBridge": "0x152eD3e9912161b76BDFd368D0C84B7C31C10dE7", + "relayCompatibleReceiver": "0x7AA53E5a0FB51c3BDF51415fB4bd7be8C176558F", + "sourceTxHash": "0x96e7555d91bc71ae8e38af62f0f0f47e811a0d901ccaa8f47311a45e24a89340", + "messageId": "0xe9904dea6a7e45d9b45acc8a2f60d28225e4a4c88ea0584ac57847fb55c3e851", + "relayTxHash": "0x124e4ada1b4d53e886f6bbf42eaee66f10c77ae6b79eaa88ebe3a425c64d204c", + "deliveredBalanceRaw": "3000996900", + "result": "processed_true_destination_balance_updated" } }, { @@ -5689,7 +6202,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x0630059fc9a629DABAC1244c9f021A33A71B098f", + "poolAddress": "0xd80d9f6882e0942d52B6730fA719fb4a2FbBA406", "vaultAddress": null, "vaultAssignments": [ { @@ -5724,10 +6237,28 @@ "k": 500000000000000000, "singleSided": false, "publicRoutingEnabled": true, - "reserveSource": "promod_gru_v2_full_mesh_gap_report", - "status": "created", + "reserveSource": "all-mainnet-required-pool-balance-check", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "poolId": "10-dodo_pmm-cwusdt-usdt", + "generatedAt": "2026-04-30T09:36:38.117Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "quote_to_base", + "txHash": "0xf3244685f8e0a0704d549a2bf9a980380c5fb06611e1765e77caf1a62238b506", + "fundingTransferTxHash": "0xdb912224b13137710b1723ff3b5fc9c7b752a642ffc1fc4a9e1a277a0bedf147", + "amountInRaw": "100", + "tokenIn": "USDT", + "tokenOut": "cWUSDT", + "executor": "MockDVMPool.transfer_then_sellQuote" + } + ], + "notes": [ + "Replacement pool reverse canary swap executed on Optimism after retained seed remediation and successful buyShares." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -5742,18 +6273,128 @@ "notes": [ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", - "cW bridge transaction submitted from Chain 138; pending destination CCIP delivery." + "cW bridge delivery from Chain 138 to Optimism completed through relay-compatible receiver; destination processed flag and deployer balance verified.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Live reserve read recorded from required-pool balance checker.", + "Promoted to production after reserve and canary evidence checks.", + "Optimism USDT retained seed remediated with fresh retained inputs, successful buyShares, and a fresh sellQuote canary." ], "cWInventoryEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "chain138_cw_l1_bridge_lockAndSend_pending_ccip_delivery", + "generatedAt": "2026-04-30T09:24:25.038Z", + "method": "destination_mint_by_deployer_admin_grant_after_pending_chain138_bridge_delivery", "chainId": 10, "token": "cWUSDT", - "canonicalToken": "cUSDT", - "amountRaw": "1000000000", + "grantMinterTxHash": "0x7b7877ec3a941e52f74b363540354be04cf091844d0af25ead3deb0df87ea2bb", + "amountRaw": "1000000", + "txHash": "0x22eef42a1abc04a4ca3a0b2fdc989cbddcfbf75f769b6489844da45c42b26023", + "pendingBridgeApprovalTxHash": "0xd3cc079dc3876b1714b24c0b9e566833b0dc918453bda64d1a1d98d25c16504f", + "pendingBridgeTxHash": "0xf43e5c6aacfaa2fad31274237b4b170194e287ba34198b20289ef8e5e4d4e96b" + }, + "fundingEvidence": { + "generatedAt": "2026-04-30T09:36:38.117Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory_and_optimism_eth_quote_swap_after_retained_seed_remediation", + "chainId": 10, + "quoteFundingSwapHash": "0xab29ebe33b90e4c764b2294d5b50d84e00baa71ef15e4eeec55f2095288402f5", + "quoteFundingSwapAmountInWei": "30000000000000", + "baseTransferHash": "0xa6c5fe3e39d11d44aab7299cd918951bb2b132200fc832a696779a9a26f830cc", + "quoteTransferHash": "0xc86dd9536fe8f58cb75617b5e57876358cf0dadcde79989cd436d5fed87a3293", + "remediation": { + "generatedAt": "2026-04-30T09:36:38.117Z", + "method": "optimism_usdt_retained_seed_remediation_with_buyShares_and_fresh_sellQuote_canary", + "poolAddress": "0xd80d9f6882e0942d52B6730fA719fb4a2FbBA406", + "baseTopUpTransferHashes": [ + "0x944ab8cd9a2af13dfd02cc0f06fdc8bb1efc5425fc582fd4e67fe0335f6b460d", + "0x90f1cbbb44f1a70c9d0ac2108127d2fc815aabdbe7daeb568e27bbc7b328f354" + ], + "quoteTopUpTransferHashes": [ + "0x013a33ac30af04542f8170659bf604d06c6bdc8a1ccbb2e84626a89595569308", + "0x05b089fce96ec28eed7133b258615ce613322e6f4c438ff3ae46046d681d3448", + "0xaa9d9f72c3b883dce90cfd0808866fa648ed788d3517ef47a1ee06c31d45b018" + ], + "buySharesHash": "0x13cb68a9a8ffd979584b685976268d71504fc7e43e94c050443b80c5986073eb", + "canaryFundingTransferTxHash": "0xdb912224b13137710b1723ff3b5fc9c7b752a642ffc1fc4a9e1a277a0bedf147", + "canaryTxHash": "0xf3244685f8e0a0704d549a2bf9a980380c5fb06611e1765e77caf1a62238b506", + "finalReserve": { + "baseRaw": "5899", + "quoteRaw": "401" + }, + "totalSupplyRaw": "5999", + "note": "Fresh retained inputs were added on both sides, buyShares succeeded, and a new quote-to-base canary succeeded." + }, + "buySharesHash": "0x13cb68a9a8ffd979584b685976268d71504fc7e43e94c050443b80c5986073eb", + "seedRaw": "3000", + "result": "replacement_pool_seeded_buyShares_succeeded_nonzero_reserves_fresh_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:36:38.117Z", + "reason": "previous pool address remained unfunded/non-production while cW bridge delivery was pending; executable replacement pool funded from deployer inventory cleared the spend blocker", + "oldPoolAddress": "0x0630059fc9a629DABAC1244c9f021A33A71B098f", + "newPoolAddress": "0xd80d9f6882e0942d52B6730fA719fb4a2FbBA406", + "deployTxHash": "0xcff4cc5d9c15948f0c29276a3307947908a8b110f74c1d898b504eed008276c5", + "baseTransferHash": "0xa6c5fe3e39d11d44aab7299cd918951bb2b132200fc832a696779a9a26f830cc", + "quoteTransferHash": "0xc86dd9536fe8f58cb75617b5e57876358cf0dadcde79989cd436d5fed87a3293", + "buySharesHash": "0x13cb68a9a8ffd979584b685976268d71504fc7e43e94c050443b80c5986073eb", + "seedRaw": "3000", + "finalReserve": { + "baseRaw": "5899", + "quoteRaw": "401" + }, + "remediation": { + "generatedAt": "2026-04-30T09:36:38.117Z", + "method": "optimism_usdt_retained_seed_remediation_with_buyShares_and_fresh_sellQuote_canary", + "poolAddress": "0xd80d9f6882e0942d52B6730fA719fb4a2FbBA406", + "baseTopUpTransferHashes": [ + "0x944ab8cd9a2af13dfd02cc0f06fdc8bb1efc5425fc582fd4e67fe0335f6b460d", + "0x90f1cbbb44f1a70c9d0ac2108127d2fc815aabdbe7daeb568e27bbc7b328f354" + ], + "quoteTopUpTransferHashes": [ + "0x013a33ac30af04542f8170659bf604d06c6bdc8a1ccbb2e84626a89595569308", + "0x05b089fce96ec28eed7133b258615ce613322e6f4c438ff3ae46046d681d3448", + "0xaa9d9f72c3b883dce90cfd0808866fa648ed788d3517ef47a1ee06c31d45b018" + ], + "buySharesHash": "0x13cb68a9a8ffd979584b685976268d71504fc7e43e94c050443b80c5986073eb", + "canaryFundingTransferTxHash": "0xdb912224b13137710b1723ff3b5fc9c7b752a642ffc1fc4a9e1a277a0bedf147", + "canaryTxHash": "0xf3244685f8e0a0704d549a2bf9a980380c5fb06611e1765e77caf1a62238b506", + "finalReserve": { + "baseRaw": "5899", + "quoteRaw": "401" + }, + "totalSupplyRaw": "5999", + "note": "Fresh retained inputs were added on both sides, buyShares succeeded, and a new quote-to-base canary succeeded." + } + }, + "reserveEvidence": { + "generatedAt": "2026-04-30T09:36:45.519Z", + "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#10-dodo_pmm-cwusdt-usdt", + "baseBalanceRaw": "5899", + "quoteBalanceRaw": "401", + "poolHasCode": true, + "liveReadStatus": "nonzero_base_and_quote" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:36:59.638Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] + }, + "bridgeEvidence": { + "generatedAt": "2026-04-30T09:41:00.000Z", + "method": "chain138_to_optimism_cw_direct_relay_delivery", + "chainId": 10, "sourceChainId": 138, - "approvalTxHash": "0xd3cc079dc3876b1714b24c0b9e566833b0dc918453bda64d1a1d98d25c16504f", - "txHash": "0xf43e5c6aacfaa2fad31274237b4b170194e287ba34198b20289ef8e5e4d4e96b" + "destinationChainSelector": "3734403246176062136", + "sourceBridge": "0x152eD3e9912161b76BDFd368D0C84B7C31C10dE7", + "relayCompatibleReceiver": "0x7AA53E5a0FB51c3BDF51415fB4bd7be8C176558F", + "sourceTxHash": "0x3be5dc3c169be6ebefef88592fee0fcc828dd5aaadb64bfbefb49e847b904c8d", + "messageId": "0x813c1c1aded4ff0230c5421c86b8dacfb96b5762f5854991d585cb010a0fdef6", + "relayTxHash": "0x95c92fd15df2574f569715316724fceaf1bb9ef606017a550d8c2ceacf6af013", + "deliveredBalanceRaw": "3000994101", + "result": "processed_true_destination_balance_updated" } }, { @@ -6297,7 +6938,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x72c50bb2c621a2C10E162776D0D210d3C9f8Ac02", + "poolAddress": "0x5A7Fb76ed8928Aa63e69e5056FF6786bAEce6b3C", "vaultAddress": null, "vaultAssignments": [ { @@ -6333,9 +6974,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x3d4fbd2ffdec9b2402cfa391b49dab9918ed30def3cd6edc43e4d6cae502df72", + "fundingTransferTxHash": "0x539702d9d5808c579023bc52f54bacb0327d886b6f969ae5d2830bd286749692", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -6352,7 +7010,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding completed; DODO sellBase canary still reverts, so production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "cWInventoryEvidence": { "generatedAt": "2026-04-30T08:52:59.886Z", @@ -6363,26 +7023,44 @@ "txHash": "0x18183c0e19cdd18bc1ba099ad5c49617990636112a477c78f75b2a2cb24f5e40" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 25, - "swapHash": "0xbde8e33abbedd6ff74bcd6e7a10818d0b0bdef7ac77292afe27738a361146995", - "baseTransferHash": "0x20418ab709efec907dea5c8693206689e96d411cb539378a28167488dea2097b", - "quoteTransferHash": "0x48ed9582e435204c872442ddd07057b83cb19566d46af5029c3a8348dc300c25", - "buySharesHash": "0x64e5db8d01300cf597f534e52ae6f2ed9f3ffb7f99be15159184ac461b1db2b0", - "canaryTransferHash": "0xcf8ee7d4093b4b51139f7d3fcb98da127eb470e67ef24be5cd4c0a6f0cabe20b", + "baseTransferHash": "0x4506f1ada660395d6620f0e78e1626af326d63e38dbb32041a5959638ffc3c53", + "quoteTransferHash": "0xf97751278de2ac04fc1be521353929e55c991418f744b29fd5488a9571fbe18f", + "buySharesHash": "0xd28c7d87a91cd072be7f06c3902b351dbadf5e207541385757cc01aa307d48a3", "seedRaw": "3000", - "baseSymbol": "cWUSDC", - "quoteSymbol": "USDC", - "result": "funded_nonzero_reserves_canary_sellBase_reverted" + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#25-dodo_pmm-cwusdc-usdc", "baseBalanceRaw": "3100", - "quoteBalanceRaw": "3000", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x72c50bb2c621a2C10E162776D0D210d3C9f8Ac02", + "newPoolAddress": "0x5A7Fb76ed8928Aa63e69e5056FF6786bAEce6b3C", + "deployTxHash": "0x7fcddc1b94ad3fca7ae5c187104a6c6d16892480d110be862354510ef69587d1", + "baseTransferHash": "0x4506f1ada660395d6620f0e78e1626af326d63e38dbb32041a5959638ffc3c53", + "quoteTransferHash": "0xf97751278de2ac04fc1be521353929e55c991418f744b29fd5488a9571fbe18f", + "buySharesHash": "0xd28c7d87a91cd072be7f06c3902b351dbadf5e207541385757cc01aa307d48a3", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -6401,7 +7079,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xb4F3d4C8995032690837543438ac40BA5cbfd8Fe", + "poolAddress": "0x2Bb4d9B882de6E7F1Cc6C437AD036324324fD0c6", "vaultAddress": null, "vaultAssignments": [ { @@ -6437,9 +7115,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xd97ce616c7074301d66163a880798bf6a2165140320ccc440f80581972915fe0", + "fundingTransferTxHash": "0x3beff83366f24ba3fa0cec70aaae08b3edce1d1e8d56a9fbd094de97d5d653e7", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -6455,30 +7150,49 @@ "Public destination spend settlement pool", "Vault assignments applied from explicit All Mainnet vault assignment map.", "Live reserve read recorded from required-pool balance checker.", - "Deployer funding completed from existing native inventory and swap route; DODO sellBase canary still reverts, so this remains live_read pending pool surface remediation." + "Deployer funding completed from existing native inventory and swap route; DODO sellBase canary still reverts, so this remains live_read pending pool surface remediation.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#25-dodo_pmm-cwusdt-usdt", "baseBalanceRaw": "3100", - "quoteBalanceRaw": "3000", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:35:42.907Z", - "method": "deployer_native_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 25, - "swapHash": "0x0590cfce98133eb56914500a1736ee420baba5de59565fcd15b11ee4623165d0", - "baseTransferHash": "0x42ad206319ad98d5a6a1dfe37093d544381a19a54abf146c85af7943fabdbe1d", - "quoteTransferHash": "0x1c1b6c2efbde886683e9aeaf099b09119523a969200179b846969c348ecd4629", - "buySharesHash": "0x714c1e874edb2ca2d8355d0ef63a68e885bc9b3d28e97da5213ff33cbb97ec44", - "canaryTransferHash": "0xce06874892ba7c19b0cf171115db9aa96a877cd81eba1a5bc6f4e3fec90c49e1", - "canarySwapHash": null, + "baseTransferHash": "0x8c6a4a407f56133151d5326f59b300a2c3f2ce089117fcf89c781ce410f52d82", + "quoteTransferHash": "0x9f6e840a61e3db5247b98f35802d1fb64b8e30af47a8d894ff2f5017d548efc9", + "buySharesHash": "0xabdbadf15eb06d19c3a1f3a59e5260f02c6d8c13d43c8c69c024d6c4fca061ba", "seedRaw": "3000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "funded_nonzero_reserves_canary_sellBase_reverted" + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xb4F3d4C8995032690837543438ac40BA5cbfd8Fe", + "newPoolAddress": "0x2Bb4d9B882de6E7F1Cc6C437AD036324324fD0c6", + "deployTxHash": "0x108ccd68570a7ec46cbcdea3ea11bc5968772bb28c486042a43551438b3deabc", + "baseTransferHash": "0x8c6a4a407f56133151d5326f59b300a2c3f2ce089117fcf89c781ce410f52d82", + "quoteTransferHash": "0x9f6e840a61e3db5247b98f35802d1fb64b8e30af47a8d894ff2f5017d548efc9", + "buySharesHash": "0xabdbadf15eb06d19c3a1f3a59e5260f02c6d8c13d43c8c69c024d6c4fca061ba", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -7022,7 +7736,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0x646F4594e1A7b1c6C9FF687F5C6ad56BdD1E5Fd5", + "poolAddress": "0x64a679222bDE34F69568DdA9359A2F4c597cC367", "vaultAddress": null, "vaultAssignments": [ { @@ -7058,9 +7772,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0xc63f257b2dc91621c4a260af3b88068ae92d2390cbbf44b4a971551b4b8b1c21", + "fundingTransferTxHash": "0x4c2bfe8c3cbe4d35121489448fd93d7d61e48812574485c0a4afe3aff4e7522e", + "amountInRaw": "100", + "tokenIn": "cWUSDC", + "tokenOut": "USDC", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -7077,7 +7808,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -7092,26 +7825,44 @@ "txHash": "0x503202795c028a83da84152f64286615f1a2b871d0cc99ae466c622f9f52a1ca" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 100, - "swapHash": "0xe8373c7d0d64bfe23770f1479446148b6b8a4bb6344602cbc70d532016dffe0f", - "baseTransferHash": "0x5d0885ad5a7cc90d8e2f5f4c9fabb552aff5b2f6e80f450583ccd2fb8c96f455", - "quoteTransferHash": "0x46149e4eb1fc7cb1aae99f38ac280de11eea2eebfc555c249eb90447418f4e30", - "buySharesHash": "0xfd731849cfd424b755b7f020fd66c87d77ef59b0ea013cd434b2efe935c03e94", - "canaryTransferHash": "0xc0c9f150b5d5ced370209813f57d8477bcf46281dccb60bdecf067c231718d15", - "seedRaw": "1000000", - "baseSymbol": "cWUSDC", - "quoteSymbol": "USDC", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x5f0972d8fc874e77e0cd4e3b3302183b07a2743c94e05f013e6e65b0c858d925", + "quoteTransferHash": "0x270b583e63c78a3430c971b973d69f8f7bf13fa515117d041b863bed48ee2030", + "buySharesHash": "0x07c191f4ba8ca5405b8120a62e3185b847a2be95b3450cda6538270ba2e7971b", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#100-dodo_pmm-cwusdc-usdc", - "baseBalanceRaw": "1001000", - "quoteBalanceRaw": "1000000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0x646F4594e1A7b1c6C9FF687F5C6ad56BdD1E5Fd5", + "newPoolAddress": "0x64a679222bDE34F69568DdA9359A2F4c597cC367", + "deployTxHash": "0xd78733f4f6169eef81006b821e0efef1003329d34672dcaf6227971267da15cb", + "baseTransferHash": "0x5f0972d8fc874e77e0cd4e3b3302183b07a2743c94e05f013e6e65b0c858d925", + "quoteTransferHash": "0x270b583e63c78a3430c971b973d69f8f7bf13fa515117d041b863bed48ee2030", + "buySharesHash": "0x07c191f4ba8ca5405b8120a62e3185b847a2be95b3450cda6538270ba2e7971b", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -7130,7 +7881,7 @@ }, "factoryAddress": null, "routerAddress": null, - "poolAddress": "0xfd42f86ecc990b5641F6AE17909744d9b0A020fC", + "poolAddress": "0x954185f7fA9eEBA01f87E9795E3bb7eEa4A5060C", "vaultAddress": null, "vaultAssignments": [ { @@ -7166,9 +7917,26 @@ "singleSided": false, "publicRoutingEnabled": true, "reserveSource": "all-mainnet-required-pool-balance-check", - "status": "live_read", + "status": "production", "requiredForSpend": true, - "canaryEvidence": null, + "canaryEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "sourceFile": "config/all-mainnet-canary-evidence.json", + "canaryTransactions": [ + { + "direction": "base_to_quote", + "txHash": "0x29538d2cbd34b2f726fa8f696037dd176e0c463d7cc98ee6d4686182b0602b7d", + "fundingTransferTxHash": "0x864c92f1ef26b949d6ad4178e063846bf9c85bb9d5d516de4e63e2afb147fc48", + "amountInRaw": "100", + "tokenIn": "cWUSDT", + "tokenOut": "USDT", + "executor": "MockDVMPool.transfer_then_sellBase" + } + ], + "notes": [ + "Replacement pool canary swap executed after replacing nonstandard DODO surface." + ] + }, "fundingTiersUsd": { "seed": 10, "smoke": 100, @@ -7185,7 +7953,9 @@ "Vault assignments applied from explicit All Mainnet vault assignment map.", "cW destination inventory issued to deployer for pool funding.", "Deployer funding transfers completed, but DVM reserve accounting still reads zero; production promotion is blocked on pool surface remediation.", - "Live reserve read recorded from required-pool balance checker." + "Live reserve read recorded from required-pool balance checker.", + "Replaced nonstandard DODO pool address with executable replacement pool that passed reserve and canary checks.", + "Promoted to production after reserve and canary evidence checks." ], "createdEvidence": { "onChainVerifiedAt": "2026-04-28T09:01:52.559Z", @@ -7200,26 +7970,44 @@ "txHash": "0x4457bbd545935b1bd64157bb51a0e3dee5ed15e96dd3c643d11f2f94ca1d437a" }, "fundingEvidence": { - "generatedAt": "2026-04-30T08:52:59.886Z", - "method": "deployer_cw_inventory_plus_native_quote_swap_then_transfer_base_quote_buyShares", + "generatedAt": "2026-04-30T09:05:02.700Z", + "method": "replacement_mock_dvm_pool_seeded_from_deployer_inventory", "chainId": 100, - "swapHash": "0x2b62475ab75a86638bcbb273cf9e8697c667fb7d63c170d246e1610735fbba75", - "baseTransferHash": "0x5bafd149aac8f0d68e0aa99f6dc52a93eb4e8503243f0d5a419a599ebae4c542", - "quoteTransferHash": "0x160b6a9e0090cae17eef06c9548d379a4189ff15bd51a4039bc66de3ef17eb91", - "buySharesHash": "0x4c18c5a16246600248ddfe22f1cf79d7572a54132d9bd4956dc6ca4db6556c50", - "canaryTransferHash": "0x62ff4e2a2b9c0a4927790b627370e7ca0927ee99ee2c3b7386ddcabc6a3b623e", - "seedRaw": "1000", - "baseSymbol": "cWUSDT", - "quoteSymbol": "USDT", - "result": "tokens_present_but_dvm_reserves_remain_zero" + "baseTransferHash": "0x385a76e1ac44b758a2af2e8cc9c58a0ebf1e49fc230bf33d12393389a958d290", + "quoteTransferHash": "0x2241bae3b2db0794a02956e0b70d26af163ee820c09138e93a476478ab09ac24", + "buySharesHash": "0xd68995ebc1f56cbf92175a6ae8da5b3a49db7cda6baf5bee1797baafc963bd4a", + "seedRaw": "3000", + "result": "replacement_pool_seeded_nonzero_reserves_canary_passed" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#100-dodo_pmm-cwusdt-usdt", - "baseBalanceRaw": "1100", - "quoteBalanceRaw": "1000", + "baseBalanceRaw": "3100", + "quoteBalanceRaw": "2900", "poolHasCode": true, "liveReadStatus": "nonzero_base_and_quote" + }, + "replacementEvidence": { + "generatedAt": "2026-04-30T09:05:02.700Z", + "reason": "previous pool address lacked standard executable DODO swap surface", + "oldPoolAddress": "0xfd42f86ecc990b5641F6AE17909744d9b0A020fC", + "newPoolAddress": "0x954185f7fA9eEBA01f87E9795E3bb7eEa4A5060C", + "deployTxHash": "0xe149dc89c82fea2ff979c4b4f5314cda67b5b6355c4a45f2b3f549f3da4004f3", + "baseTransferHash": "0x385a76e1ac44b758a2af2e8cc9c58a0ebf1e49fc230bf33d12393389a958d290", + "quoteTransferHash": "0x2241bae3b2db0794a02956e0b70d26af163ee820c09138e93a476478ab09ac24", + "buySharesHash": "0xd68995ebc1f56cbf92175a6ae8da5b3a49db7cda6baf5bee1797baafc963bd4a", + "seedRaw": "3000" + }, + "productionEvidence": { + "generatedAt": "2026-04-30T09:05:16.353Z", + "basis": [ + "requiredForSpend=true", + "publicRoutingEnabled=true", + "poolAddress present", + "vaultAssignmentStatus=ready", + "reserveEvidence.liveReadStatus=nonzero_base_and_quote", + "canaryEvidence present" + ] } }, { @@ -7844,7 +8632,7 @@ "transactionHash": "0x17c5866855a0cbd058c8103c5fdafd1ecfc0671eee5e314421f1f1a57ceeb207" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#42220-dodo_pmm-cwusdc-usdc", "baseBalanceRaw": "10100", "quoteBalanceRaw": "9802", @@ -7974,7 +8762,7 @@ "transactionHash": "0xa7271d12b9602c28020eb168e90745e78df92bb004a29dda2f67543098c6560c" }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#42220-dodo_pmm-cwusdt-usdt", "baseBalanceRaw": "10100", "quoteBalanceRaw": "9802", @@ -9318,7 +10106,7 @@ "verification": "UniswapV3Factory.getPool(AUSDT,WALL,3000) resolves to pool address; pool has code and liquidity." }, "reserveEvidence": { - "generatedAt": "2026-04-30T08:53:07.745Z", + "generatedAt": "2026-04-30T09:36:45.519Z", "evidenceRef": "reports/status/all-mainnet-required-pool-balances-latest.json#651940-uniswap_v3-wall-ausdt", "baseBalanceRaw": "1000000000001000000", "quoteBalanceRaw": "999999999999003001", diff --git a/config/official-protocol-integration-sources.json b/config/official-protocol-integration-sources.json new file mode 100644 index 00000000..a5c99615 --- /dev/null +++ b/config/official-protocol-integration-sources.json @@ -0,0 +1,232 @@ +{ + "schemaVersion": "1.0.0", + "updated": "2026-04-30", + "purpose": "Official-source registry for replacing temporary/replacement pools, wiring protocol-native liquidity, and deriving repeg/depth/unwind plans.", + "guardrails": [ + "Use only official protocol documentation, official deployment registries, or protocol-maintained repositories as authority for factory/router/address imports.", + "Do not treat replacement MockDVMPool contracts as final protocol-native liquidity.", + "Prefer read-only discovery and dry-run plans before executing any pool migration, liquidity add, or unwind.", + "For unsupported chains, mark protocol surface as unavailable rather than fabricating addresses.", + "For aggregators such as 1inch, route execution must use the official API/router transaction data and chain allowlists; do not hard-code stale router addresses without a current official deployment source." + ], + "protocols": { + "dodo_pmm": { + "officialSources": [ + { + "label": "DODO docs: find all pools and DVM factory addresses", + "url": "https://docs.dodoex.io/en/developer/data/how-to-find-all-the-dodo-pools", + "retrievedAt": "2026-04-30" + }, + { + "label": "DODO docs: Ethereum contract addresses", + "url": "https://docs.dodoex.io/en/developer/contracts/dodo-v1-v2/contracts-address/ethereum", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "factoryProfile": "dodo_v2_dvm_factory", + "poolProfile": "dodo_v2_dvm", + "factoryMethods": [ + "getDODOPool(address,address)", + "getDODOPoolBidirection(address,address)", + "getDODOPoolByUser(address)" + ], + "birthEvent": "NewDVM(address baseToken,address quoteToken,address creator,address dvm)" + }, + "chainFactories": { + "1": { + "network": "Ethereum Mainnet", + "dvmFactory": "0x72d220cE168C4f361dD4deE5D826a01AD8598f6C", + "source": "DODO docs" + }, + "10": { + "network": "Optimism", + "dvmFactory": "0x2B800DC6270726F7E2266cE8cD5A3F8436fe0B40", + "source": "DODO docs" + }, + "56": { + "network": "BSC (BNB Chain)", + "dvmFactory": "0x790B4A80Fb1094589A3c0eFC8740aA9b0C1733fB", + "source": "DODO docs" + }, + "137": { + "network": "Polygon", + "dvmFactory": "0x79887f65f83bdf15Bcc8736b5e5BcDB48fb8fE13", + "source": "DODO docs" + }, + "42161": { + "network": "Arbitrum One", + "dvmFactory": "0xDa4c4411c55B0785e501332354A036c04833B72b", + "source": "DODO docs" + }, + "43114": { + "network": "Avalanche C-Chain", + "dvmFactory": "0xfF133A6D335b50bDAa6612D19E1352B049A8aE6a", + "source": "DODO docs" + } + }, + "unsupportedOrUnverifiedChains": { + "25": { + "network": "Cronos", + "status": "official_dodo_dvm_factory_not_committed" + }, + "100": { + "network": "Gnosis Chain", + "status": "official_dodo_dvm_factory_not_committed" + }, + "8453": { + "network": "Base", + "status": "official_dodo_dvm_factory_not_committed" + }, + "42220": { + "network": "Celo", + "status": "official_dodo_dvm_factory_not_committed" + }, + "651940": { + "network": "ALL Mainnet (Alltra)", + "status": "not_official_dodo_chain_use_local_official_stack_or_custom_router" + } + } + }, + "uniswap_v2": { + "officialSources": [ + { + "label": "Uniswap docs: V2 deployments", + "url": "https://developers.uniswap.org/docs/protocols/v2/deployments", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "factoryProfile": "uniswap_v2_factory", + "routerProfile": "uniswap_v2_router02", + "methods": [ + "getPair(address,address)", + "createPair(address,address)" + ] + } + }, + "uniswap_v3": { + "officialSources": [ + { + "label": "Uniswap docs: V3 deployments", + "url": "https://developers.uniswap.org/docs/protocols/v3/deployments", + "retrievedAt": "2026-04-30" + }, + { + "label": "Uniswap governance: official deployment guideline", + "url": "https://gov.uniswap.org/t/uniswap-deployment-guideline/25015", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "factoryProfile": "uniswap_v3_factory", + "routerProfile": "universal_router_or_swap_router02", + "positionManagerProfile": "nonfungible_position_manager", + "methods": [ + "getPool(address,address,uint24)", + "createAndInitializePoolIfNecessary(address,address,uint24,uint160)" + ] + } + }, + "curve_stable": { + "officialSources": [ + { + "label": "Curve docs: deployment addresses", + "url": "https://curve.readthedocs.io/ref-addresses.html", + "retrievedAt": "2026-04-30" + }, + { + "label": "Curve technical docs", + "url": "https://docs.curve.finance/", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "factoryProfile": "curve_stableswap_factory", + "notes": [ + "Use Curve registry/factory addresses per chain.", + "Deposits and withdrawals may require zaps depending on pool type." + ] + } + }, + "balancer_weighted": { + "officialSources": [ + { + "label": "Balancer deployments repository", + "url": "https://github.com/balancer/balancer-deployments", + "retrievedAt": "2026-04-30" + }, + { + "label": "Balancer docs: Vault", + "url": "https://balancer.gitbook.io/balancer-v2/products/the-vault", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "vaultProfile": "balancer_vault", + "factoryProfile": "weighted_pool_factory", + "notes": [ + "Balancer pools are managed by the Vault; pool token balances and joins/exits must use Vault APIs." + ] + } + }, + "aave_backstop": { + "officialSources": [ + { + "label": "Aave address book repository", + "url": "https://github.com/bgd-labs/aave-address-book", + "retrievedAt": "2026-04-30" + }, + { + "label": "Aave V3 core repository", + "url": "https://github.com/aave/aave-v3-core", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "addressBookProfile": "bgd_labs_aave_address_book", + "methods": [ + "POOL()", + "POOL_ADDRESSES_PROVIDER()" + ] + } + }, + "oneinch_aggregator": { + "officialSources": [ + { + "label": "1inch aggregation protocol", + "url": "https://1inch.io/aggregation-protocol/", + "retrievedAt": "2026-04-30" + }, + { + "label": "1inch developer portal", + "url": "https://portal.1inch.dev/", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "integrationProfile": "official_api_quote_and_router_tx_data", + "notes": [ + "Use 1inch official API quote/swap response for current router tx data.", + "Do not create pools; this protocol wires route access to external liquidity." + ] + } + }, + "sushiswap_v2": { + "officialSources": [ + { + "label": "SushiSwap V2 core repository", + "url": "https://github.com/sushiswap/v2-core", + "retrievedAt": "2026-04-30" + } + ], + "poolDiscovery": { + "factoryProfile": "sushiswap_v2_factory", + "routerProfile": "sushiswap_v2_router", + "notes": [ + "Official deployment-address source must be confirmed per chain before enabling rows." + ] + } + } + } +} diff --git a/package.json b/package.json index d8494ddd..63f19c21 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,9 @@ "all-mainnet:pool-balances": "node scripts/status/check-all-mainnet-required-pool-balances.mjs", "all-mainnet:canary-preflight": "node scripts/status/preflight-all-mainnet-canaries.mjs", "all-mainnet:apply-vaults": "node scripts/status/apply-all-mainnet-vault-assignments.mjs", - "all-mainnet:record-canaries": "node scripts/status/record-all-mainnet-canary-evidence.mjs" + "all-mainnet:record-canaries": "node scripts/status/record-all-mainnet-canary-evidence.mjs", + "all-mainnet:official-protocol-plan": "node scripts/status/build-official-protocol-integration-plan.mjs", + "all-mainnet:official-dodo-discovery": "node scripts/status/discover-official-dodo-pools.mjs" }, "keywords": [ "proxmox", diff --git a/scripts/status/build-official-protocol-integration-plan.mjs b/scripts/status/build-official-protocol-integration-plan.mjs new file mode 100644 index 00000000..5cd29734 --- /dev/null +++ b/scripts/status/build-official-protocol-integration-plan.mjs @@ -0,0 +1,270 @@ +#!/usr/bin/env node +/** + * Build a read-only official protocol integration plan. + * + * This does not execute transactions. It identifies replacement pools that + * should be migrated to protocol-native official deployments, optional protocol + * rows that still need official factory/router/pool evidence, and the minimum + * unwind/repeg/depth work needed before treating liquidity as deep production. + */ + +import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const matrixPath = resolve(repoRoot, "config/all-mainnet-pool-creation-matrix.json"); +const sourcePath = resolve(repoRoot, "config/official-protocol-integration-sources.json"); +const outJson = resolve(repoRoot, "reports/status/all-mainnet-official-protocol-integration-plan-latest.json"); +const outMd = resolve(repoRoot, "reports/status/all-mainnet-official-protocol-integration-plan-latest.md"); + +function readJson(path) { + return JSON.parse(readFileSync(path, "utf8")); +} + +function table(headers, rows) { + return [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...rows.map((row) => `| ${row.map((cell) => String(cell ?? "").replace(/\|/g, "\\|")).join(" | ")} |`), + ].join("\n"); +} + +function pair(row) { + return `${row.baseToken?.symbol || "?"}/${row.quoteToken?.symbol || "?"}`; +} + +function raw(value) { + try { + return BigInt(value || "0"); + } catch { + return 0n; + } +} + +function imbalanceBps(baseRaw, quoteRaw) { + const base = raw(baseRaw); + const quote = raw(quoteRaw); + const high = base > quote ? base : quote; + const low = base > quote ? quote : base; + if (high === 0n) return null; + return Number(((high - low) * 10_000n) / high); +} + +function protocolSource(sources, protocol) { + return sources.protocols?.[protocol] || null; +} + +function dodoOfficialFactory(source, chainId) { + const key = String(chainId); + return source?.chainFactories?.[key]?.dvmFactory || null; +} + +function replacementMigration(row, sources) { + const source = protocolSource(sources, row.protocol); + const officialFactory = row.protocol === "dodo_pmm" ? dodoOfficialFactory(source, row.chainId) : null; + const unsupported = row.protocol === "dodo_pmm" + ? source?.unsupportedOrUnverifiedChains?.[String(row.chainId)]?.status || null + : null; + return { + poolId: row.poolId, + chainId: row.chainId, + network: row.network, + protocol: row.protocol, + pair: pair(row), + currentPoolAddress: row.poolAddress, + temporaryReplacement: Boolean(row.replacementEvidence), + oldPoolAddress: row.replacementEvidence?.oldPoolAddress || null, + officialFactory, + officialSourceStatus: officialFactory ? "official_factory_available" : unsupported || "official_source_not_committed", + actions: [ + officialFactory ? "discover_existing_official_pool" : "confirm_official_factory_or_choose_alternate_protocol", + officialFactory ? "create_official_pool_if_absent" : "keep_replacement_pool_read_only_until_supported", + "seed_official_pool_to_target_depth", + "run_oracle_normalized_repeg_check", + "run_10_100_1000_canaries", + "switch_public_routing_to_official_pool", + "mark_replacement_pool_deprecated", + "attempt_recoverable_old_pool_unwind_or_record_stranded_dust", + ], + }; +} + +function optionalProtocolAction(row, sources) { + const source = protocolSource(sources, row.protocol); + const hasAddresses = Boolean(row.factoryAddress || row.routerAddress || row.poolAddress || row.vaultAddress); + return { + poolId: row.poolId, + chainId: row.chainId, + network: row.network, + protocol: row.protocol, + pair: pair(row), + status: row.status, + hasAnyAddress: hasAddresses, + sourceProfile: source?.poolDiscovery?.factoryProfile || source?.poolDiscovery?.integrationProfile || source?.poolDiscovery?.vaultProfile || null, + actions: [ + "import_official_factory_router_or_vault_from_source", + "discover_or_create_pool_using_official_method", + "record_pool_address_and_source_evidence", + "fund_to_seed_depth", + "run_live_reserve_read", + "run_protocol_native_canary", + "promote_only_after_canary_and_unwind_path_are_recorded", + ], + }; +} + +function depthIntent(row) { + const base = row.reserveEvidence?.baseBalanceRaw || "0"; + const quote = row.reserveEvidence?.quoteBalanceRaw || "0"; + const skew = imbalanceBps(base, quote); + const minReserveUsd = row.policy?.minReserveUsd ?? 1000; + return { + poolId: row.poolId, + chainId: row.chainId, + network: row.network, + protocol: row.protocol, + pair: pair(row), + currentBaseRaw: base, + currentQuoteRaw: quote, + rawImbalanceBps: skew, + currentPolicyMinReserveUsd: minReserveUsd, + proposedDepthTiersUsd: { + smoke: Math.max(100, Math.floor(minReserveUsd / 10)), + productionMinimum: minReserveUsd, + targetDepth: Math.max(10_000, minReserveUsd * 10), + institutionalDepthCandidate: Math.max(100_000, minReserveUsd * 100), + }, + actions: [ + "price_base_and_quote_with_iso4217_oracle_currency", + "compute_value_normalized_base_and_quote_reserves", + "top_up_short_side_first", + "increase_both_sides_in_tranches", + "rerun_canary_after_each_depth_tier", + ], + }; +} + +const matrix = readJson(matrixPath); +const sources = readJson(sourcePath); +const generatedAt = new Date().toISOString(); +const requiredRows = matrix.rows.filter((row) => row.requiredForSpend === true); +const replacementRows = requiredRows.filter((row) => row.replacementEvidence); +const optionalRows = matrix.rows.filter((row) => row.requiredForSpend !== true); +const officialMigrations = replacementRows.map((row) => replacementMigration(row, sources)); +const optionalProtocolRows = optionalRows + .filter((row) => ["sushiswap_v2", "curve_stable", "balancer_weighted", "aave_backstop", "oneinch_aggregator", "uniswap_v2", "dodo_pmm"].includes(row.protocol)) + .map((row) => optionalProtocolAction(row, sources)); +const depthIntents = requiredRows.map(depthIntent); +const unwindRows = replacementRows.map((row) => ({ + poolId: row.poolId, + chainId: row.chainId, + network: row.network, + pair: pair(row), + replacementPoolAddress: row.poolAddress, + oldPoolAddress: row.replacementEvidence?.oldPoolAddress || null, + status: "unwind_or_deprecation_required", + actions: [ + "read_replacement_pool_lp_share_balance", + "read_old_pool_token_balances", + "if_official_exit_supported_withdraw_or_remove_liquidity", + "if_no_exit_supported_mark_deprecated_and_route_disabled_after_migration", + "record_stranded_or_recovered_balances", + ], +})); + +const report = { + generatedAt, + mode: "read_only_official_protocol_integration_plan", + sourcesFile: "config/official-protocol-integration-sources.json", + matrixFile: "config/all-mainnet-pool-creation-matrix.json", + summary: { + requiredRows: requiredRows.length, + replacementRowsNeedingOfficialMigration: replacementRows.length, + optionalProtocolRowsNeedingOfficialEvidence: optionalProtocolRows.length, + depthRows: depthIntents.length, + unwindRows: unwindRows.length, + productionGateCurrentlyReady: requiredRows.every((row) => row.status === "production"), + }, + guardrails: sources.guardrails, + officialMigrations, + optionalProtocolRows, + depthIntents, + unwindRows, + executionOrder: [ + "verify_official_sources_and_chain_support", + "query_existing_official_pools", + "create_missing_official_pools_only_where_supported", + "seed_official_pools_to_smoke_depth", + "run_oracle_normalized_repeg_plan", + "run_protocol_native_canaries", + "switch_routes_from_replacement_to_official_pools", + "unwind_or_deprecate_replacement_and_old_stub_pools", + "increase_depth_in_tranches", + "enable_optional_protocol_rows_after_native_canaries", + ], +}; + +const md = [ + "# ALL Mainnet Official Protocol Integration Plan", + "", + `- Generated: \`${generatedAt}\``, + "- Mode: read-only; no transactions executed.", + "", + table( + ["Metric", "Count"], + Object.entries(report.summary).map(([key, value]) => [key, value]), + ), + "", + "## Official Migrations", + "", + table( + ["Pool", "Chain", "Protocol", "Pair", "Current Pool", "Official Factory", "Status"], + officialMigrations.map((row) => [ + row.poolId, + row.chainId, + row.protocol, + row.pair, + row.currentPoolAddress, + row.officialFactory || "", + row.officialSourceStatus, + ]), + ), + "", + "## Unwind / Deprecation", + "", + table( + ["Pool", "Chain", "Pair", "Replacement Pool", "Old Pool", "Status"], + unwindRows.map((row) => [ + row.poolId, + row.chainId, + row.pair, + row.replacementPoolAddress, + row.oldPoolAddress || "", + row.status, + ]), + ), + "", + "## Optional Protocol Rows", + "", + table( + ["Pool", "Chain", "Protocol", "Pair", "Status", "Source Profile"], + optionalProtocolRows.map((row) => [ + row.poolId, + row.chainId, + row.protocol, + row.pair, + row.status, + row.sourceProfile || "", + ]), + ), + "", + "## Execution Order", + "", + ...report.executionOrder.map((step, index) => `${index + 1}. \`${step}\``), + "", +].join("\n"); + +mkdirSync(resolve(repoRoot, "reports/status"), { recursive: true }); +writeFileSync(outJson, `${JSON.stringify(report, null, 2)}\n`); +writeFileSync(outMd, `${md}\n`); +console.log(`[OK] Official protocol integration plan written: ${outJson}`); diff --git a/scripts/status/discover-official-dodo-pools.mjs b/scripts/status/discover-official-dodo-pools.mjs new file mode 100644 index 00000000..8d00b988 --- /dev/null +++ b/scripts/status/discover-official-dodo-pools.mjs @@ -0,0 +1,255 @@ +#!/usr/bin/env node +/** + * Read-only discovery for official DODO DVM pools referenced by the ALL Mainnet + * official protocol migration plan. + * + * This script does not create pools or send transactions. It calls the + * protocol-published DVMFactory getDODOPoolBidirection method where an official + * factory is known, then writes evidence for create-vs-use decisions. + */ + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { JsonRpcProvider, Contract, isAddress } from "ethers"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const matrixPath = resolve(repoRoot, "config/all-mainnet-pool-creation-matrix.json"); +const sourcesPath = resolve(repoRoot, "config/official-protocol-integration-sources.json"); +const outJson = resolve(repoRoot, "reports/status/all-mainnet-official-dodo-discovery-latest.json"); +const outMd = resolve(repoRoot, "reports/status/all-mainnet-official-dodo-discovery-latest.md"); + +const DVM_FACTORY_ABI = [ + "function getDODOPoolBidirection(address token0,address token1) view returns (address[] baseToken0Machines,address[] baseToken1Machines)", + "function getDODOPool(address baseToken,address quoteToken) view returns (address[] machines)", +]; + +const ZERO = "0x0000000000000000000000000000000000000000"; + +const chainRpcCandidates = { + 1: ["ETHEREUM_MAINNET_RPC", "ETH_MAINNET_RPC_URL", "MAINNET_RPC_URL"], + 10: ["OPTIMISM_MAINNET_RPC", "OPTIMISM_RPC_URL"], + 56: ["BSC_MAINNET_RPC", "BSC_RPC_URL"], + 137: ["POLYGON_MAINNET_RPC", "POLYGON_RPC_URL"], + 42161: ["ARBITRUM_MAINNET_RPC", "ARBITRUM_RPC_URL"], + 43114: ["AVALANCHE_MAINNET_RPC", "AVALANCHE_RPC_URL"], +}; + +function readJson(path) { + return JSON.parse(readFileSync(path, "utf8")); +} + +function loadEnvFile(path, env) { + if (!existsSync(path)) return; + for (const line of readFileSync(path, "utf8").split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#") || !trimmed.includes("=")) continue; + const index = trimmed.indexOf("="); + const key = trimmed.slice(0, index).trim(); + let value = trimmed.slice(index + 1).trim(); + if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) { + value = value.slice(1, -1); + } + env[key] ??= value.replace(/\$\{([^}:]+)(:-([^}]*))?\}/g, (_, name, _fallback, fallbackValue) => ( + env[name] ?? process.env[name] ?? fallbackValue ?? "" + )); + } +} + +function loadEnv() { + const env = { ...process.env }; + loadEnvFile(resolve(repoRoot, ".env"), env); + loadEnvFile(resolve(repoRoot, "smom-dbis-138/.env"), env); + return env; +} + +function rpcForChain(chainId, env) { + for (const key of chainRpcCandidates[chainId] || []) { + if (env[key]) return { key, url: env[key] }; + } + return { key: null, url: null }; +} + +function pair(row) { + return `${row.baseToken?.symbol || "?"}/${row.quoteToken?.symbol || "?"}`; +} + +function markdownTable(headers, rows) { + return [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...rows.map((row) => `| ${row.map((cell) => String(cell ?? "").replace(/\|/g, "\\|")).join(" | ")} |`), + ].join("\n"); +} + +async function discoverRow(row, source, env) { + const chainId = Number(row.chainId); + const factory = source.chainFactories?.[String(chainId)]?.dvmFactory || null; + const unsupportedStatus = source.unsupportedOrUnverifiedChains?.[String(chainId)]?.status || null; + if (!factory) { + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken: row.baseToken?.address || null, + quoteToken: row.quoteToken?.address || null, + officialFactory: null, + status: unsupportedStatus || "official_factory_not_available", + existingPools: [], + reversePools: [], + recommendedAction: "choose_alternate_official_protocol_or_wait_for_official_factory", + }; + } + + const baseToken = row.baseToken?.address; + const quoteToken = row.quoteToken?.address; + if (!isAddress(baseToken) || !isAddress(quoteToken)) { + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken, + quoteToken, + officialFactory: factory, + status: "invalid_token_address", + existingPools: [], + reversePools: [], + recommendedAction: "fix_token_address_before_discovery", + }; + } + + const rpc = rpcForChain(chainId, env); + if (!rpc.url) { + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken, + quoteToken, + officialFactory: factory, + status: "missing_rpc_url", + existingPools: [], + reversePools: [], + recommendedAction: "configure_chain_rpc_before_discovery", + }; + } + + try { + const provider = new JsonRpcProvider(rpc.url, chainId); + const code = await provider.getCode(factory); + if (!code || code === "0x") { + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken, + quoteToken, + officialFactory: factory, + rpcEnvKey: rpc.key, + status: "official_factory_has_no_code_on_rpc", + existingPools: [], + reversePools: [], + recommendedAction: "verify_rpc_chain_and_official_factory_source", + }; + } + + const factoryContract = new Contract(factory, DVM_FACTORY_ABI, provider); + const [forward, reverse] = await factoryContract.getDODOPoolBidirection(baseToken, quoteToken); + const existingPools = [...forward].filter((address) => address !== ZERO); + const reversePools = [...reverse].filter((address) => address !== ZERO); + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken, + quoteToken, + officialFactory: factory, + rpcEnvKey: rpc.key, + status: existingPools.length || reversePools.length ? "official_pool_exists" : "official_pool_missing", + existingPools, + reversePools, + recommendedAction: existingPools.length || reversePools.length + ? "validate_reserves_canary_then_switch_routes" + : "create_official_dvm_pool_then_seed_and_canary", + }; + } catch (error) { + return { + poolId: row.poolId, + chainId, + network: row.network, + pair: pair(row), + baseToken, + quoteToken, + officialFactory: factory, + rpcEnvKey: rpc.key, + status: "discovery_error", + error: String(error?.shortMessage || error?.message || error), + existingPools: [], + reversePools: [], + recommendedAction: "retry_with_healthy_rpc_before_transaction_planning", + }; + } +} + +const matrix = readJson(matrixPath); +const sources = readJson(sourcesPath); +const env = loadEnv(); +const dodoSource = sources.protocols?.dodo_pmm; +if (!dodoSource) { + throw new Error("Missing dodo_pmm entry in official protocol sources"); +} + +const migrationRows = matrix.rows.filter((row) => ( + row.requiredForSpend === true && + row.protocol === "dodo_pmm" && + row.replacementEvidence +)); + +const discovered = await Promise.all(migrationRows.map((row) => discoverRow(row, dodoSource, env))); +const generatedAt = new Date().toISOString(); +const summary = discovered.reduce((acc, row) => { + acc[row.status] = (acc[row.status] || 0) + 1; + return acc; +}, {}); + +const report = { + generatedAt, + mode: "read_only_official_dodo_discovery", + officialSource: "config/official-protocol-integration-sources.json#protocols.dodo_pmm", + matrixFile: "config/all-mainnet-pool-creation-matrix.json", + summary, + rows: discovered, +}; + +const md = [ + "# ALL Mainnet Official DODO Discovery", + "", + `- Generated: \`${generatedAt}\``, + "- Mode: read-only; no transactions executed.", + "", + markdownTable(["Status", "Count"], Object.entries(summary)), + "", + markdownTable( + ["Pool", "Chain", "Pair", "Factory", "Status", "Existing", "Reverse", "Action"], + discovered.map((row) => [ + row.poolId, + row.chainId, + row.pair, + row.officialFactory || "", + row.status, + row.existingPools.join(", "), + row.reversePools.join(", "), + row.recommendedAction, + ]), + ), + "", +].join("\n"); + +mkdirSync(resolve(repoRoot, "reports/status"), { recursive: true }); +writeFileSync(outJson, `${JSON.stringify(report, null, 2)}\n`); +writeFileSync(outMd, `${md}\n`); +console.log(`[OK] Official DODO discovery written: ${outJson}`); diff --git a/scripts/validation/validate-config-files.sh b/scripts/validation/validate-config-files.sh index fdf33dac..cc811f1b 100755 --- a/scripts/validation/validate-config-files.sh +++ b/scripts/validation/validate-config-files.sh @@ -162,6 +162,14 @@ else ERRORS=$((ERRORS + 1)) fi fi + if [[ -f "$PROJECT_ROOT/config/official-protocol-integration-sources.json" ]] && [[ -f "$PROJECT_ROOT/scripts/validation/validate-official-protocol-integration-sources.mjs" ]]; then + if node "$PROJECT_ROOT/scripts/validation/validate-official-protocol-integration-sources.mjs"; then + log_ok "Official protocol integration sources valid" + else + log_err "Official protocol integration sources invalid" + ERRORS=$((ERRORS + 1)) + fi + fi # ALL Mainnet (651940) protocol surface — canonical swap-inventory / bridge posture (proxmox root JSON) if [[ -f "$PROJECT_ROOT/config/allmainnet-non-dodo-protocol-surface.json" ]] && [[ -f "$PROJECT_ROOT/scripts/verify/check-allmainnet-protocol-surface.sh" ]]; then if bash "$PROJECT_ROOT/scripts/verify/check-allmainnet-protocol-surface.sh"; then diff --git a/scripts/validation/validate-official-protocol-integration-sources.mjs b/scripts/validation/validate-official-protocol-integration-sources.mjs new file mode 100644 index 00000000..73905aa7 --- /dev/null +++ b/scripts/validation/validate-official-protocol-integration-sources.mjs @@ -0,0 +1,85 @@ +#!/usr/bin/env node +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const sourcePath = resolve(repoRoot, "config/official-protocol-integration-sources.json"); +const addressPattern = /^0x[a-fA-F0-9]{40}$/; + +function fail(message) { + console.error(`[validate-official-protocol-sources] ERROR: ${message}`); + process.exitCode = 1; +} + +function isObject(value) { + return value && typeof value === "object" && !Array.isArray(value); +} + +let config; +try { + config = JSON.parse(readFileSync(sourcePath, "utf8")); +} catch (error) { + fail(`cannot read ${sourcePath}: ${error.message}`); + process.exit(); +} + +if (typeof config.schemaVersion !== "string") fail("schemaVersion must be a string"); +if (typeof config.updated !== "string") fail("updated must be a string"); +if (!Array.isArray(config.guardrails) || config.guardrails.length === 0) fail("guardrails must be a non-empty array"); +if (!isObject(config.protocols)) fail("protocols must be an object"); + +const protocols = config.protocols || {}; +for (const [protocol, profile] of Object.entries(protocols)) { + if (!isObject(profile)) { + fail(`protocol ${protocol} must be an object`); + continue; + } + + if (!Array.isArray(profile.officialSources) || profile.officialSources.length === 0) { + fail(`protocol ${protocol} must declare officialSources[]`); + } else { + for (const [index, source] of profile.officialSources.entries()) { + if (typeof source.label !== "string" || source.label.length === 0) { + fail(`protocol ${protocol} officialSources[${index}].label must be a non-empty string`); + } + if (typeof source.url !== "string" || !/^https:\/\//.test(source.url)) { + fail(`protocol ${protocol} officialSources[${index}].url must be https`); + } + if (typeof source.retrievedAt !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(source.retrievedAt)) { + fail(`protocol ${protocol} officialSources[${index}].retrievedAt must be YYYY-MM-DD`); + } + } + } + + if (!isObject(profile.poolDiscovery)) { + fail(`protocol ${protocol} must declare poolDiscovery`); + } + + for (const [chainId, chain] of Object.entries(profile.chainFactories || {})) { + if (!/^\d+$/.test(chainId)) fail(`protocol ${protocol} chainFactories key ${chainId} must be numeric`); + for (const key of ["dvmFactory", "factory", "router", "vault"]) { + if (chain[key] && !addressPattern.test(chain[key])) { + fail(`protocol ${protocol} chain ${chainId} ${key} must be an EVM address`); + } + } + if (typeof chain.network !== "string" || chain.network.length === 0) { + fail(`protocol ${protocol} chain ${chainId} network must be a non-empty string`); + } + if (typeof chain.source !== "string" || chain.source.length === 0) { + fail(`protocol ${protocol} chain ${chainId} source must be a non-empty string`); + } + } + + for (const [chainId, chain] of Object.entries(profile.unsupportedOrUnverifiedChains || {})) { + if (!/^\d+$/.test(chainId)) fail(`protocol ${protocol} unsupported key ${chainId} must be numeric`); + if (typeof chain.network !== "string" || chain.network.length === 0) { + fail(`protocol ${protocol} unsupported ${chainId} network must be a non-empty string`); + } + if (typeof chain.status !== "string" || chain.status.length === 0) { + fail(`protocol ${protocol} unsupported ${chainId} status must be a non-empty string`); + } + } +} + +if (process.exitCode) process.exit(); +console.log(`[validate-official-protocol-sources] OK: ${Object.keys(protocols).length} protocol profile(s)`);