From 4ebf2d79029c17fb8678fbf9dcd9e71bbb399235 Mon Sep 17 00:00:00 2001 From: defiQUG Date: Mon, 11 May 2026 16:25:08 -0700 Subject: [PATCH] chore(repo): sync operator workspace (config, scripts, docs, multi-chain) Add optional Cosmos/Engine-X/act-runner templates, CWUSDC/EI-matrix tooling, non-EVM route planner in multi-chain-execution (tests passing), token list and extraction updates, and documentation (MetaMask matrix, GRU/CWUSDC packets). Ignore institutional evidence tarballs/sha256 under reports/status. Validated with: bash scripts/verify/run-all-validation.sh --skip-genesis Co-authored-by: Cursor --- .../rules/project-doc-and-deployment-refs.mdc | 8 + .cursorindexingignore | 21 +- .env.master.example | 6 + .gitignore | 4 + AGENTS.md | 3 +- config/cosmos-chain138-optional/README.md | 16 + config/cosmos-chain138-optional/STATUS.md | 18 + .../corridor-decision.example.md | 43 + .../cosmwasm-integration.example.md | 29 + .../cross-cutting.example.md | 43 + .../denom-trace.example.json | 19 + .../osmosis-routing-flags.example.yaml | 13 + config/defillama-chain138-touchpoints.json | 9 +- .../elemental-imperium-network-registry.json | 2 +- config/engine-x/automation-policy.json | 122 +++ .../mainnet-cwusdc-usdc-support-policy.json | 85 +- config/gitea-act-runner/README.md | 8 + .../gitea-act-runner/config-5700-heavy.yaml | 41 + .../config-5701-standard.yaml | 42 + .../deploy-via-phoenix-api.yml | 3 +- .../repos/cromero-default.yml | 3 +- .../repos/currencicombo-default.yml | 3 +- .../repos/dbis-portal-live.yml | 3 +- config/non-evm-lane-requirements.json | 89 ++ config/pmm-soak-wallet-grid.json | 3 + .../cwusdc-provider-monitor.service.example | 16 + .../cwusdc-provider-monitor.timer.example | 10 + ...NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md | 479 +++++++++ docs/00-meta/CW_BRIDGE_TASK_LIST.md | 13 +- .../DEPLOY_CONFIRM_AND_FULL_E2E_RUNBOOK.md | 2 +- ...GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md | 295 ++++++ .../REMAINING_WORK_BREAKDOWN_AND_ANSWERS.md | 2 +- docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md | 22 +- ...EQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md | 2 +- .../STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md | 4 +- .../PROXMOX_CLUSTER_ARCHITECTURE.md | 241 ++--- .../PROXMOX_COMPREHENSIVE_REVIEW.md | 111 +-- .../PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md | 16 +- docs/03-deployment/BLOCKSCOUT_FIX_RUNBOOK.md | 2 +- .../CONTRACT_DEPLOYMENT_RUNBOOK.md | 2 +- ...IS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md | 109 ++ .../DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md | 148 ++- .../DEPLOYMENT_ORDER_OF_OPERATIONS.md | 2 +- .../DEPLOY_AND_VERIFY_ONE_BY_ONE.md | 2 +- .../EI_MATRIX_CWUSDC_MINT_PIPELINE.md | 43 + .../PHASE_D_OPTIONAL_CHECKLIST.md | 13 +- .../PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md | 4 +- ...ROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md | 140 +-- ...MOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md | 44 +- ...ISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md | 3 +- .../PROXMOX_VM_CREATION_RUNBOOK.md | 20 +- ...G_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md | 4 +- .../CHAIN138_SYSTEM_OF_RECORD_MODEL.md | 73 ++ ...MC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md | 23 + .../CWUSDC_NON_MANUAL_PROVIDER_TASKS.md | 108 ++ ...CWUSDC_OPERATOR_SAFE_PROVIDER_CHECKLIST.md | 33 + .../CWUSDC_PROVIDER_SUBMISSION_PACKET.md | 135 +++ .../DEVIN_GITEA_PROXMOX_CICD.md | 4 +- docs/04-configuration/DEV_VM_GITOPS_PLAN.md | 13 +- .../DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md | 183 ++++ .../EXPLORER_GAPS_AND_RECOMMENDATIONS.md | 8 +- .../EXPLORER_TOKENS_GRU_POLICY.md | 2 + .../EXTERNAL_SUBMISSION_PACKET_INDEX.md | 17 + .../GITEA_ACT_RUNNER_SETUP.md | 129 ++- .../GOV_PORTALS_XOM_DEV_DEPLOYMENT.md | 8 +- .../GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md | 55 ++ .../GRU_PROVIDER_POSITIONING_PACKET.md | 71 ++ .../GRU_RESERVE_LAYER_EXPLAINER.md | 80 ++ .../GRU_RISK_AND_DISCLOSURE_LANGUAGE.md | 64 ++ .../NPMPLUS_HA_SETUP_GUIDE.md | 2 + ...SSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md | 164 +++ .../ORACLE_AND_COINGECKO_COMPLETE.md | 4 +- ...RICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md | 2 + .../PR_ADDITIONS_VALIDATION_REPORT.md | 14 +- .../RESERVE_VERIFICATION_EVIDENCE_INDEX.md | 84 ++ docs/04-configuration/TOKEN_LIST_PR_REVIEW.md | 9 +- ...OINGECKO_CHAIN138_SUBMISSION_ATTACHMENT.md | 28 +- .../coingecko/COINGECKO_SUBMISSION_CUSDC.md | 2 +- .../coingecko/COINGECKO_SUBMISSION_CUSDT.md | 2 +- ...DC_EXTERNAL_TRACKER_BLOCKER_REMEDIATION.md | 58 ++ ...C_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md | 87 ++ ...WUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md | 124 +++ ...dc-coingecko-listing-request-20260509.json | 68 ++ .../CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md | 10 +- ...DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md | 4 +- ...ER_INDEXING_AND_PROFILE_PACKET_20260509.md | 65 ++ .../CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md | 63 ++ ...C_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md | 160 +++ .../CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md | 145 +++ .../CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md | 185 ++++ .../etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md | 81 ++ ...C_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md | 65 ++ ...CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md | 95 ++ .../CWUSDC_PROVIDER_RESPONSE_TRACKER.md | 53 + .../CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md | 100 ++ ...USDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md | 84 ++ .../CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md | 97 ++ .../etherscan/assets/cWUSDC-32x32.svg | 15 + ..._ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md | 392 ++++++++ ...ASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md | 346 +++++++ ...P747_CONTRACT_METADATA_REFERENCE_PACKET.md | 193 ++++ .../rpc-502-diagnostics-20260510-130753.txt | 437 ++++++++ .../07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md | 4 +- docs/07-ccip/CW_BRIDGE_APPROACH.md | 34 +- docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md | 18 +- ...W_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md | 62 ++ .../BLOCKSCOUT_START_INSTRUCTIONS.md | 4 +- .../BLOCKSCOUT_VERIFICATION_GUIDE.md | 4 +- .../PROXMOX_COMPLETE_RECOMMENDATIONS.md | 71 +- .../PROXMOX_FINAL_RECOMMENDATIONS.md | 86 +- .../ALL_MAINNET_ROUTING_ENGINE.md | 17 +- ...CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md | 13 +- .../CONTRACT_ADDRESSES_REFERENCE.md | 6 +- ...NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md | 4 +- .../11-references/CONTRACT_NEXT_STEPS_LIST.md | 2 +- ...OSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md | 90 ++ ..._CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md | 154 +++ docs/11-references/CW_TOKENS_AND_NETWORKS.md | 25 +- ...FILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md | 58 ++ ...D_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md | 12 +- ...RACTS_INVENTORY_AND_VERIFICATION_STATUS.md | 2 +- .../DEPLOYER_WALLET_FUNDING_PLAN_PMM_POOLS.md | 2 +- .../EXPLORER_AND_BLOCKSCAN_REFERENCE.md | 4 +- .../LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md | 2 +- .../OPERATOR_OPTIONAL_CHECKLIST.md | 2 +- docs/11-references/OPERATOR_RUN_SUMMARY.md | 4 +- .../SMART_CONTRACTS_INVENTORY_SIMPLE.md | 2 +- docs/12-quick-reference/QUICK_REFERENCE.md | 2 +- docs/GALATIC_SUMMARY.md | 5 +- docs/api/openapi-multi-chain-execution.yaml | 35 + .../completion/ALI_INFRASTRUCTURE_COMPLETE.md | 42 +- .../completion/ALL_NEXT_ACTIONS_COMPLETE.md | 2 +- .../ALL_REMAINING_ACTIONS_COMPLETE.md | 2 +- .../BLOCKSCOUT_PARAMETERS_COMPLETE_GUIDE.md | 2 +- .../BRIDGE_CONFIGURATION_COMPLETE.md | 4 +- .../completion/FINAL_VALIDATION_REPORT.md | 14 +- .../completion/NEXT_ACTIONS_COMPLETED.md | 2 +- .../archive/fixes/ALL_ISSUES_FIXED_SUMMARY.md | 4 +- .../ALL_BRIDGE_ADDRESSES_AND_ROUTES.md | 4 +- .../BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md | 8 +- .../BLOCKSCOUT_PARAMETERS_AND_ENDPOINTS.md | 4 +- .../CHAINID_138_BLOCKSCOUT_INTEGRATION.md | 2 +- .../TOKEN_ADDRESS_VERIFICATION_REPORT.md | 8 +- .../BRIDGE_EXECUTION_COMPLETE.md | 2 +- .../BRIDGE_EXECUTION_STATUS.md | 2 +- .../BRIDGE_MANUAL_EXECUTION.md | 2 +- .../BRIDGE_START_STATUS.md | 2 +- .../BLOCKSCOUT_STATUS_AND_VERIFICATION.md | 2 +- .../BRIDGE_VERIFICATION_FINAL_STATUS.md | 2 +- .../CONTRACT_VALIDATION_STATUS_REPORT.md | 14 +- .../status/CONTRACT_VERIFICATION_STATUS.md | 2 +- .../tests/CONTRACT_VALIDATION_CHECKLIST.md | 2 +- .../tests/REMAINING_STEPS_AND_VALIDATION.md | 2 +- multi-chain-execution/package.json | 2 +- multi-chain-execution/src/api/route-routes.ts | 145 +-- multi-chain-execution/src/index.ts | 11 + .../src/lib/non-evm-route-planner.test.ts | 45 + .../src/lib/non-evm-route-planner.ts | 386 ++++++++ package.json | 22 + .../step-01-currency/currencies.chain138.ts | 4 +- pyrightconfig.json | 66 ++ ...uniswap-v2-live-pair-discovery-latest.json | 30 +- ...swap-v2-phase1-funding-actions-latest.json | 101 +- ...ap-v2-phase1-funding-readiness-latest.json | 210 ++-- ...orer-decimal-normalization-fix-20260511.md | 90 ++ .../cusdc-token-page-review-20260511.png | Bin 0 -> 2412097 bytes ...ull-operational-live-readiness-20260509.md | 67 ++ ...itoken-l2-receiver-remediation-20260509.md | 81 ++ ...dc-etherscan-token-page-review-20260511.md | 85 ++ ...c-external-tracker-remediation-20260509.md | 45 + ...itutional-hardening-completion-20260511.md | 58 ++ ...institutional-readiness-review-20260511.md | 94 ++ ...onpaid-listing-path-completion-20260511.md | 55 ++ ...ovider-automation-enhancements-20260510.md | 52 + ...ow-repay-swap-loop-calculation-20260508.md | 148 +++ ...debt-neutral-univ3-loop-recalc-20260508.md | 83 ++ .../engine-x-loop-capacity-recalc-20260508.md | 114 +++ ...exed-swap-loop-capacity-recalc-20260508.md | 118 +++ ...-indexed-larger-loop-execution-20260508.md | 76 ++ ...-public-indexed-loop-20260508T140800Z.json | 30 + ...-public-indexed-loop-20260508T140806Z.json | 30 + ...-public-indexed-loop-20260508T140827Z.json | 41 + ...-public-indexed-loop-20260508T141052Z.json | 41 + ...llet-usdc-funded-loop-capacity-20260508.md | 115 +++ .../explorer-ux-ui-full-review-20260511.md | 148 +++ ...der-recommendations-completion-20260510.md | 37 + .../mainnet-cwusdc-supply-proof-20260508.json | 94 ++ ...-cwusdc-technical-completion-20260508.json | 53 + ...et-cwusdc-technical-completion-20260508.md | 30 + ...innet-cwusdc-tracker-readiness-20260508.md | 87 ++ ...dc-1to1-peg-proof-requirements-20260508.md | 115 +++ ...dc-pool-rebalance-requirements-20260508.md | 77 ++ ...c-quote-defense-surface-wiring-20260508.md | 68 ++ ...or-lan-run-ei-matrix-context-20260509.json | 33 + ...de-performance-investigation-2026-05-09.md | 104 ++ ...tion-adoption-readiness-live-20260509.json | 1 + ...ggregation-blocker-remediation-20260509.md | 100 ++ ...dc-supply-marketcap-api-wiring-20260509.md | 416 ++++++++ ...ation-engine-x-open-components-20260509.md | 238 +++++ .../fix/fix-blockscout-verification.sh | 8 +- .../fix-blockscout-web-interface-complete.sh | 2 +- .../fix/fix-blockscout-web-interface.sh | 2 +- .../verify/verify-all-contracts.sh | 2 +- .../verify-chain138-bridges-blockscout.sh | 8 +- .../continue-cwusdc-ei-matrix-wallets.sh | 5 + .../continue-mint-cwusdc-ei-matrix-wallets.sh | 0 ...oy-configure-cw-multitoken-l2-receivers.sh | 391 ++++++++ ...-single-sided-dodo-cwusdc-vault-mainnet.sh | 89 ++ .../deployment/deploy-sankofa-studio-lxc.sh | 19 +- .../execute-coffee-money-gas-topups.mjs | 172 ++++ .../fix-dev-vm-srv-projects-ownership.sh | 63 ++ ...ne-x-vault-to-mainnet-cwusdc-usdc-univ3.sh | 78 +- .../mint-cwusdc-ei-matrix-wallets.sh | 35 +- .../deployment/mirror-github-fork-to-gitea.sh | 30 + .../pipeline-ei-matrix-mint-cwusdc.sh | 15 +- ...e-ei-matrix-remediate-cwusdc-from-audit.sh | 104 ++ .../plan-coffee-money-gas-topups.mjs | 325 ++++++ scripts/deployment/probe-dev-vm-ssh.sh | 73 ++ ...repair-mainnet-cwusdc-usdc-univ2-canary.sh | 19 +- .../run-ei-matrix-cwusdc-targeted-chunked.sh | 74 ++ .../run-engine-x-univ2-public-indexed-loop.sh | 169 ++++ .../run-engine-x-univ3-public-swap-proof.sh | 9 +- ...send-cwusdc-ei-matrix-multicall-batches.sh | 32 + .../send-cwusdc-ei-matrix-targeted.sh | 297 ++++++ .../send-cwusdc-ei-matrix-wallets.sh | 355 +++++++ scripts/deployment/solana-transfer-native.py | 148 +++ .../sync-gov-portals-ct-7804-from-git.sh | 127 +++ .../sync-local-projects-to-dev-vm.sh | 154 +++ .../dev-vm/act-runner-resource-snapshot.sh | 26 + scripts/dev-vm/apply-act-runner-config.sh | 29 + ...ootstrap-gitea-act-runner-secondary-lan.sh | 19 + .../bootstrap-gitea-act-runner-site-wide.sh | 68 +- scripts/dev-vm/bootstrap-gitea-act-runner.sh | 82 ++ .../delete-offline-gitea-actions-runners.sh | 72 ++ scripts/dev-vm/install-act-runner-systemd.sh | 4 +- scripts/dev-vm/setup-act-runner.sh | 4 +- scripts/fix-blockscout-forge-verification.sh | 2 +- scripts/health/check-rpc-vms-health.sh | 0 .../lib/ei_matrix_multicall3_cwusdc_batch.py | 246 +++++ .../lib/ei_matrix_onchain_readiness_audit.py | 299 ++++++ scripts/lib/find-repo-files.sh | 22 + scripts/lib/load-project-env.sh | 5 +- scripts/lib/mev-protection.sh | 94 ++ scripts/lib/require-proxmox-ssh-for-pct.sh | 59 ++ scripts/lib/requirements-solana-ops.txt | 3 + scripts/lib/solana_jsonrpc.py | 188 ++++ .../npmplus-cluster-placement-status.sh | 45 + .../stop-local-repo-dev-servers.sh | 25 + scripts/run-wave0-from-lan.sh | 0 scripts/verify-contracts-blockscout.sh | 19 + scripts/verify/README.md | 4 + .../audit-cusdc-cwusdc-etherscan-feeds.py | 310 ++++++ scripts/verify/audit-cwusdc-mainnet-roles.py | 245 +++++ .../audit-ei-matrix-onchain-readiness.sh | 17 + .../build-cmc-top10-ecosystem-coverage.py | 226 +++++ .../build-cwusdc-etherscan-value-dossier.py | 528 ++++++++++ ...ld-cwusdc-institutional-evidence-bundle.sh | 86 ++ .../build-cwusdc-provider-handoff-report.py | 266 +++++ ...uild-cwusdc-provider-submission-prefill.py | 207 ++++ .../build-cwusdc-role-deployment-appendix.py | 160 +++ ...matrix-cwusdc-topup-tsv-from-audit-json.sh | 37 + .../build-external-submission-packet-index.py | 157 +++ .../verify/build-non-evm-requirement-stubs.py | 136 +++ .../check-cmc-provider-report-sanity.py | 165 ++++ .../verify/check-contracts-on-chain-138.sh | 2 +- .../check-cw-full-operational-readiness.py | 536 ++++++++++ .../check-cw-full-operational-readiness.sh | 8 + ...heck-cw-multitoken-bridge-e2e-readiness.py | 364 +++++++ ...heck-cw-multitoken-bridge-e2e-readiness.sh | 11 + .../check-cwusdc-etherscan-prereq-urls.sh | 145 +++ .../check-cwusdc-external-trackers-live.py | 265 +++++ .../check-cwusdc-external-trackers-live.sh | 8 + .../check-cwusdc-institutional-doc-links.py | 162 +++ .../check-cwusdc-provider-readiness-ci.sh | 71 ++ .../check-engine-x-mev-defense-readiness.sh | 116 +++ ...check-engine-x-public-indexed-readiness.sh | 8 +- ...heck-mainnet-cwusdc-usdc-support-health.py | 124 ++- ...-mainnet-cwusdc-weth-liquidity-surfaces.sh | 356 +++++++ ...e-cwusdc-supply-circulating-attestation.py | 269 +++++ ...global-cusdc-cwusdc-family-supply-proof.py | 206 ++++ ...itor-cwusdc-etherscan-value-propagation.py | 361 +++++++ ...an-engine-x-automated-liquidity-advisor.py | 303 ++++++ ...an-engine-x-automated-liquidity-advisor.sh | 10 + ...oken-aggregation-liquidity-gap-funding.mjs | 932 ++++++++++++++++++ scripts/verify/reconcile-env-canonical.sh | 3 +- scripts/verify/run-all-validation.sh | 53 + ...run-cwusdc-provider-monitoring-snapshot.sh | 76 ++ .../run-cwusdc-provider-nonmanual-checks.sh | 79 ++ .../run-ei-matrix-full-readiness-audit.sh | 44 + .../snapshot-mainnet-cwusdc-usdc-preflight.py | 8 +- token-lists/chainlists/chain-138.json | 3 +- token-lists/lists/dbis-138.tokenlist.json | 8 +- 292 files changed, 21574 insertions(+), 1146 deletions(-) create mode 100644 config/cosmos-chain138-optional/README.md create mode 100644 config/cosmos-chain138-optional/STATUS.md create mode 100644 config/cosmos-chain138-optional/corridor-decision.example.md create mode 100644 config/cosmos-chain138-optional/cosmwasm-integration.example.md create mode 100644 config/cosmos-chain138-optional/cross-cutting.example.md create mode 100644 config/cosmos-chain138-optional/denom-trace.example.json create mode 100644 config/cosmos-chain138-optional/osmosis-routing-flags.example.yaml create mode 100644 config/engine-x/automation-policy.json create mode 100644 config/gitea-act-runner/README.md create mode 100644 config/gitea-act-runner/config-5700-heavy.yaml create mode 100644 config/gitea-act-runner/config-5701-standard.yaml create mode 100644 config/non-evm-lane-requirements.json create mode 100644 config/systemd/cwusdc-provider-monitor.service.example create mode 100644 config/systemd/cwusdc-provider-monitor.timer.example create mode 100644 docs/00-meta/BIBLE_FROM_NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md create mode 100644 docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md create mode 100644 docs/03-deployment/DBIS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md create mode 100644 docs/03-deployment/EI_MATRIX_CWUSDC_MINT_PIPELINE.md create mode 100644 docs/04-configuration/CHAIN138_SYSTEM_OF_RECORD_MODEL.md create mode 100644 docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md create mode 100644 docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md create mode 100644 docs/04-configuration/CWUSDC_OPERATOR_SAFE_PROVIDER_CHECKLIST.md create mode 100644 docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md create mode 100644 docs/04-configuration/DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md create mode 100644 docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md create mode 100644 docs/04-configuration/GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md create mode 100644 docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md create mode 100644 docs/04-configuration/GRU_RESERVE_LAYER_EXPLAINER.md create mode 100644 docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md create mode 100644 docs/04-configuration/NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md create mode 100644 docs/04-configuration/RESERVE_VERIFICATION_EVIDENCE_INDEX.md create mode 100644 docs/04-configuration/coingecko/CWUSDC_EXTERNAL_TRACKER_BLOCKER_REMEDIATION.md create mode 100644 docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md create mode 100644 docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md create mode 100644 docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json create mode 100644 docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md create mode 100644 docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md create mode 100644 docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md create mode 100644 docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md create mode 100644 docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg create mode 100644 docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md create mode 100644 docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md create mode 100644 docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md create mode 100644 docs/04-configuration/verification-evidence/rpc-502-diagnostics-20260510-130753.txt create mode 100644 docs/07-ccip/CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md create mode 100644 docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md create mode 100644 docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md create mode 100644 docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md create mode 100644 multi-chain-execution/src/lib/non-evm-route-planner.test.ts create mode 100644 multi-chain-execution/src/lib/non-evm-route-planner.ts create mode 100644 pyrightconfig.json create mode 100644 reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md create mode 100644 reports/status/cusdc-token-page-review-20260511.png create mode 100644 reports/status/cw-mesh-full-operational-live-readiness-20260509.md create mode 100644 reports/status/cw-multitoken-l2-receiver-remediation-20260509.md create mode 100644 reports/status/cwusdc-etherscan-token-page-review-20260511.md create mode 100644 reports/status/cwusdc-external-tracker-remediation-20260509.md create mode 100644 reports/status/cwusdc-institutional-hardening-completion-20260511.md create mode 100644 reports/status/cwusdc-institutional-readiness-review-20260511.md create mode 100644 reports/status/cwusdc-nonpaid-listing-path-completion-20260511.md create mode 100644 reports/status/cwusdc-provider-automation-enhancements-20260510.md create mode 100644 reports/status/engine-x-collateral-borrow-repay-swap-loop-calculation-20260508.md create mode 100644 reports/status/engine-x-debt-neutral-univ3-loop-recalc-20260508.md create mode 100644 reports/status/engine-x-loop-capacity-recalc-20260508.md create mode 100644 reports/status/engine-x-public-indexed-swap-loop-capacity-recalc-20260508.md create mode 100644 reports/status/engine-x-univ2-public-indexed-larger-loop-execution-20260508.md create mode 100644 reports/status/engine-x-univ2-public-indexed-loop-20260508T140800Z.json create mode 100644 reports/status/engine-x-univ2-public-indexed-loop-20260508T140806Z.json create mode 100644 reports/status/engine-x-univ2-public-indexed-loop-20260508T140827Z.json create mode 100644 reports/status/engine-x-univ2-public-indexed-loop-20260508T141052Z.json create mode 100644 reports/status/engine-x-wallet-usdc-funded-loop-capacity-20260508.md create mode 100644 reports/status/explorer-ux-ui-full-review-20260511.md create mode 100644 reports/status/gru-chain138-provider-recommendations-completion-20260510.md create mode 100644 reports/status/mainnet-cwusdc-supply-proof-20260508.json create mode 100644 reports/status/mainnet-cwusdc-technical-completion-20260508.json create mode 100644 reports/status/mainnet-cwusdc-technical-completion-20260508.md create mode 100644 reports/status/mainnet-cwusdc-tracker-readiness-20260508.md create mode 100644 reports/status/mainnet-cwusdc-usdc-1to1-peg-proof-requirements-20260508.md create mode 100644 reports/status/mainnet-cwusdc-usdc-pool-rebalance-requirements-20260508.md create mode 100644 reports/status/mainnet-cwusdc-usdc-quote-defense-surface-wiring-20260508.md create mode 100644 reports/status/operator-lan-run-ei-matrix-context-20260509.json create mode 100644 reports/status/pyright-and-ide-performance-investigation-2026-05-09.md create mode 100644 reports/status/token-aggregation-adoption-readiness-live-20260509.json create mode 100644 reports/status/token-aggregation-blocker-remediation-20260509.md create mode 100644 reports/status/token-aggregation-cwusdc-supply-marketcap-api-wiring-20260509.md create mode 100644 reports/status/token-aggregation-engine-x-open-components-20260509.md create mode 100755 scripts/deployment/continue-cwusdc-ei-matrix-wallets.sh mode change 100644 => 100755 scripts/deployment/continue-mint-cwusdc-ei-matrix-wallets.sh create mode 100755 scripts/deployment/deploy-configure-cw-multitoken-l2-receivers.sh create mode 100755 scripts/deployment/deploy-engine-x-single-sided-dodo-cwusdc-vault-mainnet.sh create mode 100644 scripts/deployment/execute-coffee-money-gas-topups.mjs create mode 100755 scripts/deployment/fix-dev-vm-srv-projects-ownership.sh mode change 100644 => 100755 scripts/deployment/mint-cwusdc-ei-matrix-wallets.sh create mode 100755 scripts/deployment/mirror-github-fork-to-gitea.sh mode change 100644 => 100755 scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh create mode 100755 scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh create mode 100644 scripts/deployment/plan-coffee-money-gas-topups.mjs create mode 100755 scripts/deployment/probe-dev-vm-ssh.sh create mode 100755 scripts/deployment/run-ei-matrix-cwusdc-targeted-chunked.sh create mode 100755 scripts/deployment/run-engine-x-univ2-public-indexed-loop.sh create mode 100755 scripts/deployment/send-cwusdc-ei-matrix-multicall-batches.sh create mode 100755 scripts/deployment/send-cwusdc-ei-matrix-targeted.sh create mode 100755 scripts/deployment/send-cwusdc-ei-matrix-wallets.sh create mode 100755 scripts/deployment/solana-transfer-native.py create mode 100755 scripts/deployment/sync-gov-portals-ct-7804-from-git.sh create mode 100755 scripts/deployment/sync-local-projects-to-dev-vm.sh create mode 100755 scripts/dev-vm/act-runner-resource-snapshot.sh create mode 100755 scripts/dev-vm/apply-act-runner-config.sh create mode 100755 scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh create mode 100755 scripts/dev-vm/bootstrap-gitea-act-runner.sh create mode 100755 scripts/dev-vm/delete-offline-gitea-actions-runners.sh mode change 100644 => 100755 scripts/health/check-rpc-vms-health.sh create mode 100644 scripts/lib/ei_matrix_multicall3_cwusdc_batch.py create mode 100644 scripts/lib/ei_matrix_onchain_readiness_audit.py create mode 100755 scripts/lib/find-repo-files.sh create mode 100755 scripts/lib/mev-protection.sh create mode 100644 scripts/lib/require-proxmox-ssh-for-pct.sh create mode 100644 scripts/lib/requirements-solana-ops.txt create mode 100644 scripts/lib/solana_jsonrpc.py create mode 100755 scripts/maintenance/npmplus-cluster-placement-status.sh create mode 100755 scripts/maintenance/stop-local-repo-dev-servers.sh mode change 100644 => 100755 scripts/run-wave0-from-lan.sh create mode 100755 scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py create mode 100644 scripts/verify/audit-cwusdc-mainnet-roles.py create mode 100755 scripts/verify/audit-ei-matrix-onchain-readiness.sh create mode 100755 scripts/verify/build-cmc-top10-ecosystem-coverage.py create mode 100755 scripts/verify/build-cwusdc-etherscan-value-dossier.py create mode 100755 scripts/verify/build-cwusdc-institutional-evidence-bundle.sh create mode 100755 scripts/verify/build-cwusdc-provider-handoff-report.py create mode 100644 scripts/verify/build-cwusdc-provider-submission-prefill.py create mode 100644 scripts/verify/build-cwusdc-role-deployment-appendix.py create mode 100755 scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh create mode 100755 scripts/verify/build-external-submission-packet-index.py create mode 100755 scripts/verify/build-non-evm-requirement-stubs.py create mode 100755 scripts/verify/check-cmc-provider-report-sanity.py create mode 100755 scripts/verify/check-cw-full-operational-readiness.py create mode 100755 scripts/verify/check-cw-full-operational-readiness.sh create mode 100755 scripts/verify/check-cw-multitoken-bridge-e2e-readiness.py create mode 100755 scripts/verify/check-cw-multitoken-bridge-e2e-readiness.sh create mode 100755 scripts/verify/check-cwusdc-etherscan-prereq-urls.sh create mode 100755 scripts/verify/check-cwusdc-external-trackers-live.py create mode 100755 scripts/verify/check-cwusdc-external-trackers-live.sh create mode 100644 scripts/verify/check-cwusdc-institutional-doc-links.py create mode 100755 scripts/verify/check-cwusdc-provider-readiness-ci.sh create mode 100755 scripts/verify/check-engine-x-mev-defense-readiness.sh create mode 100755 scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh create mode 100644 scripts/verify/generate-cwusdc-supply-circulating-attestation.py create mode 100644 scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py create mode 100644 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py create mode 100755 scripts/verify/plan-engine-x-automated-liquidity-advisor.py create mode 100755 scripts/verify/plan-engine-x-automated-liquidity-advisor.sh create mode 100644 scripts/verify/plan-token-aggregation-liquidity-gap-funding.mjs create mode 100755 scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh create mode 100755 scripts/verify/run-cwusdc-provider-nonmanual-checks.sh create mode 100755 scripts/verify/run-ei-matrix-full-readiness-audit.sh diff --git a/.cursor/rules/project-doc-and-deployment-refs.mdc b/.cursor/rules/project-doc-and-deployment-refs.mdc index f123d6a8..3a5fa70e 100644 --- a/.cursor/rules/project-doc-and-deployment-refs.mdc +++ b/.cursor/rules/project-doc-and-deployment-refs.mdc @@ -15,6 +15,14 @@ When answering token/PMM/deployment questions, prefer these docs over inferring **Operator commands:** `docs/00-meta/OPERATOR_READY_CHECKLIST.md` **Doc index:** `docs/MASTER_INDEX.md` +**Master reference — token / stablecoin launch (institutional compendium):** `docs/00-meta/BIBLE_FROM_NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md` — regulation through aggregators and launch checklists; informational only. For Chain 138 token truth and Explorer alignment, still use `EXPLORER_TOKEN_LIST_CROSSCHECK.md` above. + +**Master reference — MetaMask Money/mUSD ↔ GRU, provider cross-links, DefiLlama DODO `dfio_meta_main` TVL:** `docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md` — replay steps, upstream **DefiLlama/DefiLlama-Adapters#19198**, touchpoints JSON, and **Part G** remaining tasks. + +**Gaps and inconsistencies (audit):** `docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md` + +**Optional Cosmos / IBC to Chain 138 (streams A–E):** `docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md` — templates: `config/cosmos-chain138-optional/README.md` + **Deployment phases (full coverage):** `docs/03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md` - A: mint + add liquidity (138) — `mint-for-liquidity.sh`, AddLiquidityPMMPoolsChain138 - B: Celo/Wemix CCIP + LINK (Wemix needs 0.4 WEMIX) diff --git a/.cursorindexingignore b/.cursorindexingignore index f1e0ff02..63cbba4a 100644 --- a/.cursorindexingignore +++ b/.cursorindexingignore @@ -1,5 +1,25 @@ # Exclude heavy paths from Cursor codebase indexing only (files stay editable). # Syntax: same as .gitignore — see https://cursor.com/docs/reference/ignore-file +# +# Aligns with pyrightconfig.json / .vscode settings to reduce IDE + Python LS load. +# See reports/status/pyright-and-ide-performance-investigation-2026-05-09.md + +ProxmoxVE/ +explorer-monorepo/ +MEV_Bot/ +miracles_in_motion/ +OMNIS/ +cross-chain-pmm-lps/ +tmp/ +.tmp/ +.codex-artifacts/ +.devin/ +.venv-checkjson/ +venv/ +smom-dbis-138/lib/ +smom-dbis-138/artifacts/ +smom-dbis-138/broadcast/ +smom-dbis-138/cache/ third-party/ vendor/ @@ -8,7 +28,6 @@ build/ dist/ out/ output/ -tmp/ reports/ cross-chain-pmm-lps-publish/ smom-dbis-138-publish/ diff --git a/.env.master.example b/.env.master.example index 75b53abf..0e8dcd54 100644 --- a/.env.master.example +++ b/.env.master.example @@ -119,6 +119,12 @@ RPC_URL_138_PUBLIC= INFURA_PROJECT_ID= INFURA_API_KEY= ETHEREUM_MAINNET_RPC= +# EI matrix readiness audit (scripts/verify/run-ei-matrix-full-readiness-audit.sh, optional CI step in run-all-validation.sh) +EI_MATRIX_AUDIT_SHARD_SIZE=400 +EI_MATRIX_AUDIT_WORKERS=3 +EI_MATRIX_AUDIT_MIN_MAINNET_RAW=12000000 +EI_MATRIX_AUDIT_MIN_138_RAW=0 +# CI: EI_MATRIX_ONCHAIN_AUDIT_CI=1 EI_MATRIX_ONCHAIN_AUDIT_CI_LIMIT=120 EI_MATRIX_AUDIT_MIN_MAINNET_RAW_CI=0 POLYGON_MAINNET_RPC= ARBITRUM_MAINNET_RPC= OPTIMISM_MAINNET_RPC= diff --git a/.gitignore b/.gitignore index 86fb4acc..53f9b671 100644 --- a/.gitignore +++ b/.gitignore @@ -181,3 +181,7 @@ reports/status/**/*.jsonl reports/status/ei-matrix-* reports/status/cw-multitoken-l2-remediation-*.jsonl reports/status/screenshots/ + +# Large evidence bundles / checksums under reports/status (retain outside git or use releases) +reports/status/**/*.tar.gz +reports/status/**/*.sha256 diff --git a/AGENTS.md b/AGENTS.md index 9c47b447..dc255465 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,7 +27,8 @@ Orchestration for Proxmox VE, Chain 138 (`smom-dbis-138/`), explorers, NPMplus, | Live vs template (read-only SSH) | `bash scripts/verify/audit-proxmox-operational-template.sh` | | Config validation | `bash scripts/validation/validate-config-files.sh` | | pnpm lockfile vs workspace (prevents `pnpm outdated` / importer bugs) | `bash scripts/verify/check-pnpm-workspace-lockfile.sh` — also run as **step 1b** in `run-all-validation.sh` | -| CI validation (no LAN) + cW* mesh matrix | `bash scripts/verify/run-all-validation.sh [--skip-genesis]` — same gate as **Gitea** push/PR: `run-all-validation` in `.gitea/workflows/deploy-to-phoenix.yml` (push) and `.gitea/workflows/validate-on-pr.yml` (PR only). After deploy, optional **Cloudflare** `cloudflare-sync` (Phoenix + `PHOENIX_REPO_ROOT`; set `PHOENIX_CLOUDFLARE_SYNC=1` on that host) via `scripts/deployment/gitea-cloudflare-sync.sh`. Steps: dependencies, **pnpm workspace/lockfile check**, config, cW* mesh (when pair-discovery exists), **`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs`**, optional genesis. Manual only: `bash scripts/verify/build-cw-mesh-deployment-matrix.sh [--json-out …]` | +| CI validation (no LAN) + cW* mesh matrix | `bash scripts/verify/run-all-validation.sh [--skip-genesis]` — same gate as **Gitea** push/PR: `run-all-validation` in `.gitea/workflows/deploy-to-phoenix.yml` (push) and `.gitea/workflows/validate-on-pr.yml` (PR only), **`runs-on: ubuntu-latest-heavy`** (CT **5700**). After deploy, optional **Cloudflare** `cloudflare-sync` (Phoenix + `PHOENIX_REPO_ROOT`; set `PHOENIX_CLOUDFLARE_SYNC=1` on that host) via `scripts/deployment/gitea-cloudflare-sync.sh`. Steps: dependencies, **pnpm workspace/lockfile check**, config, cW* mesh (when pair-discovery exists), **`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs`**, optional genesis. Manual only: `bash scripts/verify/build-cw-mesh-deployment-matrix.sh [--json-out …]` | +| Gitea Actions runners (heavy vs standard pool) | `docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md` — **5700** `ubuntu-latest-heavy`, **5701** `ubuntu-latest`; apply configs `bash scripts/dev-vm/apply-act-runner-config.sh`; snapshot `bash scripts/dev-vm/act-runner-resource-snapshot.sh` | | FQDN / NPM E2E verifier | `bash scripts/verify/verify-end-to-end-routing.sh --profile=public` — inventory: `docs/04-configuration/E2E_ENDPOINTS_LIST.md`. Gitea Actions URLs (no API): `bash scripts/verify/print-gitea-actions-urls.sh` | | Submodule trees clean (CI / post-merge) | `bash scripts/verify/submodules-clean.sh` | | Submodule + explorer remotes | `docs/00-meta/SUBMODULE_HYGIENE.md` — `mcp-proxmox` uses **Gitea** `https://gitea.d-bis.org/d-bis/mcp-proxmox.git` (not the old GitHub-only URL). `cross-chain-pmm-lps-publish` is a **worktree** of `cross-chain-pmm-lps`, not a submodule. | diff --git a/config/cosmos-chain138-optional/README.md b/config/cosmos-chain138-optional/README.md new file mode 100644 index 00000000..36c67614 --- /dev/null +++ b/config/cosmos-chain138-optional/README.md @@ -0,0 +1,16 @@ +# Cosmos ↔ Chain 138 — optional config templates + +**Purpose:** Machine- and human-readable templates for [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md](../../docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md) streams **A–E**. These files are **examples** until operators copy them to a secured location and fill live values. + +| File | Stream | +|------|--------| +| [corridor-decision.example.md](corridor-decision.example.md) | A (Noble / stable corridor decisions) | +| [osmosis-routing-flags.example.yaml](osmosis-routing-flags.example.yaml) | B (routing mode, limits) | +| [denom-trace.example.json](denom-trace.example.json) | C (IBC trace / hash schema) | +| [cosmwasm-integration.example.md](cosmwasm-integration.example.md) | D (Wasm app pairing) | +| [cross-cutting.example.md](cross-cutting.example.md) | E (relayers, wallets, audits, closure) | +| [STATUS.md](STATUS.md) | Doc vs live completion tracking | + +**Gaps and inconsistencies (repo-wide audit, includes PMM/CCIP drift):** [COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md](../../docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md) + +Do **not** commit production keys, channel IDs, or signed vendor contracts here. diff --git a/config/cosmos-chain138-optional/STATUS.md b/config/cosmos-chain138-optional/STATUS.md new file mode 100644 index 00000000..8240970e --- /dev/null +++ b/config/cosmos-chain138-optional/STATUS.md @@ -0,0 +1,18 @@ +# Streams A–E — completion status (repo) + +**Updated:** 2026-05-09 +**Meaning:** **Doc** = runbook + templates in this repo are complete. **Live** = requires operator decisions, contracts, keys, and vendor chains (not asserted here). + +**Last LAN operator pass (repo standard scripts, not Cosmos-specific):** `run-completable-tasks-from-anywhere.sh` OK; `run-all-operator-tasks-from-lan.sh --skip-backup` OK (NPMplus proxy refresh + Blockscout verification). Does not deploy IBC or Noble. + +| Stream | Doc / template | Live bridge & ops | +|--------|------------------|-------------------| +| **A** Noble / stable corridor | Complete (runbook §3 + `corridor-decision.example.md`) | Not live — operator fills decision record and executes on-chain when adopted | +| **B** Osmosis / Cosmos DEX routing | Complete (runbook §4 + `osmosis-routing-flags.example.yaml`) | Not live — route engine integration when adopted | +| **C** Generic IBC allowlist | Complete (runbook §5 + `denom-trace.example.json`) | Not live — governance allowlist + registry rows when adopted | +| **D** CosmWasm app ↔ 138 | Complete (runbook §6 + `cosmwasm-integration.example.md`) | Not live — per-app deploy when adopted | +| **E** Cross-cutting + program closure | Complete (runbook §7 + `cross-cutting.example.md`) | Partially live only if A–D adopted (relayers, audits, etc.) | + +**Deferred / out of scope until adoption:** Any mainnet IBC channel, Noble mint path, Osmosis swap execution, CosmWasm ICA, and production relayer keys. + +**Full gaps + inconsistency inventory:** [COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md](../../docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md) \ No newline at end of file diff --git a/config/cosmos-chain138-optional/corridor-decision.example.md b/config/cosmos-chain138-optional/corridor-decision.example.md new file mode 100644 index 00000000..604ceb4c --- /dev/null +++ b/config/cosmos-chain138-optional/corridor-decision.example.md @@ -0,0 +1,43 @@ +# Stream A — corridor decision record (example) + +Copy to internal wiki or secured docs. Replace all `TODO`. + +## A1 Source and bridge stack + +| Field | Value | +|-------|--------| +| Source chain | TODO (e.g. Noble) | +| Bridge vendor / stack | TODO (e.g. general-message bridge, CCTP path, or oracle-operated) | +| Vendor documentation URL | TODO | + +## A2 138-side contracts and roles + +| Role | Address or multisig | Notes | +|------|---------------------|--------| +| Admin | TODO | | +| Pauser | TODO | | +| Oracle or verifier | TODO | | + +## A3 Denom → Chain 138 token mapping + +| IBC denom / trace | Chain 138 token address | Decimals | Canonical ref | +|-------------------|-------------------------|----------|---------------| +| TODO | TODO | TODO | EXPLORER_TOKEN_LIST_CROSSCHECK + ADDRESS_MATRIX | + +## A4 ChainRegistry + +| chainIdentifier | adapter (138) | additionalData summary | +|-----------------|----------------|-------------------------| +| TODO | TODO | TODO (channel IDs, bridge contract on counterparty) | + +## A5 Liquidity + +| Venue | Amount / policy | Owner sign-off | +|-------|-----------------|----------------| +| TODO | TODO | TODO | + +## A6 E2E evidence + +| Direction | Tx hash / link | Date | +|-----------|----------------|------| +| TODO | TODO | TODO | diff --git a/config/cosmos-chain138-optional/cosmwasm-integration.example.md b/config/cosmos-chain138-optional/cosmwasm-integration.example.md new file mode 100644 index 00000000..4e7b8cf3 --- /dev/null +++ b/config/cosmos-chain138-optional/cosmwasm-integration.example.md @@ -0,0 +1,29 @@ +# Stream D — CosmWasm app pairing (example) + +## D1 Contract pins + +| Network | Contract address | Code ID | Migrate policy | +|---------|------------------|---------|------------------| +| TODO | TODO | TODO | frozen / multisig / DAO | + +## D2 Control path + +Chosen path: TODO (ICA / ICQ / GMP to EVM / off-chain coordinator + oracle) + +Attach sequence diagram URL: TODO + +## D3 Chain 138 counterpart + +| Contract | Address | Purpose | +|----------|---------|---------| +| TODO | TODO | vault / adapter / settlement | + +## D4 Hyperledger + +Required: yes / no — if yes, cite Cacti/Firefly task from MULTI_CHAIN_DEPLOYMENT_GUIDE Phase 4. + +## D5 Wasm CI + +Repository: TODO +Build command: TODO +Upgrade runbook URL: TODO diff --git a/config/cosmos-chain138-optional/cross-cutting.example.md b/config/cosmos-chain138-optional/cross-cutting.example.md new file mode 100644 index 00000000..a2c9690e --- /dev/null +++ b/config/cosmos-chain138-optional/cross-cutting.example.md @@ -0,0 +1,43 @@ +# Stream E — cross-cutting + program closure (example) + +## E1 IBC relayers + +| Channel | Relayer operator | Key custody | SLA | +|---------|------------------|-------------|-----| +| TODO | TODO | TODO | TODO | + +## E2 Wallets (Cosmos legs) + +| Wallet | Supported flows | User doc URL | +|--------|-----------------|--------------| +| Keplr | TODO | TODO | +| Leap | TODO | TODO | +| MetaMask Snap (if used) | TODO | TODO | + +## E3 Indexing and observability + +| System | Cosmos / IBC events | Retention | +|--------|---------------------|-----------| +| TODO | TODO | TODO | + +## E4 Audits + +| Scope | Vendor | Report URL | Date | +|-------|--------|------------|------| +| TODO bridge | TODO | TODO | TODO | + +## E5 Rate limits + +| Surface | Limit | Enforced by | +|---------|-------|-------------| +| Mint API | TODO | TODO | +| On-chain mint/burn | TODO | contract | + +## E6 Program closure + +| Milestone | Owner | Date | +|-----------|-------|------| +| Preconditions P1–P5 signed | TODO | TODO | +| Streams adopted (product A–D + closure E) | TODO | TODO | +| CHAINS_AND_PROTOCOLS + GALATIC updated for live only | TODO | TODO | +| Annual review scheduled | TODO | TODO | diff --git a/config/cosmos-chain138-optional/denom-trace.example.json b/config/cosmos-chain138-optional/denom-trace.example.json new file mode 100644 index 00000000..f51875e4 --- /dev/null +++ b/config/cosmos-chain138-optional/denom-trace.example.json @@ -0,0 +1,19 @@ +{ + "$schema_comment": "Stream C — example IBC trace record for allowlist + ChainRegistry.additionalData mirror", + "tier": "TIER_1_GOVERNANCE", + "ibc_hash": "TODO_ibc_hash_or_full_denom", + "path": [ + { + "port_id": "transfer", + "channel_id": "TODO", + "counterparty_chain_id": "TODO", + "counterparty_channel_id": "TODO" + } + ], + "human_readable_denom": "TODO", + "bridge_stack_id": "TODO_vendor_or_internal_id", + "chain138_token_address": "0x0000000000000000000000000000000000000000", + "decimals": 6, + "canonical_crosscheck_ref": "docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md", + "user_warning_long_trace": true +} diff --git a/config/cosmos-chain138-optional/osmosis-routing-flags.example.yaml b/config/cosmos-chain138-optional/osmosis-routing-flags.example.yaml new file mode 100644 index 00000000..0d0187b9 --- /dev/null +++ b/config/cosmos-chain138-optional/osmosis-routing-flags.example.yaml @@ -0,0 +1,13 @@ +# Stream B — routing integration flags (example) +# Copy into route-engine or service config when Osmosis/Cosmos DEX leg is adopted. + +cosmos_dex_routing: + mode: quotes_only # quotes_only | executable_swaps + max_slippage_bps: 50 + ibc_timeout_seconds: 600 + quote_ttl_seconds: 30 + chains_allowlist: [] # e.g. cosmoshub-4, osmosis-1 — fill when live + fail_closed_on_timeout: true + aggregator_alignment: + use_axelar_squid_patterns: false # set true when wired to explorer/squid stack + review_doc: docs/11-references/BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md diff --git a/config/defillama-chain138-touchpoints.json b/config/defillama-chain138-touchpoints.json index 8df72aca..5d5d07bb 100644 --- a/config/defillama-chain138-touchpoints.json +++ b/config/defillama-chain138-touchpoints.json @@ -11,6 +11,10 @@ "regulatoryFraming": "Compliant digital money / e-money settlement rail — TVL adapters measure on-chain contract balances, not issuer licensing status.", "upstream": { "defillamaAdapters": "https://github.com/DefiLlama/DefiLlama-Adapters", + "upstreamPullRequest": "https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198", + "upstreamPullRequestState": "open", + "upstreamPullRequestStateAsOf": "2026-05-10", + "upstreamPullRequestLastGhCheckUtc": "2026-05-10T19:59Z", "fork": "https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters", "defillamaServer": "https://github.com/DefiLlama/defillama-server", "dimensionAdapters": "https://github.com/DefiLlama/dimension-adapters" @@ -113,6 +117,9 @@ ], "docs": { "ecosystemMap": "docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md", - "submissionChecklist": "docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md" + "submissionChecklist": "docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md", + "dodoDfioMetaMainTvlNote": "docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md", + "masterReference": "docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md", + "repositoriesAndPrs": "docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md" } } diff --git a/config/elemental-imperium-network-registry.json b/config/elemental-imperium-network-registry.json index 05a982d6..1c7b0221 100644 --- a/config/elemental-imperium-network-registry.json +++ b/config/elemental-imperium-network-registry.json @@ -1,6 +1,6 @@ { "registryVersion": 1, - "purpose": "Authoritative network codes for Elemental Imperium (33×33×6) wallet labels. ASNs are optional; add when assigned.", + "purpose": "Authoritative network codes for Elemental Imperium (33×33×6) wallet labels. Grid addresses are treasuries for sovereign nations in the EI model; ASNs are optional; add when assigned.", "labelSpec": { "id": "ei-wallet-label-v1", "cellIdFormat": "EI-L{lpbca:02d}-B{branch:02d}-C{class}", diff --git a/config/engine-x/automation-policy.json b/config/engine-x/automation-policy.json new file mode 100644 index 00000000..12b5865f --- /dev/null +++ b/config/engine-x/automation-policy.json @@ -0,0 +1,122 @@ +{ + "version": "1.0.0", + "updated": "2026-05-09", + "component": "DBIS Engine X", + "purpose": "Automation policy for API-fed liquidity advice, XAUt-backed USDC capacity calculation, cW* output planning, on-chain execution gates, and endpoint reporting.", + "mode": { + "default": "read_only_advisor", + "liveExecutionRequires": [ + "operator_approval", + "protected_transaction_rpc", + "fresh_live_quotes", + "funded_usdc_lender_or_public_quote_inventory", + "passing_solidity_preview", + "nonzero_iso_audit_peg_hashes" + ] + }, + "inputs": { + "requestedOutput": { + "symbolEnv": "ENGINE_X_REQUESTED_CW_SYMBOL", + "defaultSymbol": "cWUSDC", + "amountRawEnv": "ENGINE_X_REQUESTED_OUTPUT_RAW", + "amountUnitsEnv": "ENGINE_X_REQUESTED_OUTPUT_UNITS", + "supportedInitialSymbols": [ + "cWUSDC" + ] + }, + "collateral": { + "symbol": "XAUt", + "availableRawEnv": "ENGINE_X_XAUT_AVAILABLE_RAW", + "availableUnitsEnv": "ENGINE_X_XAUT_AVAILABLE_UNITS", + "usdPrice6Env": "ENGINE_X_XAUT_USD_PRICE6", + "defaultUsdPrice6": "3226640000" + }, + "risk": { + "ltvBpsEnv": "ENGINE_X_BORROW_LTV_BPS", + "defaultLtvBps": 7500, + "minHealthFactorBpsEnv": "ENGINE_X_BORROW_MIN_HEALTH_FACTOR_BPS", + "defaultMinHealthFactorBps": 11000, + "maxRoundTripLossBpsEnv": "ENGINE_X_MAX_ROUND_TRIP_LOSS_BPS", + "defaultMaxRoundTripLossBps": 100, + "maxPublicSwapLossBpsEnv": "ENGINE_X_MAX_PUBLIC_SWAP_LOSS_BPS", + "defaultMaxPublicSwapLossBps": 75, + "minGasReserveWeiEnv": "ENGINE_X_MIN_GAS_RESERVE_WEI", + "defaultMinGasReserveWei": "5000000000000000" + } + }, + "feeds": { + "repoReports": [ + "reports/status/mainnet-cwusdc-usdc-support-health-latest.json", + "reports/status/engine-x-public-indexed-readiness-latest.json", + "reports/status/engine-x-mev-defense-readiness-latest.json", + "reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json" + ], + "onChainReadinessCommands": [ + "pnpm engine-x:public-readiness", + "pnpm engine-x:mev-defense", + "pnpm engine-x:weth-liquidity-eval", + "python3 scripts/verify/check-mainnet-cwusdc-usdc-support-health.py" + ], + "externalPublicationTargets": [ + "token-aggregation public report API", + "CoinGecko tracker package", + "CoinMarketCap tracker package", + "Etherscan public transaction and pool pages", + "DexScreener and GeckoTerminal indexed pool pages", + "exchange listing or OTC due-diligence packet", + "Forex desk liquidity and proof packet" + ] + }, + "decisionGates": { + "apiAdvisor": [ + "all required report feeds are present or regenerated", + "requested output token is supported", + "calculator produces positive capacity", + "all blocker fields are explicit" + ], + "liveExecution": [ + "MEV defense readiness is ready", + "selected liquidity surface has live indexable pool evidence", + "selected public swap has nonzero quote and minOut", + "USDC debt after loop is zero", + "XAUt collateral withdrawal is previewed after repayment", + "no route substitutes DODO, UniV2, UniV3, WETH, or USDC roles silently", + "operator has reviewed generated commands" + ], + "publication": [ + "on-chain transaction hashes are present", + "before and after reserves or slot0/liquidity are present", + "ISO 20022-style proof hash is present when applicable", + "audit envelope hash is present", + "peg proof hash is present", + "public endpoint package was regenerated after execution" + ] + }, + "automationPhases": [ + { + "id": "phase_0_advisor", + "name": "Read-only API and calculator advice", + "broadcast": false + }, + { + "id": "phase_1_canary", + "name": "Protected tiny public canary execution", + "broadcast": "operator_approved_only" + }, + { + "id": "phase_2_liquidity_defense", + "name": "Automated protected rebalance and quote defense", + "broadcast": "after_canary_and_loss_limits" + }, + { + "id": "phase_3_endpoint_publication", + "name": "Regenerate reports and publish endpoint packets", + "broadcast": false + }, + { + "id": "phase_4_multi_asset_forex_crypto", + "name": "Extend cW* request symbols and FX/crypto endpoint packets", + "broadcast": "per_asset_policy" + } + ] +} diff --git a/config/extraction/mainnet-cwusdc-usdc-support-policy.json b/config/extraction/mainnet-cwusdc-usdc-support-policy.json index bc67399f..3830a589 100644 --- a/config/extraction/mainnet-cwusdc-usdc-support-policy.json +++ b/config/extraction/mainnet-cwusdc-usdc-support-policy.json @@ -1,6 +1,6 @@ { "version": "1.0.0", - "updated": "2026-04-18", + "updated": "2026-05-08", "rail": "mainnet_cwusdc_usdc", "network": { "chainId": 1, @@ -24,6 +24,62 @@ "poolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E", "managedCycleScript": "smom-dbis-138/script/flash/RunManagedMainnetAaveCwusdcUsdcQuotePushCycle.s.sol:RunManagedMainnetAaveCwusdcUsdcQuotePushCycle" }, + "quoteDefenseSurfaces": [ + { + "id": "mainnet-cwusdc-usdc-univ3-100", + "base": "cWUSDC", + "quote": "USDC", + "role": "primary_public_indexed_quote_defense", + "venue": "uniswap_v3_pool", + "poolAddress": "0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3", + "fee": 100, + "routerAddress": "0xE592427A0AEce92De3Edee1F18E0157C05861564", + "quoterAddress": "0x61fFE014bA17989E743c5F6cB21bF9697530B21e", + "activeRange": { + "preferredLowerTick": -100, + "preferredUpperTick": 100, + "targetTick": 0 + }, + "defenseMode": "quote_side_tick_reentry_then_proof_swaps", + "automationStatus": "operator_review_required", + "notes": [ + "Primary public/indexable quote-defense surface for tiny 1:1 canaries.", + "If current tick is below -100, first push quote side with USDC->cWUSDC until the old -100..100 position re-enters range.", + "Do not assume historical 75/75 or 85/85 liquidity is active; verify slot0 tick, active liquidity, and token balances before proof swaps." + ] + }, + { + "id": "mainnet-cwusdc-usdc-univ2", + "base": "cWUSDC", + "quote": "USDC", + "role": "secondary_public_indexed_quote_defense", + "venue": "uniswap_v2_pair", + "poolAddress": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "routerAddress": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "defenseMode": "quote_side_reserve_repair", + "automationStatus": "capital_gated", + "notes": [ + "Public/indexable reserve surface for larger swaps.", + "Use only after fresh reserve read and quote-side repair sizing.", + "Current role is secondary because the pair is quote-starved." + ] + }, + { + "id": "mainnet-cwusdc-usdc-dodo-managed", + "base": "cWUSDC", + "quote": "USDC", + "role": "managed_defended_quote_push", + "venue": "dodo_pmm", + "poolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E", + "defenseMode": "managed_quote_push_cycle", + "automationStatus": "capital_gated", + "notes": [ + "Managed defended lane remains distinct from public indexed proof lanes.", + "Do not silently substitute this pool for the public spend settlement replacement pool.", + "Requires passing DODO quote preview and sufficient official Mainnet USDC quote inventory before automation." + ] + } + ], "thresholds": { "warnDeviationBps": 25, "interveneDeviationBps": 75, @@ -46,10 +102,37 @@ } ] }, + "mevDefense": { + "status": "required_for_sensitive_execution", + "failClosedByDefault": true, + "acceptedPrivateRpcEnvKeys": [ + "ENGINE_X_PRIVATE_TX_RPC", + "MEV_BLOCKER_RPC_URL", + "FLASHBOTS_RPC_URL", + "BLOXROUTE_RPC_URL", + "BLINK_RPC_URL" + ], + "publicBroadcastOverrideEnvKey": "ENGINE_X_ALLOW_PUBLIC_BROADCAST", + "disableGuardEnvKey": "ENGINE_X_MEV_PROTECTION", + "protectedActions": [ + "engine-x-univ3-public-swap-proof", + "engine-x-univ2-public-indexed-loop", + "mainnet-cwusdc-usdc-univ2-canary-repair", + "engine-x-univ3-indexed-lp-migration" + ], + "rules": [ + "Use private/protected RPC for any live Engine X public-indexed swap, quote repair, LP migration, or rebalance.", + "Dry-runs and read-only health checks may use the normal Mainnet RPC.", + "Do not broadcast quote-defense transactions through the public mempool unless the operator explicitly sets ENGINE_X_ALLOW_PUBLIC_BROADCAST=1 for a reviewed canary.", + "Never print protected RPC URLs in reports; report only the configured provider label or env key." + ] + }, "notes": [ "The public Uniswap V2 pair is for visible routing and discovery, not for hard parity guarantees on its own.", + "The UniV3 fee-100 pool is the preferred public/indexable quote-defense canary lane when its tick is in or near the configured active range.", "When the public pair drifts beyond the intervention corridor, use the managed DODO quote-push stack as the first automated defense path.", "Do not trust POOL_CWUSDC_USDC_MAINNET from dotenv blindly; this policy is the canonical defended venue binding.", + "Automation must select quoteDefenseSurfaces by explicit role and venue; never silently substitute UniV2, UniV3, or DODO for each other.", "Automation is capped to the currently tested safe tranche until the defended lane is explicitly re-sized from fresh liquidity measurements." ] } diff --git a/config/gitea-act-runner/README.md b/config/gitea-act-runner/README.md new file mode 100644 index 00000000..7794f11c --- /dev/null +++ b/config/gitea-act-runner/README.md @@ -0,0 +1,8 @@ +# Gitea act_runner config templates + +| File | CT | Purpose | +|------|-----|---------| +| `config-5700-heavy.yaml` | 5700 (`dev-vm`) | `ubuntu-latest-heavy` — large pnpm/validation jobs | +| `config-5701-standard.yaml` | 5701 (`gitea-runner-1`) | `ubuntu-latest` / `ubuntu-22.04` / `ubuntu-20.04` — default pool | + +Deploy with `bash scripts/dev-vm/apply-act-runner-config.sh` from the repo root (LAN). Full procedure: `docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md`. diff --git a/config/gitea-act-runner/config-5700-heavy.yaml b/config/gitea-act-runner/config-5700-heavy.yaml new file mode 100644 index 00000000..1ba59101 --- /dev/null +++ b/config/gitea-act-runner/config-5700-heavy.yaml @@ -0,0 +1,41 @@ +# act_runner — CT 5700 (dev-vm): heavy / monorepo CI (label ubuntu-latest-heavy). +# Applied by: bash scripts/dev-vm/apply-act-runner-config.sh +# Image: https://gitea.com/docker.gitea.com/runner-images + +log: + level: info + +runner: + file: .runner + capacity: 1 + timeout: 3h + shutdown_timeout: 0s + insecure: false + fetch_timeout: 5s + fetch_interval: 5s + github_mirror: '' + labels: + - "ubuntu-latest-heavy:docker://docker.gitea.com/runner-images:ubuntu-latest" + +cache: + enabled: true + dir: "" + host: "" + port: 0 + external_server: "" + +container: + network: bridge + privileged: false + options: "--cpus=4 --memory=10g --pids-limit=8192" + workdir_parent: /var/lib/act_runner/workdir + valid_volumes: + - '**' + docker_host: "" + force_pull: false + force_rebuild: false + require_docker: false + docker_timeout: 0s + +host: + workdir_parent: /var/lib/act_runner/workdir diff --git a/config/gitea-act-runner/config-5701-standard.yaml b/config/gitea-act-runner/config-5701-standard.yaml new file mode 100644 index 00000000..de42b8d8 --- /dev/null +++ b/config/gitea-act-runner/config-5701-standard.yaml @@ -0,0 +1,42 @@ +# act_runner — CT 5701 (gitea-runner-1): default pool (labels ubuntu-latest / 22.04 / 20.04). +# Applied by: bash scripts/dev-vm/apply-act-runner-config.sh + +log: + level: info + +runner: + file: .runner + capacity: 1 + timeout: 3h + shutdown_timeout: 0s + insecure: false + fetch_timeout: 5s + fetch_interval: 5s + github_mirror: '' + labels: + - "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest" + - "ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04" + - "ubuntu-20.04:docker://docker.gitea.com/runner-images:ubuntu-20.04" + +cache: + enabled: true + dir: "" + host: "" + port: 0 + external_server: "" + +container: + network: bridge + privileged: false + options: "--cpus=2 --memory=4g --pids-limit=512" + workdir_parent: /var/lib/act_runner/workdir + valid_volumes: + - '**' + docker_host: "" + force_pull: false + force_rebuild: false + require_docker: false + docker_timeout: 0s + +host: + workdir_parent: /var/lib/act_runner/workdir diff --git a/config/gitea-workflow-templates/deploy-via-phoenix-api.yml b/config/gitea-workflow-templates/deploy-via-phoenix-api.yml index cab02045..c7cc2ad5 100644 --- a/config/gitea-workflow-templates/deploy-via-phoenix-api.yml +++ b/config/gitea-workflow-templates/deploy-via-phoenix-api.yml @@ -24,7 +24,8 @@ jobs: SHA="$(git rev-parse HEAD)" BRANCH="$(git rev-parse --abbrev-ref HEAD)" REPO="${{ gitea.repository }}" - curl -sSf -X POST "${PHOENIX_DEPLOY_URL}" \ + curl -sSf --connect-timeout 10 --max-time 3600 \ + -X POST "${PHOENIX_DEPLOY_URL}" \ -H "Authorization: Bearer ${PHOENIX_DEPLOY_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"repo\":\"${REPO}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"${TARGET}\"}" diff --git a/config/gitea-workflow-templates/repos/cromero-default.yml b/config/gitea-workflow-templates/repos/cromero-default.yml index c60641d0..022c4627 100644 --- a/config/gitea-workflow-templates/repos/cromero-default.yml +++ b/config/gitea-workflow-templates/repos/cromero-default.yml @@ -17,7 +17,8 @@ jobs: run: | SHA="$(git rev-parse HEAD)" BRANCH="$(git rev-parse --abbrev-ref HEAD)" - curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ + curl -sSf --connect-timeout 10 --max-time 3600 \ + -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ -H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \ -H "Content-Type: application/json" \ -d "{\"repo\":\"d-bis/CROMERO\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}" diff --git a/config/gitea-workflow-templates/repos/currencicombo-default.yml b/config/gitea-workflow-templates/repos/currencicombo-default.yml index 2dfca6da..39a09260 100644 --- a/config/gitea-workflow-templates/repos/currencicombo-default.yml +++ b/config/gitea-workflow-templates/repos/currencicombo-default.yml @@ -17,7 +17,8 @@ jobs: run: | SHA="$(git rev-parse HEAD)" BRANCH="$(git rev-parse --abbrev-ref HEAD)" - curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ + curl -sSf --connect-timeout 10 --max-time 3600 \ + -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ -H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \ -H "Content-Type: application/json" \ -d "{\"repo\":\"d-bis/CurrenciCombo\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}" diff --git a/config/gitea-workflow-templates/repos/dbis-portal-live.yml b/config/gitea-workflow-templates/repos/dbis-portal-live.yml index cae10088..84d59949 100644 --- a/config/gitea-workflow-templates/repos/dbis-portal-live.yml +++ b/config/gitea-workflow-templates/repos/dbis-portal-live.yml @@ -17,7 +17,8 @@ jobs: run: | SHA="$(git rev-parse HEAD)" BRANCH="$(git rev-parse --abbrev-ref HEAD)" - curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ + curl -sSf --connect-timeout 10 --max-time 3600 \ + -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \ -H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \ -H "Content-Type: application/json" \ -d "{\"repo\":\"Gov_Web_Portals/DBIS\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"dbis-portal-live\"}" diff --git a/config/non-evm-lane-requirements.json b/config/non-evm-lane-requirements.json new file mode 100644 index 00000000..2c03a724 --- /dev/null +++ b/config/non-evm-lane-requirements.json @@ -0,0 +1,89 @@ +{ + "schema": "non-evm-lane-requirements/v1", + "generatedAt": "2026-05-11T22:34:46.673427+00:00", + "status": "stubs_bound_repo_side", + "lanes": [ + { + "network": "solana", + "nativeAsset": "SOL", + "walletStatus": "bound_from_SOLANA_KEYPAIR_PATH_public_key", + "canonicalWallet": "9b4ebHVimuhMqbiCh6tUMMY2S48VyEHpqg5nxMMFe5Pf", + "requiredBindings": [ + "splMintAddresses", + "rentReserveTarget", + "venueMinimumLiquidity" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim native Solana liquidity until SPL mints, rent/gas, and venue inventory are bound." + }, + { + "network": "tron", + "nativeAsset": "TRX", + "walletStatus": "derived_wallet_needs_canonical_confirmation", + "canonicalWallet": "TGkbidE5LfVJZ3QGj6DaPqzCTcTe9tJDxm", + "requiredBindings": [ + "canonicalWalletApproval", + "energyBandwidthTarget", + "trc20Inventory" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim native Tron liquidity until the canonical wallet and TRC-20 inventory are confirmed." + }, + { + "network": "xrpl", + "nativeAsset": "XRP", + "walletStatus": "missing", + "canonicalWallet": null, + "requiredBindings": [ + "xrplAccount", + "destinationTagPolicy", + "trustlineIssuerPolicy", + "xrpReserveTarget" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim XRPL corridor readiness until account reserve, tags, trustlines, and wXRP controller evidence are closed." + }, + { + "network": "bitcoin", + "nativeAsset": "BTC", + "walletStatus": "missing", + "canonicalWallet": null, + "requiredBindings": [ + "btcCustodyAddress", + "proofOfReservesPolicy", + "wrappedAssetMapping", + "venueTarget" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use BTC as a planning lane only until custody/reserve evidence and wrapping policy are bound." + }, + { + "network": "dogecoin", + "nativeAsset": "DOGE", + "walletStatus": "missing", + "canonicalWallet": null, + "requiredBindings": [ + "dogeCustodyAddress", + "bridgeOrCustodyModel", + "venueTarget" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use DOGE as a planning lane only until native custody and bridge model are bound." + }, + { + "network": "hyperliquid", + "nativeAsset": "HYPE", + "walletStatus": "research_required", + "canonicalWallet": null, + "requiredBindings": [ + "chainIdentifier", + "assetIdentifier", + "custodyPath", + "venueOrApiEvidence" + ], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use HYPE only as a market-cap watch item until identifiers and custody path are verified." + } + ], + "validationRule": "A lane is claimable only after canonicalWallet, asset IDs, native gas/reserve target, venue target, and evidence source are non-TBD." +} diff --git a/config/pmm-soak-wallet-grid.json b/config/pmm-soak-wallet-grid.json index ea2dac51..ba7466ff 100644 --- a/config/pmm-soak-wallet-grid.json +++ b/config/pmm-soak-wallet-grid.json @@ -1,5 +1,8 @@ { "version": 2, + "semanticModel": { + "summary": "The 33×33×6 Elemental Imperium (EI) grid wallets in this file are the canonical Ethereum addresses designated as on-chain treasuries for sovereign nations in the DBIS/EI routing model. Operational mapping from cell (lpbca × branch × class) to a specific nation uses config/elemental-imperium-network-registry.json and overlays; legal recognition and reserve policy are outside this repo." + }, "dimensions": { "lpbcaCount": 33, "branchCount": 33, diff --git a/config/systemd/cwusdc-provider-monitor.service.example b/config/systemd/cwusdc-provider-monitor.service.example new file mode 100644 index 00000000..0bc2d427 --- /dev/null +++ b/config/systemd/cwusdc-provider-monitor.service.example @@ -0,0 +1,16 @@ +# Example install on a monitoring host with this repo checked out: +# sudo cp config/systemd/cwusdc-provider-monitor.service.example /etc/systemd/system/cwusdc-provider-monitor.service +# sudo cp config/systemd/cwusdc-provider-monitor.timer.example /etc/systemd/system/cwusdc-provider-monitor.timer +# sudo systemctl daemon-reload +# sudo systemctl enable --now cwusdc-provider-monitor.timer + +[Unit] +Description=cWUSDC provider propagation monitor +Wants=network-online.target +After=network-online.target + +[Service] +Type=oneshot +User=intlc +WorkingDirectory=/home/intlc/projects/proxmox +ExecStart=/bin/bash /home/intlc/projects/proxmox/scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh diff --git a/config/systemd/cwusdc-provider-monitor.timer.example b/config/systemd/cwusdc-provider-monitor.timer.example new file mode 100644 index 00000000..4211cc6a --- /dev/null +++ b/config/systemd/cwusdc-provider-monitor.timer.example @@ -0,0 +1,10 @@ +[Unit] +Description=Run cWUSDC provider propagation monitor daily + +[Timer] +OnCalendar=*-*-* 13:00:00 UTC +Persistent=true +RandomizedDelaySec=15m + +[Install] +WantedBy=timers.target diff --git a/docs/00-meta/BIBLE_FROM_NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md b/docs/00-meta/BIBLE_FROM_NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md new file mode 100644 index 00000000..0a7f3a4e --- /dev/null +++ b/docs/00-meta/BIBLE_FROM_NATHAN_TOKEN_LAUNCH_RESOURCE_COMPENDIUM.md @@ -0,0 +1,479 @@ +--- +title: Bible from Nathan — Token Launch Resource Compendium +alias: Bible from Nathan +document_class: master-reference +master_index_role: Cross-cutting institutional token and stablecoin launch compendium (regulatory through aggregators and checklists). Not a substitute for repo-specific canonicals below. +source_file: Token_Launch_Resource_Compendium_260510_215234.md +contributed_by: Nathan +generated: 2026-05-10 +scope: Sovereign chain / stablecoin / pegged and non-pegged token launches — institutional reference links and checklists. +note: Informational only; not legal, financial, or tax advice. URLs were verified at original generation; update before redistribution. +--- + + +## SOVEREIGN CHAIN / STABLECOIN LAUNCH +## Token Launch +## Resource Compendium +A Reference for Pegged & Non-Pegged Token Launches +## Custody · Banking · Audits · Aggregators · Regulation · Tooling +## INSTITUTIONAL-GRADE LAUNCH REFERENCE +From Legal Foundation to Mainnet +## Generated 10 May 2026 + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 2 +## Purpose & Scope +This compendium consolidates the operational, technical, financial, legal, and ecosystem resources +required to launch a sovereign Layer-1 blockchain and to issue a pegged stablecoin or any other +token across multiple chains. +It is structured to be reused for any token launch — both pegged and non-pegged — with the rigor +that institutional counterparties expect. Every link below has been verified at the time of generation. +Bookmark this PDF and treat it as a working document; update it whenever a vendor or regulator +changes. +How to use this document +Sections 1–4 are foundational and must be addressed before any contract code is deployed. Sections 5–8 +are technical infrastructure. Sections 9–11 are aggregator, monitoring, and ecosystem integrations. +Section 12 contains reusable launch checklists. The final section lists the recommended ordering and the +preliminary calls to make before writing a single line of Solidity. +Table of Contents +## 1. Regulatory & Compliance +## 2. Legal Counsel +## 3. Custody & Reserves +## 4. Banking & Fiat Rails +## 5. Smart Contract Tooling +## 6. Audits & Bug Bounty +## 7. Multisig, Timelock & Liquidity Locking +## 8. Reference Protocols & Bridge Architecture +## 9. Oracles & Monitoring +## 10. Aggregators & Data Integrity +- Block Explorers, DEXs & Launch Venues +- KYC / AML / Compliance Tooling +## 13. Reserve Attestation & Insurance +## 14. Reusable Launch Checklists +## 15. Recommended Sequencing + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 3 +## REGULATORY & COMPLIANCE +## 1. Regulatory Bodies & Frameworks +Issuing a USD-pegged stablecoin in 2026 is among the most legally exposed activities in crypto. +Architecture is downstream of legal structure — get the legal foundation in place before contract +design. Identify your primary jurisdiction first, then layer in any additional jurisdictions where you +intend to serve users. +## United States +FinCEN — Money Services Business Registration · +https://www.fincen.gov/resources/money-services-business-msb-registration +FinCEN — BSA E-File System (Form 107) · https://bsaefiling.fincen.treas.gov/ +Required filing system for MSB registration. +IRS — Money Services Business Information Center · https://www.irs.gov/businesses/small-businesses +## -self-employed/money-services-business-msb-information-center +CSBS / NMLS — State Money Transmitter Licensing · https://www.csbs.org/ +State-by-state MTL is required if serving US persons. +## European Union +ESMA — Markets in Crypto-Assets (MiCA) Hub · https://www.esma.europa.eu/esmas-activities/digital-fin +ance-and-innovation/markets-crypto-assets-regulation-mica +EBA — Stablecoin & ART/EMT Guidelines · https://www.eba.europa.eu/ +## United Kingdom +FCA — Crypto-Asset Registration · https://www.fca.org.uk/firms/cryptoassets +## Australia +AUSTRAC — Digital Currency Exchange Provider Registration · https://online.austrac.gov.au/ +AUSTRAC — DCE Guidance · https://www.austrac.gov.au/business/how-comply-and-report-guidance-and +## -resources/guidance-resources/digital-currency-exchange-providers +ASIC — Crypto-Asset Regulation · +https://asic.gov.au/regulatory-resources/digital-transformation/crypto-assets/ +## United Arab Emirates +VARA — Dubai Virtual Asset Regulatory Authority · https://www.vara.ae/ +ADGM Financial Services Regulatory Authority (Abu Dhabi) · https://www.adgm.com/ +## Singapore +MAS — Payment Services Act · https://www.mas.gov.sg/regulation/payments + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 4 +## LEGAL COUNSEL +## 2. Specialist Crypto Law Firms +Institutional credibility requires written legal opinions in every jurisdiction where the token is offered. +Engage counsel in the primary jurisdiction first, then layer in the additional jurisdictions in priority +order. +## United States +Cooley LLP — Cryptocurrency Practice · https://www.cooley.com/ +Davis Polk & Wardwell — Digital Assets · https://www.davispolk.com/ +Morrison Cohen — Crypto Group · https://www.morrisoncohen.com/ +Wilson Sonsini — Fintech & Crypto · https://www.wsgr.com/ +United Kingdom & EU +Allen Overy Shearman Sterling (A&O; Shearman) — MiCA · https://www.aoshearman.com/ +Mishcon de Reya — Crypto & Blockchain · https://www.mishcon.com/ +Bird & Bird — Crypto Regulation · https://www.twobirds.com/ +## Australia +Hall & Wilcox — Crypto & Digital Asset Practice · https://hallandwilcox.com.au/ +Piper Alderman — Blockchain & Crypto Group · https://piperalderman.com.au/ +King & Wood Mallesons — Digital Assets · https://www.kwm.com/ +## CUSTODY +## 3. Qualified Custodians +Reserves backing a stablecoin must be held in segregated custody at a qualified custodian — never +on an exchange, never in the operational treasury. Plan for redundancy across two custodians for +systemic risk reduction. +Coinbase Custody · https://www.coinbase.com/institutional/custody +NY-DFS regulated trust company. Standard institutional choice. +BitGo · https://www.bitgo.com/ +Qualified custodian, broad asset support, multi-jurisdiction. +Anchorage Digital · https://www.anchorage.com/ +OCC-chartered digital asset bank — institutional gold standard. +Fireblocks · https://www.fireblocks.com/ +MPC-based hot/warm wallet ops. Use alongside cold custody. +Copper · https://copper.co/ +ClearLoop network. Strong for trading desks. +Komainu · https://www.komainu.com/ +JV between Nomura, Ledger and CoinShares. EU-friendly. + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 5 +Standard Custody & Trust · https://www.standardcustody.com/ +NY trust, smaller and nimble for emerging issuers. + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 6 +## BANKING +## 4. Banking & Fiat Rails +Banking is the single hardest dependency in stablecoin operations. Plan redundancy across at least +two crypto-friendly institutions in different jurisdictions. Banking relationships are fragile — a single +bank failure or de-banking event can halt operations. +## United States / Global +Customers Bank — Digital Asset Banking · +https://www.customersbank.com/business/digital-asset-banking/ +Cross River Bank · https://www.crossriver.com/ +Mercury — Crypto-Adjacent Fintech Banking · https://mercury.com/ +Europe / UK / Switzerland +BCB Group — Crypto Payment & Banking · https://www.bcbgroup.com/ +AMINA Bank (Switzerland, FINMA-licensed) · https://www.aminagroup.com/ +Sygnum Bank (Switzerland) · https://www.sygnum.com/ +## Australia +Independent Reserve — Institutional Banking Layer · https://www.independentreserve.com/business +Most accessible Australian on/off ramp for crypto businesses. +Cuscal — Mutual ADI · https://www.cuscal.com.au/ +Has historically banked some Australian crypto businesses; case-by-case. +## BUILD STACK +## 5. Smart Contract Tooling +OpenZeppelin Contracts (v5) · https://github.com/OpenZeppelin/openzeppelin-contracts +ERC-20, AccessControl, upgradeable proxies, Pausable. Industry standard. +OpenZeppelin Defender · https://defender.openzeppelin.com/ +Operational layer: monitoring, multisig, automated tasks. +Hardhat · https://hardhat.org/ +Mature dev/test/deploy framework. +hardhat-deploy · https://github.com/wighawag/hardhat-deploy +Foundry · https://book.getfoundry.sh/ +Faster fuzz/invariant testing. Strongly recommended for bridge invariants. +Slither — Static Analyzer · https://github.com/crytic/slither +Echidna — Property-Based Fuzzer · https://github.com/crytic/echidna +Tenderly — Simulation & Monitoring · https://tenderly.co/ + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 7 +## SECURITY +## 6. Audits & Bug Bounty +Plan for three independent audits of any bridge, mint/burn, and PSM contracts. Different firms catch +different classes of bugs. Bug bounty must be live before mainnet. +## Tier-1 Audit Firms +Trail of Bits · https://www.trailofbits.com/ +OpenZeppelin Audits · https://www.openzeppelin.com/security-audits +ConsenSys Diligence · https://consensys.io/diligence +Spearbit · https://spearbit.com/ +Cantina (Spearbit Marketplace) · https://cantina.xyz/ +## Competitive Audit Marketplaces +Code4rena · https://code4rena.com/ +Crowd-sourced audits with strong economics. Use after a private audit. +Sherlock · https://www.sherlock.xyz/ +Audit + on-chain coverage. Combines both lines of defense. +## Other Reputable Firms +CertiK · https://www.certik.com/ +Halborn · https://www.halborn.com/ +Quantstamp · https://quantstamp.com/ +## Bug Bounty Platforms +Immunefi · https://immunefi.com/ +The only one institutional counterparties care about. $1M cap minimum. +HackenProof · https://hackenproof.com/ +## KEY MANAGEMENT +- Multisig, Timelock & LP Locking +Safe (formerly Gnosis Safe) · https://app.safe.global/ +Institutional-grade multisig. Use 4-of-7 minimum for bridge admin. +OpenZeppelin TimelockController · +https://docs.openzeppelin.com/contracts/5.x/api/governance#TimelockController +24–72hr timelock on all admin functions. Non-negotiable. +UNCX Network — LP Locker · https://app.uncx.network/ +Most established LP locker. +Team Finance — Token & LP Locker · https://www.team.finance/ +PinkSale Lockers · https://www.pinksale.finance/ + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 8 +## ARCHITECTURE REFERENCES +## 8. Reference Protocols & Bridge Architecture +## Liquidity & Pool Patterns +Curve Stableswap (the math for stablecoin pools) · https://github.com/curvefi/curve-contract +Uniswap V3 (concentrated liquidity) · https://github.com/Uniswap/v3-core +Balancer LBP (fair-launch bootstrapping) · https://docs.balancer.fi/concepts/pools/liquidity-bootstrapping +DODO PMM (Proactive Market Maker reference) · https://github.com/DODOEX/contractV2 +## Stablecoin Architecture References +MakerDAO Peg Stability Module (PSM) · https://github.com/makerdao/dss-psm +The canonical PSM implementation. Fork this pattern. +Circle USDC Smart Contracts · https://github.com/circlefin/stablecoin-evm +Institutional reference: pausable, blacklistable, upgradeable. +## Bridge Architecture References +Circle CCTP — Cross-Chain Transfer Protocol · https://www.circle.com/cross-chain-transfer-protocol +Native mint/burn — gold-standard cross-chain stablecoin pattern. +LayerZero · https://layerzero.network/ +Wormhole · https://wormhole.com/ +Axelar · https://www.axelar.network/ +Chainlink CCIP — Institutional Cross-Chain · https://chain.link/cross-chain +Hyperlane — Modular Interoperability · https://www.hyperlane.xyz/ +## PRICE & MONITORING +## 9. Oracles & Operational Monitoring +## Oracle Providers +Chainlink Data Feeds · https://docs.chain.link/data-feeds +Pyth Network — Low-Latency Institutional Feeds · https://pyth.network/ +RedStone — Modular Oracles · https://redstone.finance/ +Chronicle (formerly MakerDAO oracles) · https://chroniclelabs.org/ +## Monitoring & Threat Detection +Tenderly — Real-Time Contract Monitoring · https://tenderly.co/ +Forta — On-Chain Threat Detection · https://forta.org/ +Blocknative — Mempool Monitoring · https://www.blocknative.com/ +Dune Analytics — Public Dashboards · https://dune.com/ +The Graph — Subgraph Indexing · https://thegraph.com/ + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 9 +## DATA INTEGRITY +## 10. Aggregators & Listing +These are the surfaces where institutions and retail will see the token. Submit to all four with +consistent metadata. Link wrapped versions as additional contracts of the native token to prevent +double-counted market cap. +CoinGecko +Self-Serve Request Form (token listing, info, supply updates) · +https://support.coingecko.com/hc/en-us/articles/33084534107289-Self-Serve-Request-Form +How to List a New Cryptocurrency · https://support.coingecko.com/hc/en-us/articles/7291312302617-Ho +w-to-List-a-New-Cryptocurrency-on-CoinGecko +Support Directory (all forms) · https://support.coingecko.com/hc/en-us/articles/23960919544345-Support +-Directory-CoinGecko-Request-Forms +CoinMarketCap +Request Form (the only official channel) · https://coinmarketcap.com/request/ +Listing Criteria · https://support.coinmarketcap.com/hc/en-us/articles/360043659351-Listings-Criteria +How to Add a Coin/Token · +https://support.coinmarketcap.com/hc/en-us/articles/360016191971-How-to-Add-a-Coin-Token +DEX Screener +Token Listing Documentation · https://docs.dexscreener.com/token-listing +Enhanced Token Info (paid metadata, ~$299) · https://marketplace.dexscreener.com/product/token-info +Marketplace (advertising, trending) · https://marketplace.dexscreener.com/ +DefiLlama +Adapters Repository (TVL adapters) · https://github.com/DefiLlama/DefiLlama-Adapters +How to Submit a Project · https://docs.llama.fi/list-your-project/submit-a-project +Dimension Adapters (DEX volume, fees) · https://github.com/DefiLlama/dimension-adapters +Listing Info Edits · https://github.com/DefiLlama/defillama-server/blob/master/defi/src/protocols/data2.ts +New chain integration note +Both DEX Screener and DefiLlama require chain-level integration before they will index tokens or pools on +a new sovereign chain. Open a chain integration request with each via their Discord/contact channels — +provide RPC endpoints, a working block explorer, a stable subgraph or indexer, and at least one DEX +deployment. This is a multi-week process; start early. + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 10 +## CHAIN INFRA +- Block Explorers, DEXs & Launch Venues +Explorers (verify contracts here) +Etherscan — Verify Contract · https://etherscan.io/verifyContract +BscScan — Verify Contract · https://bscscan.com/verifyContract +Polygonscan — Verify Contract · https://polygonscan.com/verifyContract +Arbiscan — Verify Contract · https://arbiscan.io/verifyContract +Blockscout (open-source explorer for sovereign chains) · https://github.com/blockscout/blockscout +Standard self-hosted explorer. Required for DEX Screener / DefiLlama integration. +Liquidity Bootstrapping (Fair Launches) +Fjord Foundry — LBP-as-a-Service · https://www.fjordfoundry.com/ +Copper Launch · https://copperlaunch.com/ +Balancer Pools · https://balancer.fi/pools +DEXs to Deploy LPs On (Satellites) +Uniswap V3 (ETH, Arbitrum, Polygon, Base, BSC) · https://app.uniswap.org/ +PancakeSwap V3 (BSC) · https://pancakeswap.finance/ +Curve (best for stablecoin pools) · https://curve.fi/ +Balancer (multi-chain) · https://balancer.fi/ +Camelot (Arbitrum) · https://app.camelot.exchange/ +## COMPLIANCE STACK +- KYC / AML / Compliance Tooling +## Transaction Monitoring & Sanctions Screening +Chainalysis · https://www.chainalysis.com/ +TRM Labs · https://www.trmlabs.com/ +Elliptic · https://www.elliptic.co/ +KYC / KYB / Identity Verification +Sumsub · https://sumsub.com/ +Persona · https://withpersona.com/ +Jumio · https://www.jumio.com/ +Onfido · https://onfido.com/ + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 11 +## RESERVES & RISK +## 13. Reserve Attestation & Insurance +Monthly attestation by an independent firm is the institutional baseline for any reserve-backed +stablecoin. Start with mid-tier and graduate to Big Four as TVL grows. +## Reserve Attestation Firms +Armanino · https://www.armanino.com/ +Withum · https://www.withum.com/ +The Network Firm (crypto-native) · https://thenetworkfirm.com/ +Grant Thornton · https://www.grantthornton.com/ +BDO · https://www.bdo.com/ +Deloitte (Big 4 — audits Circle's USDC) · https://www.deloitte.com/ +## Insurance / Coverage +Nexus Mutual — DeFi Cover · https://nexusmutual.io/ +Sherlock — Smart Contract Coverage · https://www.sherlock.xyz/ +Evertas — Institutional Crypto Insurance · https://evertas.com/ +Native — Treasury Insurance · https://www.native-fi.com/ + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 12 +## REUSABLE +## 14. Launch Checklists +These checklists work for any token launch. The first is for pegged stablecoins. The second is for +non-pegged tokens. The third applies to every aggregator listing. The fourth applies to every +multi-chain expansion. +## Checklist A — Pegged Stablecoin Launch +## Foundation +n Legal entity in regulated jurisdiction with crypto-friendly framework +n Custodian agreement signed with qualified custodian (with redundancy) +n Banking relationship with at least two crypto-friendly banks +n Reserve composition policy documented (cash %, T-bills %) +n KYC/AML program for institutional minters +n Compliance officer designated and primary-jurisdiction registration filed +## Smart Contracts +n Token contract: ERC-20 upgradeable proxy, pausable, blacklistable +n Minting contract: multisig-gated, whitelisted minters +n PSM contract: public 1:1 swap with caps and fees +n Bridge contracts with strict supply invariant enforcement +n Locker contract for protocol-owned liquidity with timelock +n All contracts use OpenZeppelin v5 +n Three independent audits completed +n Bug bounty live on Immunefi with $1M+ cap +## Reserves +n Reserves seeded 1:1 before any mint +n Monthly attestation engagement signed +n Public reserves dashboard live +n Real-time supply API endpoint deployed +## Liquidity +n Hub pool: stableswap or V3 with $0.999–$1.001 range +n LP locked 2+ years with timelock contract +n LP held by treasury multisig (POL) +n Satellite PMMs deployed and inventory funded +n PSM deployed on every chain +## Bridge +n Two invariants enforced: wrapped supply == native locked, total supply == reserves + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 13 +n Rate limits configured (1%/hour, 5%/day starting) +n 4-of-7 multisig + 24–72hr timelock on admin +n Pause guardian configured (single-signer pause) +n Daily automated invariant check live +## Monitoring +n Price deviation alerts at 25 bps +n Auto-pause at 100 bps deviation +n Independent monitoring agent on separate infrastructure +n 24/7 incident response rota documented +## Aggregator / Data +n All contracts verified on every chain explorer +n Logo (256×256 PNG transparent), description, links prepared +n CoinGecko submission with reserve attestation +n CoinMarketCap submission with reserve attestation +n DEX Screener pairs claimed and metadata added +n DefiLlama adapter written and PR'd +n Public Supply API endpoint live +n Multi-chain contracts linked to prevent double-counting +n Transparency page with reserves, audits, attestations + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 14 +Checklist B — Non-Pegged Token Launch +## Foundation +n Tokenomics document (supply, distribution, vesting, emissions) +n Whitepaper or lite paper published +n Team / founder allocation: 12-month cliff, 36-month linear vest minimum +## Smart Contracts +n Token contract: ERC-20, ideally non-upgradeable for trust +n Vesting contracts for team / treasury +n Bridge contracts with supply invariant (if multi-chain) +n LP locker with timelock +n At least one audit (two preferred) +n Bug bounty proportional to TVL +## Launch Mechanism +n LBP for fair price discovery (strongly preferred over direct seeding) +n Hub pool seeded after LBP at discovered price +n V3 concentrated range chosen for expected volatility +n LP locked 2 years +n LP held by treasury (POL) +Multi-Chain Expansion +n PMM on each satellite chain instead of thin LPs +n Inventory matched to expected volume per chain +n PMM oracle-anchored to hub TWAP (30-min) +n Bridge with rate limits +n Multisig + timelock on bridge admin +## Oracle / Stability +n Three-source median oracle (hub TWAP + signed off-chain + Chainlink if available) +n Auto-pause at 5% deviation between sources +n Monitoring agent independent of main infrastructure +## Aggregator / Data +n Contracts verified on every chain explorer +n CoinGecko + CoinMarketCap submissions +n DEX Screener claim +n DefiLlama adapter (if protocol has TVL) +n Multi-chain contracts properly linked + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 15 +Checklist C — Aggregator Listing (every token) +n Verified contracts on every chain explorer +n Logo: 256×256 PNG with transparent background +n One-paragraph description (50–200 words) +n Long description (500–1500 words) +n Official website with HTTPS +n Twitter / X account active >30 days +n Telegram / Discord with real members +n Whitepaper PDF +n Audit reports public +n Active liquidity pools with $50k+ daily volume +n CoinGecko submission filed +n CoinMarketCap submission filed +n DEX Screener pairs claimed +n DefiLlama adapter merged (if applicable) +n All wrapped / bridged versions listed as additional contracts on the same listing +n Supply API endpoint exposed for canonical supply queries +Checklist D — Multi-Chain Expansion (any token) +n 30+ days clean operation on hub chain before expanding +n Bridge contracts audited specifically for the new chain +n Satellite chain RPC endpoints stable and redundant +n PMM (preferred) or properly-sized LP deployed +n Oracle feed extended to new chain +n Monitoring extended to new chain +n Wrapped contract verified on chain explorer +n Aggregator listings updated with new contract address +n Bridge rate limits set conservatively for first 30 days +n Documentation updated with new chain details +n Incident runbook updated for new chain failure modes + +## TOKEN LAUNCH · RESOURCE COMPENDIUMINSTITUTIONAL REFERENCE +Generated May 2026Page 16 +## EXECUTION +## 15. Recommended Sequencing +Three calls to make before writing a single line of contract code. These conversations reshape the +architecture in ways that save many multiples of their cost downstream. +01 Primary-Jurisdiction Regulator +Identify the primary jurisdiction and complete the relevant registration (e.g., AUSTRAC DCE in Australia, +FinCEN MSB in the US, MiCA authorisation in the EU). Filing fees are usually nominal; the AML/CTF +program is where consulting cost lives. +## 02 Local Crypto Counsel +Engage a specialist law firm in the primary jurisdiction. Obtain a written legal opinion on token structure, +regulatory classification, and treasury arrangements before any contract design is finalised. +03 US Crypto Counsel (if serving US persons) +If any US persons will hold or transact the token, get advice on FinCEN MSB registration, state money +transmitter implications, and SEC posture from a tier-1 US firm such as Cooley or Davis Polk. +Closing note +The technical infrastructure is the part most engineering teams already know how to build. Legal structure +determines whether the project can actually take institutional money. Sequence accordingly: legal first, +contracts second, audits third, mainnet last. The checklists above are reusable for every future launch — +pegged or non-pegged. +This document is informational and does not constitute legal, financial, or tax advice. URLs verified at time of +generation; vendor and regulatory links may change. Update before redistribution. diff --git a/docs/00-meta/CW_BRIDGE_TASK_LIST.md b/docs/00-meta/CW_BRIDGE_TASK_LIST.md index 8ab9dd50..a47378ff 100644 --- a/docs/00-meta/CW_BRIDGE_TASK_LIST.md +++ b/docs/00-meta/CW_BRIDGE_TASK_LIST.md @@ -21,7 +21,8 @@ | **CCIPWETH9Bridge.sol** (all chains) | Same: validates token == weth9, then `transfer(recipient, amount)`. **Does not mint cW*.** | | **CCIPWETH10Bridge.sol** | Same for WETH10; no cW* logic. | | **CompliantWrappedToken.sol** | Has `mint`, `burn`, and `burnFrom` (BURNER_ROLE). `burnFrom` added in Phase C1 for TwoWayTokenBridgeL2 outbound. | -| **TwoWayTokenBridgeL2.sol** | `ccipReceive` calls `IMintableERC20(mirroredToken).mint(recipient, amount)` — **would mint cW*** if `mirroredToken` = cWUSDT/cWUSDC. Outbound uses `burnFrom`; CompliantWrappedToken does not implement `burnFrom`. | +| **CWMultiTokenBridgeL1/L2.sol** | Preferred cW mint/burn bridge path. L1 locks/releases canonical c* on Chain 138; L2 mints/burns configured cW* mirrors on public chains. | +| **TwoWayTokenBridgeL2.sol** | Per-token fallback. `ccipReceive` calls `IMintableERC20(mirroredToken).mint(recipient, amount)` and outbound uses `burnFrom`. | | **DeployCWTokens.s.sol** | Grants MINTER_ROLE and BURNER_ROLE to `CW_BRIDGE_ADDRESS` (per-chain in .env). So the *address* we set will have roles, but the *contract code* at that address (CCIPWETH9Bridge/CCIPRelayBridge) never calls `mint`/`burn` on cW*. | **Conclusion:** The current bridge suite is **WETH-only**. Granting MINTER/BURNER to it allows deployment of cW* but **does not** enable cross-chain mint/burn of cW* until the receiver logic is extended or a dedicated cW* receiver is deployed. @@ -44,7 +45,7 @@ | # | Task | Owner | Notes | Status | |---|------|--------|-------|--------| -| A1 | **Decide cW* receive strategy:** (1) Extend existing CCIPWETH9Bridge/CCIPRelayBridge to support cW* mint in ccipReceive, or (2) Deploy dedicated cW* receiver per chain (e.g. TwoWayTokenBridgeL2 or new CCIPReceiverCW). | Operator/Dev | Option 2 chosen. | ✅ Done | +| A1 | **Decide cW* receive strategy:** (1) Extend existing CCIPWETH9Bridge/CCIPRelayBridge to support cW* mint in ccipReceive, or (2) Deploy dedicated cW* receiver per chain. | Operator/Dev | Option 2 chosen; preferred implementation is CWMultiTokenBridgeL1/L2. | ✅ Done | | A2 | **Document chosen approach** in `docs/07-ccip/CW_BRIDGE_APPROACH.md` (create): flow 138→chain (lock c* on 138, mint cW* on dest), chain→138 (burn cW*, release c*), and which contract(s) implement receive/send. | Dev | | ✅ Done | ### Phase B: Contract changes (if extending existing bridge) @@ -62,8 +63,8 @@ | # | Task | Owner | Notes | Status | |---|------|--------|-------|--------| | C1 | **CompliantWrappedToken:** Add `burnFrom(address from, uint256 amount)` that checks BURNER_ROLE and calls `burn(from, amount)` (or implement ERC20Burnable and grant BURNER to bridge). | Dev | Required if using TwoWayTokenBridgeL2 for outbound. | ✅ Done | -| C2 | **Deploy TwoWayTokenBridgeL2** (or new CCIPReceiverCW) per chain: constructor(router, cWUSDT, feeToken). Configure destination (Chain 138 selector, L1 bridge address). | Operator | TwoWayTokenBridgeL2 is not upgradeable; one deployment per (chain, token) or generic with token in message. See [CW_DEPLOY_AND_WIRE_RUNBOOK.md](CW_DEPLOY_AND_WIRE_RUNBOOK.md). | Pending | -| C3 | **Point CW_BRIDGE_ to new receiver** and re-run DeployCWTokens so MINTER/BURNER are on the new receiver, or grant roles to new receiver after deploy. | Operator | If receiver is separate from CCIPWETH9_BRIDGE, set CW_BRIDGE_ to receiver address. | Pending | +| C2 | **Deploy CWMultiTokenBridgeL1/L2**: L1 on Chain 138, L2 on each active public mesh chain. Configure destinations and canonical-to-mirrored token pairs. | Operator | Preferred multi-token path; TwoWayTokenBridgeL2 remains a per-token fallback. See [CW_DEPLOY_AND_WIRE_RUNBOOK.md](CW_DEPLOY_AND_WIRE_RUNBOOK.md). | Pending | +| C3 | **Point CW_BRIDGE_ to new receiver** and re-run DeployCWTokens so MINTER/BURNER are on the new receiver, or grant roles to new receiver after deploy. | Operator | If receiver is separate from CCIPWETH9_BRIDGE, set CW_BRIDGE_ to the CWMultiTokenBridgeL2 address. | Pending | | C4 | **Chain 138 send side:** Ensure a sender/bridge on 138 sends CCIP messages with receiver = new cW* receiver on destination and data encoding (recipient, amount). | Dev/Operator | Documented in [CW_BRIDGE_APPROACH.md](../07-ccip/CW_BRIDGE_APPROACH.md). | ✅ Documented | ### Phase D: Deploy cW* and wire config @@ -80,7 +81,7 @@ | # | Task | Owner | Notes | Status | |---|------|--------|-------|--------| | E1 | **Relay service (138→Mainnet):** If using CCIPRelayBridge for cW*, extend relay to support cUSDT/cUSDC: relay must send CCIP with token = cUSDT (or lock-and-mint semantics) and destination = Mainnet bridge; Mainnet bridge must mint cWUSDT. | Operator/Dev | See RELAY_BRIDGE_ADD_LINK_SUPPORT_RUNBOOK.md pattern (extend bridge or new receiver). Runbook § E1. | Operator | -| E2 | **Direct CCIP (138→chain):** If Chain 138 uses UniversalCCIPBridge or CCIPWETH9Bridge to send c* to destination, add destination config for c* and ensure receiver on destination mints cW*. | Dev | Documented in approach; runbook § E2. | Documented | +| E2 | **Direct CCIP (138→chain):** Configure CWMultiTokenBridgeL1 destinations for canonical c* and CWMultiTokenBridgeL2 token pairs so the destination receiver mints cW*. | Dev/Operator | Documented in approach; runbook § E2. | Documented | | E3 | **Test E2E:** Lock cUSDT on 138, trigger send, verify cWUSDT minted on destination to recipient. | Operator | Runbook § E3. | Operator | ### Phase F: Documentation and runbooks @@ -114,5 +115,7 @@ - [CW_DEPLOY_AND_WIRE_RUNBOOK.md](../07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md) — Operator steps for D1–D4, E1–E3. - [RELAY_BRIDGE_ADD_LINK_SUPPORT_RUNBOOK.md](../07-ccip/RELAY_BRIDGE_ADD_LINK_SUPPORT_RUNBOOK.md) (pattern for extending bridge) - `smom-dbis-138/contracts/relay/CCIPRelayBridge.sol`, `contracts/ccip/CCIPWETH9Bridge.sol` +- `smom-dbis-138/contracts/bridge/CWMultiTokenBridgeL1.sol` +- `smom-dbis-138/contracts/bridge/CWMultiTokenBridgeL2.sol` - `smom-dbis-138/contracts/bridge/TwoWayTokenBridgeL2.sol` - `smom-dbis-138/contracts/tokens/CompliantWrappedToken.sol` (includes `burnFrom` for TwoWayTokenBridgeL2) diff --git a/docs/00-meta/DEPLOY_CONFIRM_AND_FULL_E2E_RUNBOOK.md b/docs/00-meta/DEPLOY_CONFIRM_AND_FULL_E2E_RUNBOOK.md index e4952635..2a03b57f 100644 --- a/docs/00-meta/DEPLOY_CONFIRM_AND_FULL_E2E_RUNBOOK.md +++ b/docs/00-meta/DEPLOY_CONFIRM_AND_FULL_E2E_RUNBOOK.md @@ -31,7 +31,7 @@ source smom-dbis-138/.env 2>/dev/null # Or one contract: ./scripts/verify/run-contract-verification-with-proxy.sh --only Multicall ``` -Check https://explorer.d-bis.org/address/ for verification status. +Check https://explorer.d-bis.org/addresses/ for verification status. --- diff --git a/docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md b/docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md new file mode 100644 index 00000000..ea1699ca --- /dev/null +++ b/docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md @@ -0,0 +1,295 @@ +# Master reference — MetaMask Money / mUSD ↔ GRU, provider cross-links, and DefiLlama DODO (`dfio_meta_main`) TVL + +**Status:** canonical **replay and maintenance** document for work completed in-session (narrative alignment, documentation cross-references, DefiLlama DODO Chain 138 TVL diagnosis, upstream PR tracking, and machine-readable touchpoints). + +**Audience:** operators, doc maintainers, and agents who need to **reproduce**, **extend**, or **close the loop** when upstream merges or MetaMask publishes official bindings. + +**Scope boundaries:** This document does **not** replace canonical token economics or on-chain verification — use `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` (sections 5 and 8), `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md`, and `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md` for those. It **does** record **how** the repo was wired for narrative consistency, discoverability, and DefiLlama adapter follow-up. + +--- + +## 1. Executive summary — what was achieved + +| Track | Outcome | +|-------|---------| +| **A. MetaMask Money / mUSD ↔ GRU (internal narrative)** | Added a guarded subsection to the MetaMask provider matrix mapping **Money rail** and **mUSD** to hub **`cUSDC` / `cUSDC_V2`** and wrapped Mainnet **`cWUSDC`**, with explicit disclaimer until MetaMask publishes official CAIP-19 / controller bindings. | +| **B. Discoverability (cross-references)** | Linked that narrative from EIP747 packet, GRU positioning packet, CWUSDC packet, DefiLlama ecosystem map, Explorer/address canonicals, and the provider matrix DeFiLlama row. | +| **C. DefiLlama DODO TVL on `dfio_meta_main`** | Documented why per-chain breakdown can show **`dfio_meta_main: 0.00`** with a finite multi-chain **total** (e.g. ~12.36M), how PR **#19198** addresses it, and how to verify locally. | +| **D. Upstream PR alignment** | Standardized on **[DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** with verified **OPEN** state (as of **2026-05-10** in repo copy — **re-verify on GitHub** before relying on stale text). | +| **E. Machine-readable registry** | Extended `config/defillama-chain138-touchpoints.json` with **`upstreamPullRequest`**, **`upstreamPullRequestState`**, **`upstreamPullRequestStateAsOf`**, **`upstreamPullRequestLastGhCheckUtc`**, and **`docs`** keys (`dodoDfioMetaMainTvlNote`, `masterReference`, `repositoriesAndPrs`). | +| **F. Index registration** | `docs/MASTER_INDEX.md` (quick links + MetaMask + DefiLlama rows), `AGENTS.md`, `.cursor/rules/project-doc-and-deployment-refs.mdc`, `docs/00-meta/NEXT_STEPS_INDEX.md`, `docs/00-meta/TODOS_CONSOLIDATED.md`, `docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md` — this file is the **single replay** entry point. | + +--- + +## 2. Part A — MetaMask Money / mUSD ↔ GRU narrative (step-by-step) + +### 2.1 Goal + +Provide **internal DBIS / provider-facing narrative alignment** between MetaMask **Money** / **mUSD** concepts and existing GRU hub and `cW*` transport language, **without** claiming MetaMask has officially bound product strings to specific contracts. + +### 2.2 Where it lives + +**Primary file:** `docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md` + +**Subsection heading:** `### MetaMask Money rail and mUSD — internal GRU alignment (narrative)` + +**Content checklist (when editing or extending):** + +1. **Disclaimer block** at top of subsection: internal narrative only; reconcile when MetaMask publishes CAIP-19, token lists, or controller mappings. +2. **Three-column table:** External/wallet concept | GRU/DBIS interpretation | On-chain/transport anchor. +3. **Hub `cUSDC`:** address `0xf22258f57794CC8E06237084b353Ab30fFfa640b` (6 decimals) — align with canonical token rules in workspace (Explorer cross-check, chain138 token rules). +4. **Hub `cUSDC_V2`:** address `0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d` — reference `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` for `familySymbol`, `preferredForX402`, and cutover notes. +5. **Mainnet `cWUSDC`:** `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` — explicit separation from Circle-issued USDC; same submission discipline as rest of matrix. +6. **Operational rule** paragraph: link **`docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md`** for disclaimers. + +### 2.3 Cross-references added from the matrix (discoverability) + +Under the same subsection, maintain a **Cross-references (discoverability)** bullet list pointing to: + +| Target | Path | +|--------|------| +| EIP747 / contract metadata packet | `docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md` | +| GRU provider positioning | `docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md` | +| cWUSDC provider packet | `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` | +| Explorer token cross-check | `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` | +| Contract addresses reference | `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md` | +| Address matrix and status | `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md` | +| DefiLlama `dfio_meta_main` TVL note | `docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md` | + +**Maintenance rule:** When you add a new consumer doc for Money/mUSD, add **one reciprocal link** either here or in the matrix cross-ref list so navigation stays symmetric. + +### 2.4 Reciprocal edits (other files) + +Perform these when introducing the matrix subsection (or keep them in sync on edits): + +1. **`docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md`** + - Add **`## Related repo documents`** (after “Sources ingested”) with bullets to: the provider matrix (call out Money/mUSD subsection), GRU packet, CWUSDC packet. + +2. **`docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md`** + - In **Canonical References**, extend the matrix bullet to state it **includes MetaMask Money / mUSD ↔ GRU hub and `cW*` transport** (subsection title in prose). + +3. **`docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md`** + - In **Evidence Links**, extend the provider matrix row to mention Money/mUSD ↔ hub `cUSDC` / `cUSDC_V2` and Mainnet `cWUSDC`. + +4. **`docs/MASTER_INDEX.md`** + - **MetaMask / wallet price-provider submissions** row: ensure it mentions **MetaMask Money / mUSD** narrative in the matrix. + +--- + +## 3. Part B — DefiLlama DODO TVL and `dfio_meta_main` (step-by-step) + +### 3.1 Symptom to recognize + +A **per-chain** DODO (or protocol) TVL table where: + +- Major chains (e.g. `bsc`, `ethereum`, `avax`, `arbitrum`, …) show non-zero USD. +- **`dfio_meta_main`** shows **`0.00`** (DefiLlama SDK key for **Chain 138**). +- **`total`** is the sum of attributed chains and **does not** reflect meta-main liquidity you know exists on-chain. + +**Interpretation:** Usually **adapter / pricing / chain-registration** gap for Chain 138 in that protocol’s DefiLlama adapter — **not** proof of zero DODO TVL on 138. + +### 3.2 Reference note (detailed diagnosis) + +**Authoritative short doc:** `docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md` + +That file covers: + +- Symptom and **CI summary abbreviation** caveat (from upstream PR body). +- Root cause in terms of **`dfio_meta_main`** integration: `chains.json`, **`fixBalancesTokens.dfio_meta_main`** in `tokenMapping.js`, and DODO **`projects/dodo/index.js`** factory / `fromBlock` for 138. +- **Open upstream PR** link and “resolved locally vs resolved on defillama.com” table. +- Local verification command. + +**Do not duplicate** long methodology here; link and maintain **one** technical note (`DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md`). + +### 3.3 Ecosystem map and checklist (repo steps) + +1. Read **`docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`** for fork → upstream flow, methodology framing, and **open PR #19198** callout. +2. Use **`docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md`** for **defillama-server** and optional metrics **after** adapters PR merges (checklist opening paragraph ties to **#19198**). + +### 3.4 DefiLlama-Adapters fork (engineering replay) + +**Prerequisites:** Clone or use existing clone; GitHub CLI optional but recommended. + +1. **Clone fork and add upstream** + + ```bash + git clone https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters.git + cd DefiLlama-Adapters + git remote add upstream https://github.com/DefiLlama/DefiLlama-Adapters.git + git fetch upstream + ``` + +2. **Work on feature branch** (example name used in this effort) + + ```bash + git checkout feat/chain-138-dfio-meta-main-dodo + # or: git checkout -b feat/chain-138-dfio-meta-main-dodo origin/main + ``` + +3. **Implement (per PR #19198 scope — verify against current PR diff)** + + - `projects/helper/chains.json` — register **`dfio_meta_main`**. + - `projects/helper/tokenMapping.js` — **`fixBalancesTokens.dfio_meta_main`** for canonical hub **cUSDT** / **cUSDC** → CoinGecko-style IDs used by Llama pricing (`tether`, `usd-coin`), with correct decimals. + - `projects/dodo/index.js` — DODO V2 **DVM** on **`dfio_meta_main`**: factory **`0xc93870594C7f83A0aE076c2e30b494Efc526b68E`**, **`fromBlock` `3510162`** (values also in `config/defillama-chain138-touchpoints.json` under `implemented.tvlAdapter`). + + **Note:** Final balance helper (`sumTokens` vs `sumTokens2`, etc.) is whatever **upstream maintainers merge**. The operator goal is **end-to-end `dfio_meta_main` in the DODO path** plus **priced hub stables**. + +4. **Local test** + + ```bash + cd DefiLlama-Adapters + npm install # if not already + node test.js projects/dodo/index.js + ``` + + **Success signal:** Output includes a block like `--- dfio_meta_main ---` with a **non-zero** USD line (magnitude varies with on-chain balances and pricing). + +5. **Optional: grep for dfio line only** + + ```bash + node test.js projects/dodo/index.js 2>&1 | grep -E 'dfio_meta_main|^total' | tail -5 + ``` + +6. **Open / track upstream PR** + + - Open PR from fork **`Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters`** → **`DefiLlama/DefiLlama-Adapters`**. + - Canonical tracking PR used in this repo: **[#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)**. + +7. **Verify PR state (repeat whenever user asks “is it still open?”)** + + ```bash + gh pr view 19198 --repo DefiLlama/DefiLlama-Adapters --json state,title,url + ``` + + When **`state`** becomes **`MERGED`** (or PR superseded): + + - Update **`docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md`** (remove stale “verified OPEN on …” or rewrite to merged date). + - Update **`docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`** same. + - Update **`config/defillama-chain138-touchpoints.json`**: set **`upstreamPullRequestState`** to `merged` (or remove if PR number changes), refresh **`upstreamPullRequestStateAsOf`**. + +### 3.5 Provider matrix DeFiLlama row + +In **`docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md`**, external table **row 16 (DeFiLlama)** should: + +- Name **open upstream PR #19198** with full URL. +- Link fork **`Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters`**. +- Link **`DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md`** for `0.00` breakdown questions. +- Link **`CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`** and **`config/defillama-chain138-touchpoints.json`**. + +--- + +## 4. Part C — Machine-readable touchpoints (`config/defillama-chain138-touchpoints.json`) + +### 4.1 Fields introduced or standardized + +Under **`upstream`**: + +| Key | Purpose | +|-----|---------| +| `upstreamPullRequest` | Canonical HTTPS URL for the DefiLlama-Adapters PR (currently **#19198**). | +| `upstreamPullRequestState` | Short lifecycle label: e.g. **`open`**, later **`merged`** — **must be updated** when GitHub state changes. | +| `upstreamPullRequestStateAsOf` | ISO date (**YYYY-MM-DD**) of last manual or scripted verification — avoids silent staleness. | +| `upstreamPullRequestLastGhCheckUtc` | Optional UTC timestamp of last `gh pr view` (or equivalent) used to confirm PR state. | + +Existing fields **`defillamaSdkChainKey`**: **`dfio_meta_main`**, **`implemented.tvlAdapter`** (protocol `dodo`, paths, factory, `fromBlock`, stablecoin mappings) remain the **single JSON source** for scripts and humans. + +### 4.2 Doc pointers (`docs` object in JSON) + +Under **`docs`** in the same JSON file: + +| Key | Path | +|-----|------| +| `ecosystemMap` | `docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md` | +| `submissionChecklist` | `docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md` | +| `dodoDfioMetaMainTvlNote` | `docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md` | +| `masterReference` | `docs/00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md` (this replay document) | +| `repositoriesAndPrs` | `docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md` (external repos + PR status table) | + +### 4.3 Validation + +After any JSON edit: + +```bash +python3 -m json.tool config/defillama-chain138-touchpoints.json > /dev/null +``` + +--- + +## 5. Part D — MASTER_INDEX and AGENTS registration + +### 5.1 `docs/MASTER_INDEX.md` + +- **Quick links** table: includes a row for this **master reference** (alongside other 00-meta master docs). +- **MetaMask / wallet price-provider submissions** row: bundles matrix, **this master reference**, GRU/CWUSDC/EIP747 packets. +- **DefiLlama metrics ↔ Chain 138** row: references ecosystem map, TVL breakdown doc, **this master reference**, touchpoints JSON, and **#19198**. + +When adding new entry points, prefer linking **this file** once rather than duplicating long PR URLs in many tables. + +### 5.2 `AGENTS.md` + +**Quick pointers** includes **MetaMask + GRU + DefiLlama Chain 138 master replay** → path to **this file**, so IDE agents land here without searching chat history. + +--- + +## 6. Part E — Canonical external links (bookmark set) + +| Resource | URL | +|----------|-----| +| Upstream adapters PR (tracking) | https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198 | +| Upstream adapters repo | https://github.com/DefiLlama/DefiLlama-Adapters | +| Org fork | https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters | +| DefiLlama docs (methodology) | https://docs.llama.fi/ | + +--- + +## 7. Part F — Verification checklist (operator sign-off) + +- [ ] **`gh pr view 19198`** shows expected **`state`**; if merged, update all **2026-05-10 “OPEN”** notes and JSON **`upstreamPullRequestState`**. +- [ ] **`node test.js projects/dodo/index.js`** on fork branch: **`dfio_meta_main`** line present and non-zero (unless on-chain state truly empty). +- [ ] **`defillama.com`** DODO page: after merge + indexer lag, **`dfio_meta_main`** reflects non-zero (spot-check; not instant on merge day). +- [ ] Matrix **Money/mUSD** subsection still matches **`canonical-tokens.ts`** and Explorer cross-check for **cUSDC** / **cUSDC_V2** addresses. +- [ ] Cross-reference bullets in matrix still resolve (no moved files without redirects). + +--- + +## 8. Related documents (read order for new maintainers) + +1. This file (**replay + maintenance**), especially **Part G** (remaining tasks). +2. `docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md` — operational provider tracker + Money/mUSD narrative. +3. `docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md` — TVL **`0.00`** symptom and PR linkage. +4. `docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md` — DefiLlama ↔ Chain 138 map. +5. `docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md` — external repos and PR table (includes DefiLlama **#19198**). +6. `config/defillama-chain138-touchpoints.json` — machine-readable constants and PR URL. +7. `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` — canonical token list alignment (sections 5 and 8). + +--- + +--- + +## 9. Part G — Remaining tasks (rolling checklist) + +Use this section as the **authoritative “what is still left”** list for the MetaMask Money/mUSD narrative, provider cross-links, and DefiLlama DODO **`dfio_meta_main`** workstream. Update row **Status** when items close. + +| # | Task | Owner | Status | How to verify / close | +|---|------|--------|--------|------------------------| +| G1 | **Merge [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** (or equivalent upstream commit for DODO + `dfio_meta_main`) | DefiLlama maintainers + fork author | **OPEN** (2026-05-10) | `gh pr view 19198 --repo DefiLlama/DefiLlama-Adapters --json state` → `MERGED` | +| G2 | **Refresh repo docs after merge:** remove or rewrite “verified OPEN on 2026-05-10” lines | Doc maintainer | Pending G1 | `CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`, `DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md`, this file §1 / §7 | +| G3 | **Update `config/defillama-chain138-touchpoints.json`:** `upstreamPullRequestState` → `merged` (or new PR URL); `upstreamPullRequestStateAsOf` | Doc maintainer | Pending G1 | JSON valid; fields match GitHub | +| G4 | **Spot-check `defillama.com` DODO** — per-chain breakdown includes priced **`dfio_meta_main`** (allow indexer lag) | Operator | Pending G1 | Public UI vs local `node test.js projects/dodo/index.js` | +| G5 | **Optional:** `defillama-server` companion PR (chain label, DODO `chains[]`, listing copy) | Operator | Optional | `DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md` | +| G6 | **Optional:** `dimension-adapters` fees/dex for DODO on `dfio_meta_main` | Operator | Blocked on DODO GraphQL | `CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md` blockedExternal | +| G7 | **Reconcile Money/mUSD table** with MetaMask official CAIP-19 / token-list / controller docs when published | Product + doc | Pending MetaMask | Update matrix subsection + disclaimers | +| G8 | **Keep `canonical-tokens.ts` ↔ matrix ↔ Explorer cross-check** in sync whenever hub or v2 face changes | Dev + doc | Ongoing | `EXPLORER_TOKEN_LIST_CROSSCHECK.md` §5 / §8 | +| G9 | **Continue standard ladders** (unrelated to this PR but repo hygiene) | Operator | Ongoing | `run-completable-tasks-from-anywhere.sh`; `run-all-operator-tasks-from-lan.sh` (see `OPERATOR_READY_CHECKLIST.md`) | + +### 9.1 Last completed ladder (repo hygiene) + +| Step | Command | Result (2026-05-10 ~20:00 UTC) | +|------|---------|--------------------------------| +| Completable (no LAN) | `./scripts/run-completable-tasks-from-anywhere.sh --json-out reports/status/run-completable-tasks-latest.json` | Config OK, **61/61** on-chain, `run-all-validation.sh --skip-genesis` OK, non-EVM advisory OK | +| Operator (LAN) | `./scripts/run-all-operator-tasks-from-lan.sh --skip-backup` | NPMplus **40** proxy hosts updated (**0** failed); Blockscout verification submissions OK; backup skipped | + +--- + +**Document ID:** `00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md` +**Role:** single **master reference** for reproducing and maintaining the workstream above; supersede scattered chat-only instructions by updating **this file** when the process changes. diff --git a/docs/00-meta/REMAINING_WORK_BREAKDOWN_AND_ANSWERS.md b/docs/00-meta/REMAINING_WORK_BREAKDOWN_AND_ANSWERS.md index 4d81304d..6b7b2e32 100644 --- a/docs/00-meta/REMAINING_WORK_BREAKDOWN_AND_ANSWERS.md +++ b/docs/00-meta/REMAINING_WORK_BREAKDOWN_AND_ANSWERS.md @@ -107,7 +107,7 @@ | Question | Answer | |----------|--------| | **What is it?** | That address holds either Multicall or Oracle Aggregator; docs mention both. Need a single source of truth. | -| **Prerequisites** | Access to explorer (e.g. https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506). | +| **Prerequisites** | Access to explorer (e.g. https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506). | | **Who** | Operator or dev. | | **Steps to complete** | 1. Open the explorer link; check contract name/source. 2. Document in [CONTRACT_ADDRESSES_REFERENCE](../11-references/CONTRACT_ADDRESSES_REFERENCE.md) (and CONTRACT_INVENTORY if needed): “At 0x99b35... the contract is [Multicall | Oracle Aggregator].” Remove or qualify the other. | | **Where to update when done** | CONTRACT_ADDRESSES_REFERENCE § Pre-Deployed / Newly Deployed; ADDRESS_MATRIX_AND_STATUS; [REMAINING](REMAINING_COMPONENTS_TASKS_AND_RECOMMENDATIONS.md) task 19. | diff --git a/docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md b/docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md index 036eb6a7..62e0dd07 100644 --- a/docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md +++ b/docs/00-meta/REPOSITORIES_AND_PRS_CHAIN138.md @@ -1,6 +1,6 @@ # Repositories and Pull Requests — Chain 138 (Forms Submitted, Awaiting Feedback) -**Last Updated:** 2026-02-28 +**Last Updated:** 2026-05-10 **Purpose:** Single reference for all repositories you can add, connect, or submit PRs to for Chain 138 support — including wallets, explorers, on-ramps/off-ramps. **Forms have been submitted where applicable; we are awaiting feedback.** Use this doc to open or connect PRs when partners respond or when you are ready to contribute. --- @@ -13,6 +13,7 @@ | **Trust Wallet** | PR to wallet-core (materials ready) | Can open PR anytime; [ADD_CHAIN138_TO_TRUST_WALLET](../04-configuration/ADD_CHAIN138_TO_TRUST_WALLET.md) | | **Consensys / MetaMask** | Outreach (contact form, business@consensys.io) | Awaiting response; no public “add chain” PR repo for Swaps/Bridge | | **CoinGecko / CMC** | Submission via platform forms (chain/token listing) | Manual submit when ready; [CMC_COINGECKO_SUBMISSION_RUNBOOK](../04-configuration/coingecko/CMC_COINGECKO_SUBMISSION_RUNBOOK.md) | +| **DefiLlama — DODO TVL (`dfio_meta_main`)** | Open upstream PR from org fork | **OPEN:** [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) — fork [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters); replay [METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md); symptom note [../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md](../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md) | --- @@ -91,6 +92,23 @@ Chain 138 may already be listed (see chainlist.org/chain/138). If you need to ad **Master doc:** [PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md](../04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md) — single reference for adding Chain 138 USD prices to MetaMask and wallets. +**Related (provider matrix + Money/mUSD narrative + DefiLlama TVL replay):** [METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) — cross-links [METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](../04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md), EIP747 / GRU / CWUSDC packets, and DefiLlama DODO **`dfio_meta_main`** upstream **#19198**. + +--- + +## 5a. DefiLlama — TVL adapters (DODO on Chain 138) + +| Item | Detail | +|------|--------| +| **Upstream PR** | [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) — *Add dfio_meta_main (chain 138) to DODO adapter + token mappings* | +| **Status** | **OPEN** (verify on GitHub before acting; update this doc when merged) | +| **Fork** | [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters) | +| **Ecosystem map** | [../04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md](../04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md) | +| **Touchpoints JSON** | [`config/defillama-chain138-touchpoints.json`](../../config/defillama-chain138-touchpoints.json) | +| **Operator replay + remaining tasks** | [METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) **§3, §9 (Part G)** | + +**Local verify (fork clone):** `cd DefiLlama-Adapters && node test.js projects/dodo/index.js` — expect `--- dfio_meta_main ---` with non-zero TVL when adapter + pricing path is complete. + --- ## 6. CoinGecko / CoinMarketCap (submission, not PR) @@ -136,12 +154,14 @@ Most on-ramp/off-ramp providers do not accept public PRs to “add a chain”; t | **Consensys** | Use [CONSENSYS_OUTREACH_PACKAGE](../../metamask-integration/docs/CONSENSYS_OUTREACH_PACKAGE.md); await response | | **Price Feed (MetaMask/wallets)** | See [PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md](../04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md); CoinGecko, CMC, Consensys | | **CoinGecko/CMC** | Export from report API; submit via platform forms per runbook | +| **DefiLlama (DODO TVL)** | Track [DefiLlama#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198); after merge update `config/defillama-chain138-touchpoints.json` and docs per [METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) | | **On-ramps/off-ramps** | Contact each provider (MoonPay, Ramp, Transak, etc.) to request Chain 138; no public PR repos | --- ## See also +- [METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) — MetaMask Money/mUSD ↔ GRU + DefiLlama DODO **`dfio_meta_main`** master replay - [ADD_CHAIN138_TO_LEDGER_LIVE.md](../04-configuration/ADD_CHAIN138_TO_LEDGER_LIVE.md) - [ADD_CHAIN138_TO_TRUST_WALLET.md](../04-configuration/ADD_CHAIN138_TO_TRUST_WALLET.md) - [WHATS_LEFT_OPERATOR_AND_EXTERNAL.md](WHATS_LEFT_OPERATOR_AND_EXTERNAL.md) diff --git a/docs/00-meta/REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md b/docs/00-meta/REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md index 8123a131..d59dbb9f 100644 --- a/docs/00-meta/REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md +++ b/docs/00-meta/REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md @@ -1,6 +1,6 @@ # Required Fixes, Gaps, and Additional Deployments — Master List -> Historical note (2026-03-26): this master list contains older PMM verification snapshots. The current canonical Chain 138 PMM stack is `DODOPMMIntegration=0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` and `DODOPMMProvider=0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381`. +> Historical note (2026-05-10): the **live, traded** Chain 138 PMM stack is `DODOPMMIntegration=0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895` and `DODOPMMProvider=0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e`. A parallel deployment (`0x5BDc62f1…` / `0x5CAe6Ce1…`) has seeded but un-traded pools — do not treat it as canonical. Source: [ADDRESS_MATRIX_AND_STATUS.md](../11-references/ADDRESS_MATRIX_AND_STATUS.md), [EXPLORER_TOKEN_LIST_CROSSCHECK.md](../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md). **Last Updated:** 2026-03-04 **Purpose:** Single consolidated list of all required fixes, gaps, and additional deployments. Sources: REQUIRED_FIXES_AND_DEPLOYMENTS_STATUS, REMAINING_SUMMARY, TOKEN_CONTRACT_DEPLOYMENTS_REMAINING, PRE_DEPLOYMENT_CHECKLIST, RECOMMENDATIONS_AND_FIXES_BEFORE_DEPLOY, DETAILED_GAPS_AND_ISSUES_LIST, GAPS_STATUS, WHATS_LEFT_OPERATOR_AND_EXTERNAL, and token-aggregation build. diff --git a/docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md b/docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md index 8457e6a1..22b902c2 100644 --- a/docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md +++ b/docs/00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md @@ -70,7 +70,7 @@ Requires: SSH to Proxmox host (e.g. `root@192.168.11.10` or r630-01/r630-02). Se | DBIS Core containers (6) | `./dbis_core/scripts/deployment/create-dbis-core-containers.sh` | Creates 10100, 10101, 10120, 10150, 10151, 10130 on PROXMOX_HOST. | | Create missing RPC containers | `./scripts/create-missing-containers-2506-2508.sh` (if VMIDs 2506–2508 needed) | Per VMID allocation. | | Chain 138 containers | `./scripts/create-chain138-containers.sh` (if defined) | Besu/RPC/explorer as per docs. | -| Spread VMs across nodes | Prefer r630-01 / r630-02 for new VMs to balance load; ml110 already has 34 containers | See PROXMOX_COMPLETE_RECOMMENDATIONS. | +| Spread VMs across nodes | Prefer balancing across **r630-01** … **r630-04**; **ml110** currently has **0** guests but stays low-spec — see [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md) | See PROXMOX_COMPLETE_RECOMMENDATIONS. | --- @@ -111,7 +111,7 @@ From repo root, with `smom-dbis-138/.env` and RPC reachable: |------|--------|--------| | Reconcile .env | `./scripts/verify/reconcile-env-canonical.sh --print` | Emit canonical lines; merge into smom-dbis-138/.env. | | Update CONTRACT_ADDRESSES_REFERENCE and master JSON | Add any new addresses to `config/smart-contracts-master.json` and [CONTRACT_ADDRESSES_REFERENCE](../11-references/CONTRACT_ADDRESSES_REFERENCE.md) | Keep CONTRACT_INVENTORY in sync. | -| Verify on explorer | Open https://explorer.d-bis.org/address/ for new contracts | Confirm bytecode and verification. | +| Verify on explorer | Open https://explorer.d-bis.org/addresses/ for new contracts | Confirm bytecode and verification. | --- diff --git a/docs/02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md b/docs/02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md index 0091acb9..b7fb0f44 100644 --- a/docs/02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md +++ b/docs/02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md @@ -1,14 +1,23 @@ # Proxmox Cluster Architecture -**Last Updated:** 2025-01-20 -**Document Version:** 1.0 -**Status:** Active Documentation +**Last Updated:** 2026-05-09 +**Document Version:** 1.1 +**Status:** Active Documentation + +**Live reconcile:** `pvesh get /nodes`, `/cluster/resources`, `pvecm status`, `pvesm status` via SSH to cluster members (LAN). Physical DIMM totals may exceed **cluster-reported `maxmem`** on some nodes; runtime figures below follow the API. --- ## Overview -This document describes the Proxmox cluster architecture, including node configuration, storage setup, network bridges, and VM/container distribution. +This document summarizes the **five-node** Proxmox VE cluster (**name `h`**), storage footprint, and **LXC/QEMU placement**. Authoritative VMID/IP/FQDN detail remains in [`../04-configuration/ALL_VMIDS_ENDPOINTS.md`](../04-configuration/ALL_VMIDS_ENDPOINTS.md). + +| Item | Live value (2026-05-09) | +|------|-------------------------| +| **Proxmox VE** | `pve-manager/9.1.7` (kernel **6.17.13-2-pve** on all nodes) | +| **Quorum** | **Quorate** — 5 votes, expected 5 | +| **Guests (running)** | **136** LXC + QEMU cluster-wide | +| **Guests on ml110** | **0** (workloads run on **r630-01** … **r630-04**) | --- @@ -17,82 +26,70 @@ This document describes the Proxmox cluster architecture, including node configu ```mermaid graph TB Cluster[Proxmox Cluster
Name: h] - - ML110[ML110 Management Node
192.168.11.10
6 cores, 125GB RAM] - R6301[R630-01
192.168.11.11
32 cores, 503GB RAM] - R6302[R630-02
192.168.11.12
32 cores, 503GB RAM] - R6303[R630-03
192.168.11.13
32 cores, 512GB RAM] - R6304[R630-04
192.168.11.14
32 cores, 512GB RAM] - + + ML110[ML110
192.168.11.10
6 cores · ~63 GiB reported RAM
0 guests] + R6301[r630-01
192.168.11.11
32 cores · ~126 GiB RAM
57 guests] + R6302[r630-02
192.168.11.12
56 cores · ~126 GiB RAM
41 guests] + R6303[r630-03
192.168.11.13
32 cores · ~126 GiB RAM
19 guests] + R6304[r630-04
192.168.11.14
32 cores · ~126 GiB RAM
19 guests] + Cluster --> ML110 Cluster --> R6301 Cluster --> R6302 Cluster --> R6303 Cluster --> R6304 - - ML110 --> Storage1[local: 94GB
local-lvm: 813GB] - R6301 --> Storage2[local: 536GB
local-lvm: Available] - R6302 --> Storage3[local: Available
local-lvm: Available] - R6303 --> Storage4[Storage: Available] - R6304 --> Storage5[Storage: Available] - - ML110 --> Bridge1[vmbr0
VLAN-aware] - R6301 --> Bridge2[vmbr0
VLAN-aware] - R6302 --> Bridge3[vmbr0
VLAN-aware] - R6303 --> Bridge4[vmbr0
VLAN-aware] - R6304 --> Bridge5[vmbr0
VLAN-aware] + + ML110 --> S0[Thin pools ~1.7TB data — nearly empty] + R6301 --> S1[local + thin1 + data — high utilization] + R6302 --> S2[thin1-r630-02 … thin6 — active] + R6303 --> S3[data + thin*-r630-03 pools] + R6304 --> S4[data + mev-local-lvm] ``` --- ## Cluster Nodes -### Node Summary +### Node summary -| Hostname | IP Address | CPU | RAM | Storage | VMs/Containers | Status | -|----------|------------|-----|-----|---------|----------------|--------| -| ml110 | 192.168.11.10 | 6 cores @ 1.60GHz | 125GB | local (94GB), local-lvm (813GB) | 34 | ✅ Active | -| r630-01 | 192.168.11.11 | 32 cores @ 2.40GHz | 503GB | local (536GB), local-lvm (available) | 0 | ✅ Active | -| r630-02 | 192.168.11.12 | 32 cores @ 2.40GHz | 503GB | local (available), local-lvm (available) | 0 | ✅ Active | -| r630-03 | 192.168.11.13 | 32 cores | 512GB | Available | 0 | ✅ Active | -| r630-04 | 192.168.11.14 | 32 cores | 512GB | Available | 0 | ✅ Active | +| Hostname | IP Address | CPU | RAM (API) | Cluster disk metric¹ | LXC/QEMU | Status | +|----------|------------|-----|-----------|----------------------|----------|--------| +| ml110 | 192.168.11.10 | 6 @ 1.60GHz | ~63 GiB max | ~94 GiB | **0** | online | +| r630-01 | 192.168.11.11 | 32 @ 2.40GHz | ~126 GiB max | ~353 GiB | **57** | online | +| r630-02 | 192.168.11.12 | 56 @ 2.00GHz | ~126 GiB max | ~196 GiB | **41** | online | +| r630-03 | 192.168.11.13 | 32 cores | ~126 GiB max | ~94 GiB | **19** | online | +| r630-04 | 192.168.11.14 | 32 cores | ~126 GiB max | ~78 GiB | **19** | online | + +¹ **`maxdisk`** from `/cluster/resources` node entries — useful for relative sizing; per-pool detail is on each node (`pvesm status`). + +### Memory (cluster API) + +| Node | Used (approx.) | Total (reported) | Usage % | +|------|----------------|------------------|---------| +| ml110 | 2 GiB | 62 GiB | ~3.5% | +| r630-01 | 83 GiB | 125 GiB | ~66% | +| r630-02 | 77 GiB | 125 GiB | ~62% | +| r630-03 | 77 GiB | 125 GiB | ~62% | +| r630-04 | 21 GiB | 125 GiB | ~17% | --- ## Storage Configuration -### Storage Types +### Types -**local (Directory Storage):** -- Type: Directory-based storage -- Used for: ISO images, container templates, backups -- Location: `/var/lib/vz` +- **`local`:** directory (`/var/lib/vz`) — ISOs, templates, backups +- **`local-lvm` / `data` / `thin*`:** LVM-thin guest disks (node-specific names) -**local-lvm (LVM Thin Storage):** -- Type: LVM thin provisioning -- Used for: VM/container disk images -- Benefits: Thin provisioning, snapshots, efficient space usage +### Snapshot by host (`pvesm status`, 2026-05-09) -### Storage by Node +- **ml110:** `data` / `local-lvm` thin pools ~1.7TB each — **~0.03%** used; **`local`** ~77 GiB free of ~94 GiB. +- **r630-01:** **`thin1`** and **`data`**/**`local-lvm`** — **~60–77%** used on thin pools; **`local`** ~345 GiB free of ~532 GiB. +- **r630-02:** **`thin1-r630-02`** … **`thin6`** — active; utilization **~4–58%** per pool (varies by pool); **`local`** ~190 GiB free. +- **r630-03:** **`data`**/**`local-lvm`** ~31% used; **`thin1-r630-03`** … **`thin6-r630-03`** — several active (some **0%** used). +- **r630-04:** **`data`**/**`local-lvm`** ~36% used; **`mev-local-lvm`** ~7% used. -**ml110:** -- `local`: 94GB total, 7.4GB used (7.87%) -- `local-lvm`: 813GB total, 214GB used (26.29%) -- Status: ✅ Active and operational - -**r630-01:** -- `local`: 536GB total, 0% used -- `local-lvm`: Available (needs activation) -- Status: ⏳ Storage available, ready for use - -**r630-02:** -- `local`: Available -- `local-lvm`: Available (needs activation) -- Status: ⏳ Storage available, ready for use - -**r630-03/r630-04:** -- Storage: Available -- Status: ⏳ Ready for configuration +**Note:** Disabled pool stubs (e.g. foreign node names) may still appear in `pvesm` output; rely on **active** rows for capacity planning. --- @@ -115,136 +112,52 @@ iface vmbr0 inet static bridge-vids 11 110 111 112 120 121 130 132 133 134 140 141 150 160 200 201 202 203 ``` -**Bridge Features:** -- **VLAN-aware:** Supports multiple VLANs on single bridge -- **Native VLAN:** 11 (MGMT-LAN) -- **Tagged VLANs:** All service VLANs (110-203) -- **802.1Q Trunking:** Enabled for VLAN support +**Bridge features:** VLAN-aware; native VLAN 11 (MGMT-LAN); tagged service VLANs per [`NETWORK_ARCHITECTURE.md`](NETWORK_ARCHITECTURE.md). --- ## VM/Container Distribution -### Current Distribution +| Node | Running guests | Notes | +|------|----------------|-------| +| ml110 | **0** | Cluster member; no LXC/QEMU registered on this node in API | +| r630-01 | **57** | Highest guest count | +| r630-02 | **41** | Includes NPMplus, infra CTs per inventory docs | +| r630-03 | **19** | Besu / RPC capacity | +| r630-04 | **19** | Besu / Gov portals / additional workloads | -**ml110 (192.168.11.10):** -- **Total:** 34 containers/VMs -- **Services:** All current services running here -- **Breakdown:** - - Besu validators: 5 (VMIDs 1000-1004) - - Besu sentries: 4 (VMIDs 1500-1503) - - Besu RPC: 3+ (VMIDs 2500-2502+) - - Blockscout: 1 (VMID 5000) - - DBIS services: Multiple - - Other services: Various - -**r630-01, r630-02, r630-03, r630-04:** -- **Total:** 0 containers/VMs -- **Status:** Ready for VM migration/deployment +For VMID → IP → node mapping, use [`../04-configuration/ALL_VMIDS_ENDPOINTS.md`](../04-configuration/ALL_VMIDS_ENDPOINTS.md) and `scripts/verify/check-cluster-besu-inventory.sh`. --- ## High Availability -### Current Setup - -- **Cluster Name:** "h" -- **HA Mode:** Active/Standby (manual) -- **Quorum:** 3+ nodes required for quorum -- **Storage:** Local storage (not shared) - -### HA Considerations - -**Current Limitations:** -- No shared storage (each node has local storage) -- Manual VM migration required -- No automatic failover - -**Future Enhancements:** -- Consider shared storage (NFS, Ceph, etc.) for true HA -- Implement automatic VM migration -- Configure HA groups for critical services +- **Cluster:** corosync **quorate** (5 nodes). +- **Storage:** primarily **local / node-local thin pools** — plan migrations explicitly; no cluster-wide shared disk assumed here. +- **HA groups:** configure in UI/API if automatic failover is required for specific VMIDs. --- -## Resource Allocation +## Storage Recommendations (planning) -### CPU Resources - -| Node | CPU Cores | CPU Usage | Available | -|------|-----------|-----------|-----------| -| ml110 | 6 @ 1.60GHz | High | Limited | -| r630-01 | 32 @ 2.40GHz | Low | Excellent | -| r630-02 | 32 @ 2.40GHz | Low | Excellent | -| r630-03 | 32 cores | Low | Excellent | -| r630-04 | 32 cores | Low | Excellent | - -### Memory Resources - -| Node | Total RAM | Used | Available | Usage % | -|------|-----------|------|-----------|---------| -| ml110 | 125GB | 94GB | 31GB | 75% ⚠️ | -| r630-01 | 503GB | ~5GB | ~498GB | 1% ✅ | -| r630-02 | 503GB | ~5GB | ~498GB | 1% ✅ | -| r630-03 | 512GB | Low | High | Low ✅ | -| r630-04 | 512GB | Low | High | Low ✅ | - ---- - -## Storage Recommendations - -### For R630 Nodes - -**Boot Drives (2×600GB):** -- **Recommended:** ZFS mirror or hardware RAID1 -- **Purpose:** Proxmox OS and boot files -- **Benefits:** Redundancy, data integrity - -**Data SSDs (6×250GB):** -- **Option 1:** ZFS striped mirrors (3 pairs) - - Capacity: ~750GB usable - - Performance: High - - Redundancy: Good - -- **Option 2:** ZFS RAIDZ1 (5 drives + 1 parity) - - Capacity: ~1.25TB usable - - Performance: Good - - Redundancy: Single drive failure tolerance - -- **Option 3:** ZFS RAIDZ2 (4 drives + 2 parity) - - Capacity: ~1TB usable - - Performance: Good - - Redundancy: Dual drive failure tolerance +Boot vs data disk layout remains node-specific. For new pools, follow thin provisioning discipline and monitor **`thin`** pool **%** on **r630-01** and **r630-02** (historically stressed pools during explorer incidents). --- ## Network Recommendations -### VLAN Configuration - -**All Proxmox hosts should:** -- Use VLAN-aware bridge (vmbr0) -- Support all 19 VLANs -- Maintain native VLAN 11 for management -- Enable 802.1Q trunking on physical interfaces - -### Network Performance - -- **Link Speed:** Ensure 1Gbps or higher for trunk ports -- **Jumbo Frames:** Consider enabling if supported -- **Bonding:** Consider link aggregation for redundancy +- Trunk links at **1 Gbps+**; **`r630-02`** NICs support **10 Gbps** where the switch allows. +- See **[NETWORK_ARCHITECTURE.md](NETWORK_ARCHITECTURE.md)** for VLAN inventory. --- ## Related Documentation -- **[NETWORK_ARCHITECTURE.md](NETWORK_ARCHITECTURE.md)** ⭐⭐⭐ - Network architecture with VLAN plan -- **[PHYSICAL_HARDWARE_INVENTORY.md](PHYSICAL_HARDWARE_INVENTORY.md)** ⭐⭐⭐ - Physical hardware inventory -- **[PROXMOX_COMPREHENSIVE_REVIEW.md](PROXMOX_COMPREHENSIVE_REVIEW.md)** ⭐⭐ - Comprehensive Proxmox review -- **[ORCHESTRATION_DEPLOYMENT_GUIDE.md](ORCHESTRATION_DEPLOYMENT_GUIDE.md)** ⭐⭐⭐ - Deployment orchestration +- **[NETWORK_ARCHITECTURE.md](NETWORK_ARCHITECTURE.md)** — VLAN plan +- **[PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md](PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md)** — DIMMs, disks, NIC models (physical) +- **[PROXMOX_COMPREHENSIVE_REVIEW.md](PROXMOX_COMPREHENSIVE_REVIEW.md)** — historical deep-dive (**partially superseded** by this file for placement counts) +- **[../03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md](../03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md)** — where to create **new** CTs/VMs --- -**Last Updated:** 2025-01-20 -**Document Version:** 1.0 -**Review Cycle:** Quarterly +**Review cycle:** Quarterly or after major migrations. diff --git a/docs/02-architecture/PROXMOX_COMPREHENSIVE_REVIEW.md b/docs/02-architecture/PROXMOX_COMPREHENSIVE_REVIEW.md index 34c330fc..2d9c9b9c 100644 --- a/docs/02-architecture/PROXMOX_COMPREHENSIVE_REVIEW.md +++ b/docs/02-architecture/PROXMOX_COMPREHENSIVE_REVIEW.md @@ -1,6 +1,8 @@ # Proxmox VE Comprehensive Configuration Review -**Last Updated:** 2025-01-20 +**Supersession:** Placement counts, storage enablement, and guest distribution in much of this document reflect **2025** cluster state. **Current** cluster topology (guests per node, PVE version, memory use) is maintained in **[PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md)** (reconcile **2026-05-09**). Retain this file for historical procedure (hostname migration, IP audit methodology). + +**Last Updated:** 2026-05-09 **Document Version:** 1.0 **Status:** Active Documentation @@ -14,10 +16,9 @@ - [x] Proxmox services verified (all operational) - [x] Storage configuration reviewed -### ⚠️ Issues Identified -- r630-01 and r630-02 have LVM thin storage **disabled** -- All VMs/containers currently on ml110 only -- Storage not optimized for performance on r630-01/r630-02 +### ⚠️ Issues Identified (historical snapshot — verify against live docs) + +- Older notes cited **r630-01**/**02** LVM disabled and **all guests on ml110** — **obsolete**: guest placement has migrated; see [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md). --- @@ -43,15 +44,8 @@ ssh root@192.168.11.12 "hostname" # Returns: r630-02 ✅ ## IP Address Audit - COMPLETE ✅ ### Results -- **Total VMs/Containers:** 34 with static IPs -- **IP Conflicts:** 0 ✅ -- **Invalid IPs:** 0 ✅ -- **DHCP IPs:** 2 (VMIDs 3500, 3501) - -### All VMs Currently On -- **ml110** (192.168.11.10): All 34 VMs/containers -- **r630-01** (192.168.11.11): 0 VMs/containers -- **r630-02** (192.168.11.12): 0 VMs/containers +- **Total VMs/Containers (historical IP audit):** 34 with static IPs — **superseded**; live cluster **136** guests (not on ml110 only). See [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md). +- **ml110** (192.168.11.10): **0** cluster guests (2026-05-09); table below is historical ### IP Allocation Summary | IP Range | Count | Purpose | @@ -80,85 +74,46 @@ ssh root@192.168.11.12 "hostname" # Returns: r630-02 ✅ | Property | Value | Status | |----------|-------|--------| | **Hostname** | ml110 | ✅ Correct | -| **Proxmox Version** | 9.1.0 (kernel 6.17.4-1-pve) | ✅ Current | +| **Proxmox Version** | 9.1.7 (kernel 6.17.13-2-pve) | ✅ Current | | **CPU** | Intel Xeon E5-2603 v3 @ 1.60GHz (6 cores) | ⚠️ Older, slower | -| **Memory** | 125GB total, 94GB used, 31GB available | ⚠️ High usage | -| **Storage - local** | 94GB total, 7.4GB used (7.87%) | ✅ Good | -| **Storage - local-lvm** | 813GB total, 214GB used (26.29%) | ✅ Active | -| **VMs/Containers** | 34 total | ✅ All here | +| **Memory** | ~63 GiB reported (`maxmem`); ~3.5% used (API **2026-05-09**) | ✅ Low vs historical 75% narrative | +| **Storage - local** | ~94 GiB dir — see `pvesm` | ✅ | +| **Storage - local-lvm / data** | Thin pools ~1.8TB — nearly empty | ✅ | +| **VMs/Containers** | **0** on node (**2026-05-09**) | ✅ | -**Storage Details:** -- `local`: Directory storage, active, 94GB available -- `local-lvm`: LVM thin, active, 600GB available -- `thin1-thin6`: Configured but disabled (not in use) +**Storage Details (live snapshot — use `pvesm status` on host):** +- **`local`:** directory ISO/template store (~94 GiB). +- **`data` / `local-lvm`:** shared thin pool name — **~0.03%** used on **2026-05-09** (nearly empty). **Recommendations:** -- ⚠️ **CPU is older/slower** - Consider workload distribution -- ⚠️ **Memory usage high (75%)** - Monitor closely -- ✅ **Storage well configured** - LVM thin active and working +- **CPU** remains weaker than **r630-*** — bias new workloads to Dell nodes unless intentional. +- **Memory pressure narrative superseded** — API shows **~3.5%** used (**2026-05-09**). ### r630-01 (192.168.11.11) - Previously "pve" -| Property | Value | Status | -|----------|-------|--------| -| **Hostname** | r630-01 | ✅ Migrated | -| **Proxmox Version** | 9.1.0 (kernel 6.17.4-1-pve) | ✅ Current | -| **CPU** | Intel Xeon E5-2630 v3 @ 2.40GHz (32 cores) | ✅ Good | -| **Memory** | 503GB total, 6.4GB used, 497GB available | ✅ Excellent | -| **Storage - local** | 536GB total, 0.1GB used (0.00%) | ✅ Available | -| **Storage - local-lvm** | **DISABLED** | ⚠️ **Issue** | -| **Storage - thin1-thin6** | **DISABLED** | ⚠️ **Issue** | -| **VMs/Containers** | 0 | ⏳ Ready for deployment | +> **Current operations:** See [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md) — **57** guests, **~66%** memory use, **thin1**/**data** pools in active use. The table below is a **2025** snapshot; do not use for capacity planning. -**Storage Details:** -- **Volume Group:** `pve` exists with 2 physical volumes -- **Thin Pools:** `data` (200GB) and `thin1` (208GB) exist -- **Disks:** 4 disks (sda, sdb: 558GB each; sdc, sdd: 232GB each) -- **LVM Setup:** Properly configured -- **Storage Config Issue:** Storage configured but node references point to "pve" (old hostname) or "pve2" - -**Issues:** -- ⚠️ **Storage configured but node references outdated** - Points to "pve" instead of "r630-01" -- ⚠️ **Storage may show as disabled** - Due to hostname mismatch in config -- ⚠️ **Need to update storage.cfg** - Update node references to r630-01 - -**Recommendations:** -- 🔴 **CRITICAL:** Enable local-lvm storage to use existing LVM thin pools -- 🔴 **CRITICAL:** Activate thin1 storage for better performance -- ✅ **Ready for VMs** - Excellent resources available +| Property | Value (historical) | Status | +|----------|--------------------|--------| +| **Proxmox Version** | 9.1.7 (kernel 6.17.13-2-pve) | ✅ Current build | +| **VMs/Containers** | 0 in 2025 table | **Superseded** — see cluster doc | ### r630-02 (192.168.11.12) - Previously "pve2" -| Property | Value | Status | -|----------|-------|--------| -| **Hostname** | r630-02 | ✅ Migrated | -| **Proxmox Version** | 9.1.0 (kernel 6.17.4-1-pve) | ✅ Current | -| **CPU** | Intel Xeon E5-2660 v4 @ 2.00GHz (56 cores) | ✅ Excellent | -| **Memory** | 251GB total, 4.4GB used, 247GB available | ✅ Excellent | -| **Storage - local** | 220GB total, 0.1GB used (0.06%) | ✅ Available | -| **Storage - local-lvm** | **DISABLED** | ⚠️ **Issue** | -| **Storage - thin1-thin6** | **DISABLED** | ⚠️ **Issue** | -| **VMs/Containers** | 0 | ⏳ Ready for deployment | +> **Current operations:** See [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md) — **41** guests; **`thin1-r630-02` … `thin6`** pools active. Historical “all disabled” narrative below is **obsolete**. -**Storage Details:** -- Need to check LVM configuration (command timed out) -- Storage shows as disabled in Proxmox - -**Issues:** -- ⚠️ **Storage configured but node references outdated** - Points to "pve2" instead of "r630-02" -- ⚠️ **VMs already exist on storage** - Need to verify they're accessible -- ⚠️ **Need to update storage.cfg** - Update node references to r630-02 - -**Recommendations:** -- 🔴 **CRITICAL:** Check and configure LVM storage -- 🔴 **CRITICAL:** Enable local-lvm or thin storage -- ✅ **Ready for VMs** - Excellent resources available +| Property | Value (historical) | Status | +|----------|----------------------|--------| +| **Proxmox Version** | 9.1.7 (kernel 6.17.13-2-pve) | ✅ Current build | +| **VMs/Containers** | 0 in 2025 table | **Superseded** — see cluster doc | --- ## Storage Configuration Analysis -### Current Storage Status +> **Migration-era inventory:** Tables and `sed` recipes in this section date from hostname/storage fixes. **Confirm with `pvesm status` on each host** before changing `/etc/pve/storage.cfg`. Live snapshot: **2026-05-09**. + +### Current Storage Status (historical UI export — audit only) | Host | Storage Type | Status | Size | Usage | Recommendation | |------|--------------|--------|------|-------|----------------| @@ -224,7 +179,7 @@ done ### 2. Distribute VMs Across Hosts ⚠️ RECOMMENDED -**Current State:** All 34 VMs on ml110 (overloaded) +**Current State (superseded narrative):** Guests are distributed across **r630-01** … **r630-04** (**136** running, **2026-05-09**). **Recommendation:** - Migrate some VMs to r630-01 and r630-02 @@ -478,6 +433,6 @@ pvecm nodes --- -**Last Updated:** 2025-01-20 +**Last Updated:** 2026-05-09 **Document Version:** 1.0 **Review Cycle:** Quarterly diff --git a/docs/02-architecture/PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md b/docs/02-architecture/PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md index bcc2061d..39647df3 100644 --- a/docs/02-architecture/PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md +++ b/docs/02-architecture/PROXMOX_HOSTS_COMPLETE_HARDWARE_CONFIG.md @@ -1,6 +1,6 @@ # Proxmox Hosts — Complete Hardware Configuration -**Last Updated:** 2026-02-13 +**Last Updated:** 2026-05-09 **Document Version:** 1.0 **Status:** Active Documentation **Source:** Live query from hosts via `lspci`, `ethtool`, `ip link` @@ -9,7 +9,7 @@ ## Overview -Complete hardware specifications for the three Proxmox VE hosts, including CPU, memory, storage, and **all NIC models** with interface mapping and link status. +Complete hardware specifications for **three** Proxmox VE hosts (detailed NIC inventory). The **five-node** cluster also includes **r630-03** and **r630-04** — see [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md) for live counts. --- @@ -19,10 +19,10 @@ Complete hardware specifications for the three Proxmox VE hosts, including CPU, |-----------|---------------| | **Manufacturer** | HP | | **Model** | ProLiant ML110 Gen9 | -| **Proxmox** | 9.1.0, kernel 6.17.4-1-pve | +| **Proxmox** | 9.1.7, kernel 6.17.13-2-pve | | **CPU** | Intel Xeon E5-2603 v3 @ 1.60 GHz | | **Cores** | 6 (1 socket × 6 cores) | -| **RAM** | 125 GiB | +| **RAM** | 125 GiB installed (cluster API **~63 GiB** `maxmem` for scheduling — see [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md)) | | **Storage** | 2× ST1000DM003-1ER162 (931.5 GB 7.2k HDD each) | | **Storage layout** | LVM-thin (data, local-lvm) + local dir | | **Network** | vmbr0 bridge | @@ -45,10 +45,10 @@ Complete hardware specifications for the three Proxmox VE hosts, including CPU, |-----------|---------------| | **Manufacturer** | Dell Inc. | | **Model** | PowerEdge R630 | -| **Proxmox** | 9.1.0, kernel 6.17.4-1-pve | +| **Proxmox** | 9.1.7, kernel 6.17.13-2-pve | | **CPU** | Intel Xeon E5-2630 v3 @ 2.40 GHz | | **Cores** | 32 (2 sockets × 8 cores) | -| **RAM** | 503 GiB | +| **RAM** | ~126 GiB (`maxmem` API **2026-05-09**); prior builds cited different installed totals — verify DIMMs if needed | | **Storage** | 2× HUC109060CSS600 (559 GB enterprise SSD boot) + 6× Crucial CT250MX500SSD1 (233 GB SATA SSD) + DVD-ROM | | **Storage layout** | LVM-thin (data, local-lvm, thin1) + local dir | | **Network** | vmbr0 bridge | @@ -73,10 +73,10 @@ Complete hardware specifications for the three Proxmox VE hosts, including CPU, |-----------|---------------| | **Manufacturer** | Dell Inc. | | **Model** | PowerEdge R630 | -| **Proxmox** | 9.1.0, kernel 6.17.4-1-pve | +| **Proxmox** | 9.1.7, kernel 6.17.13-2-pve | | **CPU** | Intel Xeon E5-2660 v4 @ 2.00 GHz | | **Cores** | 56 (2 sockets × 14 cores) | -| **RAM** | 251 GiB | +| **RAM** | ~126 GiB (`maxmem` API **2026-05-09**); prior doc 251 GiB — reconcile with DIMM audit | | **Storage** | 8× Crucial CT250MX500SSD1 (233 GB SATA SSD each) | | **Storage layout** | LVM-thin (thin1-r630-02, thin2–thin6) + local dir | | **Network** | vmbr0 bridge (VLAN-aware) | diff --git a/docs/03-deployment/BLOCKSCOUT_FIX_RUNBOOK.md b/docs/03-deployment/BLOCKSCOUT_FIX_RUNBOOK.md index c480640b..03eb407a 100644 --- a/docs/03-deployment/BLOCKSCOUT_FIX_RUNBOOK.md +++ b/docs/03-deployment/BLOCKSCOUT_FIX_RUNBOOK.md @@ -139,7 +139,7 @@ BLOCKSCOUT_URL=http://192.168.11.140:4000 node forge-verification-proxy/server.j ### Fallbacks - **Nginx fix:** `./scripts/fix-blockscout-forge-verification.sh` then retry (may still fail due to API format) -- **Manual verification:** https://explorer.d-bis.org/address/#verify-contract +- **Manual verification:** https://explorer.d-bis.org/addresses/#verify-contract --- diff --git a/docs/03-deployment/CONTRACT_DEPLOYMENT_RUNBOOK.md b/docs/03-deployment/CONTRACT_DEPLOYMENT_RUNBOOK.md index 304a24f8..4c39bca5 100644 --- a/docs/03-deployment/CONTRACT_DEPLOYMENT_RUNBOOK.md +++ b/docs/03-deployment/CONTRACT_DEPLOYMENT_RUNBOOK.md @@ -342,7 +342,7 @@ BLOCKSCOUT_URL=http://192.168.11.140:4000 node forge-verification-proxy/server.j ./scripts/verify-contracts-blockscout.sh ``` -**See:** [forge-verification-proxy/README.md](../../forge-verification-proxy/README.md), [BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION.md](BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION.md). Fallback: manual verification at https://explorer.d-bis.org/address/#verify-contract +**See:** [forge-verification-proxy/README.md](../../forge-verification-proxy/README.md), [BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION.md](BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION.md). Fallback: manual verification at https://explorer.d-bis.org/addresses/#verify-contract **Runbooks in sync (R12):** [BLOCKSCOUT_FIX_RUNBOOK](BLOCKSCOUT_FIX_RUNBOOK.md), [BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION](BLOCKSCOUT_FORGE_VERIFICATION_EVALUATION.md), this runbook. **Full recommendations (R1–R24):** [RECOMMENDATIONS_OPERATOR_CHECKLIST](../00-meta/RECOMMENDATIONS_OPERATOR_CHECKLIST.md). diff --git a/docs/03-deployment/DBIS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md b/docs/03-deployment/DBIS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md new file mode 100644 index 00000000..b9ad950d --- /dev/null +++ b/docs/03-deployment/DBIS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md @@ -0,0 +1,109 @@ +# DBIS Engine X Automated Liquidity Advisor + +**Status:** repo-side advisor implemented; live autonomous execution remains gated. + +## Purpose + +Engine X needs one control surface that can accept API feeds, advise on liquidity positions, calculate the requested `cW*` output, evaluate available `XAUt` collateral, and only then promote the request into protected on-chain execution plus endpoint reporting. + +This is implemented as a read-only planner first: + +```bash +pnpm engine-x:automation-advisor +``` + +The planner writes: + +- `reports/status/engine-x-automated-liquidity-advisor-latest.json` +- `reports/status/engine-x-automated-liquidity-advisor-latest.md` + +## Feed Inputs + +The advisor consumes the current Engine X evidence surfaces: + +- `mainnet-cwusdc-usdc-support-health-latest.json` +- `engine-x-public-indexed-readiness-latest.json` +- `engine-x-mev-defense-readiness-latest.json` +- `mainnet-cwusdc-weth-liquidity-surfaces-latest.json` + +Regenerate them with: + +```bash +python3 scripts/verify/check-mainnet-cwusdc-usdc-support-health.py +pnpm engine-x:public-readiness +pnpm engine-x:mev-defense +pnpm engine-x:weth-liquidity-eval +``` + +## Request Model + +Initial supported request: + +```bash +ENGINE_X_REQUESTED_CW_SYMBOL=cWUSDC \ +ENGINE_X_REQUESTED_OUTPUT_UNITS=0.01 \ +ENGINE_X_XAUT_AVAILABLE_UNITS=0.000027 \ +pnpm engine-x:automation-advisor +``` + +The advisor currently treats `cWUSDC` as a six-decimal USD-denominated output token. Additional `cW*` assets should be added only after each token has a token policy, public indexed surface mapping, FX/crypto reference source, and endpoint publication packet. + +## Calculator Model + +The calculator combines: + +- requested `cW*` output; +- wallet official `USDC`; +- wallet `cWUSDC`; +- available `XAUt` collateral; +- configured `XAUt/USD` price; +- LTV and health-factor guardrails; +- MEV/protected transaction readiness; +- live public-indexed pool readiness; +- quote-defense surface status. + +The debt-neutral loop invariant remains: + +```text +Borrow USDC +Swap cWUSDC -> USDC +Repay borrowed USDC debt +Swap borrowed USDC -> cWUSDC +Stop +Withdraw XAUt collateral only after debt is zero +``` + +The advisor must not mark live automation ready unless ending USDC debt is zero and all protected execution gates pass. + +## Automation Phases + +1. `phase_0_advisor`: read-only API and calculator advice. +2. `phase_1_canary`: protected tiny public canary execution. +3. `phase_2_liquidity_defense`: automated protected rebalance and quote defense. +4. `phase_3_endpoint_publication`: regenerate public reports and endpoint packets. +5. `phase_4_multi_asset_forex_crypto`: extend to additional `cW*`, Forex, and crypto publication packets. + +## Endpoint Reporting + +Endpoint packets must contain transaction hashes, public pool state, quote values, ISO/audit/peg hashes where applicable, and clear boundaries between internal Engine X accounting and public DEX evidence. + +Targets: + +- token-aggregation public report API; +- CoinGecko tracker package; +- CoinMarketCap tracker package; +- Etherscan transaction and pool pages; +- DexScreener / GeckoTerminal pool pages; +- exchange listing or OTC due-diligence packets; +- Forex desk liquidity and proof packets. + +## Live Execution Boundary + +No advisor output is a broadcast instruction. Live execution still requires: + +- protected/private transaction RPC; +- fresh live quotes; +- funded official-USDC lender or quote inventory; +- passing Solidity preview; +- nonzero ISO/audit/peg hashes; +- operator approval. diff --git a/docs/03-deployment/DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md b/docs/03-deployment/DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md index 810a1982..8a45b451 100644 --- a/docs/03-deployment/DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md +++ b/docs/03-deployment/DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md @@ -9,7 +9,7 @@ This runbook is the durable operator path for the DBIS Engine X proof package wh The final 2026-05-07 execution delivered exactly `5,000,000,000.000000 cWUSDC` to the Meta wallet and exactly `5,000,000,000.000000 cWUSDC` to the master wallet. The final execution report is `reports/status/dbis-engine-x-final-recipient-proof-execution-20260507.md`. -The current implementation proves the Engine X internal maintained rail, not public DEX market depth. A public `cWUSDC/USDC` peg still requires separate public liquidity and quote evidence. +The current implementation proves the Engine X internal maintained rail, not public DEX market depth. A public `cWUSDC/USDC` peg still requires separate public liquidity and quote evidence. Engine X also tracks `cWUSDC/WETH9` as an indirect USD peg-support surface because WETH has deep public USD markets; that lane supports, but does not replace, direct official-USDC redemption-style evidence. **Public LP compliance boundary:** if the proof standard requires a public, Etherscan-indexable `cWUSDC/USDC` swap against official Mainnet `USDC`, Engine X evidence alone fails that standard. The proof must use an actual public LP surface, preserve before/after reserves plus swap transaction hashes, and avoid labeling virtual internal netting as public DEX volume. See `reports/status/mainnet-cwusdc-cross-protocol-public-lp-proof-plan-20260507.md` and `reports/status/mainnet-engine-x-indexed-liquidity-upgrade-plan-20260507.md`. @@ -42,6 +42,8 @@ Official ISO references used by this package: | Engine X ERC-3156 proof borrower | `smom-dbis-138/contracts/flash/DBISEngineXFlashProofBorrower.sol` | | XAUt-backed USDC borrow vault | `smom-dbis-138/contracts/flash/DBISEngineXXautUsdcBorrowVault.sol` | | XAUt-backed USDC borrow vault tests | `smom-dbis-138/test/flash/DBISEngineXXautUsdcBorrowVault.t.sol` | +| Single-sided DODO cWUSDC wrapper | `smom-dbis-138/contracts/flash/DBISEngineXSingleSidedDodoCwusdcVault.sol` | +| Single-sided DODO cWUSDC wrapper tests | `smom-dbis-138/test/flash/DBISEngineXSingleSidedDodoCwusdcVault.t.sol` | | Recipient deposit planner | `scripts/verify/plan-dbis-engine-x-recipient-deposits.py` | | Planner wrapper | `scripts/verify/plan-dbis-engine-x-recipient-deposits.sh` | | ISO/audit proof generator | `scripts/verify/generate-dbis-engine-x-iso20022-proofs.py` | @@ -56,6 +58,7 @@ Official ISO references used by this package: | UniV3 public swap proof dry-run | `scripts/deployment/run-engine-x-univ3-public-swap-proof.sh` | | Indexed proof recorder dry-run | `scripts/deployment/record-engine-x-indexed-liquidity-proof.sh` | | Public indexed readiness report | `scripts/verify/check-engine-x-public-indexed-readiness.sh` | +| WETH-backed peg-support evaluator | `scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh` | | Audit manifest builder | `scripts/verify/build-engine-x-audit-manifest.sh` | | Main status report | `reports/status/dbis-engine-x-5b-cwusdc-ladder-recalc-20260506.md` | | Final execution report | `reports/status/dbis-engine-x-final-recipient-proof-execution-20260507.md` | @@ -153,12 +156,35 @@ Engine X proof execution must satisfy all of these conditions: This proves the maintained Engine X internal accounting rail. It does not prove public market price discovery or public DEX volume. +## MEV Defense + +Live Engine X public swap, rebalance, and LP migration scripts now use the shared protected-broadcast guard in `scripts/lib/mev-protection.sh`. + +```bash +pnpm engine-x:mev-defense +``` + +For sensitive execution, configure one protected write RPC through `ENGINE_X_PRIVATE_TX_RPC`, `MEV_BLOCKER_RPC_URL`, `FLASHBOTS_RPC_URL`, `BLOXROUTE_RPC_URL`, or `BLINK_RPC_URL`. Dry-runs and read-only quote checks still use `ETHEREUM_MAINNET_RPC`. If no protected RPC is configured, live Engine X quote-defense scripts fail closed before broadcasting. An operator can intentionally use the public mempool only by setting `ENGINE_X_ALLOW_PUBLIC_BROADCAST=1` for a reviewed canary. + +## Automated Liquidity Advisor + +Engine X now has a read-only advisor layer for API-fed liquidity recommendations, requested `cW*` output sizing, XAUt-backed USDC capacity, execution gates, and endpoint reporting: + +```bash +pnpm engine-x:automation-advisor +``` + +The advisor policy is `config/engine-x/automation-policy.json`; the durable runbook is `docs/03-deployment/DBIS_ENGINE_X_AUTOMATED_LIQUIDITY_ADVISOR.md`. It does not broadcast transactions. It decides whether a requested output can move from calculator advice into protected on-chain execution and reporting. + ## Public LP And Flash-Loan Boundary Cross-protocol routing can be used for a public proof, but the roles must stay explicit: - UniV2 `cWUSDC/USDC` is the public indexed proof surface. - UniV3 `cWUSDC/USDC` can also be used as the public indexed proof surface once created and funded with actual `cWUSDC` plus official Mainnet `USDC`. +- UniV3, UniV2, and DODO PMM `cWUSDC/WETH9` surfaces are Engine X peg-support lanes. They support the USD peg indirectly by comparing the `cWUSDC/WETH9` pool price against live WETH/USD or WETH/USDC reference markets. +- `cWUSDC/ETH` and `cWUSDC/WETH` should be treated as the same public WETH9-backed market. UniV2 `addLiquidityETH` wraps native ETH and creates a WETH9 pair; UniV3 and DODO require ERC-20 WETH9 directly. +- Single-sided DODO cWUSDC can be tracked as Engine X inventory, but it is not an executable DODO swap surface through the current integration. `DODOPMMIntegration.addLiquidity(pool, baseAmount, quoteAmount)` requires both base and quote amounts to be nonzero, so a true cWUSDC-only DODO lane needs either a dedicated single-sided wrapper or enough WETH9/USDC quote inventory to make the PMM executable. - Aave USDC flash liquidity is same-block working capital, not permanent LP funding. - The upgraded Engine X vault can provide ERC-3156 flash loans from its accounted USDC lender bucket only; it cannot lend pool USDC and it keeps flash fees in lender accounting. - DODO or cW mesh pools may be unwind legs only when live min-out quotes repay Aave principal plus premium in official USDC. @@ -166,6 +192,36 @@ Cross-protocol routing can be used for a public proof, but the roles must stay e With current balances, the only honest public LP path is a tiny wallet-funded UniV2 canary. Larger policy-floor or listing-quality depth still needs external official Mainnet USDC. +Evaluate the WETH-backed support lane before creating any cWUSDC/ETH, cWUSDC/WETH, UniV2, UniV3, or DODO PMM pool: + +```bash +pnpm engine-x:weth-liquidity-eval +``` + +The evaluator writes `reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json` and `.md`, checks the canonical Mainnet WETH9 Cc2 address, detects existing UniV2/UniV3 pools, confirms DODO manager readiness, quotes WETH against official USDC, and sizes the current wallet's maximum WETH-backed seed. + +For single-sided cWUSDC DODO inventory, use this promotion rule: + +1. Record cWUSDC-only inventory as Engine X accounted support inventory. +2. Do not claim executable public DODO liquidity until the pool has nonzero quote-side inventory and a passing `querySellBase` / `querySellQuote` canary. +3. Prefer a wrapper for cWUSDC-only deposits if the goal is single-sided operator UX; the wrapper must expose solvency, min-out, pause, and withdrawal controls and must not label idle inventory as public swap depth. + +The Engine X single-sided DODO wrapper deployment command is dry-run by default: + +```bash +pnpm engine-x:single-sided-dodo-deploy +``` + +The wrapper: + +- accepts `cWUSDC` as single-sided accounted inventory; +- optionally accepts a quote token, defaulting to Mainnet WETH9 Cc2; +- reports solvency as actual balances greater than or equal to accounted inventory; +- rejects DODO promotion unless both cWUSDC and quote amounts are nonzero; +- approves the DODO integration only for the exact promotion amounts and then clears allowances; +- requires a configured DODO pool plus passing `querySellBase` / `querySellQuote` canaries before promoted liquidity is treated as executable; +- keeps idle cWUSDC inventory separate from public DODO depth. + ## XAUt-Backed USDC Borrow Vault Engine X now has a dedicated repo-side borrowing component for the banking model where `XAUt` represents XAU collateral and `USDC` represents USD debt: @@ -210,14 +266,79 @@ The indexed LP upgrade creates public proof surface only. It does not meet the ` **2026-05-07 live attempt:** the legacy vault balances were swept and used to create/fund the official UniV3 `cWUSDC/USDC` pool at `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3`. External swaps immediately moved the pool out of range; current active liquidity is `0` and deployer USDC is `0`. See `reports/status/engine-x-univ3-public-lp-migration-attempt-20260507.md`. +## Mainnet cWUSDC Tracker And Public LP Completion Packet + +The 2026-05-08 internal completion pass finished every non-broadcast task available from the repo/operator workspace and left external/capital-dependent gates explicit. + +Fresh internal evidence: + +- `reports/status/mainnet-cwusdc-tracker-readiness-20260508.md` +- `reports/status/mainnet-cwusdc-technical-completion-20260508.md` +- `reports/status/mainnet-cwusdc-technical-completion-20260508.json` +- `reports/status/mainnet-cwusdc-supply-proof-20260508.json` +- `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` +- `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` +- `reports/status/engine-x-public-indexed-readiness-latest.json` +- `reports/status/mainnet-cwusdc-usdc-preflight-latest.json` +- `reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json` +- `reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json` + +Completed internal tasks: + +- Verified the cWUSDC contract source and supply surfaces. +- Recorded machine-readable supply proof and circulating-supply methodology. +- Confirmed cWUSDC is in the internal canonical metadata registry and CoinGecko-style export. +- Confirmed DexScreener and GeckoTerminal index the public UniV2 and UniV3 `cWUSDC/USDC` pairs. +- Confirmed CoinMarketCap DEX has a reachable Ethereum token page for cWUSDC; full CMC listing acceptance remains external. +- Documented LP caveats: UniV2 is official-USDC quote-starved and public depth remains too thin for listing-quality proof. +- Generated the latest public indexed readiness, public-pair preflight, repeg plan, and WETH support-surface reports. +- Deployed the upgraded accounting-aware Engine X v2 vault: `0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1`. +- Deployed the public indexed-liquidity proof vault: `0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE`. +- Verified both new Engine X contracts on Etherscan. +- Re-ran public indexed readiness against the new vaults; latest readiness is `readyForPublicIndexedProof=true`. +- Confirmed dry-run deployment command for the single-sided DODO wrapper. +- Fixed the indexed LP migration dry-run so it cleanly reports that no balanced vault liquidity remains to migrate. +- Granted cWUSDC `BURNER_ROLE` to `CW_BRIDGE_MAINNET=0x2bF74583206A49Be07E0E8A94197C12987AbD7B5`; bridge now has `MINTER_ROLE=true` and `BURNER_ROLE=true`. +- Documented valuation precedence while no direct third-party cWUSDC oracle feed is live. +- Prepared the external submission checklist with copy-paste asset fields, tracker URLs, ownership gates, and liquidity caveats. + +2026-05-08 on-chain completion transactions: + +| Action | Address / tx | +|---|---| +| Grant bridge cWUSDC burner role | `0x38d292d274158eb3a6015466cd3a4a9f9013c0e75be048a38214b64ae1f73eae` | +| Deploy Engine X v2 virtual batch vault | `0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1` / `0xa02dffa042be591d256b75500d7774da1cf63f69e935d3058632d07871021bb4` | +| Set v2 flash fee to `5` bps | `0x7ae74c050b5e051e195e2a30912ae8064fbdbace20f96b53f3d213704f22e46a` | +| Set v2 max flash loan amount to `0` | `0x87aed485c0adac22452f14e89d6524e8db21226538bbe75652d0b3a94ed2b76c` | +| Deploy indexed-liquidity proof vault | `0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE` / `0x3534657de3d8de2a56fc74d8b4b42f51dc7d56397c3ed33526927c684aa177d5` | + +Current public liquidity/capital gates: + +| Gate | Latest status | +|---|---| +| Public UniV2 policy-floor quote-side top-up | Needs `2,497.832239 USDC` | +| DODO defended reserve-parity quote top-up | Needs `290,995.072514 USDC` | +| Operator wallet official Mainnet USDC | `0.839784 USDC` | +| Public UniV2 quote-side shortfall after wallet balance | `2,496.992455 USDC` | +| DODO defended parity shortfall after wallet balance | `290,994.232730 USDC` | +| UniV3 active liquidity | `66,836,248` raw active liquidity; latest indexed readiness passes | +| CoinGecko public contract lookup | External pending; API returns `404` | +| CoinMarketCap DEX token page | Reachable | +| Full CoinMarketCap listing | External pending | +| Circulating supply accepted by public tracker | External pending | + +Do not broadcast public LP repair, claim listing-quality depth, or claim accepted tracker circulating supply until official Mainnet USDC is funded and the relevant external tracker accepts the submission. + ## Engine X V2 Public Proof Sequence All commands are dry-run by default: ```bash pnpm engine-x:public-readiness +pnpm engine-x:weth-liquidity-eval pnpm engine-x:v2-deploy pnpm engine-x:borrow-vault-deploy +pnpm engine-x:single-sided-dodo-deploy pnpm engine-x:indexed-lp-migration pnpm engine-x:indexed-vault-deploy pnpm engine-x:loop-proof @@ -228,17 +349,20 @@ pnpm engine-x:audit-manifest Recommended order: -1. Run `pnpm engine-x:public-readiness` and confirm the blockers. -2. Deploy the upgraded accounting-aware Engine X v2 vault with `pnpm engine-x:v2-deploy`. -3. Optionally deploy the XAUt-backed USDC borrow vault with `pnpm engine-x:borrow-vault-deploy`; fund it only with real official USDC. -4. Seed the upgraded vault with actual `cWUSDC/USDC` and a bounded USDC lender bucket. -5. Create/fund the official UniV3 `cWUSDC/USDC` public LP from the upgraded vault using `pnpm engine-x:indexed-lp-migration`. -6. Deploy `DBISEngineXIndexedLiquidityVault` with `pnpm engine-x:indexed-vault-deploy`. -7. For internal Engine X loop evidence, dry-run the exact `0.01 cWUSDC` loop proof with `pnpm engine-x:loop-proof`. -8. Run a tiny actual UniV3 public swap proof with `pnpm engine-x:univ3-swap-proof`. -9. Record the indexed proof with real swap/liquidity/proof hashes using `pnpm engine-x:indexed-proof-record`. -10. Build the ABI/proof audit manifest with `pnpm engine-x:audit-manifest`. -11. Retire the legacy vault only after v2 proof state is live and externally reviewed with `pnpm engine-x:legacy-retirement`. +1. Run `pnpm engine-x:public-readiness` and confirm the current no-blocker indexed proof state when using the 2026-05-08 v2 and indexed vault addresses. +2. Run `pnpm engine-x:weth-liquidity-eval` and confirm whether the WETH-backed support lane can be created at a meaningful size. +3. Use the deployed accounting-aware Engine X v2 vault at `0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1`. +4. Optionally deploy the XAUt-backed USDC borrow vault with `pnpm engine-x:borrow-vault-deploy`; fund it only with real official USDC. +5. Deploy the single-sided DODO cWUSDC wrapper with `pnpm engine-x:single-sided-dodo-deploy` if cWUSDC-only inventory needs a solvency-controlled holding lane. +6. Seed the upgraded vault with actual `cWUSDC/USDC` and a bounded USDC lender bucket. +7. Create/fund the official UniV3 `cWUSDC/USDC` public LP from the upgraded vault using `pnpm engine-x:indexed-lp-migration`. +8. Create only one WETH-backed support surface first, preferably UniV3 `cWUSDC/WETH9`; add UniV2 or DODO PMM only after the evaluator report and dry-runs pass. +9. Use the deployed `DBISEngineXIndexedLiquidityVault` at `0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE`. +10. For internal Engine X loop evidence, dry-run the exact `0.01 cWUSDC` loop proof with `pnpm engine-x:loop-proof`. +11. Run a tiny actual UniV3 public swap proof with `pnpm engine-x:univ3-swap-proof`. +12. Record the indexed proof with real swap/liquidity/proof hashes using `pnpm engine-x:indexed-proof-record`. +13. Build the ABI/proof audit manifest with `pnpm engine-x:audit-manifest`. +14. Retire the legacy vault only after v2 proof state is live and externally reviewed with `pnpm engine-x:legacy-retirement`. The indexed proof vault enforces the public proof gates: nonzero public swap hash, nonzero liquidity tx hash, tick drift limit, minimum liquidity, optional pool token-balance floors, optional max proof amount, pause, and operator allowlist. diff --git a/docs/03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md b/docs/03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md index 84c6f51f..f3c9acce 100644 --- a/docs/03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md +++ b/docs/03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md @@ -114,7 +114,7 @@ Design and pool matrix: [POOLS_AND_NETWORKS_FULL_DESIGN.md](../11-references/POO | # | Item | Action | |---|------|--------| -| 5.1 | **Per-chain RPC and env** | Set `CHAIN_*_RPC_URL`, `CHAIN_*_DODO_PMM_INTEGRATION` (or pool source) for each of 1, 10, 25, 56, 100, 137, 42161, 42220, 43114, 8453, 1111 if indexing via token-aggregation. | +| 5.1 | **Per-chain RPC and env** | Set `CHAIN_*_RPC_URL`, `CHAIN_*_DODO_PMM_INTEGRATION` (or pool source) for each of 1, 10, 56, 100, 137, 42161, 42220, 43114, 8453, 1111 if indexing via token-aggregation (nine-chain promoted `cW*` surface; add `25` only if you explicitly index Cronos). | | 5.2 | **Deploy and fund** | Per chain: deploy or bridge cW* tokens; create and fund PMM pools per pool-matrix; add to MCP allowlist per chain if using MCP. | --- diff --git a/docs/03-deployment/DEPLOY_AND_VERIFY_ONE_BY_ONE.md b/docs/03-deployment/DEPLOY_AND_VERIFY_ONE_BY_ONE.md index f649098b..70a822d1 100644 --- a/docs/03-deployment/DEPLOY_AND_VERIFY_ONE_BY_ONE.md +++ b/docs/03-deployment/DEPLOY_AND_VERIFY_ONE_BY_ONE.md @@ -130,7 +130,7 @@ Check that the contract exists and (if applicable) is verified: ``` Or open the contract on the explorer: -https://explorer.d-bis.org/address/
+https://explorer.d-bis.org/addresses/
--- diff --git a/docs/03-deployment/EI_MATRIX_CWUSDC_MINT_PIPELINE.md b/docs/03-deployment/EI_MATRIX_CWUSDC_MINT_PIPELINE.md new file mode 100644 index 00000000..577136fa --- /dev/null +++ b/docs/03-deployment/EI_MATRIX_CWUSDC_MINT_PIPELINE.md @@ -0,0 +1,43 @@ +# EI matrix — mainnet cWUSDC mint pipeline + +**Purpose:** Mint **Ethereum mainnet** `cWUSDC` (`CWUSDC_MAINNET`, default `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`) directly to every address in `config/pmm-soak-wallet-grid.json` (EI matrix), without bridging from Chain 138. + +**Treasury semantics:** The **33 × 33 × 6** grid (**6 534** wallets) is the canonical **sovereign-nation treasury address set** for the Elemental Imperium model—each cell’s Ethereum address is the designated on-chain treasury for that routing cell (see `semanticModel` in `config/pmm-soak-wallet-grid.json`). Nation↔cell attribution and reserve governance are layered via `config/elemental-imperium-network-registry.json` and optional overlays; scripts operate on addresses regardless of label assignment. + +**Entry point (recommended):** + +```bash +./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --dry-run --mint-raw 10000000 +./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --mint-raw 10000000 +``` + +Pass extra flags to the mint script after `--`: + +```bash +./scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh --dry-run --total-mint-raw 72000000000000 --spread-pct 15 -- --offset 0 --limit 100 +``` + +**Resume after partial run:** + +```bash +./scripts/deployment/continue-mint-cwusdc-ei-matrix-wallets.sh --mint-raw 10000000 +``` + +(progress file: `reports/status/ei-matrix-cwusdc-mint-last-idx.txt`) + +**Modes:** + +| Flag | Meaning | +|------|--------| +| `--mint-raw R` | Same raw amount (6 decimals) minted to each wallet in the slice. | +| `--total-mint-raw B` | Total minted across the slice equals `B`; per-wallet amounts use ±`--spread-pct` jitter then renormalize (default spread 15). | + +**Requirements:** + +- `PRIVATE_KEY` with **`mint(address,uint256)`** authority on the token (typically `MINTER_ROLE` on `CompliantWrappedToken`-style `cWUSDC`). +- `ETHEREUM_MAINNET_RPC` (or `RPC_URL_1`) and ETH for gas. +- On-chain **reserve / policy** on the token must allow mints (otherwise transactions revert). + +**Not in scope:** Minting **c\*** on Chain 138 and bridging to mainnet as `cWUSDC` — use bridge / Engine X runbooks separately (`docs/03-deployment/DBIS_ENGINE_X_RECIPIENT_PROOF_RUNBOOK.md`, `docs/07-ccip/`). + +**Artifacts:** `reports/status/ei-matrix-cwusdc-mint-*.json` manifests, `ei-matrix-cwusdc-mint-failures.log`, flock `ei-matrix-cwusdc-mint.lock` (one live mint job). diff --git a/docs/03-deployment/PHASE_D_OPTIONAL_CHECKLIST.md b/docs/03-deployment/PHASE_D_OPTIONAL_CHECKLIST.md index fa80802a..527464ff 100644 --- a/docs/03-deployment/PHASE_D_OPTIONAL_CHECKLIST.md +++ b/docs/03-deployment/PHASE_D_OPTIONAL_CHECKLIST.md @@ -1,6 +1,6 @@ # Phase D — Optional Extended Coverage Checklist -**Last Updated:** 2026-03-04 +**Last Updated:** 2026-05-09 **Purpose:** Checklist for Phase D of [REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md](REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md): XAU, vaults, ALL Mainnet, and trustless stack. --- @@ -43,8 +43,19 @@ --- +## D.5 Cosmos ecosystem (optional — not Phase D required) + +Cross-chain connectivity to Cosmos Hub, Noble, Osmosis, IBC app tokens, and CosmWasm apps is **out of band** for Phase D core (XAU, vaults, ALL, trustless) unless explicitly adopted. + +| Step | Action | Ref | +|------|--------|-----| +| D.5.1 | If adopting any Cosmos leg, follow streams **A–E** and completion criteria. | [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK](../11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md), [`config/cosmos-chain138-optional/`](../../config/cosmos-chain138-optional/README.md) | + +--- + ## References - [REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md](REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md) Phase D - [LIQUIDITY_POOLS_MASTER_MAP](../11-references/LIQUIDITY_POOLS_MASTER_MAP.md) - [VAULT_SYSTEM_MASTER_TECHNICAL_PLAN](../02-architecture/VAULT_SYSTEM_MASTER_TECHNICAL_PLAN.md) +- [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK](../11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md) (optional; D.5) diff --git a/docs/03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md b/docs/03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md index fe3a9f3d..33b13983 100644 --- a/docs/03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md +++ b/docs/03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md @@ -1,9 +1,9 @@ # Mr. Promod Uniswap V2 Live Pair Discovery -- Generated: `2026-04-22T04:59:28Z` +- Generated: `2026-05-09T05:43:24Z` - Live pairs discovered: `19` - Healthy live pairs: `10` -- Write mode: `False` +- Write mode: `True` | Chain | Network | Env Ready | Live Pairs Found | Healthy Live Pairs | |---|---|---|---|---| diff --git a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md index 41852eb0..37989d3e 100644 --- a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md +++ b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md @@ -1,72 +1,46 @@ # Mr. Promod Uniswap V2 Phase 1 Funding Actions -- Generated: `2026-04-17T18:13:05Z` +- Generated: `2026-05-09T21:07:05Z` - Signer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` - Purpose: strict per-chain action plan for phase-1 funding and deployment. | Chain | Network | Action | Tokens Missing | Gas Issue | Recommended Seed | |---|---|---|---|---|---:| -| `1` | Ethereum Mainnet | `seed_now` | `none` | `false` | `8888511.867466` | -| `10` | Optimism | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `true` | `1000` | -| `25` | Cronos | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | -| `56` | BSC | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | +| `1` | Ethereum Mainnet | `mint_destination_then_seed` | `cWUSDC` | `false` | `1000` | +| `10` | Optimism | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | +| `25` | Cronos | `mint_destination_then_seed` | `none` | `false` | `1000` | +| `56` | BSC | `mint_destination_then_seed` | `none` | `false` | `1000` | | `100` | Gnosis | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | -| `137` | Polygon | `seed_now` | `none` | `false` | `996.297636` | -| `8453` | Base | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `true` | `1000` | +| `137` | Polygon | `mint_destination_then_seed` | `cWUSDC` | `false` | `1000` | +| `8453` | Base | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | | `42161` | Arbitrum One | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | | `42220` | Celo | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | -| `43114` | Avalanche | `mint_missing_side_then_seed` | `cWUSDC` | `false` | `0.8` | +| `43114` | Avalanche | `mint_destination_then_seed` | `cWUSDT`, `cWUSDC` | `false` | `1000` | ## Per-Chain Actions ### Chain `1` — Ethereum Mainnet -- Action: `seed_now` -- Tokens missing: `none` +- Action: `mint_destination_then_seed` +- Tokens missing: `cWUSDC` - Gas issue: `false` - Gas note: No minimum gas top-up issue from the latest preflight snapshot. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `1` via `CW_BRIDGE_MAINNET` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. -Post-funding deploy block: +Mint steps: +- Mint `cWUSDC` `1000` with: ```bash source smom-dbis-138/scripts/load-env.sh >/dev/null -export RPC_URL="${ETHEREUM_MAINNET_RPC}" -export FACTORY="${CHAIN_1_UNISWAP_V2_FACTORY}" -export ROUTER="${CHAIN_1_UNISWAP_V2_ROUTER}" -export CWUSDT="0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE" -export CWUSDC="0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" -export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")" -export AMOUNT_RAW="8888511867466" -export DEADLINE="$(( $(date +%s) + 3600 ))" - -PAIR="$(cast call "$FACTORY" 'getPair(address,address)(address)' "$CWUSDT" "$CWUSDC" --rpc-url "$RPC_URL")" -if [[ "$PAIR" == "0x0000000000000000000000000000000000000000" ]]; then - cast send "$FACTORY" 'createPair(address,address)(address)' "$CWUSDT" "$CWUSDC" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" -fi - -cast send "$CWUSDT" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_RAW" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -cast send "$CWUSDC" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_RAW" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -cast send "$ROUTER" \ - 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \ - "$CWUSDT" "$CWUSDC" "$AMOUNT_RAW" "$AMOUNT_RAW" "$AMOUNT_RAW" "$AMOUNT_RAW" "$SIGNER" "$DEADLINE" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered -bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh -node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json +cast send "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ + --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 ``` ### Chain `10` — Optimism - Action: `mint_destination_then_seed` - Tokens missing: `cWUSDT`, `cWUSDC` -- Gas issue: `true` +- Gas issue: `false` - Gas note: Top up native gas on Optimism before minting or seeding; current balance is below the 0.001 safety threshold. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `10` via `CW_BRIDGE_OPTIMISM` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. @@ -88,48 +62,22 @@ cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' " ### Chain `25` — Cronos - Action: `mint_destination_then_seed` -- Tokens missing: `cWUSDT`, `cWUSDC` +- Tokens missing: `none` - Gas issue: `false` - Gas note: No minimum gas top-up issue from the latest preflight snapshot. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `25` via `CW_BRIDGE_CRONOS` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. -Mint steps: -- Mint `cWUSDT` `1000` with: -```bash -source smom-dbis-138/scripts/load-env.sh >/dev/null -cast send "0x72948a7a813B60b37Cd0c920C4657DbFF54312b8" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ - --rpc-url "${CRONOS_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 -``` -- Mint `cWUSDC` `1000` with: -```bash -source smom-dbis-138/scripts/load-env.sh >/dev/null -cast send "0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ - --rpc-url "${CRONOS_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 -``` ### Chain `56` — BSC - Action: `mint_destination_then_seed` -- Tokens missing: `cWUSDT`, `cWUSDC` +- Tokens missing: `none` - Gas issue: `false` - Gas note: No minimum gas top-up issue from the latest preflight snapshot. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `56` via `CW_BRIDGE_BSC` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. -Mint steps: -- Mint `cWUSDT` `1000` with: -```bash -source smom-dbis-138/scripts/load-env.sh >/dev/null -cast send "0x9a1D0dBEE997929ED02fD19E0E199704d20914dB" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ - --rpc-url "${BSC_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 -``` -- Mint `cWUSDC` `1000` with: -```bash -source smom-dbis-138/scripts/load-env.sh >/dev/null -cast send "0x5355148C4740fcc3D7a96F05EdD89AB14851206b" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ - --rpc-url "${BSC_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 -``` ### Chain `100` — Gnosis @@ -156,52 +104,26 @@ cast send "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' " ### Chain `137` — Polygon -- Action: `seed_now` -- Tokens missing: `none` +- Action: `mint_destination_then_seed` +- Tokens missing: `cWUSDC` - Gas issue: `false` - Gas note: No minimum gas top-up issue from the latest preflight snapshot. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `137` via `CW_BRIDGE_POLYGON` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. -Post-funding deploy block: +Mint steps: +- Mint `cWUSDC` `1000` with: ```bash source smom-dbis-138/scripts/load-env.sh >/dev/null -export RPC_URL="${POLYGON_MAINNET_RPC}" -export FACTORY="${CHAIN_137_UNISWAP_V2_FACTORY}" -export ROUTER="${CHAIN_137_UNISWAP_V2_ROUTER}" -export CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" -export CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" -export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")" -export AMOUNT_RAW="996297636" -export DEADLINE="$(( $(date +%s) + 3600 ))" - -PAIR="$(cast call "$FACTORY" 'getPair(address,address)(address)' "$CWUSDT" "$CWUSDC" --rpc-url "$RPC_URL")" -if [[ "$PAIR" == "0x0000000000000000000000000000000000000000" ]]; then - cast send "$FACTORY" 'createPair(address,address)(address)' "$CWUSDT" "$CWUSDC" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" -fi - -cast send "$CWUSDT" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_RAW" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -cast send "$CWUSDC" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_RAW" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -cast send "$ROUTER" \ - 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \ - "$CWUSDT" "$CWUSDC" "$AMOUNT_RAW" "$AMOUNT_RAW" "$AMOUNT_RAW" "$AMOUNT_RAW" "$SIGNER" "$DEADLINE" \ - --private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL" - -python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered -bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh -node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json +cast send "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ + --rpc-url "${POLYGON_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 ``` ### Chain `8453` — Base - Action: `mint_destination_then_seed` - Tokens missing: `cWUSDT`, `cWUSDC` -- Gas issue: `true` +- Gas issue: `false` - Gas note: Top up native gas on Base before minting or seeding; current balance is below the 0.001 safety threshold. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `8453` via `CW_BRIDGE_BASE` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. @@ -268,17 +190,23 @@ cast send "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3" 'mint(address,uint256)' " ### Chain `43114` — Avalanche -- Action: `mint_missing_side_then_seed` -- Tokens missing: `cWUSDC` +- Action: `mint_destination_then_seed` +- Tokens missing: `cWUSDT`, `cWUSDC` - Gas issue: `false` - Gas note: No minimum gas top-up issue from the latest preflight snapshot. - Bridge possible: `true` - Bridge note: Bridge path is structurally available for chain `43114` via `CW_BRIDGE_AVALANCHE` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script. Mint steps: -- Mint `cWUSDC` `0.8` with: +- Mint `cWUSDT` `1000` with: ```bash source smom-dbis-138/scripts/load-env.sh >/dev/null -cast send "0x0C242b513008Cd49C89078F5aFb237A3112251EB" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "800000" \ +cast send "0x8142BA530B08f3950128601F00DaaA678213DFdf" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ + --rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 +``` +- Mint `cWUSDC` `1000` with: +```bash +source smom-dbis-138/scripts/load-env.sh >/dev/null +cast send "0x0C242b513008Cd49C89078F5aFb237A3112251EB" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \ --rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000 ``` diff --git a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md index f88e8bf9..b9b41589 100644 --- a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md +++ b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md @@ -1,6 +1,6 @@ # Mr. Promod Uniswap V2 Phase 1 Funding Readiness -- Generated: `2026-04-17T20:05:54Z` +- Generated: `2026-05-09T20:53:57Z` - Signer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` - Purpose: live deployer-wallet funding view for seeding `cWUSDT/cWUSDC` phase-1 pools chain by chain. - Completed: `1`, `10`, `25`, `56`, `100`, `137`, `8453`, `42161`, `42220`, `43114` @@ -9,16 +9,16 @@ | Chain | Network | Status | Pair Exists | Seeded Live | Native Gas | cWUSDT | cWUSDC | Max Equal Seed | |---|---|---|---|---|---:|---:|---:|---:| -| `1` | Ethereum Mainnet | `completed` | `true` | `true` | `0.028982898459925766` | `397.197013` | `0` | `0` | -| `10` | Optimism | `completed` | `true` | `true` | `0.001980670026642148` | `0` | `0` | `0` | -| `25` | Cronos | `completed` | `true` | `true` | `22.401143346977489259` | `1000` | `1000` | `1000` | -| `56` | BSC | `completed` | `true` | `true` | `0.010626271367072709` | `1000` | `1000` | `1000` | -| `100` | Gnosis | `completed` | `true` | `true` | `2.407080479781350729` | `0` | `0` | `0` | -| `137` | Polygon | `completed` | `true` | `true` | `24.318080574425380349` | `2.686028` | `0` | `0` | -| `8453` | Base | `completed` | `true` | `true` | `0.002877934067617928` | `0` | `0` | `0` | -| `42161` | Arbitrum One | `completed` | `true` | `true` | `0.001055113904178255` | `0` | `0` | `0` | -| `42220` | Celo | `completed` | `true` | `true` | `8.537307308649465530` | `0` | `0` | `0` | -| `43114` | Avalanche | `completed` | `true` | `true` | `0.446784013286210977` | `0` | `0` | `0` | +| `1` | Ethereum Mainnet | `completed` | `true` | `true` | `0.002397937659907006` | `8523829.088635` | `56705345.129226` | `8523829.088635` | +| `10` | Optimism | `completed` | `true` | `true` | `0.000430532335030017` | `3000.984101` | `3000.9869` | `3000.984101` | +| `25` | Cronos | `completed` | `true` | `true` | `19.154691909389182692` | `999.9918` | `999.9938` | `999.9918` | +| `56` | BSC | `completed` | `true` | `true` | `0.003681967051288879` | `997.9959` | `997.9959` | `997.9959` | +| `100` | Gnosis | `completed` | `true` | `true` | `0.551078988224567304` | `999.9958` | `998.9959` | `998.9959` | +| `137` | Polygon | `completed` | `true` | `true` | `15.030270707053166727` | `3001.992967` | `2999.903173` | `2999.903173` | +| `8453` | Base | `completed` | `true` | `true` | `0.004958123781375043` | `5998.9839` | `5998.9859` | `5998.9839` | +| `42161` | Arbitrum One | `completed` | `true` | `true` | `0.000971971100341626` | `1999.8848` | `999.8848` | `999.8848` | +| `42220` | Celo | `completed` | `true` | `true` | `5.373727945247599766` | `6999.9889` | `5999.9889` | `5999.9889` | +| `43114` | Avalanche | `completed` | `true` | `true` | `0.014891739291454170` | `998.9859` | `998.9859` | `998.9859` | ## Blockers @@ -26,14 +26,13 @@ - execution status: `completed` - pair seeded live: `true` -- cWUSDC balance is zero +- no funding blockers ### Chain `10` — Optimism - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- native gas below 0.001 ### Chain `25` — Cronos @@ -51,39 +50,34 @@ - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- no funding blockers ### Chain `137` — Polygon - execution status: `completed` - pair seeded live: `true` -- cWUSDC balance is zero +- no funding blockers ### Chain `8453` — Base - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- no funding blockers ### Chain `42161` — Arbitrum One - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- native gas below 0.001 ### Chain `42220` — Celo - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- no funding blockers ### Chain `43114` — Avalanche - execution status: `completed` - pair seeded live: `true` -- cWUSDT balance is zero -- cWUSDC balance is zero +- no funding blockers diff --git a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md index 1c8353f5..f3715e9c 100644 --- a/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md +++ b/docs/03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md @@ -4,7 +4,8 @@ **Overall Status:** `complete` -**Completed Chains:** `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114` +**Evidence chains (this report):** `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114` +**Nine-chain promoted public `cW*` surface (portal-aligned):** `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` — Cronos `25` rows below are historical mesh evidence only; do **not** count `25` toward the nine-chain public claim. ## Reserve Verification diff --git a/docs/03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md b/docs/03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md index 9f2a7b0b..908e4695 100644 --- a/docs/03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md +++ b/docs/03-deployment/PROXMOX_VM_CREATION_RUNBOOK.md @@ -1,6 +1,6 @@ # Proxmox VM/Container Creation Runbook — Capacity and Availability -**Last Updated:** 2026-02-13 +**Last Updated:** 2026-05-09 **Purpose:** Create all planned VMs/containers on the Proxmox cluster using capacity and availability best practices. Use this when SSH'd to the Proxmox host or from a host that can SSH to Proxmox with access to env/config. **Related:** [VMID_ALLOCATION_FINAL](../02-architecture/VMID_ALLOCATION_FINAL.md) | [PROXMOX_CLUSTER_ARCHITECTURE](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md) | [PROXMOX_COMPLETE_RECOMMENDATIONS](../10-best-practices/PROXMOX_COMPLETE_RECOMMENDATIONS.md) | [STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS](../00-meta/STEPS_FROM_PROXMOX_OR_LAN_WITH_SECRETS.md) @@ -9,7 +9,7 @@ ## 1. Capacity and availability principles -- **Node spread:** Prefer **r630-01** (192.168.11.11) and **r630-02** (192.168.11.12) for new workloads; **ml110** (192.168.11.10) already runs 34 containers and is CPU/memory constrained. Distribute to improve redundancy and performance. +- **Node spread:** Prefer **r630-01** / **r630-02** when balancing write-heavy pools; **r630-03** / **r630-04** have spare capacity vs **r630-01**/**02**. **ml110** (192.168.11.10) currently hosts **0** cluster guests (cluster reconcile **2026-05-09**) but remains lower-spec — keep it for lightweight roles unless you deliberately expand it. - **VMID ranges:** Use [VMID_ALLOCATION_FINAL](../02-architecture/VMID_ALLOCATION_FINAL.md) — e.g. DBIS Core 10000–10199, Sankofa 7800–8999, Besu 1000–4999. Do not reuse VMIDs. - **Storage:** Use `local-lvm` or node-specific thin pools (e.g. r630-01 thin1, r630-02 thin2–thin6). Set `PROXMOX_STORAGE` per node if creating on a specific host. - **High availability:** For critical services (DB, API), create primary and secondary on **different nodes** where possible (e.g. DB primary on r630-01, replica on r630-02). @@ -20,13 +20,15 @@ ## 2. Cluster node summary -| Node | IP | CPU / RAM | Storage | Current load | Use for | -|----------|----------------|------------|----------------|-------------------|----------------------------------| -| ml110 | 192.168.11.10 | 6c / 125GB | 907GB (26% used) | 34 containers | Lightweight / management only | -| r630-01 | 192.168.11.11 | 32c / 503GB| thin1 200GB+ | 0 | New VMs (DBIS, Sankofa, RPC) | -| r630-02 | 192.168.11.12 | 56c / 251GB| thin2–thin6 | Some VMs | New VMs (HA pair, heavy workload)| -| r630-03 | 192.168.11.13 | 32c / 512GB| Available | 0 | Future expansion | -| r630-04 | 192.168.11.14 | 32c / 512GB| Available | 0 | Future expansion | +| Node | IP | CPU / RAM (API) | Storage (high level) | Guests (live) | Use for | +|----------|----------------|-----------------|----------------------|---------------|----------------------------------| +| ml110 | 192.168.11.10 | 6c / ~63 GiB | Thin pools mostly empty | **0** | Lightweight / quorum member | +| r630-01 | 192.168.11.11 | 32c / ~126 GiB | thin1 + data busy | **57** | Primary compute (check thin %) | +| r630-02 | 192.168.11.12 | 56c / ~126 GiB | thin1-r630-02 … thin6 | **41** | Heavy workloads / infra CTs | +| r630-03 | 192.168.11.13 | 32c / ~126 GiB | data + thin*-r630-03 | **19** | Besu / RPC expansion | +| r630-04 | 192.168.11.14 | 32c / ~126 GiB | data + mev-local-lvm | **19** | Besu / app CTs | + +Source: `pvesh get /nodes`, `/cluster/resources` (**2026-05-09**). See [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md). --- diff --git a/docs/03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md b/docs/03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md index 20ee8c4b..9199c5f9 100644 --- a/docs/03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md +++ b/docs/03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md @@ -52,7 +52,7 @@ | Chain 138 liquidity | **Re-verify required** — prior run reported cUSDT/cUSDC liquidity add; this checklist previously showed zero liquidity. Treat liquidity state as unknown until reconfirmed on-chain. | | CCIP 138 → 1, 56, 137, 10, 42161, 43114, 8453, 100, 25, **42220 (Celo)** | Configured/live in current repo-backed status. Wemix (1111) is still the unresolved lane. | | Alltra 138 ↔ 651940 | ALT path live. | -| cW* on public chains | No longer design-only. Current machine-readable deployment artifacts show active `cW*` inventory on `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`; `1111` remains deferred. | +| cW* on public chains | No longer design-only. Current machine-readable deployment artifacts show active `cW*` inventory on **nine** public chains `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` (Cronos `25` excluded from the promoted surface); `1111` remains deferred. | | LINK for CCIP | Fund bridges per lane so cross-chain messages execute. | --- @@ -92,7 +92,7 @@ | Step | Action | Ref | |------|--------|-----| -| C.1 | **Remaining token gaps:** focus on chains still deferred or undocumented, with Wemix first. The active set already includes `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`. | [PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK](PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK.md), [TOKEN_CONTRACT_DEPLOYMENTS_REMAINING](../11-references/TOKEN_CONTRACT_DEPLOYMENTS_REMAINING.md) §3 | +| C.1 | **Remaining token gaps:** focus on chains still deferred or undocumented, with Wemix first. The nine-chain promoted active set is `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` (exclude Cronos `25` from that public claim). | [PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK](PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK.md), [TOKEN_CONTRACT_DEPLOYMENTS_REMAINING](../11-references/TOKEN_CONTRACT_DEPLOYMENTS_REMAINING.md) §3 | | C.2 | **Remaining pool gaps:** do not assume public-chain edge pools are globally missing. The current generated artifacts show meaningful PMM and wrapped-mesh rollout already present; work remaining is now per-chain/per-venue and should be taken from the latest mesh matrix and phase-completion artifacts. | [PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK](PHASE_C_CW_AND_EDGE_POOLS_RUNBOOK.md), [LIQUIDITY_POOLS_MASTER_MAP](../11-references/LIQUIDITY_POOLS_MASTER_MAP.md) § Public-chain cW* | | C.3 | **Stabilization bot / peg bands** (optional): Run bot and peg-band config from cross-chain-pmm-lps for cW* peg maintenance. | [cross-chain-pmm-lps/README.md](../../cross-chain-pmm-lps/README.md) | diff --git a/docs/04-configuration/CHAIN138_SYSTEM_OF_RECORD_MODEL.md b/docs/04-configuration/CHAIN138_SYSTEM_OF_RECORD_MODEL.md new file mode 100644 index 00000000..ce150dd1 --- /dev/null +++ b/docs/04-configuration/CHAIN138_SYSTEM_OF_RECORD_MODEL.md @@ -0,0 +1,73 @@ +# Chain 138 System-of-Record Model + +Status: canonical boundary document for explaining what Chain 138 records, verifies, and does not claim to replace. + +## Summary + +Chain 138 is the synchronized settlement and verification layer for the GRU ecosystem. It records reserve-linked asset state, transactional state, collateral-validation state, token mappings, proof references, and settlement events. + +Chain 138 should be presented as an auditable distributed-ledger system-of-record and proof layer. It should not be presented as the legal custodian of every underlying off-chain asset. + +## Boundary + +| Domain | Chain 138 role | External evidence / authority | +|---|---|---| +| Reserve balances | Records and synchronizes reserve-linked state and proof references. | Custodians, banks, trustees, UCC filings, Euroclear records, exchange reporting, and qualified counterparties. | +| Settlement positions | Records transactional state, balances, mappings, and settlement transitions. | Participant ledgers, payment systems, banking rails, RTGS/EMI systems, and reconciliation APIs. | +| Collateral validation | Anchors validation state and provides audit trails. | Custodian attestations, inventory records, legal filings, exchange reports, and internal reserve-grade controls. | +| c* assets | Native Chain 138 compliant representations. | GRU registry, UniversalAssetRegistry, token contracts, and reserve evidence. | +| cW* assets | Public-chain transport representations of c* source assets. | Public-chain token contracts, bridge/mapping evidence, and Chain 138 source-asset records. | +| Prices | May expose internal accounting, oracle, or report API data for dApps. | Wallet fiat displays depend on external providers such as CoinGecko, CMC, Etherscan, or provider-specific pricing systems. | + +## What Chain 138 Is + +- An EVM-compatible settlement and verification network. +- A synchronized record of GRU reserve-linked asset and settlement state. +- A proof and reconciliation layer for c* and cW* asset relationships. +- A source of token metadata, mappings, contract state, and report API evidence. +- An audit trail for collateral validation, reserve checks, and settlement events. + +## What Chain 138 Is Not + +- Not a speculative cryptocurrency thesis. +- Not an algorithmic stablecoin mechanism. +- Not a replacement for regulated custodians, banks, trustees, or official filing systems. +- Not a guarantee that external wallets will display USD prices. +- Not a claim that cW* wrappers are official third-party issuer tokens. + +## API and Evidence Flow + +Recommended provider-facing evidence flow: + +```text +Underlying reserve evidence + -> reserve catalog / custodian / filing / exchange record + -> Chain 138 reserve or asset state + -> c* native compliant representation + -> cW* public-chain transport representation + -> token-aggregation report API + -> provider packet / wallet metadata / tracker submission +``` + +## Operational Cadence + +Reserve verification, reconciliation, rebasing, and audit workflows should be described as rolling checks that operate at 6-second intervals where the integration is live. Chain 138's 2-second block interval supports settlement-state updates, while 6-second reserve verification aligns with the PMM mesh and keeper cadence used across the ecosystem. + +## Acceptance Criteria for Provider Claims + +Do not promote a claim as externally accepted until there is evidence for the specific provider surface: + +| Claim | Required evidence | +|---|---| +| Chain metadata accepted | Provider or registry page shows Chain 138 with correct chain ID, RPC, explorer, icon, and native currency. | +| Token metadata accepted | Provider page or wallet shows correct symbol, name, decimals, logo, and contract. | +| Price accepted | Provider returns a current nonzero price for the exact CAIP-19 asset ID or contract. | +| Supply accepted | Provider accepts total or circulating supply method and displays it on the public profile/API. | +| Market accepted | Public indexed pool, depth, volume, and pair page are visible and stable. | + +## References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [GRU_RESERVE_LAYER_EXPLAINER.md](GRU_RESERVE_LAYER_EXPLAINER.md) +- [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) +- [PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md](PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md) diff --git a/docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md b/docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md new file mode 100644 index 00000000..291bb57d --- /dev/null +++ b/docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md @@ -0,0 +1,23 @@ +# CMC Top 10 Ecosystem Accessibility Matrix + +- Generated: `2026-05-11T22:34:46.683039+00:00` +- Source: [CoinMarketCap coins page](https://coinmarketcap.com/coins/) +- Observed: `2026-05-11` +- Boundary: Ranks are volatile; rerun or update this snapshot before external outreach. + +| Rank | Token | Accessibility | DBIS touchpoint | Repo-side timeframe | Repo-doable next work | +| --- | --- | --- | --- | --- | --- | +| 1 | BTC (Bitcoin) | non_evm_wrapped_lane_required | cWBTC / BTC reserve-or-wrapper evidence lane | 1-2 weeks repo evidence after wallet/venue binding | Bind canonical BTC custody/address evidence fields.
Add BTC venue and wrapped-asset evidence placeholders.
Keep claims as provenance-only until custody and liquidity are independently evidenced. | +| 2 | ETH (Ethereum) | native_evm_core_surface | WETH/cWETH, Ethereum Mainnet cWUSDC, gas/quote evidence | 1-3 days repo hardening | Refresh Ethereum pool and quote-side evidence.
Add CMC/Dex/Gecko sanity checks for ETH-paired surfaces. | +| 3 | USDT (Tether USDt) | evm_quote_asset_and_wrapped_transport | cUSDT / cWUSDT | 1-3 days repo-side; provider acceptance external | Refresh cUSDT/cWUSDT provider packet fields.
Validate official USDT quote addresses per chain. | +| 4 | XRP (XRP) | xrpl_lane_required | XRPLAdapter / wXRP / MintBurnController | 1-2 weeks after wallet/trustline binding | Bind XRPL account and destination tag policy placeholders.
Document XRP reserve, trustline, and issuer requirements. | +| 5 | BNB (BNB) | evm_compatible_bsc_lane | BSC cW* routing and gas surface | 2-5 days repo-side | Refresh BSC cW* pool and official quote evidence.
Check BNB gas budget and CMC report values. | +| 6 | USDC (USD Coin) | primary_focus_ready_for_submission | cUSDC / cWUSDC | submission-ready now; price/listing acceptance external | Keep Etherscan/CoinGecko/CMC/DexScreener packets current.
Maintain exact CAIP-19 discipline for Mainnet cWUSDC. | +| 7 | SOL (Solana) | solana_spl_lane_required | SolanaAdapter and config/solana-gru-bridge-lineup.json | 3-7 days repo-side if mints are bound | Bind SPL mint placeholders and minimum rent/gas targets.
Separate confirmed Chain 138 adapter evidence from native Solana liquidity claims. | +| 8 | TRX (TRON) | tron_wallet_and_energy_lane_required | TronAdapter and derived/canonical Tron wallet evidence | 3-7 days after address confirmation | Bind canonical Tron address policy placeholder.
Document TRX energy/bandwidth and TRC-20 inventory requirements. | +| 9 | DOGE (Dogecoin) | new_non_evm_adapter_or_custody_lane | future DOGE wrapper/custody evidence lane | 1-3 weeks for serious repo evidence | Create DOGE custody and bridge evidence stub.
Keep DOGE out of provider claims until wallet, reserve, and venue evidence exist. | +| 10 | HYPE (Hyperliquid) | new_chain_or_venue_research_required | future Hyperliquid venue/asset touchpoint | 1-3 weeks for discovery/evidence | Open a research stub for chain/asset identifiers and supported custody paths.
Do not include HYPE in liquidity or settlement claims until identifiers are bound. | + +## Operating Rule + +This matrix is a repo-side planning artifact. It improves DBIS coverage discipline, but it does not imply that any external tracker, wallet, exchange, custodian, or market-data provider has accepted a token. diff --git a/docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md b/docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md new file mode 100644 index 00000000..593ec276 --- /dev/null +++ b/docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md @@ -0,0 +1,108 @@ +# cWUSDC Non-Manual Provider Tasks + +Status: canonical list of cWUSDC provider tasks that do not require manual provider-form submission, wallet UI screenshots, live liquidity transactions, or external account dashboards. + +Latest evidence source: [../../reports/status/cwusdc-provider-handoff-latest.md](../../reports/status/cwusdc-provider-handoff-latest.md) (`2026-05-11T03:34:35Z`). + +## Current State + +| Area | Status | Evidence | +|---|---|---| +| Repo-controlled public URL prerequisites | Passing | `8 / 8` `d-bis.org` URLs returned HTTP `200` in `reports/status/cwusdc-etherscan-prereq-urls-latest.md`. | +| CI-safe provider readiness | Passing for repo-controlled checks | `reports/status/cwusdc-provider-readiness-ci-latest.md`; external blockers are advisory. | +| Etherscan token page visibility | Passing | External tracker probe sees the token page and required text. | +| CMC DEX visibility | Passing | External tracker probe sees the CMC DEX token page. | +| GeckoTerminal V3 pool visibility | Passing | V3 pool API returns `data`. | +| GeckoTerminal V2 pool visibility | External / rate-limit blocker | Latest probe returned HTTP `429`, so it is treated as an external advisory blocker until the next successful probe. | +| CoinGecko price API | External blocker | API responds but does not include the cWUSDC contract key. | +| DexScreener token APIs | External blocker | Token-pairs and tokens endpoints return empty arrays. | +| EVM liquidity-gap planner rows | No current rows | Latest planner summary shows `rows = 0`. | +| Non-EVM funding requirements | Open, operator-bound | Solana, Tron, XRPL, and other non-EVM requirements need wallet/asset/target binding before claims. | +| Mainnet cWUSDC supply attestation | Refreshed | `reports/status/cwusdc-supply-circulating-attestation-latest.md`; circulating supply `10451316981.309788`. | +| Global cUSDC/cWUSDC family proof | Refreshed | `reports/status/global-cusdc-cwusdc-family-supply-proof-latest.md`; `22 / 23` entries proved for aggregate. | +| Etherscan Value dossier | Refreshed | `reports/status/cwusdc-etherscan-value-dossier-latest.md`; ready for external submission, but Etherscan USD Value not ready. | +| Etherscan Value propagation monitor | Refreshed | `reports/status/cwusdc-etherscan-value-propagation-latest.md`; market cap fields remain blank. | +| Evidence bundle index | Complete | `docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md`. | +| Supply/circulating methodology | Complete | `docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md`. | +| Security/audit disclosure | Complete | `docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md`; formal third-party audit URL still not recorded. | +| Provider response tracker | Complete template | `docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md`; external ticket IDs still require operator updates. | +| No-broadcast liquidity readiness plan | Complete | `docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md`. | + +## Primary Automation + +| Task | Command | Output | Gate behavior | +|---|---|---|---| +| Run all non-manual provider checks | `pnpm cwusdc:provider-checks` | `reports/status/cwusdc-provider-handoff-latest.{json,md}` plus prerequisite/tracker/liquidity reports | Does not fail on external provider blockers unless the wrapped command itself fails unexpectedly. | +| Run CI-safe provider readiness | `pnpm cwusdc:provider-ci` | `reports/status/cwusdc-provider-readiness-ci-latest.{json,md}` | Fails only when repo-controlled public URL prerequisites fail. External provider blockers remain advisory. | +| Rebuild handoff from latest JSON | `pnpm cwusdc:provider-handoff` | `reports/status/cwusdc-provider-handoff-latest.{json,md}` | Uses existing latest JSON files; no network calls. | + +## Individual Non-Manual Tasks + +| Task | Command | Output | Current interpretation | +|---|---|---|---| +| Check Etherscan prerequisite website URLs | `bash scripts/verify/check-cwusdc-etherscan-prereq-urls.sh --json-out reports/status/cwusdc-etherscan-prereq-urls-latest.json --md-out reports/status/cwusdc-etherscan-prereq-urls-latest.md` | URL evidence JSON/Markdown with HTTP status, attempts, and curl status. | Passing; rerun before Etherscan profile submission or CI. | +| Probe external tracker/indexing surfaces | `bash scripts/verify/check-cwusdc-external-trackers-live.sh` | `reports/status/cwusdc-external-trackers-live-latest.{json,md}` | Etherscan, CMC DEX, and GeckoTerminal V3 pass; CoinGecko, DexScreener, and latest GeckoTerminal V2 probe remain external blockers. | +| Re-run liquidity-gap funding planner | `node scripts/verify/plan-token-aggregation-liquidity-gap-funding.mjs` | `reports/status/token-aggregation-liquidity-gap-funding-plan-latest.{json,md}` | Read-only; latest EVM gap rows are `0`; non-EVM funding requirements remain open. | +| Build cWUSDC Etherscan Value dossier | `pnpm cwusdc:etherscan-dossier` | `reports/status/cwusdc-etherscan-value-dossier-latest.{json,md}` | Read-only dossier generation for the Etherscan USD Value path. | +| Generate Mainnet cWUSDC supply/circulating attestation | `python3 scripts/verify/generate-cwusdc-supply-circulating-attestation.py` | `reports/status/cwusdc-supply-circulating-attestation-latest.json` and related report output. | Safe when supply/exclusion evidence needs refresh. | +| Generate global cUSDC/cWUSDC family supply proof | `python3 scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py` | `reports/status/global-cusdc-cwusdc-family-supply-proof-latest.json` and related report output. | Safe when provider packets need refreshed family supply context. | +| Monitor Etherscan Value propagation | `python3 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py` | `reports/status/cwusdc-etherscan-value-propagation-latest.json` and related report output. | Read-only; useful after provider submissions or indexing changes. | + +## Public Probe Commands + +Use these only for quick spot checks; the wrapper scripts above are preferred because they write evidence files. + +```bash +curl -fsS 'https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true' | jq + +curl -fsS 'https://api.dexscreener.com/token-pairs/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a' | jq + +curl -fsS 'https://api.dexscreener.com/tokens/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a' | jq + +curl -fsS 'https://api.geckoterminal.com/api/v2/networks/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3' | jq + +curl -fsS 'https://api.geckoterminal.com/api/v2/networks/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9' | jq +``` + +## Tasks Excluded From This Non-Manual List + +These still require manual or external intervention: + +| Excluded task | Reason | +|---|---| +| Submit Etherscan token profile/logo/social update | Requires authenticated Etherscan account and Etherscan review. | +| Submit CoinGecko listing/update | Requires CoinGecko form/support flow and provider review. | +| Submit CoinMarketCap listing/update | Requires CMC form/support flow and provider review. | +| Submit DexScreener paid/profile/update flow | Requires DexScreener provider flow or marketplace action. | +| Capture wallet screenshots | Requires wallet UI interaction. | +| Add liquidity, swap, bridge, mint, approve, or rebalance | Broadcasts transactions or moves funds; operator approval required. | +| Attach UCC, Euroclear, custodian, exchange, or counterparty records | Requires off-repo authenticated evidence sources. | +| Bind non-EVM wallets/assets/minimum funding targets | Requires operator confirmation and network-specific custody data. | + +## Maintenance Rule + +After any non-manual run, update or review: + +- [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) +- [CWUSDC_PROVIDER_SUBMISSION_PACKET.md](CWUSDC_PROVIDER_SUBMISSION_PACKET.md) +- [RESERVE_VERIFICATION_EVIDENCE_INDEX.md](RESERVE_VERIFICATION_EVIDENCE_INDEX.md) +- `reports/status/cwusdc-provider-handoff-latest.md` +- `docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md` +- `docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md` + +Do not mark external provider work as `accepted` until the public provider page/API confirms acceptance. + +## Last Completion Run + +Completed on 2026-05-11: + +```bash +pnpm cwusdc:provider-checks +pnpm cwusdc:provider-ci +python3 scripts/verify/generate-cwusdc-supply-circulating-attestation.py +python3 scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py +python3 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py +pnpm cwusdc:etherscan-dossier +``` + +All repo-safe commands completed. Remaining blockers require external provider indexing/review or operator-bound non-EVM/funding data. diff --git a/docs/04-configuration/CWUSDC_OPERATOR_SAFE_PROVIDER_CHECKLIST.md b/docs/04-configuration/CWUSDC_OPERATOR_SAFE_PROVIDER_CHECKLIST.md new file mode 100644 index 00000000..ed5d4b8c --- /dev/null +++ b/docs/04-configuration/CWUSDC_OPERATOR_SAFE_PROVIDER_CHECKLIST.md @@ -0,0 +1,33 @@ +# cWUSDC Operator-Safe Provider Checklist + +Status: repo-side checklist for improving the cWUSDC / Chain 138 provider posture without submitting external forms, moving funds, approving tokens, swapping, bridging, or broadcasting transactions. + +## Repo-Doable Now + +| Task | Command / artifact | Output | +|---|---|---| +| Refresh provider CI | `pnpm cwusdc:provider-ci` | `reports/status/cwusdc-provider-readiness-ci-latest.*` | +| Refresh provider monitor snapshot | `pnpm cwusdc:provider-monitor` | `reports/status/cwusdc-provider-monitoring-snapshot-latest.*` | +| Build provider submission prefill | `pnpm cwusdc:submission-prefill` | `reports/status/cwusdc-provider-submission-prefill-latest.*` | +| Build external packet index | `pnpm provider:submission-index` | `docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md` | +| Build CMC top-10 coverage | `pnpm ecosystem:cmc-top10` | `docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md` | +| Build non-EVM requirement stubs | `pnpm non-evm:requirements` | `config/non-evm-lane-requirements.json` | +| Check CMC-shaped report sanity | `pnpm provider:cmc-sanity` | `reports/status/cmc-provider-report-sanity-latest.*` | + +## External Or Operator-Bound + +| Task | Boundary | +|---|---| +| Etherscan profile approval | Requires Etherscan review and acceptance. | +| CoinGecko price API entry | Requires CoinGecko listing/indexing acceptance. | +| CoinMarketCap full token profile/value | Requires CMC review/indexing acceptance. | +| DexScreener pair indexing/profile | Requires DexScreener indexing/profile acceptance. | +| Market-depth or peg claim | Requires real quote-side liquidity, fresh public events, and truthful caveats. | +| Non-EVM production liquidity claim | Requires canonical wallets, asset IDs, gas/reserve targets, venue evidence, and funding policy closure. | + +## Claim Discipline + +- Use `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` for Mainnet cWUSDC provider work. +- Keep Chain 138 cUSDC evidence as provenance/system-of-record context, not as Ethereum Mainnet cWUSDC supply. +- Do not describe cWUSDC as Circle-issued USDC. +- Treat repo reports as submission evidence until a provider visibly accepts the asset. diff --git a/docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md b/docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md new file mode 100644 index 00000000..d9e3616a --- /dev/null +++ b/docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md @@ -0,0 +1,135 @@ +# cWUSDC Provider Submission Packet + +Status: consolidated cross-provider packet for Ethereum Mainnet `cWUSDC`. Use provider-specific packets for final form fields, but keep this file as the shared narrative and evidence source. + +## Asset Identity + +| Field | Value | +|---|---| +| Network | Ethereum Mainnet | +| Chain ID / CAIP-2 | `1` / `eip155:1` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| CAIP-19 | `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Token name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Asset class | Compliant wrapped public-network transport representation | +| Canonical source asset | Chain 138 `cUSDC` | +| Source asset address | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | + +## Provider Description + +Use this for Etherscan, CoinGecko, CMC, wallet registries, and support tickets: + +```text +cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC in the DBIS GRU asset family. It is used for public-network mirrored settlement, proof, and interoperability workflows. cWUSDC is a DBIS/GRU transport asset and should not be presented as official Circle-issued USDC. +``` + +Short version: + +```text +cWUSDC is a DBIS/GRU compliant wrapped transport representation of canonical Chain 138 cUSDC on Ethereum Mainnet. +``` + +## Submission Boundaries + +| Boundary | Required wording | +|---|---| +| Official issuer status | cWUSDC is not Circle-issued USDC. | +| Source-chain relationship | Chain 138 `cUSDC` is the canonical source asset. | +| Public-chain role | Ethereum Mainnet `cWUSDC` is the wrapped transport and proof surface. | +| Price display | Fiat price display depends on external provider acceptance. | +| Liquidity | Public pools are supporting evidence only when indexed and sufficiently liquid. | +| Supply | Submit exact total supply and any provider-requested circulating-supply exclusions. | + +## Evidence Links + +| Evidence | Location | +|---|---| +| Evidence bundle index | [etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md](etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md) | +| Supply/circulating methodology | [etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md](etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md) | +| Security and audit disclosure | [etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md](etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md) | +| Provider response tracker | [etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md](etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md) | +| Liquidity readiness plan | [etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md](etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md) | +| Etherscan token page | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Provider submission prefill | `reports/status/cwusdc-provider-submission-prefill-latest.md` | +| Screenshot capture checklist | `reports/status/cwusdc-provider-submission-prefill-latest.md` | +| Provider monitoring snapshot | `reports/status/cwusdc-provider-monitoring-snapshot-latest.md` | +| Token logo | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| CoinGecko report | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | +| CMC report | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | +| All report | `https://explorer.d-bis.org/api/v1/report/all` | +| Etherscan profile packet | [etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md](etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md) | +| Tracker packet | [coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md](coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md) | +| Etherscan E2E recommendations | [etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md](etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md) | +| Provider matrix | [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) (incl. Money / mUSD ↔ hub `cUSDC` / `cUSDC_V2` and Mainnet `cWUSDC` narrative) | +| Reserve evidence index | [RESERVE_VERIFICATION_EVIDENCE_INDEX.md](RESERVE_VERIFICATION_EVIDENCE_INDEX.md) | + +## Provider-Specific Notes + +| Provider | Submit / emphasize | +|---|---| +| Etherscan | Contract, logo, website, description, verified source, non-Circle disclosure. | +| CoinGecko | Contract, supply proof, logo, website, LP evidence, liquidity caveats, non-affiliation disclosure. | +| CMC | Same as CoinGecko plus CMC DEX discoverability if applicable. | +| MetaMask | EIP-747 can refresh custom-asset metadata; native fiat value requires provider-side price acceptance. | +| DexScreener / GeckoTerminal | Indexed pair URLs, logo/profile links, and liquidity caveats. | +| Wallet registries | Exact CAIP-19 asset ID, logo, name, symbol, decimals, and non-affiliation disclosure. | + +## Incident Response and Escalation + +Use these contacts for provider and reviewer escalation: + +| Purpose | Contact / URL | +|---|---| +| Provider submissions | `submissions@d-bis.org` | +| User support | `support@d-bis.org` | +| Security / responsible disclosure | `https://d-bis.org/security` | +| General contact | `https://d-bis.org/contact` | +| Trust metadata | `https://d-bis.org/.well-known/trust.json` | + +Provider-facing incident language: + +```text +For token metadata, supply, market-data, or security questions related to Ethereum Mainnet cWUSDC, contact submissions@d-bis.org. For security concerns, use the DBIS security page and responsible-disclosure route at https://d-bis.org/security. +``` + +## Submission Checklist + +- [x] Exact Ethereum Mainnet contract address. +- [x] CAIP-19 asset ID. +- [x] Name, symbol, decimals. +- [x] Chain 138 source-asset relationship. +- [x] Non-Circle disclosure. +- [x] Logo URL. +- [x] Etherscan profile packet. +- [x] CoinGecko/CMC report endpoints. +- [x] Supply proof pointer. +- [x] Liquidity caveat. +- [ ] External Etherscan profile accepted. +- [ ] External CoinGecko listing accepted. +- [ ] External CMC listing accepted. +- [ ] MetaMask provider-side price visible. +- [ ] DexScreener token/pair profile accepted. +- [ ] GeckoTerminal profile evidence captured. + +## Follow-Up Evidence + +After each submission, add a dated report under `reports/status/` with: + +- provider name; +- submission date; +- account or contact used; +- ticket, PR, issue, or form confirmation ID; +- exact submitted URLs and contract address; +- provider response; +- public profile URL or screenshot when accepted; +- rejection reason or blocker when blocked; +- next action and owner. + +## Canonical References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](GRU_RISK_AND_DISCLOSURE_LANGUAGE.md) +- [GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md](GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md) +- [etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md](etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md) diff --git a/docs/04-configuration/DEVIN_GITEA_PROXMOX_CICD.md b/docs/04-configuration/DEVIN_GITEA_PROXMOX_CICD.md index 027134d9..f40fdacf 100644 --- a/docs/04-configuration/DEVIN_GITEA_PROXMOX_CICD.md +++ b/docs/04-configuration/DEVIN_GITEA_PROXMOX_CICD.md @@ -10,7 +10,7 @@ Create a repeatable path where: 1. Devin lands code in Gitea. -2. Gitea Actions validates the repo on the site-wide `act_runner`. +2. Gitea Actions validates the repo on **`act_runner`** (**`ubuntu-latest-heavy`** → CT **5700** `dev-vm`; lighter repos may use **`ubuntu-latest`** on CT **5701**). 3. A successful workflow calls `phoenix-deploy-api`. 4. `phoenix-deploy-api` resolves the repo/branch to a deploy target and runs the matching Proxmox publish command. 5. The deploy service checks the target health URL before it reports success. @@ -63,7 +63,7 @@ The deploy and PR workflows both fetch `origin/main` and `origin/master` before ```text Devin -> push to Gitea - -> Gitea Actions on act_runner (5700) + -> Gitea Actions on act_runner (heavy pool: 5700; standard pool: 5701) -> bash scripts/verify/run-all-validation.sh --skip-genesis -> validates deploy-targets.json structure -> POST /api/deploy to phoenix-deploy-api diff --git a/docs/04-configuration/DEV_VM_GITOPS_PLAN.md b/docs/04-configuration/DEV_VM_GITOPS_PLAN.md index 29302404..27c3f349 100644 --- a/docs/04-configuration/DEV_VM_GITOPS_PLAN.md +++ b/docs/04-configuration/DEV_VM_GITOPS_PLAN.md @@ -117,13 +117,22 @@ bash scripts/create-dev-vm-5700.sh From your workstation (where `/home/intlc/projects` exists): +```bash +# Recommended: preserves .git, excludes heavy artifacts (see script header). +cd ~/projects/proxmox +./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run +./scripts/deployment/sync-local-projects-to-dev-vm.sh +``` + +Full cutover steps (Cursor Remote-SSH, secrets, checklist): [DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md](DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md). + +Legacy one-liner (drops `.git` — only for disposable trees): + ```bash rsync -avz --exclude='.git' --exclude='node_modules' \ /home/intlc/projects/ dev1@192.168.11.59:/srv/projects/ ``` -Then on the dev VM, for each project: `git init` (if not already), add Gitea remote, push. - --- ## 9. Security and Access diff --git a/docs/04-configuration/DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md b/docs/04-configuration/DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md new file mode 100644 index 00000000..09aeed34 --- /dev/null +++ b/docs/04-configuration/DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md @@ -0,0 +1,183 @@ +# Workstation → Dev VM migration (shared SSH development) + +**Purpose:** Move canonical day-to-day development from **`~/projects` on a laptop/WSL box** to **LXC 5700 (Dev VM, `192.168.11.59`)** under **`/srv/projects`**, so all contributors and tooling use the **same tree** over **SSH** (including Cursor Remote-SSH). + +**Canonical references:** [DEV_VM_GITOPS_PLAN.md](DEV_VM_GITOPS_PLAN.md), [DEV_VM_SSH_REMOTE_ACCESS.md](DEV_VM_SSH_REMOTE_ACCESS.md), `scripts/create-dev-vm-5700.sh`, `scripts/setup-dev-vm-users-and-gitea.sh`. + +--- + +## 1. What moves vs what stays local + +| Item | Where it runs | +|------|----------------| +| **Source tree, builds, tests, Git** | **Dev VM** `/srv/projects` (after migration) | +| **Cursor / IDE UI** | Your laptop — connect with **Remote-SSH** to the Dev VM (code executes on 5700) | +| **Proxmox host shell** (`pct`, `qm`) | **SSH to the node** that runs CT 5700 (see `DEV_VM_SSH_REMOTE_ACCESS.md` — 5700 may live on **r630-04**, not r630-01) | + +Pyright/Cursor language services then analyze files **on the Dev VM** when you use Remote-SSH, which also reduces “huge local monorepo” indexing on WSL. + +--- + +## 2. Preconditions + +1. **CT 5700** exists, is started, **`sshd` reachable:** + `ssh -o ConnectTimeout=5 "${DEV_VM_USER:-dev1}@${IP_DEV_VM:-192.168.11.59}" pwd` +2. **`/srv/projects`** exists and is writable by your dev user (group `dev` or ACLs per setup script). +3. **SSH key** for that user is loaded (`ssh-add -l`). +4. **Network:** Choose one path: + - **LAN / VPN:** `192.168.11.59:22` (same as `IP_DEV_VM`). + - **Cloudflare Tunnel + Access (FQDN):** **`ssh.dev.d-bis.org`** — does **not** work as plain `ssh user@ssh.dev.d-bis.org` to port 22 through the public proxy; use **`cloudflared access ssh`** (see below and [DEV_VM_SSH_REMOTE_ACCESS.md](DEV_VM_SSH_REMOTE_ACCESS.md)). + - **UDM WAN forward:** e.g. **`76.53.10.40:22` → `192.168.11.59:22`** (restrict by allowlist) — then SSH to the **public IP/hostname** on port 22, not the Cloudflare tunnel hostname. + +### 2.1 Probes (copy/paste) + +**LAN (works when this workstation is on VLAN 11 / VPN to `192.168.11.0/24`):** + +```bash +ssh -o BatchMode=yes -o ConnectTimeout=8 dev1@192.168.11.59 true && echo OK +``` + +**FQDN via Cloudflare Access (requires `cloudflared` on PATH + policy / service token):** + +```bash +ssh -o BatchMode=yes -o ConnectTimeout=25 \ + -o ProxyCommand="cloudflared access ssh --hostname %h" \ + dev1@ssh.dev.d-bis.org true && echo OK +``` + +**All-in-one script (from repo root):** + +```bash +./scripts/deployment/probe-dev-vm-ssh.sh +``` + +**Note:** A plain `ssh dev1@ssh.dev.d-bis.org` without `ProxyCommand` typically **times out** or errors: the hostname resolves to **Cloudflare anycast**, not a raw open `:22` on the public Internet. That is expected for tunnel-routed SSH. + +### 2.2 Install `cloudflared` on the workstation (for FQDN SSH / rsync) + +```bash +mkdir -p ~/bin +ARCH=$(uname -m); case "$ARCH" in x86_64) CF_ARCH=amd64;; aarch64|arm64) CF_ARCH=arm64;; *) CF_ARCH=amd64;; esac +curl -fsSL "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${CF_ARCH}" -o ~/bin/cloudflared +chmod +x ~/bin/cloudflared +export PATH="$HOME/bin:$PATH" +``` + +Then configure **Cloudflare Access** (browser login or `CF_ACCESS_CLIENT_ID` / `CF_ACCESS_CLIENT_SECRET` per [DEV_VM_SSH_REMOTE_ACCESS.md](DEV_VM_SSH_REMOTE_ACCESS.md)). A **TLS handshake failure** from `cloudflared access ssh` usually means missing or invalid Access credentials. + +--- + +## 3. One-time: create or verify the Dev VM + +From repo root (operator machine with SSH to a Proxmox node): + +```bash +bash scripts/create-dev-vm-5700.sh --dry-run # optional +bash scripts/create-dev-vm-5700.sh +``` + +Inside **5700** (or via `pct exec 5700 -- …`): + +```bash +bash /path/to/proxmox/scripts/setup-dev-vm-users-and-gitea.sh +``` + +Add **all** developers’ public keys to `dev1`–`dev4` (or your chosen accounts). + +--- + +## 4. Sync `~/projects` → `/srv/projects` (first migration) + +**Default** source is **`~/projects`** (matches `~/projects` on WSL when `HOME` is `/home/intlc`). + +Dry-run: + +```bash +cd ~/projects/proxmox +./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run +``` + +Live sync (**default: no remote deletes** — safe for first migration; remote-only trees like `the_order` are kept): + +```bash +./scripts/deployment/sync-local-projects-to-dev-vm.sh +``` + +**Mirror** the workstation onto the VM (removes remote files not present locally — use only after review): + +```bash +./scripts/deployment/sync-local-projects-to-dev-vm.sh --delete-remote +``` + +**Over Cloudflare Access SSH** (requires `cloudflared` + Access policy / service token; set hostname to the tunnel FQDN): + +```bash +export PATH="$HOME/bin:$PATH" +export RSYNC_RSH='ssh -o BatchMode=yes -o ConnectTimeout=30 -o ProxyCommand="cloudflared access ssh --hostname ssh.dev.d-bis.org"' +export DEV_VM_HOST=ssh.dev.d-bis.org +cd ~/projects/proxmox +./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run +``` + +Environment overrides: + +```bash +SOURCE=/home/intlc/projects DEV_VM_USER=dev1 ./scripts/deployment/sync-local-projects-to-dev-vm.sh +``` + +**Behavior:** + +- **Preserves `.git`** (full migration with history). +- **Excludes** `node_modules`, Python venvs, typical build outputs, and by default **`MEV_Bot`** and **`the-order`** (large trees). Set `SKIP_LARGE_LOCAL_TREES=0` to include them. +- **Without `--delete-remote`**, rsync does **not** delete extra files on the Dev VM (recommended first pass). + +**Secrets:** `.env` files may sync; on the Dev VM run `chmod 600 .env` (and siblings). Prefer **Gitea + CI secrets** for long-term; do not commit `.env`. + +--- + +## 5. Cursor: use Remote-SSH from now on + +1. Install **Remote - SSH** (built into Cursor). +2. **SSH config** (`~/.ssh/config` on the laptop), example: + + ```sshconfig + Host dev-vm + HostName 192.168.11.59 + User dev1 + ForwardAgent yes + ``` + + If you use **Cloudflare Access SSH**, follow [DEV_VM_SSH_REMOTE_ACCESS.md](DEV_VM_SSH_REMOTE_ACCESS.md) for `ProxyCommand` / `cloudflared`. + +3. **Connect:** `Cursor` → **Remote-SSH** → **dev-vm** → open folder **`/srv/projects/proxmox`** (or the monorepo root you need). + +4. **Terminal inside Cursor** will be **on 5700** — that is the intended “single place” for `git`, `pnpm`, `forge`, and operator scripts that need LAN RPC. + +--- + +## 6. Git coordination (recommended) + +After the first sync: + +1. Ensure **Gitea** on the Dev VM (or cluster) holds the **authoritative** remotes ([DEV_VM_GITOPS_PLAN.md](DEV_VM_GITOPS_PLAN.md) §6). +2. On the Dev VM: `git remote -v` in each repo; push **`main`** (or default branch) to Gitea. +3. **Stop** using the old WSL tree for shared work, or treat it as **read-only archive** after cutover to avoid drift. + +--- + +## 7. Cutover checklist + +- [ ] 5700 running; `ssh dev1@192.168.11.59` works. +- [ ] `/srv/projects` ready and backed up if it already had content. +- [ ] `sync-local-projects-to-dev-vm.sh --dry-run` reviewed. +- [ ] Full sync completed; large dirs (`SKIP_LARGE_LOCAL_TREES`) decided. +- [ ] Remote `.env` permissions fixed; no secrets committed. +- [ ] Cursor Remote-SSH opens `/srv/projects/proxmox` successfully. +- [ ] `pnpm install` / `forge` smoke test on Dev VM for critical packages. +- [ ] Team notified: **canonical path = Dev VM `/srv/projects`**. + +--- + +## 8. Rollback + +Keep the original **`~/projects`** tree until the team confirms the Dev VM workflow. Rollback = continue editing locally; no automatic deletion of the workstation copy is performed by the sync script. diff --git a/docs/04-configuration/EXPLORER_GAPS_AND_RECOMMENDATIONS.md b/docs/04-configuration/EXPLORER_GAPS_AND_RECOMMENDATIONS.md index b04b69ae..c067cadf 100644 --- a/docs/04-configuration/EXPLORER_GAPS_AND_RECOMMENDATIONS.md +++ b/docs/04-configuration/EXPLORER_GAPS_AND_RECOMMENDATIONS.md @@ -62,11 +62,17 @@ To verify a contract from the explorer when automated verification is unavailable or returns 502: -1. Open **https://explorer.d-bis.org/address/** +1. Open **https://explorer.d-bis.org/addresses/** 2. Go to the **Contract** tab → **Verify & Publish** 3. Choose method: **Via Standard JSON Input** (recommended), **Via Sourcify**, or **Via Multi-file** 4. Upload source (or paste) and provide constructor arguments if needed; submit. +**If you see no “Verify & Publish” (or no contract-verification controls) on the address page:** the hostname may be serving the **custom explorer SPA** only, which does not embed every Blockscout screen. Use one of these instead: + +- **Forge (recommended):** `source scripts/lib/load-project-env.sh` then `./scripts/verify/run-contract-verification-with-proxy.sh` (submits to Blockscout via the local proxy; no explorer form required). +- **Native Blockscout (LAN):** open **`http://192.168.11.140:4000`** (VM Blockscout) and use the instance’s **contract verification** entry (in many Blockscout versions: **Other → Verify contract**, or the **Code / contract** area on the address page — labels vary by release). +- **Cronos:** manual UI is always at **`https://explorer.cronos.org/verifyContract`** (separate stack). + See [08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md) for Forge/proxy batch verification and troubleshooting (502, HTML response). ### 3.3 Recommendations diff --git a/docs/04-configuration/EXPLORER_TOKENS_GRU_POLICY.md b/docs/04-configuration/EXPLORER_TOKENS_GRU_POLICY.md index b3377ff8..572c9023 100644 --- a/docs/04-configuration/EXPLORER_TOKENS_GRU_POLICY.md +++ b/docs/04-configuration/EXPLORER_TOKENS_GRU_POLICY.md @@ -2,6 +2,8 @@ **Purpose:** All compliant (c*) tokens listed on [https://explorer.d-bis.org/tokens](https://explorer.d-bis.org/tokens) must be part of the GRU (Global Reserve Unit) — i.e. registered in `UniversalAssetRegistry` as `AssetType.GRU`. +Provider-facing language for explaining GRU, Chain 138, c*, and cW* assets lives in [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md), with reserve-layer details in [GRU_RESERVE_LAYER_EXPLAINER.md](GRU_RESERVE_LAYER_EXPLAINER.md) and disclosure language in [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](GRU_RISK_AND_DISCLOSURE_LANGUAGE.md). + ## Policy 1. **Token lists** diff --git a/docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md b/docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md new file mode 100644 index 00000000..02b42955 --- /dev/null +++ b/docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md @@ -0,0 +1,17 @@ +# External Submission Packet Index + +- Generated: `2026-05-11T22:35:29.997089+00:00` +- All artifacts present: `True` + +| Provider | Status | Primary packet | Supporting artifacts | Next repo action | +| --- | --- | --- | --- | --- | +| Etherscan | repo_ready_external_acceptance_pending | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` (True) | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` (True)
`docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md` (True)
`reports/status/cwusdc-etherscan-value-dossier-latest.json` (True) | Refresh dossier and capture post-submit response evidence. | +| CoinGecko | repo_ready_external_price_entry_missing | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` (True) | `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` (True)
`docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json` (True)
`reports/status/cwusdc-external-trackers-live-latest.json` (True) | Keep token-price API blocker visible and attach current supply/liquidity caveats. | +| CoinMarketCap | dex_page_visible_full_value_acceptance_pending | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` (True) | `reports/status/token-aggregation-cmc-report-chain1-latest.json` (True)
`reports/status/cmc-provider-report-sanity-latest.json` (True)
`reports/status/cmc-top10-ecosystem-coverage-latest.json` (True) | Use CMC sanity report to avoid overclaiming liquidity or quote-asset identity. | +| DexScreener | api_not_indexing_pairs | `docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md` (True) | `reports/status/cwusdc-external-trackers-live-latest.json` (True)
`reports/status/cwusdc-provider-handoff-latest.md` (True) | Keep pair/profile request evidence updated after fresh public swap/liquidity events. | +| GeckoTerminal | pool_api_visible_low_reserve | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` (True) | `reports/status/cwusdc-external-trackers-live-latest.json` (True)
`reports/status/cmc-provider-report-sanity-latest.json` (True) | Track reserve USD and 24h volume separately from listing acceptance. | +| MetaMask | metadata_path_ready_price_provider_external | `docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md` (True) | `docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md` (True)
`docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md` (True)
`reports/status/cwusdc-provider-readiness-ci-latest.json` (True) | Keep CAIP-19, EIP-747, logo URL, and external price-provider blockers aligned. | + +## Boundary + +This index tracks repo-side evidence availability only. Provider submission, review, acceptance, and price propagation remain external states. diff --git a/docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md b/docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md index 1ccb81d1..ca76d1ef 100644 --- a/docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md +++ b/docs/04-configuration/GITEA_ACT_RUNNER_SETUP.md @@ -1,102 +1,133 @@ # Gitea act_runner Setup -**Last Updated:** 2026-03-27 (bootstrap script + `ubuntu-latest` labels) +**Last Updated:** 2026-05-11 **Gitea:** https://gitea.d-bis.org -**Runner host:** dev-vm (VMID 5700) at 192.168.11.59 (Gitea HTTP on that host: port 3000) -**Which Proxmox node?** VMID 5700 is not fixed to one server—confirm before `pct exec`: +## Runner layout (two pools) + +| CT (VMID) | Hostname | Labels | Use | +|-----------|----------|--------|-----| +| **5700** | `dev-vm` | **`ubuntu-latest-heavy`** | Heavy monorepo CI (`pnpm`, `run-all-validation`) — **proxmox** workflows use `runs-on: ubuntu-latest-heavy`. | +| **5701** | `gitea-runner-1` | **`ubuntu-latest`**, **`ubuntu-22.04`**, **`ubuntu-20.04`** | Default pool for other repos / lighter workflows that keep `runs-on: ubuntu-latest`. | + +Both CTs live on **r630-04** (`192.168.11.14`) as of live inventory; confirm before `pct exec`: ```bash -ssh root@192.168.11.10 'pct list | grep 5700' -ssh root@192.168.11.11 'pct list | grep 5700' -ssh root@192.168.11.12 'pct list | grep 5700' +ssh root@192.168.11.14 'pct list | grep -E "5700|5701"' ``` -Use the node where 5700 is **running** (often r630-02 / 192.168.11.12). +**Gitea HTTP** on dev-vm: **`192.168.11.59:3000`** (from CT **5700**, same host as Gitea when Actions hit the LAN URL). --- -## Prerequisites +## Config templates (repo) -1. **Registration token** — Get from Gitea Admin → Actions → Runners: - - https://gitea.d-bis.org/-/admin/actions/runners - - Or org-level: https://gitea.d-bis.org/d-bis/settings/actions/runners +Canonical **`act_runner`** YAML (Docker limits, `fetch_interval`, labels): -2. **Docker** (optional but recommended) — For running jobs in isolated containers. Install on dev-vm if not present. +- `config/gitea-act-runner/config-5700-heavy.yaml` +- `config/gitea-act-runner/config-5701-standard.yaml` + +Deploy to both CTs and restart daemons (LAN, repo root): + +```bash +bash scripts/dev-vm/apply-act-runner-config.sh +``` + +Job containers use **bridge** networking and **`privileged: false`** on both runners; resource caps differ by design (**5700**: 4 CPU / 10 GiB RAM; **5701**: 2 CPU / 4 GiB RAM). --- -## Install act_runner +## Register or re-register runners -### Site-wide (admin API token, recommended) +Requires **`GITEA_TOKEN`** (admin) in **repo root** `.env**. -From the **proxmox** repo root, with **`GITEA_TOKEN`** (admin) in root `.env`: +### Heavy pool (5700) + +Default labels: **`ubuntu-latest-heavy:docker://docker.gitea.com/runner-images:ubuntu-latest`** ```bash bash scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh ``` -This calls `GET /api/v1/admin/runners/registration-token`, registers **act_runner** on CT **5700** with label **`ubuntu-latest`** (daemon shows `ubuntu-latest:host`, which matches workflow `runs-on: ubuntu-latest`), installs **systemd**, and starts the service. To re-register (e.g. change labels), run with `RUNNER_FORCE_REREGISTER=1`. - -### Manual registration token +To pick up new labels after changing Docker image tokens in Gitea: ```bash -# From repo root; replace with the node that hosts 5700 (e.g. 192.168.11.12): -GITEA_RUNNER_REGISTRATION_TOKEN= ssh root@ "pct exec 5700 -- bash -s" < scripts/dev-vm/setup-act-runner.sh +RUNNER_FORCE_REREGISTER=1 bash scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh ``` -Or SSH into dev-vm (192.168.11.59) and run manually: +### Standard pool (5701) + +Registers **`ubuntu-latest`** + **`ubuntu-22.04`** + **`ubuntu-20.04`** against `http://IP_DEV_VM:3000`: ```bash -cd /opt/act_runner -GITEA_RUNNER_REGISTRATION_TOKEN= bash /path/to/setup-act-runner.sh +bash scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh ``` -**Instance URL for `register`:** From inside dev-vm, Gitea is usually reachable as `http://127.0.0.1:3000` (same host). The setup script defaults to `http://192.168.11.59:3000`; override if needed: +Re-register: ```bash -INSTANCE=http://127.0.0.1:3000 GITEA_RUNNER_REGISTRATION_TOKEN= bash setup-act-runner.sh +RUNNER_FORCE_REREGISTER=1 bash scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh +``` + +Low-level script (custom VMID / labels / instance URL): + +```bash +export DEV_VM_VMID=5701 +export GITEA_RUNNER_INSTANCE='http://192.168.11.59:3000' +export RUNNER_LABELS='ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest' +bash scripts/dev-vm/bootstrap-gitea-act-runner.sh +``` + +After **`RUNNER_FORCE_REREGISTER=1`**, Gitea may show an **old offline runner** — remove the stale entry under **Admin → Actions → Runners** if desired. + +--- + +## Systemd unit + +The unit passes **`act_runner daemon -c /etc/act_runner/config.yaml`**. Install or refresh: + +```bash +ssh root@192.168.11.14 "pct exec 5700 -- env GITEA_ACTION_URL=http://127.0.0.1:3000 bash -s" < scripts/dev-vm/install-act-runner-systemd.sh +ssh root@192.168.11.14 "pct exec 5701 -- env GITEA_ACTION_URL=http://192.168.11.59:3000 bash -s" < scripts/dev-vm/install-act-runner-systemd.sh ``` --- -## Run as systemd service +## Workflows in **d-bis/proxmox** -Prefer the install script (writes the unit, enables and starts the service): +Canonical validation/deploy workflows use **`runs-on: ubuntu-latest-heavy`** so jobs land on **5700**. Submodule copies under this repo (explorer-monorepo, cross-chain-pmm-lps, OMNIS) keep **`ubuntu-latest`** so they prefer the **5701** pool. + +--- + +## Cache + +Both runners keep **built-in Actions cache** enabled. Optional next step: point **`cache.external_server`** at a shared cache URL in both YAML files so npm/docker layers dedupe across runners (requires a reachable cache service). + +--- + +## Monitoring (per-runner CPU) + +Host **`loadavg` inside LXCs** tracks the **Proxmox node**, not the CT — do not use it to compare **5700** vs **5701**. While jobs run, prefer **`docker stats`** on the runner CT: ```bash -ssh root@ "pct exec 5700 -- bash -s" < scripts/dev-vm/install-act-runner-systemd.sh +bash scripts/dev-vm/act-runner-resource-snapshot.sh ``` -Optional: if Gitea is not on localhost from the runner’s view, set `GITEA_ACTION_URL` (must match a URL the runner can reach): - -```bash -ssh root@ "pct exec 5700 -- env GITEA_ACTION_URL=http://192.168.11.59:3000 bash -s" < scripts/dev-vm/install-act-runner-systemd.sh -``` - -Manual unit (equivalent): `/etc/systemd/system/act-runner.service` with `Environment=GITEA_ACTION_URL=http://127.0.0.1:3000`, then `systemctl daemon-reload && systemctl enable --now act-runner`. - --- ## Troubleshooting | Symptom | Check | |--------|--------| -| Jobs queued, never start | Gitea **Admin → Actions → Runners**: at least one runner **online**. Repo **Settings → Enable Repository Actions**. | -| “No matching runner” / label errors | Workflow `runs-on:` must match runner labels (e.g. `ubuntu-latest`). In Gitea, open the runner details and compare labels. | -| Runner exits / register errors | Ensure `INSTANCE` URL is reachable from the container (`curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3000/`). Re-register with a **new** token if the old one was rotated (remove `.runner` first, then run `setup-act-runner.sh` again). | -| Docker steps fail | Install Docker on dev-vm and ensure the `act_runner` user (or root) can run `docker`. | -| Binary but no service | If `/opt/act_runner/act_runner` exists but there is **no** `/opt/act_runner/.runner`, registration never completed—run `setup-act-runner.sh` with a token. If `.runner` exists but no unit, run `install-act-runner-systemd.sh`. | - ---- - -## Enable Actions per repository - -Repositories must enable Actions: Repository → Settings → Enable Repository Actions +| Jobs queued, never start | **Admin → Actions → Runners**: at least one runner **online** with a label matching **`runs-on`**. Repo **Settings → Actions** enabled. | +| “No matching runner” | Workflow **`runs-on`** must match a label on an online runner (`ubuntu-latest-heavy` vs `ubuntu-latest`). | +| Old **offline** duplicate runners after re-register | Delete via Admin API or: **`bash scripts/dev-vm/delete-offline-gitea-actions-runners.sh --dry-run`** then **`--apply`** (needs **`GITEA_TOKEN`**). Not removable by SSH alone — Gitea stores runner rows in its DB. | +| Runner exits / register errors | **`curl`** from the CT to **`GITEA_RUNNER_INSTANCE`**. Re-register with a fresh admin token after **`RUNNER_FORCE_REREGISTER=1`**. | +| Docker steps fail | Docker installed on the CT; **`act_runner`** runs as **root** in the default unit. | --- ## References -- [Gitea Actions Quick Start](https://docs.gitea.com/usage/actions/quickstart) -- [act_runner](https://gitea.com/gitea/act_runner) +- [Gitea Actions Quick Start](https://docs.gitea.com/usage/actions/quickstart) +- [act_runner](https://gitea.com/gitea/act_runner) diff --git a/docs/04-configuration/GOV_PORTALS_XOM_DEV_DEPLOYMENT.md b/docs/04-configuration/GOV_PORTALS_XOM_DEV_DEPLOYMENT.md index 0c18066d..b7706f60 100644 --- a/docs/04-configuration/GOV_PORTALS_XOM_DEV_DEPLOYMENT.md +++ b/docs/04-configuration/GOV_PORTALS_XOM_DEV_DEPLOYMENT.md @@ -70,7 +70,11 @@ Request Let's Encrypt certificates in NPMplus UI for each domain, or use a wildc - **502 Bad Gateway:** Ensure LXC 7804 is running and portals are built: `pct exec 7804 -- systemctl status gov-portal-DBIS gov-portal-ICCC gov-portal-OMNL gov-portal-XOM` -- **Rebuild a portal:** - `pct exec 7804 -- bash -c 'cd /srv/gov-portals/DBIS && pnpm run build && systemctl restart gov-portal-DBIS'` +- **Rebuild a portal (after code change):** Prefer the repo script (git fetch + rsync + build on CT **7804** on r630-04): + `bash scripts/deployment/sync-gov-portals-ct-7804-from-git.sh` + Requires `GITEA_TOKEN` in project `.env` (or `export GITEA_TOKEN=…`). Use `--skip-fetch` to rebuild from an already-updated local `GOV_PORTALS_SOURCE` tree. + Manual one-liner on the **Proxmox node that runs CT 7804** (default `root@192.168.11.14`): + `pct exec 7804 -- bash -c 'cd /srv/gov-portals/DBIS && git pull origin main && pnpm install && pnpm run build && systemctl restart gov-portal-DBIS'` + (Only works if `/srv/gov-portals/DBIS` is a git checkout; tarball deploys omit `.git` — use the script above.) - **Update from Gitea:** `pct exec 7804 -- bash -c 'cd /srv/gov-portals && git pull && git submodule update --remote && pnpm install'` diff --git a/docs/04-configuration/GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md b/docs/04-configuration/GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md new file mode 100644 index 00000000..d08841d0 --- /dev/null +++ b/docs/04-configuration/GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md @@ -0,0 +1,55 @@ +# GRU / Chain 138 Not-Crypto FAQ + +Status: canonical defensive FAQ for provider submissions, institutional reviews, and support responses. + +## Is GRU a cryptocurrency? + +No. GRU is a monetary-policy and collateral framework for reserve-backed institutional settlement instruments. Chain 138 is the settlement and verification layer that records and reconciles state for the GRU ecosystem. + +## Is Chain 138 a speculative asset network? + +No. Chain 138 is used as programmable settlement, synchronization, and verification infrastructure. It is EVM-compatible so it can use mature tooling, wallets, explorers, and smart-contract interfaces, but its purpose is institutional settlement and auditability rather than speculative token mechanics. + +## Is GRU an algorithmic stablecoin? + +No. GRU should not be described as an algorithmic stablecoin. The framework uses reserve layers, collateral evidence, utilization constraints, and settlement gates. It does not rely on reflexive token incentives as the source of value support. + +## Are c* assets official third-party issuer tokens? + +No, unless a separate issuer agreement explicitly says so. For example, Chain 138 `cUSDC` and Ethereum Mainnet `cWUSDC` should not be represented as official Circle-issued USDC. They are DBIS/GRU compliant representations and wrapped transport assets tied to the Chain 138 source-asset model. + +## Why do cW* assets exist on public chains? + +cW* assets provide public-network transport, proof, and interoperability surfaces for canonical Chain 138 c* assets. They help external wallets, explorers, DEX terminals, and providers index public-chain activity while preserving a clear source-asset relationship back to Chain 138. + +## Why does MetaMask show a token balance but no fiat value? + +Wallet token balances, token metadata, and fiat price data are separate paths. A wallet can show a balance after token detection or EIP-747 import while still missing a provider-accepted price. MetaMask fiat values require upstream provider acceptance and cannot be forced by this repo. + +## Does Chain 138 replace custodians or official records? + +No. Chain 138 synchronizes and records proof-linked settlement and reserve state. Underlying off-chain evidence may remain with UCC filings, Euroclear records, exchanges, regulated custodians, banks, trustees, or qualified counterparties. + +## How should providers classify GRU assets? + +Use infrastructure and settlement language: + +- reserve-backed monetary instrument; +- compliant wrapped transport representation; +- settlement and verification layer; +- collateral validation and reserve reconciliation; +- auditable system-of-record. + +Avoid speculative or promotional language: + +- cryptocurrency; +- algorithmic stablecoin; +- yield product; +- unbacked token; +- official third-party issuer token unless explicitly approved. + +## Canonical References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](GRU_RISK_AND_DISCLOSURE_LANGUAGE.md) +- [CWUSDC_PROVIDER_SUBMISSION_PACKET.md](CWUSDC_PROVIDER_SUBMISSION_PACKET.md) diff --git a/docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md b/docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md new file mode 100644 index 00000000..ba4c78cc --- /dev/null +++ b/docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md @@ -0,0 +1,71 @@ +# GRU / Chain 138 Provider Positioning Packet + +Status: canonical provider-facing narrative for GRU, Chain 138, c* assets, and cW* wrapped transport assets. + +Use this packet when preparing Etherscan, CoinGecko, CMC, MetaMask, Chainlist, wallet, explorer, DEX-terminal, institutional-counterparty, and support-ticket submissions. Keep provider submissions factual, narrow, and evidence-linked. + +## Core Positioning + +GRU is a reserve-backed monetary-policy and collateral framework. Chain 138 is the programmable settlement, synchronization, and verification layer that records, reconciles, and validates reserve positions, transactional states, and institutional settlement activity. + +The ecosystem should be presented as reserve-backed institutional settlement and verification infrastructure, not as a cryptocurrency, speculative digital asset, algorithmic stablecoin, or yield product. + +Recommended short description: + +```text +GRU defines a reserve-backed monetary-policy framework for compliant monetary instruments and institutional collateral workflows. Chain 138 is the EVM-compatible settlement and verification layer used to synchronize reserve positions, transactional states, and proof records across the GRU asset family. +``` + +Recommended cW* description: + +```text +cW* assets are public-network compliant wrapped transport representations of canonical Chain 138 c* assets. They are used for mirrored settlement, proof, interoperability, and provider-indexed visibility. They should not be represented as official third-party issuer assets unless a separate issuer agreement explicitly supports that claim. +``` + +Recommended Chain 138 description: + +```text +Chain 138 is an EVM-compatible settlement, synchronization, and verification network for GRU reserve-backed instruments, institutional collateral reconciliation, and compliant asset transport. +``` + +## Language Rules + +| Use | Avoid | +|---|---| +| Reserve-backed settlement infrastructure | Cryptocurrency project | +| Monetary-policy and collateral framework | Speculative token model | +| Compliant wrapped transport representation | Official issuer token unless issuer-approved | +| Auditable reserve and settlement synchronization | Algorithmic stablecoin | +| System-of-record and proof layer | Yield, APY, or return-generating product | +| Institutional reconciliation and verification | Unbacked token economy | + +## Audience Calibration + +| Audience | Emphasize | +|---|---| +| Retail wallet users | Token identity, contract address, logo, decimals, network, and non-affiliation disclaimers. | +| Commercial enterprises | Settlement reliability, API reconciliation, auditability, and asset transport boundaries. | +| Banks and EMIs | Reserve evidence, compliance controls, transaction monitoring, custody boundaries, and settlement finality. | +| Sovereign institutions | Monetary-policy framework, reserve eligibility, governance controls, and independent evidence sources. | +| Macroeconomic reviewers | M00/M0/M1 reserve model, utilization constraints, operational buffer, and tranche controls. | +| External data providers | Exact CAIP identifiers, contract addresses, supply proof, market caveats, logo URLs, and explorer links. | + +## Provider Submission Rules + +1. Submit exact chain and contract identifiers, not symbol-only references. +2. Keep Chain 138 source assets separate from public-chain cW* wrappers. +3. Treat wallet metadata, explorer profile metadata, and fiat price metadata as separate acceptance paths. +4. Include explicit non-affiliation language for any asset that references a third-party denomination or ticker. +5. Provide supply proof and reserve evidence as evidence inputs, not as a request for providers to infer facts. +6. Avoid market-depth claims unless public liquidity is indexed, sustained, and linked. +7. Track external submission status as `repo_ready`, `submitted`, `accepted`, or `blocked`. + +## Canonical References + +- [GRU_RESERVE_LAYER_EXPLAINER.md](GRU_RESERVE_LAYER_EXPLAINER.md) +- [CHAIN138_SYSTEM_OF_RECORD_MODEL.md](CHAIN138_SYSTEM_OF_RECORD_MODEL.md) +- [GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md](GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md) +- [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](GRU_RISK_AND_DISCLOSURE_LANGUAGE.md) +- [RESERVE_VERIFICATION_EVIDENCE_INDEX.md](RESERVE_VERIFICATION_EVIDENCE_INDEX.md) +- [CWUSDC_PROVIDER_SUBMISSION_PACKET.md](CWUSDC_PROVIDER_SUBMISSION_PACKET.md) +- [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) — includes **MetaMask Money / mUSD ↔ GRU hub and `cW*` transport** (subsection “MetaMask Money rail and mUSD — internal GRU alignment”). diff --git a/docs/04-configuration/GRU_RESERVE_LAYER_EXPLAINER.md b/docs/04-configuration/GRU_RESERVE_LAYER_EXPLAINER.md new file mode 100644 index 00000000..02cba142 --- /dev/null +++ b/docs/04-configuration/GRU_RESERVE_LAYER_EXPLAINER.md @@ -0,0 +1,80 @@ +# GRU Reserve Layer Explainer + +Status: canonical plain-language explainer for the GRU M00, M0, and M1 reserve and settlement layers. + +## Summary + +The GRU monetary structure operates across three integrated layers: `M00`, `M0`, and `M1`. + +`M00` is the physical and commodity reserve index layer. `M0` is the cash, cash-equivalent, sovereign, and institutional paper layer. `M1` is the transactional settlement layer that bridges and rebalances M00 and M0 under strict utilization constraints. + +## Layer Model + +| Layer | Role | Provider-safe explanation | +|---|---|---| +| `M00` GRU | Physical and commodity reserve layer | Exposure is maintained across XAU, Precious Metals, Battery Materials, Base Metals, and Building Materials. Each class starts at `1.2` indexed units before collateral adjustment. | +| `M0` GRU | Cash and institutional financial instrument layer | Includes M0 and M1 monetary cash reserves and equivalents, sovereign and central bank-issued instruments, bonds, promissory notes, MTNs, and LTNs that satisfy internal reserve-grade standards. | +| `M1` GRU | Transactional settlement and rebalancing layer | Supports settlement activity while respecting reserve-capacity limits against available M00 and M0 reserves. | + +## M00 Collateral Adjustment + +For each `1 M00 GRU` allocation, the framework maintains exposure across five asset-class indices: + +- XAU +- Precious Metals +- Battery Materials +- Base Metals +- Building Materials + +Each asset class carries an indexed allocation of `1.2` units before collateral adjustment. Physical assets apply the collateral adjustment factor: + +```text +(0.9475^4) = approximately 0.80596628 +``` + +After this adjustment, each `1.2` indexed allocation corresponds to approximately `1.489` SKR-adjusted physical units. + +Provider-language rule: describe this as a collateral-adjusted physical reserve methodology, not as leverage or speculative token appreciation. + +## M0 Reserve Coverage + +The M0 GRU basket is composed of cash reserves, cash equivalents, and qualifying sovereign, central-bank, and top-tier institutional instruments. + +No LTV adjustment is applied inside the M0 accounting framework because the associated instruments are supported by underlying cash reserves maintained at a `5:1` reserve coverage ratio. + +Eligibility should be described conservatively: + +- seasoned AAA-rated paper; +- top-tier institutional paper; +- qualifying emerging-market sovereign and quasi-sovereign issuances; +- instruments satisfying internal credit, liquidity, and reserve-grade standards. + +## M1 Utilization Constraints + +M1 GRU settlement activity dynamically bridges and rebalances the M00 and M0 reserve layers. It must remain within both reserve-capacity limits: + +| Constraint | Maximum utilization | +|---|---:| +| M1 relative to available M00 GRU reserves | `25:1` | +| M1 relative to available M0 GRU reserves | `5:1` | + +When transactional activity approaches reserve utilization thresholds, execution must be segmented into sequential tranches so settlement remains collateralized within available M00 and M0 reserve capacity. + +Provider-language rule: describe the ratios as utilization constraints and reserve gates, not as promotional multipliers. + +## Operational Buffer + +The system target is to maintain and exceed the internal `20%` operational buffer requirement above required collateralization. Rolling reserve checks are expected at 6-second intervals through API-driven validation, reconciliation, rebasing, and audit processes. + +## Recommended Short Text + +```text +GRU operates across M00 physical and commodity reserves, M0 cash and institutional reserve instruments, and M1 transactional settlement capacity. Chain 138 records and verifies reserve-linked settlement state while enforcing utilization constraints and tranche controls designed to keep settlement activity within available collateral capacity. +``` + +## References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [CHAIN138_SYSTEM_OF_RECORD_MODEL.md](CHAIN138_SYSTEM_OF_RECORD_MODEL.md) +- [RESERVE_VERIFICATION_EVIDENCE_INDEX.md](RESERVE_VERIFICATION_EVIDENCE_INDEX.md) +- [GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md](GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md) diff --git a/docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md b/docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md new file mode 100644 index 00000000..4864ca6d --- /dev/null +++ b/docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md @@ -0,0 +1,64 @@ +# GRU / Chain 138 Risk and Disclosure Language + +Status: canonical disclosure language for external provider packets and public-facing submission support. + +## Standard Non-Affiliation Disclosure + +Use this whenever an asset references a third-party currency, ticker, issuer, or public-chain denomination: + +```text +This asset is a DBIS/GRU compliant representation or wrapped transport asset and should not be presented as an official third-party issuer token unless a separate issuer agreement explicitly supports that claim. +``` + +For cWUSDC specifically: + +```text +cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC in the DBIS GRU asset family. cWUSDC is not Circle-issued USDC and should not be represented as an official Circle asset. +``` + +## Standard Price Disclosure + +```text +Wallet and explorer fiat values depend on external provider acceptance. Repo-controlled metadata, token lists, report APIs, and EIP-747 wallet prompts can provide correct asset facts and logos, but they do not force MetaMask, Etherscan, CoinGecko, CMC, or other providers to display a fiat price. +``` + +## Standard Liquidity Disclosure + +```text +Public DEX liquidity and volume should be described only from indexed, visible, and current pool evidence. Candidate pool URLs, internal accounting pegs, or sparse liquidity should not be presented as listing-quality price discovery. +``` + +## Standard Reserve Evidence Disclosure + +```text +Reserve evidence may include Chain 138 records, token-aggregation reports, supply proofs, custodian or counterparty records, UCC filings, Euroclear records, exchange reporting, and other qualified institutional sources. Chain 138 records proof-linked state and settlement activity; it does not replace the legal authority of the underlying off-chain evidence source. +``` + +## Standard Utilization Disclosure + +```text +M1 GRU settlement utilization is constrained by available reserve capacity and reserve gates. The M00 and M0 ratios are maximum utilization constraints, not promotional leverage, return, or yield claims. +``` + +## Provider Status Disclosure + +```text +External provider acceptance is provider-controlled. A repo status of repo_ready means the submission package, endpoints, metadata, and evidence are ready for submission; it does not imply that the provider has accepted or displayed the asset. +``` + +## Avoided Claims + +Do not claim: + +- guaranteed fiat price display in wallets; +- official issuer status without explicit authorization; +- CoinGecko, CMC, Etherscan, DexScreener, GeckoTerminal, or MetaMask acceptance before public evidence exists; +- listing-quality liquidity from unindexed or quote-starved pools; +- investor returns, yield, appreciation, or speculative upside; +- legal custody of off-chain assets solely because Chain 138 records proof-linked state. + +## References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md](GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md) +- [CHAIN138_SYSTEM_OF_RECORD_MODEL.md](CHAIN138_SYSTEM_OF_RECORD_MODEL.md) diff --git a/docs/04-configuration/NPMPLUS_HA_SETUP_GUIDE.md b/docs/04-configuration/NPMPLUS_HA_SETUP_GUIDE.md index ff7c4edf..2638599b 100644 --- a/docs/04-configuration/NPMPLUS_HA_SETUP_GUIDE.md +++ b/docs/04-configuration/NPMPLUS_HA_SETUP_GUIDE.md @@ -4,6 +4,8 @@ **Document Version:** 1.0 **Status:** Active Documentation +**Related execution plan:** [NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md](NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md) (node distribution, sizing, verification checklist). + --- **Date**: 2026-01-20 diff --git a/docs/04-configuration/NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md b/docs/04-configuration/NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md new file mode 100644 index 00000000..7a23367f --- /dev/null +++ b/docs/04-configuration/NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md @@ -0,0 +1,164 @@ +# NPMplus mission-critical distribution and HA plan + +**Status:** Active execution plan +**Last updated:** 2026-05-10 +**Audience:** Operators with Proxmox SSH, LAN access, and edge (UDM / Cloudflare) access. + +This document **completes** the roadmap for **high availability**, **node diversity**, and **measurable uptime** for NPMplus instances **192.168.11.167–.170** (VMIDs **10233–10236**). It is **not** a guarantee of five-nines by itself; pair it with **external synthetics**, **edge failover**, and **error-budget discipline**. + +**Related:** [NPMPLUS_HA_SETUP_GUIDE.md](NPMPLUS_HA_SETUP_GUIDE.md), [ALL_VMIDS_ENDPOINTS.md](ALL_VMIDS_ENDPOINTS.md), [OPERATIONAL_RUNBOOKS.md](../03-deployment/OPERATIONAL_RUNBOOKS.md), [config/ip-addresses.conf](../../config/ip-addresses.conf). + +--- + +## 1. Target architecture (summary) + +| Goal | Action | +|------|--------| +| **No correlated NPM failure on one hypervisor** | Move **10235** and **10236** off **r630-01** to **distinct** nodes (see §4). | +| **Primary + secondary HA** | **Keepalived VIP** (or equivalent) + **replicated/shared NPM state** between **10233** and **10234** per HA guide. | +| **Right-sized CTs** | **10233**: ≥ **2 vCPU**, ≥ **2048 MiB** RAM; **10234**: **verify/correct** memory in UI (config once showed ~24 GiB — align with primary). **10235/10236**: remain **2 vCPU / 2048 MiB** unless metrics dictate otherwise. | +| **Edge** | Cloudflare (or similar): **health checks**, **secondary origin** (**76.53.10.37** for secondary NPM public IP per template), **documented** UDM forwards. | +| **Proof** | **Regional synthetics**, **quarterly game-day** failover, **SLO** tracking (see §8). | + +--- + +## 2. Inventory and roles (canonical) + +| LAN IP | VMID | Role | Public IP (template) | Preferred failover | +|--------|------|------|----------------------|--------------------| +| **.167** | **10233** | Primary NPM (main ingress) | **76.53.10.36** | Pair with **10234** via VIP | +| **.168** | **10234** | Secondary NPM (HA standby) | **76.53.10.37** | Same VIP / sync | +| **.169** | **10235** | Alltra/HYBX / rpc-core-2 NPM | **76.53.10.38** (+ **.42** alt) | Isolate on **non–r630-01** node | +| **.170** | **10236** | Fourth NPM (dev, tunnel, Gitea) | **76.53.10.40** | Isolate on **non–r630-01** node | + +**Live placement note:** Reconcile with cluster before change: +`bash scripts/maintenance/npmplus-cluster-placement-status.sh` + +--- + +## 3. Phase A — Normalize sizing (maintenance window) + +**10233 (primary)** — on node hosting it (e.g. `r630-01`): + +```bash +# Example: 2 vCPU, 2048 MiB RAM (adjust if policy differs) +pct shutdown 10233 # or schedule maintenance; minimize downtime +pct set 10233 -cores 2 -memory 2048 +pct start 10233 +# Verify: curl -sI --max-time 10 http://192.168.11.167:81/ | head -3 +``` + +**10234 (secondary)** — on **r630-02**: + +1. Open **Proxmox UI → CT 10234 → Resources** and confirm **memory** and **swap** are intentional (target **match primary** after resize, e.g. **2048 MiB** RAM, modest swap — **not** multi-TiB values). +2. If CLI shows corrupted limits, fix in UI and **Apply**. +3. `pct reboot 10234` only if needed after correction. + +**10235 / 10236:** No change unless monitoring shows pressure. + +--- + +## 4. Phase B — Redistribute CTs across nodes + +**Objective:** Only **one** of **10233 / 10235 / 10236** on **r630-01** after migration (typically keep **10233** primary on **r630-01**, move **10235** to **r630-03**, **10236** to **r630-04** — adjust names to your capacity). + +**Prerequisites:** + +- **Shared storage** or **migration-compatible storage** between source and target (Proxmox migrate prerequisites). +- **Maintenance window** for each move (brief disconnect). +- Confirm target node: `pvesh get /nodes//status` or UI. + +**Example migrations (run from any cluster shell with privileges):** + +```bash +# Offline migration pattern (replace TARGET_NODE with r630-03, r630-04, etc.) +pct shutdown 10235 +pct migrate 10235 TARGET_NODE +pct start 10235 +# Verify IP .169 still pings and :81 responds + +pct shutdown 10236 +pct migrate 10236 OTHER_NODE +pct start 10236 +# Verify .170 +``` + +**Online migration** if your storage supports it (Proxmox version–dependent): + +```bash +pct migrate 10235 TARGET_NODE --restart +``` + +Document **actual** target nodes in **ALL_VMIDS_ENDPOINTS.md** after completion. + +--- + +## 5. Phase C — NPM application HA (primary + secondary) + +Execute **end-to-end** steps in [NPMPLUS_HA_SETUP_GUIDE.md](NPMPLUS_HA_SETUP_GUIDE.md): + +1. **VIP** (e.g. **192.168.11.166** or documented VIP) with **Keepalived** between **10233** and **10234**. +2. **Shared or replicated** NPM database and certificate paths (NFS / replicated volume / controlled rsync + procedures). +3. **UDM / DNS:** Ensure **primary forward** still matches production; **secondary public IP** ready for **manual or automated** failover per runbook. +4. Point **operator scripts** at **VIP URL** once stable: `NPM_URL=https://:81` (or hostname). + +--- + +## 6. Phase D — Edge and DNS + +| Step | Detail | +|------|--------| +| **Cloudflare** | Load balancer / health checks to **two origins** where possible (**76.53.10.36**, **76.53.10.37**). | +| **UDM** | Document **all** forwards; align **76.53.10.37** with **secondary** NPM when HA goes live. | +| **TLS** | Admin **:81** restricted by IP/VPN where possible. | + +See [DEV_CODESPACES_NEXT_STEPS_CHECKLIST.md](DEV_CODESPACES_NEXT_STEPS_CHECKLIST.md) for **.170** / **76.53.10.40** specifics. + +--- + +## 7. Phase E — Verification scripts (repo) + +| Script | Purpose | +|--------|---------| +| `scripts/maintenance/npmplus-cluster-placement-status.sh` | Shows which node runs **10233–10236**. | +| `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh` | After NPM stable; use **`NPM_URL`** pointing at VIP when ready. | +| `scripts/verify/verify-end-to-end-routing.sh --profile=public` | Public path regression check. | +| `scripts/maintenance/verify-pve-cluster-health.sh` | Cluster quorum sanity. | + +--- + +## 8. Phase F — SLOs, game day, error budget + +1. **Define SLO** (example): **99.95%** monthly for **HTTPS availability** of critical FQDNs from **two external probe regions** before claiming **99.999%**. +2. **Synthetic checks:** External uptime monitor on **sankofa.nexus**, **explorer.d-bis.org**, **rpc.public-0138.defi-oracle.io**, etc. +3. **Game day (quarterly):** Stop **10233** Docker/nginx safely; confirm **VIP** and/or **Cloudflare** shifts traffic; **RTO** recorded. +4. **Error budget:** Pause optional releases when probes burn budget. + +--- + +## 9. Completion checklist + +Use this as the **definition of done** for “plan completed”: + +- [ ] **10233** resized to ≥ **2 vCPU / 2048 MiB** (or documented alternative). +- [ ] **10234** memory/swap **verified sane** and matches failover intent. +- [ ] **10235** migrated off **r630-01** (or documented exception). +- [ ] **10236** migrated off **r630-01** (or documented exception). +- [ ] **HA**: VIP + **shared/replicated state** **or** documented interim with **secondary origin** in Cloudflare. +- [ ] **Docs updated:** **ALL_VMIDS_ENDPOINTS.md** placement rows; **this file** dated notes. +- [ ] **External probes** green for **30 days** post-change (or agreed burn-in). + +--- + +## 10. Rollback + +- **Migration rollback:** `pct migrate r630-01` (if that was original node) during a window. +- **Sizing rollback:** reduce **cores/memory** with shutdown if instability appears (capture metrics first). + +--- + +## References + +- NPM HA options: [NPMPLUS_HA_SETUP_GUIDE.md](NPMPLUS_HA_SETUP_GUIDE.md) +- Inventory: [ALL_VMIDS_ENDPOINTS.md](ALL_VMIDS_ENDPOINTS.md) +- Edge / RPC: [RPC_ENDPOINTS_MASTER.md](RPC_ENDPOINTS_MASTER.md), [NETWORK_CONFIGURATION_MASTER.md](../11-references/NETWORK_CONFIGURATION_MASTER.md) diff --git a/docs/04-configuration/ORACLE_AND_COINGECKO_COMPLETE.md b/docs/04-configuration/ORACLE_AND_COINGECKO_COMPLETE.md index 07992ea3..91e7a48d 100644 --- a/docs/04-configuration/ORACLE_AND_COINGECKO_COMPLETE.md +++ b/docs/04-configuration/ORACLE_AND_COINGECKO_COMPLETE.md @@ -137,13 +137,13 @@ cd /home/intlc/projects/proxmox/smom-dbis-138 - **Address:** `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` - **Decimals:** 6 - **Peg:** USD (1:1) -- **Explorer:** https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 +- **Explorer:** https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 #### cUSDC (Compliant USD Coin) - **Address:** `0xf22258f57794CC8E06237084b353Ab30fFfa640b` - **Decimals:** 6 - **Peg:** USD (1:1) -- **Explorer:** https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b +- **Explorer:** https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b ### Submission Status diff --git a/docs/04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md b/docs/04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md index a6c61d6e..eaeb4624 100644 --- a/docs/04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md +++ b/docs/04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md @@ -16,6 +16,8 @@ **Important:** MetaMask does **not** query on-chain oracle contracts for USD display. Even with a working ETH/USD oracle on Chain 138 (`0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6`), MetaMask will not show native USD until Chain 138 and tokens are listed on CoinGecko (or MetaMask’s provider adds support). +Provider-facing positioning and disclosure language now lives in [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md), [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](GRU_RISK_AND_DISCLOSURE_LANGUAGE.md), and [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md). Use those packets before submitting Chain 138 or cW* assets to price providers. + --- ## 2. Paths to Add Price Feeds diff --git a/docs/04-configuration/PR_ADDITIONS_VALIDATION_REPORT.md b/docs/04-configuration/PR_ADDITIONS_VALIDATION_REPORT.md index 4448437f..00dc5f89 100644 --- a/docs/04-configuration/PR_ADDITIONS_VALIDATION_REPORT.md +++ b/docs/04-configuration/PR_ADDITIONS_VALIDATION_REPORT.md @@ -119,15 +119,13 @@ DefiLlama adapters return TVL (total value locked), not token lists. Each protoc ### Chain 138 support -- DefiLlama uses chain keys: `ethereum`, `bsc`, `polygon`, `arbitrum`, etc. -- Chain 138 is likely **not** a built-in chain key. Check `DefiLlama-Adapters/helper/chains.js` or similar. -- If adding DODO on Chain 138, you must: - 1. Confirm DefiLlama supports chain 138 (may need PR to add chain first) - 2. Add config entry and tvl logic for the chain key they use (e.g. `chain138` or `defi-oracle-meta`) +- `@defillama/sdk` exposes **`dfio_meta_main`** with chain id **138** (RPC in SDK providers). +- DefiLlama-Adapters uses string keys in `projects/helper/chains.json`; **`dfio_meta_main`** must appear there. +- DODO on Chain 138: add **`dfio_meta_main`** in `projects/dodo/index.js` (DVM factory + `fromBlock`) and stablecoin rows in `projects/helper/tokenMapping.js` where needed. -### No PR-ready file +### PR status -We do not have a DefiLlama adapter file. Create one only after confirming chain support. +Upstream contribution is prepared as a PR from the org fork — see [`defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`](defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md) and [`config/defillama-chain138-touchpoints.json`](../../config/defillama-chain138-touchpoints.json). --- @@ -138,7 +136,7 @@ We do not have a DefiLlama adapter file. Create one only after confirming chain | **Token list** | dbis-138.tokenlist.json | ✅ WETH10 address fixed to checksum per CHAIN138_TOKEN_ADDRESSES | | **Chainlist** | eip155-138.json | ✅ networkId→138; icon removed (avoids needing _data/icons file) | | **Trust Wallet** | trust-wallet-registry-chain138.json | ✅ sampleTx and sampleAccount added (real tx from explorer) | -| **DefiLlama** | N/A | No PR until chain 138 is supported; adapter structure differs | +| **DefiLlama** | `DefiLlama-Adapters` (`dfio_meta_main` + DODO) | PR from fork when ready; see `defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md` | --- diff --git a/docs/04-configuration/RESERVE_VERIFICATION_EVIDENCE_INDEX.md b/docs/04-configuration/RESERVE_VERIFICATION_EVIDENCE_INDEX.md new file mode 100644 index 00000000..60dff931 --- /dev/null +++ b/docs/04-configuration/RESERVE_VERIFICATION_EVIDENCE_INDEX.md @@ -0,0 +1,84 @@ +# Reserve Verification Evidence Index + +Status: canonical evidence map for reserve, supply, collateral, and settlement verification packets. + +## Purpose + +This index defines the evidence categories to attach to GRU, Chain 138, c*, and cW* provider submissions. It is intentionally evidence-first: providers should receive exact documents, URLs, APIs, hashes, and timestamps rather than broad reserve claims. + +## Evidence Chain + +Use this evidence chain for every asset family: + +```text +asset + -> reserve source + -> custodian / filing / exchange / counterparty evidence + -> Chain 138 representation + -> public-chain wrapped representation where applicable + -> supply proof + -> provider packet + -> external acceptance evidence +``` + +## Evidence Categories + +| Category | Evidence examples | Repo or operator artifact | +|---|---|---| +| Chain state | Contract address, token metadata, balances, supply, mappings, explorer API responses. | Chain 138 explorer, Etherscan, `token-lists/`, `config/token-mapping-multichain.json`. | +| Supply proof | Total supply, circulating supply method, non-circulating exclusions, signed balance inventory. | `reports/status/mainnet-cwusdc-supply-proof-20260508.json`, generated supply attestations. | +| Reserve records | Reserve inventory, reserve-grade eligibility, coverage ratio, operational buffer status. | Reserve catalog, operator attestations, linked external evidence. | +| Legal / filing evidence | UCC filings, Euroclear records, trustee/custodian statements, exchange reports. | External documents or references attached by operator. | +| Counterparty evidence | Bank, custodian, exchange, or institutional counterparty reports. | External reports, authenticated API exports, signed statements. | +| Settlement evidence | Transaction hashes, bridge proofs, settlement batch IDs, RTGS/sidecar reconciliation records. | Explorer links, `reports/status/`, RTGS runbooks, sidecar logs. | +| Market evidence | Indexed LP URLs, volume, reserves, depth, pool health, DEX terminal pages. | GeckoTerminal, DexScreener, CMC DEX, token-aggregation reports. | +| Provider acceptance | Ticket IDs, PRs, screenshots, public token pages, API responses. | `reports/status/*`, submission checklist docs. | + +## Asset Evidence Template + +```text +Asset: +Network / CAIP-2: +Contract / CAIP-19: +Canonical source asset: +Wrapped representation: +Decimals: +Logo URL: +Explorer URL: +Supply proof: +Reserve evidence: +Custodian / filing / exchange references: +Market evidence: +Provider packet: +Submission status: +Last verified: +Known caveats: +``` + +## cWUSDC Current Evidence Pointers + +| Evidence | Location | +|---|---| +| Consolidated provider packet | [CWUSDC_PROVIDER_SUBMISSION_PACKET.md](CWUSDC_PROVIDER_SUBMISSION_PACKET.md) | +| Etherscan profile packet | [etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md](etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md) | +| Etherscan E2E recommendations | [etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md](etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md) | +| Tracker submission packet | [coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md](coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md) | +| Mainnet supply proof | [../../reports/status/mainnet-cwusdc-supply-proof-20260508.json](../../reports/status/mainnet-cwusdc-supply-proof-20260508.json) | +| Technical completion proof | [../../reports/status/mainnet-cwusdc-technical-completion-20260508.json](../../reports/status/mainnet-cwusdc-technical-completion-20260508.json) | +| Token aggregation readiness | [../../reports/status/token-aggregation-adoption-readiness-live-20260509.json](../../reports/status/token-aggregation-adoption-readiness-live-20260509.json) | +| MetaMask / provider matrix | [metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) | + +## Acceptance Status Rules + +| Status | Meaning | +|---|---| +| `repo_ready` | Repo-controlled endpoint, packet, metadata, proof, or report is prepared. | +| `submitted` | Operator submitted through a form, ticket, PR, or support channel. | +| `accepted` | Provider publicly displays or confirms the asset, metadata, price, supply, chain, or profile. | +| `blocked` | Provider requires missing evidence, liquidity, chain support, profile verification, or manual review. | + +## References + +- [GRU_PROVIDER_POSITIONING_PACKET.md](GRU_PROVIDER_POSITIONING_PACKET.md) +- [GRU_RESERVE_LAYER_EXPLAINER.md](GRU_RESERVE_LAYER_EXPLAINER.md) +- [CHAIN138_SYSTEM_OF_RECORD_MODEL.md](CHAIN138_SYSTEM_OF_RECORD_MODEL.md) diff --git a/docs/04-configuration/TOKEN_LIST_PR_REVIEW.md b/docs/04-configuration/TOKEN_LIST_PR_REVIEW.md index 9b645983..94de08cb 100644 --- a/docs/04-configuration/TOKEN_LIST_PR_REVIEW.md +++ b/docs/04-configuration/TOKEN_LIST_PR_REVIEW.md @@ -169,13 +169,12 @@ Object.keys(config).forEach(chain => { ### PR process 1. Add adapter under `projects/{protocol-name}/` 2. Export `tvl` (and optionally `staking`, `borrowed`) per chain -3. Chain 138 would need DefiLlama to add `chain138` as a supported chain key first (see docs.llama.fi) -4. Open PR to https://github.com/DefiLlama/DefiLlama-Adapters +3. Chain 138 uses SDK chain key **`dfio_meta_main`** (not `chain138`); add it to `projects/helper/chains.json` and wire the protocol config (see [How to add a new blockchain](https://docs.llama.fi/list-your-project/how-to-add-a-new-blockchain)) +4. Open PR to https://github.com/DefiLlama/DefiLlama-Adapters (org fork: [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters)) ### Chain 138 action -- DefiLlama may not have `chain138` as a chain key yet -- Check `helper/chains.js` or similar for supported chains -- If adding DODO/other protocol on Chain 138, add config entry + tvl logic +- **`dfio_meta_main`** is the key aligned with `@defillama/sdk` providers for chain id 138 +- DODO: `projects/dodo/index.js` + `tokenMapping.js` — status and optional metrics: [`defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md`](defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md) --- diff --git a/docs/04-configuration/coingecko/COINGECKO_CHAIN138_SUBMISSION_ATTACHMENT.md b/docs/04-configuration/coingecko/COINGECKO_CHAIN138_SUBMISSION_ATTACHMENT.md index 3727c2dd..0677774f 100644 --- a/docs/04-configuration/coingecko/COINGECKO_CHAIN138_SUBMISSION_ATTACHMENT.md +++ b/docs/04-configuration/coingecko/COINGECKO_CHAIN138_SUBMISSION_ATTACHMENT.md @@ -9,7 +9,7 @@ DeFi Oracle Meta Mainnet is the canonical home network for the GRU v2 `c*` compliant asset family. The current repo-backed inventory shows native Chain 138 assets live on the public explorer, including `cUSDT`, `cUSDC`, the broader compliant fiat set, `cXAUC`, `cXAUT`, and `cAUSDT`, with public-network transport mirrors (`cW*`) active across supported destination networks. -Per the current machine-readable deployment graph and generated audit summaries, the public `cW*` surface is active on chain IDs `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`, while `1111` remains deferred. +Per the current machine-readable deployment graph and generated audit summaries, the public `cW*` surface is active on **nine** chain IDs `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` (Cronos `25` excluded from the promoted count), while `1111` remains deferred. # Official Links @@ -35,19 +35,19 @@ These are the canonical GRU v2 `c*` assets on Chain 138 with direct explorer lin | Symbol | Name | Address | Explorer link | |---|---|---|---| -| `cUSDT` | Tether USD (Compliant) | `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | `https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | -| `cUSDC` | USD Coin (Compliant) | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | `https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b` | -| `cEURC` | Euro Coin (Compliant) | `0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | `https://explorer.d-bis.org/address/0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | -| `cEURT` | Tether EUR (Compliant) | `0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | `https://explorer.d-bis.org/address/0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | -| `cGBPC` | Pound Sterling (Compliant) | `0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | `https://explorer.d-bis.org/address/0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | -| `cGBPT` | Tether GBP (Compliant) | `0x350f54e4D23795f86A9c03988c7135357CCaD97c` | `https://explorer.d-bis.org/address/0x350f54e4D23795f86A9c03988c7135357CCaD97c` | -| `cAUDC` | Australian Dollar (Compliant) | `0xD51482e567c03899eecE3CAe8a058161FD56069D` | `https://explorer.d-bis.org/address/0xD51482e567c03899eecE3CAe8a058161FD56069D` | -| `cJPYC` | Japanese Yen (Compliant) | `0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | `https://explorer.d-bis.org/address/0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | -| `cCHFC` | Swiss Franc (Compliant) | `0x873990849DDa5117d7C644f0aF24370797C03885` | `https://explorer.d-bis.org/address/0x873990849DDa5117d7C644f0aF24370797C03885` | -| `cCADC` | Canadian Dollar (Compliant) | `0x54dBd40cF05e15906A2C21f600937e96787f5679` | `https://explorer.d-bis.org/address/0x54dBd40cF05e15906A2C21f600937e96787f5679` | -| `cXAUC` | Gold (Compliant) | `0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | `https://explorer.d-bis.org/address/0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | -| `cXAUT` | Tether XAU (Compliant) | `0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | `https://explorer.d-bis.org/address/0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | -| `cAUSDT` | Alltra USD Token (Compliant) | `0x5fdDF65733e3d590463F68f93Cf16E8c04081271` | `https://explorer.d-bis.org/address/0x5fdDF65733e3d590463F68f93Cf16E8c04081271` | +| `cUSDT` | Tether USD (Compliant) | `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | `https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | +| `cUSDC` | USD Coin (Compliant) | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | `https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b` | +| `cEURC` | Euro Coin (Compliant) | `0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | `https://explorer.d-bis.org/addresses/0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | +| `cEURT` | Tether EUR (Compliant) | `0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | `https://explorer.d-bis.org/addresses/0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | +| `cGBPC` | Pound Sterling (Compliant) | `0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | `https://explorer.d-bis.org/addresses/0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | +| `cGBPT` | Tether GBP (Compliant) | `0x350f54e4D23795f86A9c03988c7135357CCaD97c` | `https://explorer.d-bis.org/addresses/0x350f54e4D23795f86A9c03988c7135357CCaD97c` | +| `cAUDC` | Australian Dollar (Compliant) | `0xD51482e567c03899eecE3CAe8a058161FD56069D` | `https://explorer.d-bis.org/addresses/0xD51482e567c03899eecE3CAe8a058161FD56069D` | +| `cJPYC` | Japanese Yen (Compliant) | `0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | `https://explorer.d-bis.org/addresses/0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | +| `cCHFC` | Swiss Franc (Compliant) | `0x873990849DDa5117d7C644f0aF24370797C03885` | `https://explorer.d-bis.org/addresses/0x873990849DDa5117d7C644f0aF24370797C03885` | +| `cCADC` | Canadian Dollar (Compliant) | `0x54dBd40cF05e15906A2C21f600937e96787f5679` | `https://explorer.d-bis.org/addresses/0x54dBd40cF05e15906A2C21f600937e96787f5679` | +| `cXAUC` | Gold (Compliant) | `0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | `https://explorer.d-bis.org/addresses/0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | +| `cXAUT` | Tether XAU (Compliant) | `0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | `https://explorer.d-bis.org/addresses/0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | +| `cAUSDT` | Alltra USD Token (Compliant) | `0x5fdDF65733e3d590463F68f93Cf16E8c04081271` | `https://explorer.d-bis.org/addresses/0x5fdDF65733e3d590463F68f93Cf16E8c04081271` | # Bridged Wrapped Assets diff --git a/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDC.md b/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDC.md index 35db9133..5ef1aac9 100644 --- a/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDC.md +++ b/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDC.md @@ -13,7 +13,7 @@ | **Chain ID** | `138` | | **Chain Name** | `DeFi Oracle Meta Mainnet` | | **Decimals** | `6` | -| **Explorer Link** | `https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b` | +| **Explorer Link** | `https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b` | ## Public References diff --git a/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDT.md b/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDT.md index 581a960a..d6012756 100644 --- a/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDT.md +++ b/docs/04-configuration/coingecko/COINGECKO_SUBMISSION_CUSDT.md @@ -13,7 +13,7 @@ | **Chain ID** | `138` | | **Chain Name** | `DeFi Oracle Meta Mainnet` | | **Decimals** | `6` | -| **Explorer Link** | `https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | +| **Explorer Link** | `https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | ## Public References diff --git a/docs/04-configuration/coingecko/CWUSDC_EXTERNAL_TRACKER_BLOCKER_REMEDIATION.md b/docs/04-configuration/coingecko/CWUSDC_EXTERNAL_TRACKER_BLOCKER_REMEDIATION.md new file mode 100644 index 00000000..08bfcbce --- /dev/null +++ b/docs/04-configuration/coingecko/CWUSDC_EXTERNAL_TRACKER_BLOCKER_REMEDIATION.md @@ -0,0 +1,58 @@ +# cWUSDC External Tracker Blocker Remediation + +Generated: `2026-05-09` + +## Current Evidence + +Run: + +```bash +pnpm cwusdc:external-trackers +pnpm cw:full-readiness +``` + +Evidence files: + +- `reports/status/cwusdc-external-trackers-live-latest.json` +- `reports/status/cwusdc-external-trackers-live-latest.md` +- `reports/status/cw-full-operational-readiness-latest.json` +- `reports/status/cw-full-operational-readiness-latest.md` + +Latest status: + +| Surface | Status | +|---|---| +| Etherscan token page | Reachable | +| CoinMarketCap DEX token page | Reachable | +| GeckoTerminal V3 pool | Reachable | +| GeckoTerminal V2 pool | Reachable | +| CoinGecko token price API | Not listed yet | +| DexScreener V3 pair API | Pair payload not returned | +| DexScreener V2 pair API | Pair payload not returned | + +## Required Fix + +1. Submit or update the CoinGecko listing packet for Ethereum Mainnet `cWUSDC`. +2. Submit/update DexScreener token and pair metadata for: + - `0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` + - `0xc28706f899266b36bc43cc072b3a921bdf2c48d9` +3. Keep GeckoTerminal pool URLs in the submission packet because both GeckoTerminal API probes are live. +4. Re-run `pnpm cwusdc:external-trackers`. +5. Re-run `pnpm cw:full-readiness`. + +## Evidence URLs + +- Etherscan: `https://etherscan.io/token/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` +- CoinMarketCap DEX: `https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/` +- GeckoTerminal V3 pool: `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` +- GeckoTerminal V2 pool: `https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` +- DexScreener V3 pool: `https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` +- DexScreener V2 pool: `https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` + +## Submission Packet + +Use: + +- `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` +- `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` +- `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` diff --git a/docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md b/docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md new file mode 100644 index 00000000..624513f3 --- /dev/null +++ b/docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md @@ -0,0 +1,87 @@ +# cWUSDC Mainnet External Submission Checklist + +Status: ready for account holders / external reviewers. This file contains the remaining tasks that cannot be completed by repo-only automation. + +## Copy-Paste Asset Fields + +| Field | Value | +|---|---| +| Asset name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Network | Ethereum Mainnet | +| Chain ID | `1` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Decimals | `6` | +| Contact email | `submissions@d-bis.org` | +| Support email | `support@d-bis.org` | +| Social/profile email | `social.media@d-bis.org` | +| Token type | Compliant wrapped public-network transport mirror of Chain 138 `cUSDC` | +| Total supply | `10,451,316,981.309788 cWUSDC` | +| Supply proof | `reports/status/mainnet-cwusdc-supply-proof-20260508.json` | +| Logo URI | `https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cUSDC.svg` | +| Etherscan 32x32 SVG logo | `https://d-bis.org/tokens/cwusdc.svg` | +| Etherscan 32x32 SVG source | `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg` | +| Internal token-list entry | `docs/04-configuration/coingecko/exports/token-list-all.json` | +| Tracker packet | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| Etherscan profile packet | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| Branding system analysis | `docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md` | +| E2E recommendations | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` | + +## Public Tracker Evidence + +| Tracker | URL | Status | +|---|---|---| +| Etherscan | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | Contract source verified | +| DexScreener token API | `https://api.dexscreener.com/token-pairs/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` | Not indexed yet; returns an empty pair list | +| DexScreener V3 candidate | `https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` | Candidate pool URL; public API does not yet return the pair | +| DexScreener V2 candidate | `https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` | Candidate pool URL; public API does not yet return the pair | +| GeckoTerminal V3 | `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` | Indexed | +| GeckoTerminal V2 | `https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` | Indexed | +| CoinMarketCap DEX | `https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/` | Token page reachable | + +## Remaining External Tasks + +| Task | Owner | Completion evidence | +|---|---|---| +| Submit CoinGecko listing/update | External account holder | CoinGecko contract page/API resolves the token instead of returning `404` | +| Submit full CoinMarketCap listing/update | External account holder | CMC token page exists outside DEX-only discoverability and accepts supply/profile data | +| Submit Etherscan profile/logo/social update | Verified contract owner/account | Etherscan token profile shows approved logo/profile metadata | +| Trigger DexScreener auto-indexing | Operator + treasury | `token-pairs/v1/ethereum/` returns at least one pair; requires pool liquidity and at least one transaction | +| Submit DexScreener Enhanced Token Info/profile | External account holder | DexScreener `orders/v1/ethereum/` shows approved profile order, or token page shows profile metadata | +| Submit GeckoTerminal profile/logo/social update, if available | External account holder | GeckoTerminal token/pool pages show approved profile metadata | +| Provide tracker circulating-supply attestations | Treasury/operator signer | Tracker accepts the circulating-supply value or requested exclusions | +| Fund official Mainnet USDC for listing-quality LP | Treasury/operator | Fresh repeg plan shows policy-floor quote shortfall covered | +| Execute public LP repair after funding | Operator | On-chain swap/add-liquidity txs plus updated preflight/repeg reports | + +## Liquidity Caveat To Include In Submissions + +Current public LP evidence proves GeckoTerminal and CMC DEX discoverability, not listing-quality depth and not DexScreener API indexing. DexScreener documents that automatic listing requires a token to be in a liquidity pool with at least one transaction, and the current API probes still return no cWUSDC pairs. The V2 pair is quote-starved and the V3 pool has no durable listing-quality liquidity. Use the latest repeg plan before making any depth claim: + +```bash +bash scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.sh +bash scripts/verify/plan-mainnet-cwusdc-usdc-repeg.sh +``` + +Latest known capital gaps from the 2026-05-09 remediation pass: + +| Need | Amount | +|---|---:| +| Public V2 quote-side policy-floor top-up | `2,497.832239 USDC` | +| DODO defended reserve-parity top-up | `290,995.072514 USDC` | +| Operator wallet official Mainnet USDC | `0.343655 USDC` | +| Public V2 quote-side shortfall after wallet balance | `2,497.488584 USDC` | +| DODO defended parity shortfall after wallet balance | `290,994.728859 USDC` | +| Smallest current UniV2 repair canary requirement | `1,657.650239 USDC` | +| Smallest current UniV2 repair canary shortfall | `1,657.306584 USDC` | + +## Suggested Submission Note + +`cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of canonical Chain 138 cUSDC. The contract is verified on Etherscan and Sourcify, has 6 decimals, and is discoverable on GeckoTerminal and CoinMarketCap DEX. DexScreener public API indexing is still pending; current cWUSDC/USDC public LPs are shallow/quote-starved and require official-USDC funding before making listing-quality liquidity claims.` + +## Etherscan-Specific Pre-Submit Checks + +- Use `submissions@d-bis.org`, matching the `https://d-bis.org/` website domain. +- Use the hosted 32x32 SVG at `https://d-bis.org/tokens/cwusdc.svg`; local source mirror is `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg`. +- Confirm `https://d-bis.org/leadership` presents team/founder entries with supporting professional links, such as LinkedIn or equivalent. +- Confirm `https://d-bis.org/gru/tokens` visibly explains the GRU token family and the cWUSDC/cUSDC relationship. +- Avoid language that implies cWUSDC is official Circle-issued USDC. diff --git a/docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md b/docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md new file mode 100644 index 00000000..14029e8f --- /dev/null +++ b/docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md @@ -0,0 +1,124 @@ +# cWUSDC Ethereum Mainnet Tracker Submission Packet + +Status: internal package ready; external tracker acceptance pending. + +External handoff checklist: `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md`. + +Consolidated provider packet: `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md`. + +## Asset + +| Field | Value | +|---|---| +| Network | Ethereum Mainnet | +| Chain ID | `1` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Token name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Asset class | Compliant wrapped public-network transport mirror | +| Canonical source asset | Chain 138 `cUSDC` | +| Internal registry symbol/name | `USD Coin (Compliant Wrapped ISO-4217 M1)` | + +## Verification Links + +- Etherscan token page: `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` +- Sourcify status: full match for Ethereum Mainnet contract `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` +- Token source contract: `smom-dbis-138/contracts/tokens/CompliantWrappedToken.sol` +- Canonical metadata registry: `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` +- Chain 138 to Mainnet mapping: `config/token-mapping-multichain.json` +- Compact cWUSDC price/supply evidence API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cWUSDC?chainId=1` +- Chain 138 source cUSDC price/supply evidence API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cUSDC?chainId=138` +- CoinGecko-format report API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/coingecko?chainId=1` +- CMC-format report API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/cmc?chainId=1` + +## Supply + +Machine-readable proof: `reports/status/mainnet-cwusdc-supply-proof-20260508.json`. + +| Field | Value | +|---|---:| +| Total supply raw | `10451316981309788` | +| Total supply units | `10,451,316,981.309788 cWUSDC` | +| Proposed public circulating-supply method | `circulatingSupply = totalSupply - protocolControlledNonCirculatingBalances` | +| Current conservative reportable supply before tracker-specific exclusions | `10,451,316,981.309788 cWUSDC` | + +If CoinGecko, CMC, Etherscan, or another tracker requests treasury exclusions, provide a signed balance inventory for operator, bridge, treasury, and protocol-owned addresses at the requested block. + +## Market / LP Evidence + +| Venue | Pair | Address | Tracker URL | Status | +|---|---|---|---|---| +| Uniswap V3 | `cWUSDC/USDC` | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | `https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` | Candidate DexScreener URL; current DexScreener public API does not return the pair | +| Uniswap V3 | `cWUSDC/USDC` | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` | Indexed; GeckoTerminal reserve about `$179.1416`; 24h volume about `$90.67` | +| Uniswap V2 | `cWUSDC/USDC` | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | `https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` | Candidate DexScreener URL; current DexScreener public API does not return the pair | +| Uniswap V2 | `cWUSDC/USDC` | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | `https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` | Indexed; GeckoTerminal reserve about `$4.3241`; 24h volume about `$114,770.23` | + +Current DexScreener API probes: + +- `https://api.dexscreener.com/token-pairs/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns an empty array. +- `https://api.dexscreener.com/tokens/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns an empty array. +- `https://api.dexscreener.com/orders/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns no approved profile order. + +CoinMarketCap DEX token page: + +- `https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/` + +This confirms CMC DEX discoverability only. It does not mean the asset has been accepted as a full CoinMarketCap token listing with circulating supply, market cap, verified profile, and ranking. + +Latest internal readiness evidence: + +- `reports/status/mainnet-cwusdc-tracker-readiness-20260508.md` +- `reports/status/engine-x-public-indexed-readiness-latest.json` +- `reports/status/mainnet-cwusdc-usdc-preflight-latest.json` +- `reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json` + +## Valuation / Oracle Position + +No direct third-party cWUSDC oracle feed is live. Until a direct feed is approved, use this precedence for internal reporting: + +1. Accounting peg policy for cWUSDC as a compliant wrapped USD transport asset. +2. Public DEX evidence only when official Mainnet USDC quote-side depth is sufficient. +3. DexScreener, GeckoTerminal, and CMC DEX public LP/token pages as market evidence, with liquidity warnings when quote-starved. +4. Internal token-aggregation canonical metadata and export reports. + +Do not present the current V2 or V3 pools as listing-quality price discovery. The public V2 pair is heavily quote-starved, and the V3 pool has no active liquidity. + +## Required Disclosure Language + +Use the canonical disclosure language in `docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md`. + +Minimum tracker disclosure: + +```text +cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC in the DBIS GRU asset family. cWUSDC is not Circle-issued USDC and should not be represented as an official Circle asset. Public DEX liquidity should be interpreted only from current indexed pool evidence and should not be treated as listing-quality price discovery until depth is sufficient and sustained. +``` + +## Submission Checklist + +- [x] Verified contract link. +- [x] Token name, symbol, decimals, and supply. +- [x] Internal metadata registry path. +- [x] Supply proof JSON. +- [x] DexScreener candidate LP URLs. +- [x] GeckoTerminal indexed LP URLs. +- [x] CoinMarketCap DEX token URL. +- [x] Public liquidity caveats. +- [x] CoinGecko/CMC-style internal export path. +- [x] External submission checklist prepared. +- [ ] External CoinGecko listing accepted. +- [ ] Full external CMC listing accepted. +- [ ] External Etherscan token profile/logo update accepted. +- [ ] DexScreener API indexing accepted. +- [ ] External DexScreener token profile/social/logo update accepted. +- [ ] Public circulating supply accepted by tracker. +- [ ] Listing-quality official-USDC liquidity funded and sustained. + +## External Submission Tasks + +1. Submit or update CoinGecko using the contract, supply proof, metadata, LP URLs, and public docs in this packet. +2. Submit or update CoinMarketCap with the same packet and the CMC-specific form fields; reference the existing CMC DEX token URL as discoverability evidence. +3. Submit Etherscan token profile/logo/social updates from an account authorized for the token contract. +4. Fund official Mainnet USDC, rerun `bash scripts/verify/plan-mainnet-cwusdc-usdc-repeg.sh`, then execute public LP repair only after quotes and min-outs are reviewed. +5. Submit DexScreener Enhanced Token Info/profile updates after the token is accepted by the public API or through the marketplace flow. +6. Provide any tracker-requested circulating-supply exclusion attestations. diff --git a/docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json b/docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json new file mode 100644 index 00000000..b6579cc3 --- /dev/null +++ b/docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json @@ -0,0 +1,68 @@ +{ + "requestType": "New Coin/Token Listing", + "listingMode": "Active Listing", + "asset": { + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "network": "Ethereum Mainnet", + "chainId": 1, + "contractAddress": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "decimals": 6, + "assetClass": "Compliant wrapped public-network transport mirror", + "canonicalSourceAsset": "Chain 138 cUSDC", + "canonicalSourceAssetAddress": "0xf22258f57794CC8E06237084b353Ab30fFfa640b", + "canonicalSourceAssetExplorer": "https://explorer.d-bis.org/token/0xf22258f57794CC8E06237084b353Ab30fFfa640b", + "description": "cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of canonical Chain 138 cUSDC. It is a wrapped settlement and interoperability asset for the DBIS GRU/cW token mesh. It is not Circle-issued USDC." + }, + "officialLinks": { + "website": "https://d-bis.org/", + "contactEmail": "submissions@d-bis.org", + "supportEmail": "support@d-bis.org", + "socialMediaEmail": "social.media@d-bis.org", + "tokenInformation": "https://d-bis.org/gru/tokens", + "logo32x32Svg": "https://d-bis.org/tokens/cwusdc.svg", + "explorerToken": "https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "sourceVerification": "https://repo.sourcify.dev/contracts/full_match/1/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a/" + }, + "apiFeedEvidence": { + "chain138CusdcBlockscoutTokenApi": "https://explorer.d-bis.org/api/v2/tokens/0xf22258f57794CC8E06237084b353Ab30fFfa640b", + "chain138CusdcBlockscoutTransfersApi": "https://explorer.d-bis.org/api/v2/tokens/0xf22258f57794CC8E06237084b353Ab30fFfa640b/transfers", + "mainnetCwusdcEtherscanApi": "https://api.etherscan.io/v2/api?chainid=1&module=account&action=tokentx&contractaddress=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "staticAuditNote": "docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md", + "latestInternalAuditJson": "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.json", + "latestInternalAuditMarkdown": "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md", + "submissionNote": "Etherscan should display Ethereum Mainnet cWUSDC transfers and supply for the token page. Chain 138 cUSDC traffic is supporting source-asset evidence for the wrapped-token relationship, not traffic that should be merged into Etherscan's Ethereum token transfer totals." + }, + "supply": { + "totalSupplyUnits": "10451316981.309788", + "totalSupplyRaw": "10451316981309788", + "circulatingSupplyMethod": "circulatingSupply = totalSupply - protocolControlledNonCirculatingBalances", + "supplyProof": "reports/status/mainnet-cwusdc-supply-proof-20260508.json" + }, + "markets": { + "geckoTerminalPools": [ + "https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9" + ], + "coinMarketCapDexToken": "https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/", + "candidateDexScreenerPools": [ + "https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9" + ], + "liquidityCaveat": "Current public LP evidence is shallow and quote-starved. Do not treat current pools as listing-quality depth until official Mainnet USDC funding and public LP repair are complete." + }, + "attachments": [ + "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + "docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md", + "docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md", + "https://d-bis.org/tokens/cwusdc.svg", + "docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg", + "docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md", + "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.json", + "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md", + "reports/status/cwusdc-external-trackers-live-latest.json", + "reports/status/mainnet-cwusdc-supply-proof-20260508.json", + "reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json" + ], + "submissionNote": "The contract is verified on Etherscan and Sourcify and has 6 decimals. GeckoTerminal and CoinMarketCap DEX discoverability are live. CoinGecko simple token price API currently returns an empty object for the contract address, so this request is needed before Etherscan USD value and CoinGecko token-price integrations can resolve cWUSDC." +} diff --git a/docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md b/docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md index e2bfc300..805fdebc 100644 --- a/docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md +++ b/docs/04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md @@ -6,6 +6,8 @@ **Fork for upstream PRs:** [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters) → PR target [DefiLlama/DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters). +**Open upstream adapters PR (DODO + `dfio_meta_main`):** [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) — merge status and CI logs are authoritative for when production TVL reflects Chain 138. **Still `OPEN` on GitHub as of 2026-05-10.** + **Machine-readable touchpoints:** [`config/defillama-chain138-touchpoints.json`](../../../config/defillama-chain138-touchpoints.json). **Public chain profile (X):** [Defi Oracle Meta](https://x.com/DefiOracleMeta) (`@DefiOracleMeta`) — use for **network / operator** messaging. Per-protocol listings (e.g. DODO on DefiLlama) may still reference that protocol’s own social accounts where upstream metadata requires it. @@ -16,13 +18,15 @@ DefiLlama defines TVL as **value locked in protocol contracts**, valued largely via **CoinGecko** where possible, with **on-chain** methods when needed ([methodology overview](https://docs.llama.fi/)). That is **instrument-agnostic**: compliant stablecoins and PMM pools are still ERC-20 balances in contracts. The **regulatory** story (EMI, issuer, reserve attestations) lives in **your** disclosures and listings; DefiLlama remains a **neutral TVL/volume/yields** surface — complementary to CoinGecko/CMC/Etherscan paths in [`METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md`](../metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md). +**DODO protocol breakdown:** if the per-chain table shows **`dfio_meta_main` as `0.00`** while other chains look normal, that is usually an **adapter pricing path** issue, not “no liquidity” on chain 138 — see [`../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md`](../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md). + --- ## Metrics ↔ repositories (from docs.llama.fi “All Metrics We Track”) | Metric | Repository (upstream) | Chain 138 relevance | |--------|-------------------------|---------------------| -| TVL | [DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters) | **Prepared for upstream PR:** DODO V2 DVM on `dfio_meta_main` (factory + `fromBlock`); companion **`defillama-server`** chain metadata + DODO listing rows committed locally — see [`DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md`](DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md) and [`config/defillama-chain138-touchpoints.json`](../../../config/defillama-chain138-touchpoints.json). Merge on upstream completes the public UI slice. | +| TVL | [DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters) | **Open:** [PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) (DODO V2 DVM on `dfio_meta_main`, `chains.json`, hub stable **`fixBalancesTokens`**). Companion **`defillama-server`** chain metadata + DODO listing rows remain optional — see [`DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md`](DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md) and [`config/defillama-chain138-touchpoints.json`](../../../config/defillama-chain138-touchpoints.json). **Merge #19198** completes the adapters slice for public TVL attribution to `dfio_meta_main`. | | Fees / revenue / DEX volume / options / aggregators | [dimension-adapters](https://github.com/DefiLlama/dimension-adapters) | **Optional later** when you want volume/fees series on supported venues. | | Yields | [yield-server](https://github.com/DefiLlama/yield-server) | Optional if you expose yield-bearing pools with standard adapter patterns. | | Stablecoins (peg/supply) | [peggedassets-server](https://github.com/DefiLlama/peggedassets-server) | Optional if you want pegged-asset tracking for compliant stables. | @@ -85,7 +89,7 @@ DefiLlama defines TVL as **value locked in protocol contracts**, valued largely Covers **exports patterns** (e.g. empty core TVL + staking), **`sumTokensExport`** from `./helper/unwrapLPs` for known owners/tokens (`owners`, `tokens`, `tokensAndOwners`, **`resolveLP`** for LP unwrap), **Solana** helpers, **unwrap** flows (`sumTokens2` + `resolveLP`), and **`getBlock`** from `../helper/http` when block height is missing for lesser-known EVM chains. -**Chain 138:** The current **DODO** contribution uses **factory event logs + `sumTokens`** (same family as upstream `projects/dodo`). For future adapters that TVL **fixed treasury wallets**, **vault contracts**, or **Uni V2/V3-style LP** balances on `dfio_meta_main`, prefer these helpers instead of reinventing balance aggregation. +**Chain 138:** Upstream **`projects/dodo`** gains **`dfio_meta_main`** via [PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) (factory logs + balance aggregation consistent with that PR’s final diff). For **fixed treasury wallets**, **vault contracts**, or **Uni V2/V3-style LP** TVL on `dfio_meta_main`, prefer the documented helpers instead of reinventing balance aggregation. --- @@ -94,7 +98,7 @@ Covers **exports patterns** (e.g. empty core TVL + staking), **`sumTokensExport` | Item | Status | Notes | |------|--------|--------| | `@defillama/sdk` chain RPC + id | **Already present** | `dfio_meta_main` → 138 in SDK providers (no fork of SDK required for RPC). | -| `chains.json` + `tokenMapping.js` + DODO `dfio_meta_main` | **PR to DefiLlama-Adapters** | Canonical cUSDT/cUSDC mapping for USD valuation; DVM factory `0xc93870594C7f83A0aE076c2e30b494Efc526b68E`, `fromBlock` factory deploy. | +| `chains.json` + `tokenMapping.js` + DODO `dfio_meta_main` | **[PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** (open) | Canonical cUSDT/cUSDC mapping for USD valuation; DVM factory `0xc93870594C7f83A0aE076c2e30b494Efc526b68E`, `fromBlock` factory deploy. | | Protocol card / listing text on defillama.com | **Optional separate PR** | Often [`defillama-server` protocol data](https://github.com/DefiLlama/defillama-server) — only if maintainers want a **new** or updated listing slug. | | Gitea mirror of fork | **Optional** | Use [`scripts/deployment/mirror-github-fork-to-gitea.sh`](../../../scripts/deployment/mirror-github-fork-to-gitea.sh) with tokens set. | | dimension-adapters / yield-server / … | **Optional** | Add when you have clear subgraph/RPC sources and reviewer-ready methodology. | diff --git a/docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md b/docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md index 76a31a70..111e59c2 100644 --- a/docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md +++ b/docs/04-configuration/defillama/DEFILLAMA_CHAIN138_SUBMISSION_CHECKLIST.md @@ -1,6 +1,6 @@ # Chain 138 — DefiLlama gaps checklist (server, dimensions, forms) -Use this after the **DefiLlama-Adapters** TVL PR ([`dfio_meta_main` + DODO](../CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md)). Touchpoints JSON: [`config/defillama-chain138-touchpoints.json`](../../../config/defillama-chain138-touchpoints.json). +Use this after the **DefiLlama-Adapters** TVL PR for **`dfio_meta_main` + DODO** — track merge status at **[DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** ([ecosystem map](../CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md), [TVL breakdown note](../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md)). Touchpoints JSON: [`config/defillama-chain138-touchpoints.json`](../../../config/defillama-chain138-touchpoints.json). **Chain vs protocol socials:** Official **Chain 138 / network** profile on X is [**@DefiOracleMeta**](https://x.com/DefiOracleMeta). A **DODO** adapter or listing PR may still cite **DODO’s** upstream Twitter where that matches DefiLlama’s existing **DODO AMM** row — do not conflate the two in copy. @@ -17,7 +17,7 @@ Use this after the **DefiLlama-Adapters** TVL PR ([`dfio_meta_main` + DODO](../C | `defi/src/utils/normalizeChain.ts` | `chainCoingeckoIds["Defi Oracle Meta Mainnet"]` with `chainId: 138`; `chainLabelMap.dfio_meta_main` → display name | | `defi/src/protocols/data1.ts` | **DODO AMM** `chains` includes **Defi Oracle Meta Mainnet**; `oraclesBreakdown[0].proof` populated from audit docs | -**PR notes:** explain chain extension + listing alignment with merged TVL adapter; enable **Allow edits by maintainers**. +**PR notes:** explain chain extension + listing alignment **after** DefiLlama-Adapters **PR #19198** (TVL on `dfio_meta_main`) **merges**; enable **Allow edits by maintainers**. --- diff --git a/docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md b/docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md new file mode 100644 index 00000000..73ccae1d --- /dev/null +++ b/docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md @@ -0,0 +1,65 @@ +# cWUSDC DexScreener Indexing and Profile Packet - 2026-05-09 + +## Asset + +| Field | Value | +|---|---| +| Token | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Chain | Ethereum Mainnet | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Decimals | `6` | +| Website | `https://d-bis.org/` | +| Contact email | `submissions@d-bis.org` | +| Support email | `support@d-bis.org` | +| Social/profile email | `social.media@d-bis.org` | +| Token page | `https://d-bis.org/gru/tokens` | +| Logo | `https://d-bis.org/tokens/cwusdc.svg` | +| Logo source | `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg` | + +## Current DexScreener Status + +The public DexScreener API does not yet index cWUSDC: + +- `GET https://api.dexscreener.com/token-pairs/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns `[]`. +- `GET https://api.dexscreener.com/tokens/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns `[]`. +- `GET https://api.dexscreener.com/orders/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` returns no approved token profile order. + +Candidate pool URLs: + +- `https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` +- `https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` + +## Indexing Prerequisites + +DexScreener documents automatic token listing after the token is added to a liquidity pool and has at least one transaction. Current cWUSDC pools are not passing DexScreener API discovery, and the smallest current UniV2 repair canary is blocked by official Mainnet USDC funding. + +Current funding facts: + +| Item | Amount | +|---|---:| +| Wallet USDC | `0.343655 USDC` | +| Smallest UniV2 repair canary requirement | `1,657.650239 USDC` | +| Smallest UniV2 repair canary shortfall | `1,657.306584 USDC` | +| Policy-floor public quote-side requirement | `2,497.832239 USDC` | +| DODO defended parity requirement | `290,995.072514 USDC` | + +## Actions + +1. Fund at least `1,657.306584 USDC` for the smallest public UniV2 repair canary, or `2,497.488584 USDC` for the policy-floor public quote-side repair based on the current wallet balance. +2. Rerun: + +```bash +bash scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.sh +bash scripts/verify/plan-mainnet-cwusdc-usdc-repeg.sh +EXECUTE=0 bash scripts/deployment/repair-mainnet-cwusdc-usdc-univ2-canary.sh +``` + +3. Broadcast only after reviewing the quote and min-out values. +4. Recheck: + +```bash +pnpm cwusdc:external-trackers +``` + +5. If the token remains unindexed after on-chain repair, submit Enhanced Token Info/profile through DexScreener's marketplace flow using the fields in this packet. diff --git a/docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md b/docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md new file mode 100644 index 00000000..51792c5a --- /dev/null +++ b/docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md @@ -0,0 +1,63 @@ +# cUSDC / cWUSDC Etherscan Feed Audit + +Status: repeatable API audit added. Run: + +```bash +set -a +source .env +set +a +scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py +``` + +Latest generated local outputs: + +- `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md` +- `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.json` + +## Relationship + +| Field | Value | +|---|---| +| Canonical source asset | Chain 138 `cUSDC` | +| Chain 138 cUSDC address | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | +| Wrapped public-network asset | Ethereum Mainnet `cWUSDC` | +| Ethereum cWUSDC address | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Mapping source | `config/token-mapping-multichain.json` | +| Metadata registry | `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` | + +## Feed Interpretation + +Etherscan should display Ethereum Mainnet `cWUSDC` transfer activity and supply for the Ethereum token page. + +Chain 138 `cUSDC` traffic should be provided as supporting canonical source-asset evidence. It should not be represented as Ethereum Mainnet `cWUSDC` transfer activity, because Etherscan indexes Ethereum Mainnet for the submitted token contract. + +Use this language when replying to Etherscan or tracker follow-up: + +```text +cWUSDC is the Ethereum Mainnet wrapped transport representation of canonical Chain 138 cUSDC. Please use the Ethereum Mainnet cWUSDC contract for Etherscan token-page transfers and supply, and use the Chain 138 cUSDC explorer/API feed as supporting evidence for the canonical source asset relationship. +``` + +## API Endpoints + +| Feed | Endpoint | +|---|---| +| Chain 138 cUSDC metadata | `https://explorer.d-bis.org/api/v2/tokens/0xf22258f57794CC8E06237084b353Ab30fFfa640b` | +| Chain 138 cUSDC transfers | `https://explorer.d-bis.org/api/v2/tokens/0xf22258f57794CC8E06237084b353Ab30fFfa640b/transfers` | +| Ethereum cWUSDC transfers | `https://api.etherscan.io/v2/api?chainid=1&module=account&action=tokentx&contractaddress=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Ethereum cWUSDC supply | `https://api.etherscan.io/v2/api?chainid=1&module=stats&action=tokensupply&contractaddress=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | + +## Latest Sample Summary + +The latest local run generated: + +| Feed | Supply | Recent sample transfers | Recent sample volume | Unique addresses in sample | +|---|---:|---:|---:|---:| +| Chain 138 cUSDC Blockscout | `38,601,011,267` | `150` | `75,129,540,009.210138` | `33` | +| Ethereum cWUSDC Etherscan | `10,451,316,981.309788` | `150` | `1,001,693.375967` | `152` | + +Latest observed sample hashes: + +- Chain 138 cUSDC: `0xa3a9b9a6c21a90adacf88f06baddd2c10c8bcf8302b5b04c791dcbab81c734b1` +- Ethereum cWUSDC: `0xc973c614014adc6d3678f184f8051147e615c0c8d4d809db51bc9d46f3af9488` + +Common addresses in the recent API samples are a supporting signal only. The canonical linkage is established by the token mapping, metadata registry, and bridge/listing documentation. diff --git a/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md new file mode 100644 index 00000000..8fcda03b --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md @@ -0,0 +1,160 @@ +# cWUSDC Etherscan Bridge and Cross-Chain Layer Map + +Status: focused research packet for making Etherscan show USD value for Ethereum Mainnet `cWUSDC`. + +## Goal + +Target asset: + +```text +Network: Ethereum Mainnet +Chain ID: 1 +Contract: 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +Name: Wrapped cUSDC +Symbol: cWUSDC +Decimals: 6 +CAIP-19: eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +``` + +The objective is not merely to prove that cUSDC exists elsewhere. The objective is to make Etherscan display nonzero USD value for this exact Mainnet contract. + +## Official Etherscan Surfaces + +| Layer | Etherscan surface | What it can prove | Effect on USD Value | +|---|---|---|---| +| Contract | Verified source, ABI, creator, transactions; Foundry verification via `forge verify-contract` | The Mainnet contract identity and implementation | Required trust baseline; not a price source | +| Token page | Logo, name, profile, links, token details | Etherscan-recognized token identity | Important prerequisite; not enough alone | +| Token info API | `module=token&action=tokeninfo&chainid=1&contractaddress=...` | Etherscan-side metadata plus `tokenPriceUSD` if populated | Direct monitor surface for profile and price propagation | +| Token holdings | Holder pages and token inventory rows | Whether Etherscan is applying a USD mark to balances | Final user-visible outcome | +| Market cap fields | Onchain Market Cap and Circulating Supply Market Cap | Whether Etherscan has accepted a price and supply basis | Final token-page outcome | +| V2 multichain API | Same API key and base URL, different `chainid` | Data for Etherscan-supported EVM chains | Useful for related wrapped deployments, but each chain remains separate | +| V2 chainlist | `https://api.etherscan.io/v2/chainlist` | Which chains are first-class Etherscan V2 API surfaces | Defines what can be called Etherscan-family evidence | +| L2 deposit/withdrawal APIs | `module=account&action=getdeposittxs` and related endpoints | Native Etherscan-indexed bridge movement for supported L2s | Evidence only unless tied to exact Mainnet price acceptance | +| Nametags/labels | Address names and labels | Bridge, operator, treasury, exchange, or protocol context | Trust/provenance support only | +| External links | Website/socials/whitepaper/official endpoints | Project legitimacy and support paths | Supports profile approval | +| Blockscan family | Etherscan-family explorers for other EVM networks | Other chain deployments and activity | Separate listings; do not merge into Ethereum supply | + +## Bridge and Cross-Chain Interpretation + +Bridge evidence can help explain why `cWUSDC` exists on Ethereum and how it relates to base `cUSDC`, but it does not replace the USD price feed Etherscan needs for the Mainnet token page. + +The Etherscan V2 `chainlist` endpoint is the boundary for Etherscan-family chain claims. If a chain ID is absent from `https://api.etherscan.io/v2/chainlist`, treat that chain's evidence as external provenance rather than native Etherscan V2 evidence. As of the latest local check, Chain 138 is not present in the Etherscan V2 chainlist. + +Use bridge evidence for: + +- Source asset provenance: base `cUSDC` to wrapped Mainnet `cWUSDC`. +- Wrapped-token accounting: mint, burn, lock, release, or bridge-vault evidence. +- Cross-chain family context: where related `cUSDC` and `cWUSDC` contracts live. +- Supply reconciliation: why global family supply differs from Ethereum Mainnet `cWUSDC` supply. +- Submission support: CoinGecko, CMC, Etherscan profile, and exchange/indexer packets. + +Do not use bridge evidence for: + +- Replacing Ethereum Mainnet `totalSupply()`. +- Combining all cUSDC and cWUSDC supplies into the Ethereum token page supply. +- Claiming Etherscan Value without a provider-accepted USD price for the exact Mainnet contract. +- Treating Chain 138 balances as Mainnet circulating supply. + +## Action Matrix + +| Action | Repo-controlled | External approval needed | Priority | +|---|---:|---:|---:| +| Ethereum Mainnet supply/circulating attestation | yes | tracker acceptance | P0 | +| Etherscan token profile packet | yes | Etherscan acceptance | P0 | +| Etherscan `tokeninfo` monitor | yes | Etherscan propagation | P0 | +| CoinGecko contract listing/update | packet yes | CoinGecko acceptance | P0 | +| CMC listing/update | packet yes | CMC acceptance | P0 | +| Global cUSDC/cWUSDC family proof | yes | optional reviewer acceptance | P1 | +| Bridge provenance packet | yes | optional reviewer acceptance | P1 | +| Multichain Etherscan-family checks | yes for supported chains | none for reads | P1 | +| L2 deposit/withdrawal API checks | yes for supported chains | none for reads | P2 | +| Chain 138 MetaMask logo/prices | partially | wallet/provider acceptance | Out of Etherscan Value critical path | + +## Required Evidence Packet + +For Etherscan and market-data submissions, attach or reference: + +| Evidence | Location | +|---|---| +| Mainnet supply/circulating proof | `reports/status/cwusdc-supply-circulating-attestation-latest.json` and `.md` | +| Global family proof, clearly marked separate | `reports/status/global-cusdc-cwusdc-family-supply-proof-latest.json` and `.md` | +| Etherscan value monitor | `reports/status/cwusdc-etherscan-value-propagation-latest.json` and `.md` | +| Etherscan profile packet | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| Etherscan E2E recommendations | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` | +| CoinGecko/CMC tracker packet | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| Public report APIs | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1`, `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1`, `https://explorer.d-bis.org/api/v1/report/all` | + +## Operator Commands + +Generate the exact Mainnet supply proof: + +```bash +python3 scripts/verify/generate-cwusdc-supply-circulating-attestation.py +``` + +Generate the separate global cUSDC/cWUSDC family proof: + +```bash +python3 scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py +``` + +Monitor Etherscan page, Etherscan `tokeninfo`, CoinGecko, DexScreener, and GeckoTerminal propagation: + +```bash +python3 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py +``` + +Direct Etherscan `tokeninfo` probe: + +```bash +curl -fsS 'https://api.etherscan.io/v2/api?chainid=1&module=token&action=tokeninfo&contractaddress=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a&apikey=YourApiKeyToken' | jq . +``` + +Direct Etherscan V2 chainlist probe: + +```bash +curl -fsS 'https://api.etherscan.io/v2/chainlist' | jq '{totalcount, chainids:[.result[].chainid]}' +``` + +Direct Etherscan source-verification probe: + +```bash +curl -fsS 'https://api.etherscan.io/v2/api?chainid=1&module=contract&action=getsourcecode&address=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a&apikey=YourApiKeyToken' | jq '.result[0] | {ContractName, CompilerVersion, OptimizationUsed, Proxy, Implementation, LicenseType}' +``` + +Foundry verification pattern for a deployed contract: + +```bash +forge verify-contract --watch --chain mainnet 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a path/to/Contract.sol:ContractName --verifier etherscan --etherscan-api-key "$ETHERSCAN_API_KEY" +``` + +Direct L2 deposit probe for the deployer/operator wallet: + +```bash +curl -fsS 'https://api.etherscan.io/v2/api?chainid=42161&module=account&action=getdeposittxs&address=0x4A666F96fC8764181194447A7dFdb7d471b301C8&page=1&offset=10&sort=desc&apikey=YourApiKeyToken' | jq . +``` + +For this endpoint, `value` is native value in raw wei, while `tokenValue` is raw units for the reported `tokenAddress`. For example, `value=1195403000000000` is `0.001195403 ETH`; `tokenValue=598200000000000` with `tokenAddress=ETH` is `0.0005982 ETH`. + +## Current Blocking Model + +Etherscan Value should be treated as blocked until all of these are true: + +1. Etherscan token profile is accepted and visible. +2. Etherscan `tokeninfo` returns correct metadata for `cWUSDC`. +3. Etherscan `tokeninfo.tokenPriceUSD` or token-page market cap fields become positive/nonblank. +4. CoinGecko or CMC accepts a USD price for the exact Ethereum Mainnet contract. +5. The Mainnet supply proof is submitted as the Ethereum token supply basis. + +The global cUSDC/cWUSDC family proof is useful context, but it is intentionally not the supply basis for the Ethereum token page. + +## References + +- Etherscan V2 introduction: `https://docs.etherscan.io/etherscan-v2` +- Etherscan V2 chainlist: `https://docs.etherscan.io/api-reference/endpoint/chainlist` +- Etherscan L2 deposit transactions by address: `https://docs.etherscan.io/api-reference/endpoint/getdeposittxs` +- Etherscan Foundry verification: `https://docs.etherscan.io/contract-verification/verify-with-foundry` +- Etherscan supported chains: `https://docs.etherscan.io/supported-chains` +- Etherscan token info API: `https://docs.etherscan.io/api-reference/endpoint/tokeninfo` +- Etherscan token update guide: `https://info.etherscan.com/how-to-update-token-information-on-token-page/` +- Etherscan token page guide: `https://info.etherscan.com/understanding-token-page/` diff --git a/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md new file mode 100644 index 00000000..7c2d7692 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md @@ -0,0 +1,145 @@ +# cWUSDC Etherscan E2E Recommendations + +Status: end-to-end submission and follow-up checklist for the Ethereum Mainnet cWUSDC Etherscan token profile. + +## Goal + +Complete the Etherscan token-profile submission with a coherent public identity, validated profile assets, domain-matched contact information, and clean post-submission follow-up evidence. + +## Recommended Sequence + +1. Confirm public website readiness. +2. Confirm leadership/team professional-profile links. +3. Submit the Etherscan token profile with the canonical fields. +4. Monitor Etherscan approval and profile rendering. +5. Reuse the same approved profile facts across CoinGecko, CMC, DexScreener, GeckoTerminal, wallets, and token-list submissions. + +Canonical submission matrix: [../metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](../metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md). Use it to track repo-ready metadata, EIP-747 wallet payloads, Etherscan, CoinGecko, CMC, Chainlist, token-list, and DEX-terminal submissions without implying that MetaMask fiat prices can be forced from this repo alone. + +Consolidated cWUSDC provider packet: [../CWUSDC_PROVIDER_SUBMISSION_PACKET.md](../CWUSDC_PROVIDER_SUBMISSION_PACKET.md). Use this as the shared narrative and evidence source, then use this Etherscan document for the Etherscan-specific sequence and post-submit checks. + +Latest live page review: [../../../reports/status/cwusdc-etherscan-token-page-review-20260511.md](../../../reports/status/cwusdc-etherscan-token-page-review-20260511.md). As of the review, Etherscan resolves the Ethereum Mainnet wrapped `cWUSDC` contract and verified source, but the visible token surface still shows generic `ERC20 ***`, token reputation is `Unknown`, and both market-cap fields are blank. Treat Chain 138 Explorer `cUSDC` as source-asset/system-of-record evidence only; Etherscan submissions must remain scoped to Mainnet `cWUSDC`. + +Decimal normalization fix: [../../../reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md](../../../reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md). The Chain 138 Explorer visible-liquidity issue was a 6-decimal raw-unit display problem: `5,180,095,723,066,127` raw units should render as `5,180,095,723.066127` for 6-decimal `cUSDC`/`cWUSDC` assets. + +## Pre-Submit Checks + +| Check | Recommendation | +|---|---| +| Website | Use `https://d-bis.org/` as the official website. | +| Email | Use `submissions@d-bis.org`. | +| Support email | Use `support@d-bis.org` only where a form asks for user support. | +| Social/profile email | Use `social.media@d-bis.org` only where a form asks for social-media/profile ownership. | +| Token contract | Submit exactly `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. | +| Logo | Use `https://d-bis.org/tokens/cwusdc.svg`; source mirror is `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg`. | +| Token name | Use `Wrapped cUSDC`. | +| Symbol | Use `cWUSDC`. | +| Description | Use the description in `CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md`. | +| Team/profiles | Confirm `https://d-bis.org/leadership` has public team entries and professional profile links. | +| Token explainer | Confirm `https://d-bis.org/gru/tokens` explains cUSDC / cWUSDC clearly. | +| Contact page | Confirm `https://d-bis.org/contact` is live and does not contain placeholders. | + +## Public Link Checks + +Run before submission: + +```bash +for url in \ + https://d-bis.org/ \ + https://d-bis.org/contact \ + https://d-bis.org/leadership \ + https://d-bis.org/gru/tokens \ + https://d-bis.org/security \ + https://d-bis.org/.well-known/trust.json +do + curl -L --max-time 12 -o /dev/null -s -w "$url %{http_code} %{content_type}\n" "$url" +done +``` + +**Automate (repo):** from the workspace root, `bash scripts/verify/check-cwusdc-etherscan-prereq-urls.sh` (same URLs; exits non-zero if any response is not HTTP `200`). + +Expected result: every URL returns HTTP `200`. + +## Submission Language + +Use neutral infrastructure wording: + +`cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC in the DBIS GRU asset family. The token uses 6 decimals, is source-verified on Etherscan and Sourcify, and is intended for public-network mirrored settlement and proof workflows. cWUSDC is a DBIS transport asset and should not be presented as an official Circle-issued USDC token.` + +Avoid: + +- claiming cWUSDC is Circle-issued USDC; +- claiming listing-quality public liquidity before USDC funding/repair is complete; +- claiming CoinGecko or full CMC approval before external acceptance; +- using personal email addresses or non-`d-bis.org` contact domains. + +## Brand Consistency + +| Surface | Recommendation | +|---|---| +| Etherscan | Use the 32x32 SVG and short institutional description. | +| Wallets | Use the same cW* icon grammar; no chain badges inside token artwork. | +| CoinGecko / CMC | Use the 512x512 PNG and the same token description, with liquidity caveats. | +| DexScreener / GeckoTerminal | Use matching logo/social/profile links; include indexed LP URLs. | +| Docs / whitepapers | Reference the semantic stack in `CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md`. | + +## Post-Submit Checks + +After Etherscan approval: + +1. Capture the approved token page URL and screenshot. +2. Confirm the logo renders clearly at token-list size and in the token page header. +3. Confirm website, email, and social/profile fields are correct. +4. Update `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` from pending to accepted. +5. Add the approval evidence to a status report under `reports/status/`. + +## Follow-On Work + +| Work item | Why it matters | +|---|---| +| CoinGecko profile submission | Needed for tracker lookup, public supply acceptance, and Etherscan USD value path. | +| Full CMC token submission | Complements the CMC DEX page with full token metadata and supply profile. | +| DexScreener / GeckoTerminal profile updates | Keeps LP surfaces visually consistent with Etherscan. | +| Wallet token-list submissions | Improves token recognition in user wallets. | +| Official-USDC liquidity repair | Required before making listing-quality market-depth claims. | +| Bridge route validation | Required before claiming full two-way bridge production readiness. | + +## MetaMask EIP-747 Path + +Use the explorer wallet page as the primary practical MetaMask path: + +`https://explorer.d-bis.org/wallet` + +The page now reads the live Chain 138 MetaMask payload: + +`https://explorer.d-bis.org/api/v1/config/metamask?chainId=138` + +Operator/user sequence: + +1. Add Chain 138 with `wallet_addEthereumChain`. +2. Add featured tokens or all Chain 138 tokens with EIP-747 `wallet_watchAsset`. +3. Approve each MetaMask prompt; EIP-747 intentionally requires user confirmation per token. +4. Use the API report endpoints for prices and supply proof. MetaMask built-in fiat prices still depend on MetaMask/Consensys upstream asset and price providers, so this path provides wallet logos/token metadata but does not force native MetaMask price rendering. + +Live metadata checks: + +```bash +curl -fsS 'https://explorer.d-bis.org/api/v1/config/metamask?chainId=138' \ + | jq '.addEthereumChain.chainName, (.watchAssets | length), .watchAssets[0]' + +curl -fsS 'https://explorer.d-bis.org/api/v1/report/token-list?chainId=138' \ + | jq '.logoURI, (.tokens[] | select(.symbol=="cUSDC") | .logoURI)' +``` + +## Canonical References + +- Etherscan packet: `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` +- Consolidated cWUSDC provider packet: `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` +- GRU provider positioning packet: `docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md` +- Branding analysis: `docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md` +- Brand assets page: `https://d-bis.org/brand-assets` +- 32x32 SVG: `https://d-bis.org/tokens/cwusdc.svg` +- 32x32 SVG source mirror: `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg` +- External tracker checklist: `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` +- Technical completion proof: `reports/status/mainnet-cwusdc-technical-completion-20260508.json` +- Supply proof: `reports/status/mainnet-cwusdc-supply-proof-20260508.json` diff --git a/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md new file mode 100644 index 00000000..73083cb4 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md @@ -0,0 +1,185 @@ +# cWUSDC Etherscan Value Execution Plan + +Status: single-goal execution plan for making Etherscan show USD value for Ethereum Mainnet `cWUSDC`. + +## Goal + +Make Etherscan show a nonzero USD value for: + +```text +0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +``` + +This is the only immediate objective for the current workstream. Chain 138 wallet UX, MetaMask local logos, Chainlink feeds, and third-party API probes are supporting work only when they help this Etherscan Value goal. + +## Bottom Line + +Etherscan Value is an off-chain indexer output. It is not controlled by the cWUSDC contract, by Chain 138 accounting, by token-list JSON, or by MetaMask EIP-747. + +The likely Etherscan Value path is: + +```text +Etherscan token profile accepted + + trusted market-data provider accepts Mainnet cWUSDC + + provider has usable USD price / market data for this exact contract + + Etherscan refreshes its external price feed + = Etherscan holder/token Value can become nonzero +``` + +## Exact Asset Identity + +| Field | Value | +|---|---| +| Network | Ethereum Mainnet | +| Chain ID | `1` | +| CAIP-19 | `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Etherscan page | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Logo for Etherscan | `https://d-bis.org/tokens/cwusdc.svg` | +| DBIS report logo | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | + +## Critical Path + +| Priority | Action | Why it matters for Etherscan Value | Evidence of completion | +|---:|---|---|---| +| 1 | Submit/update Etherscan token profile/logo/socials | Etherscan must trust the token identity before downstream value display is credible | Etherscan page shows approved logo/profile | +| 2 | Submit Mainnet cWUSDC to CoinGecko | CoinGecko is a likely Etherscan USD price source for ERC-20s | CoinGecko contract lookup returns cWUSDC with price | +| 3 | Submit Mainnet cWUSDC to CoinMarketCap | CMC reinforces market-data coverage and DexScan presence | CMC token page/quotes exist beyond DexScan-only page | +| 4 | Keep public cWUSDC/USDC DEX evidence current | Trackers may require market pair evidence before price acceptance | GeckoTerminal/CMC DEX/DexScreener pages show pair data | +| 5 | Provide supply/circulating-supply proof | Market cap and price feeds often require supply provenance | Tracker accepts total/circulating supply | +| 6 | Monitor Etherscan propagation | Etherscan may lag after provider acceptance | Etherscan holder/token rows show nonzero USD value | + +## Repo-Ready Evidence + +| Evidence | Status | Location | +|---|---|---| +| Etherscan bridge/cross-chain layer map | Ready | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md` | +| Etherscan Value dossier | Ready | `reports/status/cwusdc-etherscan-value-dossier-latest.json` and `.md` | +| Etherscan profile packet | Ready | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| Etherscan E2E recommendations | Ready | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` | +| External tracker checklist | Ready | `docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md` | +| Tracker submission packet | Ready | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| Supply proof | Ready | `reports/status/mainnet-cwusdc-supply-proof-20260508.json` | +| Fresh supply/circulating attestation | Ready | `reports/status/cwusdc-supply-circulating-attestation-latest.json` and `.md` | +| Global cUSDC/cWUSDC family supply proof | Separate reference only | `reports/status/global-cusdc-cwusdc-family-supply-proof-latest.json` and `.md`; do not use for Ethereum Etherscan Value | +| Etherscan value propagation monitor | Ready | `reports/status/cwusdc-etherscan-value-propagation-latest.json` and `.md` | +| CoinGecko-shaped API | Ready | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | +| CMC-shaped API | Ready | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | +| Token-list API | Ready | `https://explorer.d-bis.org/api/v1/report/token-list?chainId=1` | +| cWUSDC logo endpoint | Ready | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| GeckoTerminal V3 pool | Indexed | `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` | +| GeckoTerminal V2 pool | Indexed | `https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` | +| CMC DEX token page | Reachable | `https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/` | + +## Immediate Operator Tasks + +1. Submit Etherscan token profile update. + - Use `submissions@d-bis.org`. + - Use `https://d-bis.org/tokens/cwusdc.svg`. + - Use `Wrapped cUSDC` / `cWUSDC`. + - Use the neutral description from `CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md`. + +2. Submit CoinGecko Mainnet cWUSDC listing/update. + - Submit the Ethereum Mainnet contract, not Chain 138 cUSDC. + - Include supply proof and tracker caveats. + - Include GeckoTerminal and CMC DEX evidence. + +3. Submit CMC listing/update. + - Reference the existing CMC DEX token page. + - Attach CMC report endpoint and supply proof. + +4. Record all external confirmations. + - Ticket ID, account/email used, submitted URLs, screenshots, and response. + - Write status evidence under `reports/status/`. + +5. Monitor for propagation. + - Etherscan token page. + - Etherscan holder pages. + - CoinGecko contract lookup. + - CMC token/quotes page. + +## API Checks + +Generate the current supply/circulating-supply attestation: + +```bash +python3 scripts/verify/generate-cwusdc-supply-circulating-attestation.py +``` + +Generate the separate global cUSDC/cWUSDC family proof: + +```bash +python3 scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py +``` + +Monitor Etherscan value propagation and upstream blockers: + +```bash +python3 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py +``` + +Build the full Etherscan Value dossier: + +```bash +pnpm cwusdc:etherscan-dossier +``` + +Repo-controlled readiness: + +```bash +curl -fsS 'https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1' \ + | jq '.tokens[] | select(.symbol=="cWUSDC") | {symbol,contract_address,logo_uri,total_supply,circulating_supply,market_cap:(.market_data.market_cap // .marketCapUsd // null),tracker_caveats}' +``` + +Etherscan public page: + +```bash +curl -L --max-time 15 -s -o /dev/null -w '%{http_code} %{url_effective}\n' \ + 'https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a' +``` + +CoinGecko after acceptance: + +```bash +curl -fsS 'https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true&include_last_updated_at=true' +``` + +DexScreener indexing check: + +```bash +curl -fsS 'https://api.dexscreener.com/token-pairs/v1/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a' +``` + +## Out of Scope Unless It Supports Etherscan Value + +| Work | Status for this goal | +|---|---| +| Chain 138 logo in MetaMask | Helpful for UX; not an Etherscan Value blocker | +| MetaMask EIP-747 refresh | Helpful for local wallet metadata; not an Etherscan Value blocker | +| MetaMask Snap allowlist | Not required for Etherscan Value | +| Chainlink cWUSDC/USD feed | Future institutional oracle target; not immediate Etherscan Value path | +| Alchemy/Moralis/thirdweb API probes | Useful diagnostics; not primary until Etherscan/CoinGecko/CMC submissions are done | +| Additional cW* pools | Useful market evidence only if they produce trusted public price data | + +## Blocking Reality + +Etherscan Value cannot be forced from this repo alone. The repo can provide a clean evidence package, public APIs, logos, supply proof, and DEX evidence. The value flips only after Etherscan or its trusted upstream price providers accept a USD mark for the exact Ethereum Mainnet cWUSDC contract. + +## Current Latest Monitor Result + +As of the latest local run, the supply/circulating-supply attestation is generated and ready for submission. The propagation monitor still reports: + +- Etherscan Onchain Market Cap is blank. +- Etherscan Circulating Supply Market Cap is blank. +- CoinGecko contract price API does not return a positive USD price. + +This means the two focused tasks are split as follows: + +| Task | Current state | Next action | +|---|---|---| +| Provide supply/circulating-supply proof | Complete repo-side; latest attestation generated | Attach `cwusdc-supply-circulating-attestation-latest.*` to Etherscan/CoinGecko/CMC submissions | +| Provide global family supply proof | Complete repo-side; separate proof generated | Use only as family/context evidence; do not use as Ethereum Mainnet cWUSDC supply | +| Monitor Etherscan propagation | Complete repo-side; monitor generated | Re-run monitor after every external submission/approval until Etherscan market cap/value fields become nonblank | diff --git a/docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md b/docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md new file mode 100644 index 00000000..2c09da10 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md @@ -0,0 +1,81 @@ +# cWUSDC Evidence Bundle Index + +Status: institutional submission index for Ethereum Mainnet `cWUSDC`. + +## Scope + +This bundle is for: + +```text +Network: Ethereum Mainnet +Contract: 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +CAIP-19: eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +Name: Wrapped cUSDC +Symbol: cWUSDC +Decimals: 6 +``` + +Chain 138 `cUSDC` and global cUSDC/cWUSDC family evidence are context only. They are not the Ethereum Mainnet cWUSDC token-page supply basis. + +## Primary Evidence + +| Artifact | Path / URL | Purpose | Status | +|---|---|---|---| +| Etherscan token page | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | Public Mainnet token surface | Live; market cap blank | +| Etherscan Value dossier | `reports/status/cwusdc-etherscan-value-dossier-latest.md` | Single current readiness packet | Repo-ready | +| Institutional readiness review | `reports/status/cwusdc-institutional-readiness-review-20260511.md` | Scored gap and recommendation report | Current | +| Supply/circulating attestation | `reports/status/cwusdc-supply-circulating-attestation-latest.md` | Mainnet supply basis | Current | +| Global family supply proof | `reports/status/global-cusdc-cwusdc-family-supply-proof-latest.md` | Cross-chain context only | Current | +| cUSDC/cWUSDC feed audit | `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md` | Source/wrapped relationship evidence | Current | +| Etherscan token-page review | `reports/status/cwusdc-etherscan-token-page-review-20260511.md` | Manual/live page-state review | Current | +| Mainnet role audit | `reports/status/cwusdc-mainnet-role-audit-latest.md` | Known-candidate admin/minter/burner role snapshot | Current | +| Role deployment appendix | `reports/status/cwusdc-role-deployment-appendix-latest.md` | Role-event to repo-record reconciliation appendix | Current | +| Institutional doc link check | `reports/status/cwusdc-institutional-doc-link-check-latest.md` | Narrow link-check for this packet | Current | +| Provider submission prefill | `reports/status/cwusdc-provider-submission-prefill-latest.md` | Prefilled fields and screenshot capture checklist | Current | +| Provider monitor snapshot | `reports/status/cwusdc-provider-monitoring-snapshot-latest.md` | Scheduled-monitor output surface | Current | +| Provider handoff | `reports/status/cwusdc-provider-handoff-latest.md` | Public provider readiness state | Current | +| External tracker probes | `reports/status/cwusdc-external-trackers-live-latest.md` | CoinGecko/CMC/DexScreener/GeckoTerminal checks | Current | + +## Submission Documents + +| Document | Purpose | +|---|---| +| `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` | Shared cross-provider narrative and facts | +| `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | Etherscan profile copy/paste packet | +| `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` | Etherscan submission and follow-up checklist | +| `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md` | Etherscan USD Value execution path | +| `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md` | Bridge/cross-chain evidence boundaries | +| `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | CoinGecko/CMC tracker packet | +| `docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md` | DexScreener indexing/profile packet | +| `docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md` | Wallet/provider matrix | + +## Institutional Control Documents + +| Document | Purpose | +|---|---| +| `docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md` | Mainnet supply/circulating methodology | +| `docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md` | Audit posture and controls disclosure | +| `docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md` | External ticket/status tracker | +| `docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md` | No-broadcast liquidity readiness plan | + +## Refresh Commands + +```bash +pnpm cwusdc:etherscan-dossier +pnpm cwusdc:role-audit +pnpm cwusdc:role-appendix +pnpm cwusdc:doc-links +pnpm cwusdc:submission-prefill +pnpm cwusdc:provider-checks +pnpm cwusdc:provider-ci +pnpm cwusdc:provider-monitor +pnpm cwusdc:evidence-bundle +``` + +## Evidence Rules + +- Use only Ethereum Mainnet cWUSDC supply for Etherscan Value submissions. +- Use Chain 138 cUSDC as source-asset provenance only. +- Use global family supply only as context and disclose double-counting risk. +- Do not claim accepted CoinGecko, CMC, DexScreener, MetaMask, or Etherscan Value status until the public provider page/API confirms it. +- Do not claim 1:1 peg or institutional liquidity depth while official Mainnet USDC quote-side liquidity remains thin. diff --git a/docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md b/docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md new file mode 100644 index 00000000..0c490b7c --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md @@ -0,0 +1,65 @@ +# cWUSDC Liquidity Readiness No-Broadcast Plan + +Status: planning document only. This file does not authorize transactions. + +## Purpose + +Prepare the repo-side plan for improving public cWUSDC/USDC liquidity evidence without broadcasting transactions or moving funds from this document. + +## Current Boundary + +The current provider work is submission-ready, but liquidity is not institutionally deep. Etherscan/token trackers can index public facts, but a robust value claim requires accepted external price feeds and visible, non-dust official quote-side liquidity. + +## No-Broadcast Rules + +- Do not approve, swap, add liquidity, remove liquidity, bridge, or mint from this plan. +- Do not claim 1:1 peg quality until official Mainnet USDC quote-side depth supports it. +- Do not use Chain 138 cUSDC activity as Ethereum Mainnet cWUSDC trading volume. +- Do not use internal netting as public DEX activity. + +## Readiness Inputs + +| Input | Required before live action | +|---|---| +| Official Mainnet USDC available | Amount, source, wallet, tx proof | +| ETH gas reserve | Enough for approval, add-liquidity, swap proof, and monitoring | +| Target pool | Uniswap v3/v2/DODO address and expected quote behavior | +| Slippage policy | Max slippage, minOut, deadline | +| Event policy | Required swaps/liquidity events for tracker freshness | +| Rollback policy | What to do if pool price moves outside tolerance | + +## Current Public Surfaces + +| Surface | Role | Current interpretation | +|---|---|---| +| Uniswap v3 cWUSDC/USDC | Primary indexed evidence surface | Visible on GeckoTerminal; liquidity thin | +| Uniswap v2 cWUSDC/USDC | Legacy indexed evidence surface | Visible on GeckoTerminal; liquidity very thin | +| DexScreener token APIs | Tracker discoverability | Currently empty for cWUSDC | +| CMC DEX | DEX discoverability | Public probe passes | + +## If USDC Becomes Available + +1. Re-run: + +```bash +pnpm cwusdc:etherscan-dossier +pnpm cwusdc:provider-checks +``` + +2. Snapshot balances and pool state. +3. Simulate target liquidity action with no broadcast. +4. Confirm expected reserve and price impact. +5. Execute only with explicit operator approval. +6. Re-run provider checks after confirmations. +7. Capture pair URLs, tx hashes, and reserve changes. + +## Institutional Claim Gate + +Do not make the following claims until evidence supports them: + +| Claim | Required evidence | +|---|---| +| cWUSDC has Etherscan USD Value | Etherscan holder/token page shows nonblank USD value/market cap | +| cWUSDC has accepted public market price | CoinGecko or CMC returns exact-contract positive USD price | +| cWUSDC/USDC is 1:1 supported | Official USDC quote-side liquidity and real public swaps support the claim | +| cWUSDC has DEX discoverability | DexScreener/GeckoTerminal/CMC DEX return visible pair data | diff --git a/docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md b/docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md new file mode 100644 index 00000000..7c392d83 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md @@ -0,0 +1,95 @@ +# cWUSDC Mainnet Etherscan Profile Packet + +Status: ready for Etherscan token profile submission, using `submissions@d-bis.org` as the official contact email. The submitter still must confirm the public team/profile links on the live website. + +## Copy-Paste Fields + +| Field | Value | +|---|---| +| Token contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Network | Ethereum Mainnet | +| Token name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Official website | `https://d-bis.org/` | +| Contact email | `submissions@d-bis.org` | +| Support email | `support@d-bis.org` | +| Social/profile email | `social.media@d-bis.org` | +| 32x32 SVG logo | `https://d-bis.org/tokens/cwusdc.svg` | +| 32x32 SVG source | `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg` | +| Larger PNG logo | `docs/04-configuration/coingecko/logos/cUSDC-512x512.png` | +| Token SVG source logo | `smom-dbis-138/services/token-aggregation/public/token-logos/gru/cUSDC.svg` | +| Etherscan token page | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Source contract | `smom-dbis-138/contracts/tokens/CompliantWrappedToken.sol` | +| Tracker packet | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| Supply proof | `reports/status/mainnet-cwusdc-supply-proof-20260508.json` | +| cUSDC/cWUSDC API feed proof | `docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md`; latest generated local outputs are `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md` and `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.json` | +| Technical completion proof | `reports/status/mainnet-cwusdc-technical-completion-20260508.json` | +| Branding system analysis | `docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md` | +| E2E recommendations | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md` | + +## Etherscan Notice Matrix + +| Etherscan requirement | Current evidence | Submitter action | +|---|---|---| +| Mandatory website, email, and 32x32 SVG logo provided | Website is `https://d-bis.org/`; contact email is `submissions@d-bis.org`; 32x32 SVG asset is hosted at `https://d-bis.org/tokens/cwusdc.svg` and mirrored in this packet. | Use `submissions@d-bis.org` in the Etherscan form. | +| Email/contact email matches official website domain | Required domain is `d-bis.org`; selected mailbox is `submissions@d-bis.org`. | Use `submissions@d-bis.org`. | +| Support and social contact paths are domain-matched | Support is `support@d-bis.org`; social/profile contact is `social.media@d-bis.org`. | Use these only where a form asks for support or social-media/profile ownership. | +| Official website accessible and safe | `curl -L https://d-bis.org/` returned HTTP `200` on 2026-05-09. | Confirm in browser from the Etherscan account session. | +| Website links work and placeholders are updated | Live homepage exposes project pages including `/about`, `/leadership`, `/gru/tokens`, `/legal`, `/contact`, `/security`, and `/.well-known/trust.json`; sampled pages returned HTTP `200` on 2026-05-09. | Before submitting, click through the public nav and remove or fix any visible placeholders. | +| Website has clear project/token information | `https://d-bis.org/gru/tokens` is the public token directory; `https://d-bis.org/about` and `https://d-bis.org/gru/overview` describe DBIS/GRU context. | Ensure the `cWUSDC` row or token detail is visible and points to the Mainnet contract. | +| Contract adheres to ERC-20 specs | Contract is verified and implements the compliant wrapped token ERC-20 surface; local source is `CompliantWrappedToken.sol`. | No extra action unless Etherscan asks for audit or source notes. | +| Contract is valid and the right address | Mainnet cWUSDC contract is `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`; supply proof and tracker packet point to the same address. | Paste the exact checksum address. | +| Name/symbol/creative properties avoid infringement | Submit as `Wrapped cUSDC` / `cWUSDC`, a DBIS compliant wrapped transport token. | Do not imply official Circle/USDC sponsorship; describe it as a wrapped transport representation of Chain 138 `cUSDC`. | +| Not fraudulent or misrepresenting public entities/projects | Website, contract, and packet describe DBIS/GRU and cWUSDC as project-owned infrastructure. | Keep submission language narrow; avoid claiming governmental or third-party issuer status unless separately documented. | +| Uses/deployed on Ethereum blockchain | Contract is on Ethereum Mainnet chain ID `1`. | Select Ethereum Mainnet in Etherscan. | +| Team/founders clearly presented with professional profile links | `https://d-bis.org/leadership` is live. | Confirm leadership entries include supporting professional links such as LinkedIn or equivalent. If not, add those links to the website before submitting. | + +## Suggested Description + +`cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC in the DBIS GRU asset family. The token uses 6 decimals, is source-verified on Etherscan and Sourcify, and is intended for public-network mirrored settlement and proof workflows. cWUSDC is a DBIS transport asset and should not be presented as an official Circle-issued USDC token.` + +## cUSDC / cWUSDC API Feed Position + +Etherscan should index and display Ethereum Mainnet activity for the `cWUSDC` token contract only. Chain 138 `cUSDC` traffic is not expected to be added to the Etherscan token transfer totals, but it should be referenced as the canonical source-asset feed that `cWUSDC` wraps. + +Latest local API audit: + +- Chain 138 source token: `cUSDC` at `0xf22258f57794CC8E06237084b353Ab30fFfa640b` +- Ethereum wrapped token: `cWUSDC` at `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` +- Mapping source: `config/token-mapping-multichain.json` +- Static audit note: `docs/04-configuration/etherscan/CUSDC_CWUSDC_ETHERSCAN_FEED_AUDIT.md` +- Evidence packet: `reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md` + +Submission language: + +`cWUSDC is the Ethereum Mainnet wrapped transport representation of canonical Chain 138 cUSDC. Please use the Ethereum Mainnet cWUSDC contract for Etherscan token-page transfers and supply, and use the Chain 138 cUSDC explorer/API feed only as supporting evidence for the canonical source asset relationship.` + +## Logo Rationale + +The submitted 32x32 mark uses a repeatable cW* symbolic grammar: the outer `C` represents currency-class fiat cash, the inner `c` represents compliant electronic money, the `W` represents a wrapped / bridged transport form, and the `USD` label represents the ISO-4217 denomination. The design is intentionally institutional and settlement-oriented, not a claim of Circle-issued USDC branding. + +## Links To Include + +- Website: `https://d-bis.org/` +- Brand assets: `https://d-bis.org/brand-assets` +- 32x32 SVG logo: `https://d-bis.org/tokens/cwusdc.svg` +- Token directory: `https://d-bis.org/gru/tokens` +- Leadership: `https://d-bis.org/leadership` +- Contact: `https://d-bis.org/contact` +- Security: `https://d-bis.org/security` +- Trust anchors: `https://d-bis.org/.well-known/trust.json` +- Explorer: `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` +- Chain 138 explorer: `https://explorer.d-bis.org/` +- Compact cWUSDC price/supply evidence API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cWUSDC?chainId=1` +- Chain 138 source cUSDC evidence API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cUSDC?chainId=138` +- CoinGecko-format cWUSDC report API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/coingecko?chainId=1` +- CMC-format cWUSDC report API: `https://explorer.d-bis.org/token-aggregation/api/v1/report/cmc?chainId=1` +- Docs: `https://docs.d-bis.org/` + +## Submission Guardrails + +- Do not claim listing-quality public liquidity until the official-USDC liquidity gaps in `reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json` are funded and repaired. +- Do not claim CoinGecko or full CoinMarketCap listing acceptance until the external tracker pages are live. +- Do not describe cWUSDC as Circle-issued USDC. Use `compliant wrapped transport representation of Chain 138 cUSDC`. +- Use `submissions@d-bis.org` and ensure the mailbox can respond to Etherscan verification follow-up. diff --git a/docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md b/docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md new file mode 100644 index 00000000..6cf440a0 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md @@ -0,0 +1,53 @@ +# cWUSDC Provider Response Tracker + +Status: operator-updated tracker for external provider submissions and responses. + +## Submission Tracker + +| Provider | Status | Submitted date | Account/contact | Ticket / PR / form ID | Public URL | Latest response | Next action | +|---|---|---|---|---|---|---|---| +| Etherscan profile | `not_recorded` | TBD | `submissions@d-bis.org` | TBD | `https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | Not recorded | Submit/re-submit profile packet. | +| CoinGecko | `not_recorded` | TBD | TBD | TBD | TBD | Not recorded | Submit tracker packet for exact Mainnet contract. | +| CoinMarketCap | `not_recorded` | TBD | TBD | TBD | CMC DEX page visible | Not recorded | Submit/update full token profile. | +| DexScreener | `not_recorded` | TBD | TBD | TBD | TBD | API currently returns no pairs | Refresh pair evidence and request profile/indexing. | +| GeckoTerminal | `visible_partial` | TBD | TBD | TBD | V2/V3 pool APIs visible | Pool data visible, but liquidity thin | Keep pool evidence fresh. | +| MetaMask provider price | `not_recorded` | TBD | TBD | TBD | N/A | No native price acceptance recorded | Wait on upstream provider acceptance. | + +## Status Values + +Use only these values: + +```text +not_recorded +drafted +submitted +provider_question +accepted +rejected +blocked_external +visible_partial +closed_no_action +``` + +## Update Rules + +- Record the exact contract and CAIP-19 in every ticket. +- Record the account/email used. +- Record submission timestamp. +- Attach screenshots or API responses under `reports/status/`. +- Do not mark `accepted` unless the public provider page/API confirms acceptance. +- Keep Etherscan, CoinGecko, CMC, DexScreener, and MetaMask price statuses separate. + +## Standard Submission Identity + +```text +Network: Ethereum Mainnet +Contract: 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +CAIP-19: eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +Name: Wrapped cUSDC +Symbol: cWUSDC +Decimals: 6 +Website: https://d-bis.org/ +Logo: https://d-bis.org/tokens/cwusdc.svg +Contact: submissions@d-bis.org +``` diff --git a/docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md b/docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md new file mode 100644 index 00000000..396ec429 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md @@ -0,0 +1,100 @@ +# cWUSDC Security and Audit Disclosure + +Status: institutional controls disclosure for provider submissions while formal external audit evidence is not yet recorded in this repo. + +## Current Audit Posture + +No formal third-party audit URL is recorded in the current cWUSDC Etherscan evidence packet. + +Until a formal audit is available and submitted through Etherscan's audit route, provider-facing materials must use this posture: + +```text +The cWUSDC Mainnet contract is source-verified and ABI-visible on Etherscan. A formal third-party audit URL has not yet been recorded in the current submission packet. DBIS maintains operational controls, source verification evidence, supply attestations, and monitoring reports; this should not be represented as a completed third-party audit. +``` + +## Verified Contract Evidence + +Latest dossier evidence reports: + +| Field | Value | +|---|---| +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Verified | `true` | +| Contract name | `CompliantWrappedToken` | +| Compiler | `v0.8.20+commit.a1b79de6` | +| Optimization | enabled, `200` runs | +| EVM version | `london` | +| Proxy | `0` | +| ABI available | `true` | + +Evidence: + +```text +reports/status/cwusdc-etherscan-value-dossier-latest.json +``` + +## Operational Controls + +| Control | Current evidence | +|---|---| +| Source verification | Etherscan `getsourcecode` check in dossier | +| Supply monitoring | `cwusdc-supply-circulating-attestation-latest.*` | +| Provider readiness monitoring | `cwusdc-provider-handoff-latest.*` | +| Etherscan Value monitoring | `cwusdc-etherscan-value-propagation-latest.*` | +| Cross-chain boundary disclosure | `CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md` | +| Mainnet-only supply policy | `CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md` | +| Role/control snapshot | `reports/status/cwusdc-mainnet-role-audit-latest.md` | + +## Remaining Audit Tasks + +| Priority | Task | Status | +|---:|---|---| +| P0 | Identify whether a formal audit exists for `CompliantWrappedToken` | Open | +| P0 | If audit exists, add URL/hash to this packet and Etherscan submission | Open | +| P1 | If no audit exists, publish unaudited status in provider packet | Complete in this disclosure | +| P1 | Add admin/owner/mint/burn role review artifact | Complete as read-only known-candidate snapshot; unknown role members still require event/deployment-log review | +| P1 | Add incident-response contact and escalation path to public docs | Complete in provider packet | + +## Latest Role Snapshot + +Latest read-only role audit: + +```text +reports/status/cwusdc-mainnet-role-audit-latest.json +reports/status/cwusdc-mainnet-role-audit-latest.md +``` + +Current observed candidate role state: + +- `deployer` has `DEFAULT_ADMIN_ROLE`. +- `cwBridgeMainnet` (`0x2bF74583206A49Be07E0E8A94197C12987AbD7B5`) has `MINTER_ROLE` and `BURNER_ROLE`. +- The checked relay/router/pool/vault candidates do not have `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE`, or `BURNER_ROLE`. +- `MINTER_ROLE` and `BURNER_ROLE` are administered by `DEFAULT_ADMIN_ROLE`. + +The event-log reconstruction currently observes the deployer as the effective admin and the Mainnet cW bridge as the effective minter/burner. Limitation: provider log limits or pruned responses can still require independent deployment-record review before treating this as a formal audit. + +## Incident Response + +| Purpose | Contact / URL | +|---|---| +| Provider submissions | `submissions@d-bis.org` | +| User support | `support@d-bis.org` | +| Security / responsible disclosure | `https://d-bis.org/security` | +| General contact | `https://d-bis.org/contact` | +| Trust metadata | `https://d-bis.org/.well-known/trust.json` | + +## Provider Boundary + +Do not write: + +```text +cWUSDC is audited. +``` + +Unless a formal audit URL is attached and verified. + +Use: + +```text +cWUSDC is source-verified on Etherscan; formal third-party audit evidence is not yet recorded in the current submission packet. +``` diff --git a/docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md b/docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md new file mode 100644 index 00000000..a3a9a3d6 --- /dev/null +++ b/docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md @@ -0,0 +1,84 @@ +# cWUSDC Supply and Circulating Methodology + +Status: institutional methodology for Ethereum Mainnet `cWUSDC` provider submissions. + +## Asset Boundary + +| Field | Value | +|---|---| +| Network | Ethereum Mainnet | +| Chain ID | `1` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| CAIP-19 | `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | + +## Methodology + +Total supply is read from the Ethereum Mainnet cWUSDC contract through Etherscan/API evidence and normalized by the token's 6-decimal divisor. + +Circulating supply defaults to total supply unless a tracker requests a specific exclusion policy and the excluded balances are explicitly identified, documented, and re-generated with that policy. + +Current formula: + +```text +circulatingSupply = totalSupply - explicitlyExcludedProtocolControlledNonCirculatingBalances +``` + +Current default: + +```text +excludedProtocolControlledNonCirculatingBalances = 0 +``` + +## Current Attestation + +Latest generated evidence: + +```text +reports/status/cwusdc-supply-circulating-attestation-latest.json +reports/status/cwusdc-supply-circulating-attestation-latest.md +``` + +Latest values: + +```text +totalSupply = 10,451,316,981.309788 cWUSDC +circulatingSupply = 10,451,316,981.309788 cWUSDC +``` + +## Exclusion Policy + +No wallet, vault, pool, operator, bridge, or treasury balance is excluded by default. + +If a tracker requests exclusions: + +1. Identify the exact address. +2. Identify the legal/control reason for exclusion. +3. Capture the on-chain balance at a reference block. +4. Re-run the supply attestation with explicit exclusion labels. +5. Attach the generated JSON and Markdown to the tracker response. + +## Cross-Chain Boundary + +Chain 138 `cUSDC`, other cUSDC contracts, and other cWUSDC deployments are not part of the Ethereum Mainnet cWUSDC token-page supply. + +Global family supply proof may be attached only as context: + +```text +reports/status/global-cusdc-cwusdc-family-supply-proof-latest.json +reports/status/global-cusdc-cwusdc-family-supply-proof-latest.md +``` + +Provider-facing warning: + +```text +Global cUSDC/cWUSDC family totals should not be used as Ethereum Mainnet cWUSDC market-cap input. They are cross-chain family inventory and may double-count source and wrapped representations unless a tracker-approved methodology is applied. +``` + +## Refresh Command + +```bash +python3 scripts/verify/generate-cwusdc-supply-circulating-attestation.py +``` diff --git a/docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md b/docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md new file mode 100644 index 00000000..8c699275 --- /dev/null +++ b/docs/04-configuration/etherscan/CW_TOKEN_BRANDING_SYSTEM_ANALYSIS.md @@ -0,0 +1,97 @@ +# cW Token Branding System Analysis + +Status: brand-governance reference for cWUSDC and the broader cW* compliant wrapped token family. + +## Purpose + +This note records the branding framework used for Etherscan, wallet, explorer, protocol, and tracker submissions. It treats the cWUSDC mark as part of a repeatable monetary-symbol system, not as a one-off token icon. + +## Semantic Stack + +| Element | Meaning | +|---|---| +| Outer `C` | Currency-class fiat cash instrument | +| Inner `c` | Compliant electronic money | +| `W` | Wrapped / bridged representation | +| `USD` | ISO-4217 dollar denomination | + +The icon encodes `compliant wrapped USD-denominated fiat currency` in a compact 32x32 asset. This is the preferred explanation when a reviewer asks why the mark uses currency-ring geometry or blue stable-value visual language. + +## Revised Design Evaluation + +| Category | Score | +|---|---:| +| Originality | `8.6 / 10` | +| Brand architecture | `9.2 / 10` | +| Symbolic coherence | `9.4 / 10` | +| Regulatory / institutional positioning | `9.1 / 10` | +| Final professional score | `9.0 / 10` | + +Professional grade: `A`. + +## Ecosystem Fit + +The mark is strongest in regulated financial-infrastructure contexts: + +| Context | Fit | Notes | +|---|---|---| +| Etherscan token profile | High | Compact, legible, and institutionally conservative. | +| Wallet token lists | High | The nested currency grammar survives small icon presentation. | +| Explorer token pages | High | White-on-blue reserve-money language reads cleanly in dark and light UI. | +| Protocol documentation | High | The glyph stack maps directly to the cW* asset model. | +| Institutional decks | High | The visual tone suggests settlement, compliance, and treasury rails. | +| Retail meme-token positioning | Low | The mark intentionally avoids speculative or mascot-driven crypto cues. | + +## Currency Scalability + +The model scales across ISO-4217 variants by preserving the outer/inner/wrapped structure and changing only the denomination label and optional currency accent. + +| Variant | Denomination label | Notes | +|---|---|---| +| `cWUSDC` | `USD` | Current Etherscan profile asset. | +| `cWEURC` / `cWEURT` | `EUR` | Use the same structure with euro-denomination label. | +| `cWGBPC` / `cWGBPT` | `GBP` | Preserve outer C; avoid pound-sign clutter at 32x32. | +| `cWAUDC` / `cWAUDT` | `AUD` | Works directly with the existing label geometry. | +| `cWJPYC` / `cWJPYT` | `JPY` | Prefer ISO label over yen symbol for small-size legibility. | +| `cWCHFC` / `cWCHFT` | `CHF` | ISO label is clearer than symbol-based treatment. | +| `cWCADC` / `cWCADT` | `CAD` | Same structure; optional maple/red accents should be avoided for institutional neutrality. | + +## Network Scalability + +The brand should remain token-first and chain-neutral. Network identity belongs in the surrounding wallet/explorer UI, not inside the 32x32 token mark. + +| Network context | Fit | Recommendation | +|---|---|---| +| Ethereum Mainnet | High | Use the canonical cW* mark and chain metadata separately. | +| Base / Optimism / Arbitrum | High | Do not add L2 badges inside the token icon. | +| Polygon / Gnosis / Avalanche / BSC / Celo | High | Keep the token mark stable across networks for recognizability. | +| Chain 138 origin context | High | Use c* native marks for canonical assets and cW* marks for public wrapped transport forms. | + +## UX Risks + +| Risk | Mitigation | +|---|---| +| Visual proximity to existing stablecoin marks | Use the DBIS blue spectrum, interrupted outer C, custom W bridge stroke, and explicit `cW*` naming. | +| Bottom denomination compression at 32x32 | Use three-letter ISO labels, moderate tracking, and a small backing shape when needed. | +| Overloading the icon with chain/network badges | Keep network identity out of the icon; express it in token-list metadata. | +| Confusion with official third-party issuers | State clearly that cWUSDC is a DBIS compliant wrapped transport representation of Chain 138 cUSDC, not Circle-issued USDC. | +| Ticker variants becoming visually inconsistent | Preserve the outer C, inner c, W, and ISO-label layout across all cW* assets. | + +## Strategic Recommendations + +- Position cW* as regulated tokenized money infrastructure, not speculative crypto branding. +- Use a consistent cW* mark family across all public networks. +- Keep the canonical `c*` and wrapped `cW*` families visually related but distinct. +- Prefer ISO-4217 labels over currency symbols inside 32x32 icons. +- Avoid chain-specific badges in the token artwork; use token-list metadata for network context. +- Use the Etherscan 32x32 SVG as the small-size reference and the 512x512 PNG family for tracker/wallet contexts. + +## Current Canonical Assets + +| Asset | Path | +|---|---| +| cWUSDC 32x32 Etherscan SVG | `docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg` | +| cUSDC / cWUSDC 512x512 PNG | `docs/04-configuration/coingecko/logos/cUSDC-512x512.png` | +| cUSDC source SVG | `smom-dbis-138/services/token-aggregation/public/token-logos/gru/cUSDC.svg` | +| Etherscan profile packet | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | + diff --git a/docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg b/docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg new file mode 100644 index 00000000..73dc4880 --- /dev/null +++ b/docs/04-configuration/etherscan/assets/cWUSDC-32x32.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + USD + diff --git a/docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md b/docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md new file mode 100644 index 00000000..bf61ee26 --- /dev/null +++ b/docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md @@ -0,0 +1,392 @@ +# MetaMask Asset and Price Provider Submission Matrix + +Status: canonical repo-side path for making Chain 138 and GRU / GRU v2 `c*` and `cW*` metadata correct, then submitting the same facts to the external providers that MetaMask, wallets, explorers, and market-data surfaces commonly depend on. + +Source-summary packet: [METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md](METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md). + +API feed spider-web packet: [METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md](METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md). + +Provider positioning packet: [../GRU_PROVIDER_POSITIONING_PACKET.md](../GRU_PROVIDER_POSITIONING_PACKET.md). + +Current execution focus: make Etherscan show USD Value for Ethereum Mainnet `cWUSDC` at `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. Use [../etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md](../etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md) as the primary runbook. All other provider work is supporting evidence unless it directly helps Etherscan's trusted upstream price path. + +Latest execution status: [../../../reports/status/cwusdc-provider-next-steps-execution-status-latest.md](../../../reports/status/cwusdc-provider-next-steps-execution-status-latest.md). Current public probes show Etherscan page, CMC DEX page, and GeckoTerminal pool APIs visible; CoinGecko token-price API and DexScreener token APIs are still external blockers. + +Non-manual automation: `pnpm cwusdc:provider-checks` runs all public/read-only provider checks and writes `reports/status/cwusdc-provider-handoff-latest.md`; `pnpm cwusdc:provider-ci` is the CI-safe gate that fails only on repo-controlled prerequisites and reports external provider blockers as advisory. + +Non-manual task list: [../CWUSDC_NON_MANUAL_PROVIDER_TASKS.md](../CWUSDC_NON_MANUAL_PROVIDER_TASKS.md). + +## GRU / Chain 138 Provider Positioning + +The GRU framework is not a cryptocurrency, stablecoin, or speculative digital asset system. GRU is the governing monetary-policy framework for a reserve-backed institutional settlement architecture. Chain 138 is the synchronized settlement, verification, and reconciliation layer through which reserve positions, transactional states, and collateral validations are recorded and continuously checked. + +Provider-facing language should describe the ecosystem as programmable settlement and verification infrastructure for reserve-backed monetary instruments, sovereign-grade financial assets, commodities, and institutional settlement workflows. It should not describe GRU or Chain 138 as a speculative token model, yield product, algorithmic stablecoin, or crypto-economic asset system. + +Chain 138 acts as the aggregated system-of-record for underlying holdings, reserve balances, and settlement positions. Reserve evidence is expected to remain independently verifiable through institutional sources such as UCC filings, Euroclear records, exchange reporting systems, regulated custodians, and qualified financial counterparties. API-driven validation, reconciliation, rebasing, and audit processes are expected to operate on rolling 6-second verification intervals and maintain the internal 20% operational buffer above required collateralization. + +| Layer | Provider-facing interpretation | Reserve / settlement rule | +|---|---|---| +| `M00` GRU | Physical and commodity reserve layer across XAU, Precious Metals, Battery Materials, Base Metals, and Building Materials. | Each 1 M00 GRU allocation carries five asset-class indices at `1.2` indexed units each before collateral adjustment. Physical assets apply the collateral adjustment factor `(0.9475^4) = ~0.80596628`, so each `1.2` indexed allocation corresponds to approximately `1.489` SKR-adjusted physical units. | +| `M0` GRU | Cash reserves, cash equivalents, sovereign and central bank-issued instruments, bonds, promissory notes, MTNs, and LTNs. | No LTV adjustment is applied inside the accounting framework because qualifying instruments are supported by underlying cash reserves maintained at a `5:1` reserve coverage ratio. Portfolio eligibility is limited to seasoned AAA-rated and top-tier institutional paper, including qualifying emerging-market sovereign and quasi-sovereign issuances that satisfy internal credit, liquidity, and reserve-grade standards. | +| `M1` GRU | Transactional settlement layer that dynamically bridges and rebalances the M00 and M0 reserve layers. | Settlement exposure may not exceed `25:1` relative to available M00 GRU reserves or `5:1` relative to available M0 GRU reserves. When utilization approaches thresholds, execution must be segmented into sequential tranches so settlement remains collateralized within available M00 and M0 reserve capacity. | + +### MetaMask Money rail and mUSD — internal GRU alignment (narrative) + +Use this subsection for **DBIS / provider-facing narrative consistency** only. It does **not** assert that MetaMask has officially bound product names (`Money`, `mUSD`, “cash”) to these contracts; when MetaMask publishes CAIP-19 IDs, token-list rows, or controller mappings, **reconcile this table to their identifiers** before any external claim. + +| External / wallet concept | GRU / DBIS interpretation | On-chain / transport anchor | +|----------------------------|---------------------------|-----------------------------| +| **MetaMask Money rail** | Wallet UX and balance/rate surfaces for a **cash-like** segment, sitting above ordinary “crypto” accounts. Aligns narratively with **GRU** as the **monetary-policy and settlement framing** (M0/M1 roles in the table above), not as a substitute for reserve evidence or Chain 138 system-of-record duties. | No single hub contract; depends on MetaMask Money account + balance service implementation. | +| **mUSD** (MetaMask product denomination, *internal mapping*) | **ISO-4217 USD–compliant** GRU family on the hub, and **wrapped transport** off the hub. Same **economic denomination** as compliant USD on Chain 138; off-hub mirrors are **cW\*** transports, not Circle-issued USDC. | **Chain 138 (hub):** primary settlement token **`cUSDC`** at `0xf22258f57794CC8E06237084b353Ab30fFfa640b` (6 decimals) — PMM and liquidity rail per canonical token config. **GRU v2 / staged x402 face:** **`cUSDC_V2`** at `0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d` on Chain 138 (`familySymbol: cUSDC`, `preferredForX402`, liquidity still on `cUSDC` until cutover — see `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts`). **Non–Chain 138 (wrapped):** **`cWUSDC`** on Ethereum Mainnet at `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` (6 decimals) — same submission and CAIP discipline as the rest of this matrix; do not mix Chain 138 `cUSDC` activity with Mainnet `cWUSDC` provider stats. | + +**Operational rule:** treat **mUSD ↔ cUSDC / cUSDC_V2** as **hub-native GRU USD**, and **mUSD ↔ cWUSDC** as **public-network wrapped GRU USD transport** (`cW*`), always with the disclaimers in [GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](../GRU_RISK_AND_DISCLOSURE_LANGUAGE.md) and the non-crypto positioning in this document. + +**Cross-references (discoverability):** + +- [METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md](METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md) — EIP-747 and legacy contract-metadata constraints; links back here for Money/mUSD narrative. +- [../GRU_PROVIDER_POSITIONING_PACKET.md](../GRU_PROVIDER_POSITIONING_PACKET.md) — provider-facing GRU / Chain 138 / `cW*` framing. +- [../CWUSDC_PROVIDER_SUBMISSION_PACKET.md](../CWUSDC_PROVIDER_SUBMISSION_PACKET.md) — Mainnet `cWUSDC` identity and evidence table. +- Canonical tokens and Explorer alignment: [../../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md](../../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) (hub `cUSDC` / supply), [../../11-references/CONTRACT_ADDRESSES_REFERENCE.md](../../11-references/CONTRACT_ADDRESSES_REFERENCE.md), [../../11-references/ADDRESS_MATRIX_AND_STATUS.md](../../11-references/ADDRESS_MATRIX_AND_STATUS.md). +- Hub vs v2 face token: `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` (`cUSDC`, `cUSDC_V2`). +- DefiLlama DODO breakdown when **`dfio_meta_main` shows `0.00`:** [../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md](../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md). +- **Full replay and maintenance (master reference):** [../../00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](../../00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) — MetaMask Money/mUSD steps, DefiLlama fork/PR checklist, PR **#19198** lifecycle, JSON touchpoints. + +Provider submissions should keep the participant-language broad enough for retail users, commercial enterprises, banking professionals, sovereign institutions, and macroeconomic reviewers: GRU defines the monetary-policy framework; Chain 138 provides the auditable distributed-ledger environment where fiat currencies, commodities, securities, reserve positions, and settlement states can be synchronized without relying on speculative token mechanics. + +### Canonical Positioning Packets + +| Packet | Use | +|---|---| +| [../GRU_PROVIDER_POSITIONING_PACKET.md](../GRU_PROVIDER_POSITIONING_PACKET.md) | Short provider-facing narrative and language rules for GRU, Chain 138, c*, and cW*. | +| [../GRU_RESERVE_LAYER_EXPLAINER.md](../GRU_RESERVE_LAYER_EXPLAINER.md) | M00, M0, and M1 reserve-layer explanation with collateral adjustment and utilization constraints. | +| [../CHAIN138_SYSTEM_OF_RECORD_MODEL.md](../CHAIN138_SYSTEM_OF_RECORD_MODEL.md) | Boundary model for what Chain 138 records, verifies, and does not replace. | +| [../GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md](../GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md) | Defensive FAQ for providers, wallet users, and institutional reviewers. | +| [../GRU_RISK_AND_DISCLOSURE_LANGUAGE.md](../GRU_RISK_AND_DISCLOSURE_LANGUAGE.md) | Reusable non-affiliation, price, liquidity, reserve evidence, and utilization disclaimers. | +| [../RESERVE_VERIFICATION_EVIDENCE_INDEX.md](../RESERVE_VERIFICATION_EVIDENCE_INDEX.md) | Evidence map for reserve, supply, collateral, settlement, and provider-acceptance artifacts. | +| [../CWUSDC_PROVIDER_SUBMISSION_PACKET.md](../CWUSDC_PROVIDER_SUBMISSION_PACKET.md) | Consolidated cross-provider cWUSDC identity, evidence, caveats, and submission checklist. | + +## Bottom Line + +The repo can make wallet metadata, token-list metadata, logo hosting, report APIs, supply proof, and market-cap fields correct. The repo cannot force MetaMask to show fiat prices for custom assets. MetaMask price rendering depends on MetaMask/Consensys internals and upstream asset/price providers after they ingest the asset. + +Use this document as the external submission tracker. Treat each external provider status as one of: + +- `repo_ready`: our endpoint/package is ready. +- `submitted`: operator submitted through a form, issue, PR, or support ticket. +- `accepted`: provider has accepted and displays the asset. +- `blocked`: provider requires liquidity, volume, chain support, profile verification, or manual review that is not yet satisfied. + +## Live Repo-Controlled Sources + +| Surface | URL / file | Purpose | Current state | +|---|---|---|---| +| Chain 138 MetaMask payload | `https://explorer.d-bis.org/api/v1/config/metamask?chainId=138` | `wallet_addEthereumChain` + EIP-747 `wallet_watchAsset` payloads | `repo_ready`; 31 watch assets | +| Chain 138 token list | `https://explorer.d-bis.org/api/v1/report/token-list?chainId=138` | Uniswap token-list compatible Chain 138 list | `repo_ready` | +| All report | `https://explorer.d-bis.org/api/v1/report/all` | Internal plus external reporting packet across chains | `repo_ready` | +| CoinGecko report | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | CoinGecko-shaped token, pool, supply, logo fields | `repo_ready` | +| CMC report | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | CMC-shaped token, pool, supply, logo fields | `repo_ready` | +| Chain 138 logo | `https://explorer.d-bis.org/api/v1/report/logo/chain-138` | First `iconUrls` entry for Chain 138 | `repo_ready` | +| Token logos | `https://explorer.d-bis.org/api/v1/report/logo/` | DBIS-hosted token art for EIP-747 and reports | `repo_ready` | +| Static Chain 138 token list | `token-lists/lists/dbis-138.tokenlist.json` | Repo-pinned token-list artifact | `repo_ready` | +| Etherscan profile packet | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | Etherscan cWUSDC profile source | `repo_ready` | +| cWUSDC tracker packet | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | Tracker-facing cWUSDC facts | `repo_ready` | + +## External Repositories and Provider Paths + +| Priority | Provider / repo | What it controls | Submission method | Required package | Current status / caveat | +|---:|---|---|---|---|---| +| 1 | CoinGecko | Public token metadata, token image, supply, price/market data, downstream wallet/tracker discovery | Listing / update form; API and support review | Website, contract, logo, supply proof, public LP evidence, caveats | `repo_ready`; acceptance external | +| 2 | CoinMarketCap | Public token metadata, supply, market cap, DEX token/pool data | Listing / update form; CMC DEX APIs | Same as CoinGecko plus CMC report endpoint | `repo_ready`; acceptance external | +| 3 | Etherscan token profile | Ethereum token logo/profile/socials and often Etherscan display quality | Etherscan token profile update flow | `CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md`, logo, website, contact | `repo_ready`; approval external | +| 4 | GeckoTerminal | DEX pair metadata and on-chain pool discoverability | Pool/profile request or organic indexing | Real public pools, token metadata, logo/social links | Blocked unless public indexed pools remain visible and liquid | +| 5 | DexScreener | DEX pair page metadata/profile | DexScreener profile update/request | Pair URLs, token logo, socials, website | Blocked unless DEX pairs are indexed and accepted | +| 6 | MetaMask EIP-747 | User-approved custom-token display | Our dApp calls `wallet_watchAsset` | `config/metamask` endpoint and live logos | `repo_ready`; user must approve; local cache may require remove/re-add | +| 7 | MetaMask Snaps allowlist | Stable MetaMask npm Snap install eligibility | Snaps Directory submission / version update | npm package, manifest, security posture, published version | External gate; `npm:chain138-open-snap@0.2.3` is blocked until allowlisted | +| 8 | MetaMask contract metadata | Legacy token logo/name mapping in `MetaMask/contract-metadata` | GitHub PR if accepted | CAIP-19 metadata and logo | Low probability; repo states it is effectively frozen and recommends EIP-747 | +| 9 | MetaMask / assets controllers | Token detection/rates implementation | Not a normal token submission path | N/A | Information source only; do not expect PR acceptance for a single token listing | +| 10 | MetaMask multichain API client | Scoped wallet sessions and RPC invocation by CAIP-2 scope | dApp integration, not provider submission | `@metamask/multichain-api-client`, scopes like `eip155:1` / `eip155:138` | Useful for wallet session/RPC hygiene; does not provide token price metadata | +| 11 | Chainlist / ethereum-lists/chains | EVM chain metadata used by Chainlist-like surfaces | GitHub PR to `ethereum-lists/chains` | Chain JSON, RPCs, explorers, icon | Useful for Chain 138 discoverability; not token prices | +| 12 | Trust Wallet assets | Token logos for Trust Wallet and some ecosystem consumers | GitHub PR to `trustwallet/assets` | Per-chain token folder, `logo.png`, `info.json` where required | Useful for recognized chains/tokens; custom Chain 138 support may be limited | +| 13 | Token Lists ecosystem | Importable token lists for wallets/dApps | Host token list and submit/share URL | `token-lists/lists/dbis-138.tokenlist.json` and live endpoint | `repo_ready`; adoption per wallet/dApp | +| 14 | Uniswap token-list / app ecosystem | Token-list display in Uniswap-like UIs | Token-list import / provider ingestion | Public token-list URL and logo URLs | Useful metadata path; does not guarantee default-list inclusion | +| 15 | 0x / swap API providers | Token quotes/routes where supported | Provider support/listing request | Verified contracts, liquidity, token metadata | Needs supported chain/pools; not a pure metadata fix | +| 16 | DeFiLlama / DefiLlama Yields / adapters | Public protocol/TVL context | GitHub adapter PR or listing request | Protocol docs, contracts, pool data | **TVL path:** `dfio_meta_main` + DODO — **open upstream [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** (fork [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters)); if UI shows **`dfio_meta_main` 0.00** while other chains sum, see [../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md](../../11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md); **scope:** [../defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md](../defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md), [config/defillama-chain138-touchpoints.json](../../../config/defillama-chain138-touchpoints.json); optional dimension/yield/peg servers per [docs.llama.fi metrics](https://docs.llama.fi/) | +| 17 | Moralis / Alchemy / QuickNode token APIs | Third-party token metadata and balances | Provider support ticket/API metadata ingestion | Token list, logo, contracts, chain support | Optional; provider-specific | +| 18 | DEXTools / Birdeye / other DEX terminals | Pair metadata and charting | Provider request or organic pool indexing | Pair URLs, liquidity, token profile | Optional; depends on indexed pools and chain support | + +## Current cWUSDC Submission Facts + +| Field | Value | +|---|---| +| Token | `cWUSDC` | +| Name | `Wrapped cUSDC` | +| Ethereum Mainnet address | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Decimals | `6` | +| Logo | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| CoinGecko report | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | +| CMC report | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | +| All report | `https://explorer.d-bis.org/api/v1/report/all` | +| Supply proof source | `repo-supply-proof-catalog` | +| Tracker caveat | Public tracker acceptance is external and not implied by the API response | + +Live check command: + +```bash +curl -fsS 'https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1' \ + | jq '.tokens[] | select(.symbol=="cWUSDC") | {symbol,contract_address,logo_uri,total_supply,circulating_supply,market_cap:(.market_data.market_cap // null),supply_proof_provenance,tracker_caveats}' +``` + +## MetaMask-Specific Interpretation + +MetaMask has three separate layers that are easy to confuse: + +| Layer | What it affects | What we can do | +|---|---|---| +| Custom network metadata | Network name, RPC, explorer, native currency, possible chain icon | Supply `wallet_addEthereumChain` payload with Chain 138 logo in `iconUrls` | +| Watched asset metadata | Token address, symbol, decimals, image shown after user approval | Supply EIP-747 `wallet_watchAsset` payload with correct `image` | +| Fiat price rendering | Token USD value in MetaMask UI | Submit to external trackers/providers; cannot force from our endpoint | + +MetaMask token auto-detection is not a Chain 138 guarantee. MetaMask documents enhanced token detection for selected supported networks and says it uses aggregated community token lists rather than one proprietary accepted-token list. For Chain 138, EIP-747 remains the practical repo-controlled path. + +## MetaMask AssetsController Implications + +MetaMask's `AssetsController` confirms that balance, token metadata, and price are separate data paths. A token can have a visible balance while still missing logo metadata and USD price. + +| AssetsController layer | What it means for DBIS assets | Repo response | +|---|---|---| +| Balance data sources | MetaMask can detect a held token balance through backend, Accounts API, Snap, or RPC data sources. | Do not treat visible balance as proof that metadata or price providers accepted the asset. | +| Detection middleware | Assets can be marked as detected before complete metadata exists. | A fallback glyph such as `C` means the asset exists in wallet state but still needs metadata enrichment. | +| Token metadata data source | Metadata includes symbol, name, decimals, image, spam flag, and verification status. | Keep CAIP-19-addressable token facts and logo URLs stable, HTTPS, and submission-ready. | +| Price data source | USD price, market cap, volume, and 24h change arrive through a separate price path. | Submit to CoinGecko, CMC, Etherscan, DEX terminals, and provider channels; EIP-747 alone cannot force USD display. | +| CAIP-19 asset IDs | Assets are keyed like `eip155:1/erc20:
` and native ETH as `eip155:1/slip44:60`. | Use exact CAIP-19 IDs in provider packets and support requests. | +| Force refresh | MetaMask can refresh balance, metadata, and price together only from sources it trusts. | The explorer `Refresh Mainnet cWUSDC` button re-issues EIP-747 metadata; provider-side price still waits on external ingestion. | + +Relevant Mainnet cWUSDC CAIP-19: + +```text +eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +``` + +Operational conclusion: the Mainnet screenshot with a visible `56.71M cWUSDC` balance but no logo/price is consistent with successful balance discovery and incomplete metadata/price enrichment. The fix path is not a contract change. It is provider ingestion plus local EIP-747 refresh for the image. + +### `AssetsController:getAssets` Reading + +MetaMask's `AssetsController:getAssets` returns a per-account, per-asset map keyed by CAIP-19 asset ID. Each returned asset can include: + +- `balance` +- `metadata` +- `price` +- `fiatValue` + +The important operator detail is that `fiatValue` is computed from the human-readable balance amount multiplied by `price.price`. Therefore, a visible token balance with a dash for USD value means the wallet has a balance entry but the price entry is missing or zero. + +For cWUSDC, the desired complete return shape is conceptually: + +```text +assets[accountId]["eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a"] + balance.amount = visible cWUSDC balance + metadata.image = DBIS cWUSDC/cUSDC logo URL + price.price = accepted USD price from MetaMask provider path + fiatValue = balance.amount * price.price +``` + +This confirms three separate acceptance checks: + +| Check | What proves it | Current meaning for screenshot | +|---|---|---| +| Balance | cWUSDC amount appears in wallet | Passing | +| Metadata | DBIS logo replaces fallback `C` glyph | Not yet passing in MetaMask global metadata; can be locally refreshed with EIP-747 | +| Price | USD value appears under the token | Not yet passing; needs provider/tracker ingestion | + +When testing a wallet refresh, the closest MetaMask-side behavior to request is a force refresh with `dataTypes: ['balance', 'metadata', 'price']`. From our dApp surface, we cannot call MetaMask's internal messenger action directly; we can only provide the correct public inputs through EIP-747, token-list/report APIs, and external provider submissions. + +### `AssetsController:priceChanged` Reading + +MetaMask's `AssetsController:priceChanged` event is emitted when asset prices update. Its payload is a CAIP-19 keyed price map: + +```text +prices: Record +``` + +For cWUSDC to display a native USD value in MetaMask, the price payload needs an entry equivalent to: + +```text +prices["eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a"] = { + price: 1, + priceChange24h: , + lastUpdated: , + marketCap: , + volume24h: +} +``` + +If MetaMask never emits or stores a `priceChanged` entry for that CAIP-19 asset ID, the UI can show the cWUSDC balance while continuing to show a dash for fiat value. This is why the repo report APIs include `marketCapUsd`, `totalSupply`, `circulatingSupply`, supply-proof provenance, and tracker caveats: those fields are the submission package needed for external providers to produce the price payload MetaMask consumes. + +Practical implication: a correct local logo refresh and a visible on-chain balance do not prove price readiness. Price readiness is proven only when MetaMask's provider path recognizes the CAIP-19 asset and returns a nonzero `price.price` with a current `lastUpdated` timestamp. + +### Identifier Types Reading + +MetaMask uses CAIP-19 asset identifiers and CAIP-2 chain identifiers. This means submissions, support tickets, and local validation must avoid symbol-only references. + +| Identifier | Meaning | cWUSDC value | +|---|---|---| +| CAIP-2 chain ID | Chain identity | `eip155:1` | +| CAIP-19 asset ID | Full chain plus asset identity | `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Asset namespace | Token standard namespace | `erc20` | +| Asset reference | Contract address | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Native ETH comparison | Native asset ID format | `eip155:1/slip44:60` | + +Operational requirements: + +- Every MetaMask-facing cWUSDC provider request must include the CAIP-19 ID, not only `cWUSDC`. +- All price, metadata, and balance acceptance checks must be keyed to `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. +- Token-list and EIP-747 payloads still use `chainId: 1` plus the ERC-20 contract address, but provider tickets should include both the token-list form and the CAIP-19 form. +- Chain 138 source `cUSDC` must stay separate from Mainnet `cWUSDC`; do not submit Chain 138 transfer totals as Ethereum Mainnet `cWUSDC` activity. + +### For Other Controllers Reading + +MetaMask's example for other controllers sums portfolio/account value by reading every asset's `fiatValue` and adding it to the total. This matters for large cWUSDC balances: + +```text +accountValue = sum(asset.fiatValue for each fungible asset) +asset.fiatValue = balance.amount * price.price +``` + +If cWUSDC has a visible balance but no accepted price entry, then cWUSDC contributes `0` or no reliable value to MetaMask's account-value calculation. That is why the Mainnet screenshot can show a large `cWUSDC` unit balance while the portfolio total ignores it. + +Acceptance target: + +| Portfolio field | Required cWUSDC condition | +|---|---| +| Token unit balance | `assetsBalance[accountId][cWUSDC_CAIP19].amount` exists | +| Token display row | `assetsInfo[cWUSDC_CAIP19]` has symbol/name/decimals/image | +| Token USD row | `assetsPrice[cWUSDC_CAIP19].price` exists and is current | +| Portfolio/account value | `fiatValue` is computed and included in account-value sums | + +Repo implication: tracker submissions must emphasize that cWUSDC is currently visible as a balance but needs provider-side `AssetPrice` acceptance before MetaMask account-value calculations can include it. + +### Middlewares Enrichment Reading + +MetaMask documents the enrichment order after primary balance fetch: + +```text +DetectionMiddleware -> TokenDataSource -> PriceDataSource +``` + +For cWUSDC, that maps to this acceptance ladder: + +| Enrichment step | cWUSDC pass condition | Screenshot symptom if missing | +|---|---|---| +| DetectionMiddleware | Wallet sees `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` as a held asset | Token absent entirely | +| TokenDataSource | Metadata provider resolves symbol, name, decimals, image, spam status, and verification status | Fallback `C` glyph, weak/partial token row | +| PriceDataSource | Price provider resolves `price`, `lastUpdated`, optional `marketCap`, and optional `volume24h` | Dash for USD value and no portfolio contribution | + +Current Mainnet screenshot reading: + +```text +DetectionMiddleware: passing +TokenDataSource: partially failing or not globally accepted +PriceDataSource: failing or not accepted +``` + +Repo implication: the next external work is not another balance action. It is metadata and price-provider proof: Etherscan token profile, tracker submissions, DEX pair pages, CAIP-19 identifiers, logo URLs, supply proof, market cap fields, and caveats. + +## MetaMask Multichain API Client Implications + +`MetaMask/multichain-api-client` is a TypeScript client for scoped wallet sessions and RPC invocation. It uses CAIP-2 scopes such as `eip155:1`, not loose network names. It is useful for cleaner wallet session plumbing, but it is not an asset metadata or price-provider submission path. + +Example shape from the package: + +```text +createSession({ requiredScopes: ['eip155:1'] }) +invokeMethod({ scope: 'eip155:1', request: { method: 'eth_call', ... } }) +revokeSession() +``` + +Repo interpretation: + +| Capability | Useful for DBIS | Not useful for | +|---|---|---| +| Scoped sessions | Explicit Ethereum Mainnet and Chain 138 wallet scopes | Forcing MetaMask to accept cWUSDC metadata | +| RPC invocation | Typed wallet/RPC calls under `eip155:1` or `eip155:138` | Creating `AssetsController:priceChanged` entries | +| Transport timeout control | Avoiding premature timeouts when wallet confirmation is required | Fixing provider-side token price absence | +| Custom RPC typing | Adding project-specific typed RPC methods if needed | Replacing EIP-747 token watch flows | +| Error handling | Separating transport errors from wallet/API errors | Bypassing MetaMask Snap allowlists | + +Possible future wallet-page upgrade: + +```text +Use multichain-api-client for scoped wallet sessions: + eip155:1 -> Ethereum Mainnet cWUSDC refresh / proof checks + eip155:138 -> Chain 138 add-chain and c* watch-asset workflow + +Keep EIP-747 for wallet_watchAsset. +Keep provider submissions for logo/price enrichment. +``` + +Operational conclusion: this repo can use the multichain API client to make the wallet UX more explicit and typed across Mainnet and Chain 138. It does not change the cWUSDC listing blocker: MetaMask still needs metadata and price enrichment for `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. + +## Mainnet cWUSDC Screenshot Interpretation + +If Ethereum Mainnet MetaMask shows `cWUSDC` with a fallback `C` glyph, no fiat value, and only the Ethereum network badge, the wallet has detected or imported the token balance but has not resolved the Mainnet token through MetaMask's global asset metadata and price providers. + +Repo-side status for Mainnet cWUSDC is ready: + +| Check | Expected value | +|---|---| +| Chain | Ethereum Mainnet, `chainId=1` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Token-list URL | `https://explorer.d-bis.org/api/v1/report/token-list?chainId=1` | +| Logo URL | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| CoinGecko report | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | +| CMC report | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | + +Operator interpretation: + +- `wallet_watchAsset` can refresh the custom-asset image when the user removes/re-adds or re-approves the token. +- The explorer wallet page includes a `Refresh Mainnet cWUSDC` action that switches to Ethereum Mainnet and re-issues the EIP-747 request with the DBIS image URL. +- The fallback glyph is still expected until Etherscan, CoinGecko, CMC, and/or MetaMask's internal providers ingest and accept the Mainnet asset metadata. +- The missing fiat value is not fixed by EIP-747; it requires external tracker/provider acceptance and enough public evidence for those providers. + +## Submission Order + +1. Keep repo endpoints correct and live. +2. Submit/update Etherscan cWUSDC token profile. +3. Submit cWUSDC to CoinGecko with supply proof, logo, website, and liquidity caveats. +4. Submit cWUSDC to CMC with the same facts and CMC report endpoint. +5. Submit/update GeckoTerminal and DexScreener pair/profile metadata for any visible public pools. +6. Submit Chain 138 metadata to `ethereum-lists/chains` / Chainlist path if not already accepted. +7. Submit token/logo metadata to wallet/community registries where they accept custom-chain assets. +8. Re-run EIP-747 wallet flow and document MetaMask before/after screenshots. +9. Track every external acceptance or rejection in a status report under `reports/status/` (e.g. `cwusdc-external-trackers-live-latest.md`, `*etherscan*`, operator JSON summaries). + +## Operator-generated status artifacts + +Search or add dated evidence under **`reports/status/`** after each submission batch; link PRs/tickets in commit messages. This matrix stays **canonical for intent**; file-based reports hold **evidence**. + +## Acceptance Evidence to Capture + +For each provider: + +- submission date and account/email used; +- ticket, PR, issue, or form confirmation ID; +- exact submitted URLs and token address; +- provider response; +- approval screenshot or public profile URL; +- any rejection reason; +- next required blocker such as liquidity, volume, contract verification, or chain support. + +## Useful References + +- MetaMask contract metadata: `https://github.com/MetaMask/contract-metadata` +- MetaMask extension: `https://github.com/MetaMask/metamask-extension` +- MetaMask core assets controllers: `https://github.com/MetaMask/core/tree/main/packages/assets-controllers` +- EIP-747 wallet watchAsset: `https://eips.ethereum.org/EIPS/eip-747` +- MetaMask token display help: `https://support.metamask.io/manage-crypto/tokens/how-to-display-tokens-in-metamask` +- Chain metadata registry: `https://github.com/ethereum-lists/chains` +- Trust Wallet assets: `https://github.com/trustwallet/assets` +- CoinGecko API docs: `https://docs.coingecko.com/` +- CoinMarketCap API docs: `https://coinmarketcap.com/api/documentation/` +- Token Lists standard: `https://tokenlists.org/` diff --git a/docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md b/docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md new file mode 100644 index 00000000..de77cb8a --- /dev/null +++ b/docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md @@ -0,0 +1,346 @@ +# MetaMask cWUSDC API Feed Spider Web Research + +Status: research and implementation map for how Mainnet `cWUSDC` can move from "visible balance with fallback glyph" to fully enriched wallet, explorer, tracker, and portfolio value display. + +Canonical Mainnet asset identity: + +```text +CAIP-19: eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +Chain: eip155:1 +Symbol: cWUSDC +Name: Wrapped cUSDC +Decimals: 6 +Logo: https://explorer.d-bis.org/api/v1/report/logo/cUSDC +``` + +## Core Finding + +MetaMask's asset stack separates balance, token metadata, price, and fiat value. The current Mainnet screenshot proves that balance detection is working. It does not prove that MetaMask's metadata source or price source has accepted the asset. + +```text +visible cWUSDC units -> balance path is working +fallback C glyph -> metadata/image path is incomplete +dash for USD value -> price path is incomplete +portfolio omission -> fiatValue cannot be computed +``` + +The provider spider web is therefore not one API. It is a chain of independent systems: + +```text +On-chain ERC-20 state + -> explorer/indexer token row + -> token metadata provider + -> DEX pair/indexer evidence + -> price provider + -> wallet asset controller + -> portfolio/account value controller +``` + +## Provider Classes + +| Provider class | Examples | Controls | Does not control | +|---|---|---|---| +| Wallet local prompt | EIP-747 `wallet_watchAsset` | User-approved local symbol, decimals, image | Global MetaMask token acceptance or price | +| Wallet asset controller | MetaMask `AssetsController` | How MetaMask joins balance, metadata, price, fiat value | External acceptance of cWUSDC | +| Explorer profile | Etherscan | Token logo/profile on Etherscan and downstream trust evidence | Wallet price by itself | +| Market tracker | CoinGecko, CoinMarketCap | Metadata, market cap, supply, price, volume, API discovery | Immediate wallet refresh guarantees | +| DEX terminal | GeckoTerminal, DexScreener, CMC DexScan, DEXTools, Birdeye | Pair visibility, liquidity/volume evidence, chart pages | Audited circulating supply | +| Data API provider | Alchemy, Moralis, thirdweb, QuickNode, Covalent, Zerion, SimpleHash | API-accessible balances, metadata, prices, search | Listing on MetaMask unless MetaMask consumes them | +| Oracle network | Chainlink Data Feeds/Data Streams/DataLink | Onchain or institutional price publication | Wallet UI enrichment unless wallet consumes it | +| Chain registry | Chainlist / ethereum-lists/chains | Chain metadata/RPC/explorer discoverability | Token price | +| Token-list registry | Token Lists, Trust Wallet assets, Uniswap token-list imports | Logo and token metadata for apps that ingest lists | MetaMask global price | + +## Current Repo-Controlled Inputs + +| Input | Status | URL / path | +|---|---|---| +| Mainnet cWUSDC token list | Ready | `https://explorer.d-bis.org/api/v1/report/token-list?chainId=1` | +| Chain 138 EIP-747 payload | Ready | `https://explorer.d-bis.org/api/v1/config/metamask?chainId=138` | +| cWUSDC logo | Ready | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| CoinGecko report | Ready | `https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1` | +| CMC report | Ready | `https://explorer.d-bis.org/api/v1/report/cmc?chainId=1` | +| All report | Ready | `https://explorer.d-bis.org/api/v1/report/all` | +| Supply proof | Ready | `reports/status/mainnet-cwusdc-supply-proof-20260508.json` | +| Etherscan profile packet | Ready | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| Wallet local refresh | Ready | `https://explorer.d-bis.org/wallet` -> `Refresh Mainnet cWUSDC` | + +Root `.env` key coverage observed on this workstation: + +| Key family | Present at root | Meaning | +|---|---:|---| +| `ETHERSCAN_API_KEY` | yes | Can query/verify Etherscan paths where scripts support it | +| `COINGECKO_API_KEY` | yes | Can query CoinGecko with configured rate limits | +| `COINMARKETCAP_API_KEY` / `CMC_*` | no | CMC API probes need key or manual submission | +| `ALCHEMY_*` | no | Alchemy price-by-address probes need key | +| `MORALIS_*` | no | Moralis token/price/search probes need key | +| `THIRDWEB_*` | no at root | thirdweb token/Insight probes need key/client in the relevant app env | +| `QUICKNODE_*` | no | QuickNode token API probes need account/API key | +| `COVALENT_*` | no | Covalent balances/prices need key | +| `ZERION_*` | no | Zerion portfolio/asset APIs need key | +| `SIMPLEHASH_*` | no | SimpleHash fungible/metadata probes need key | + +## Provider-by-Provider Map + +### MetaMask + +Source URLs: + +- `https://github.com/MetaMask/core/blob/main/packages/assets-controller/src/README.md` +- `https://support.metamask.io/develop/how-to-add-a-token-logo/` +- `https://github.com/MetaMask/multichain-api-client` + +What matters: + +- MetaMask encourages EIP-747 for making tokens visible to users. +- MetaMask price display comes from several upstream sources and is best influenced by getting listed on prominent DEXs/CEXs and data providers. +- `AssetsController:getAssets` returns balance, metadata, price, and fiat value. +- `AssetsController:priceChanged` is keyed by CAIP-19 asset ID. +- `multichain-api-client` helps dApps manage scoped wallet sessions/RPC calls; it does not create metadata or price acceptance. + +Action: + +1. Keep EIP-747 local refresh for Mainnet cWUSDC and Chain 138 c* assets. +2. Use CAIP-19 in every support ticket and provider submission. +3. Do not claim MetaMask price readiness until the wallet shows a nonzero price and computed fiat value. + +### Etherscan + +Source URL: + +- `https://info.etherscan.com/how-to-update-token-information-on-token-page/` + +What matters: + +- Etherscan token profile updates are account/form driven after token ownership verification. +- Etherscan profile/logo acceptance is strong downstream evidence for other providers. + +Action: + +1. Submit/update token info for `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. +2. Use `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md`. +3. Capture ticket/form confirmation and final screenshot. + +### CoinGecko + +Source URLs: + +- `https://docs.coingecko.com/reference/endpoint-overview` +- `https://support.coingecko.com/hc/en-us/sections/32146983631641-Token-Coin-Listing` + +What matters: + +- CoinGecko exposes price, token price by contract, metadata, tickers, market cap, volume, circulating supply, and total supply endpoints after asset support. +- CoinGecko acceptance is one of the highest-leverage paths for wallet price propagation. + +Action: + +1. Submit Mainnet cWUSDC with the exact Mainnet contract, not only Chain 138 cUSDC. +2. Include supply proof, logo, website, Etherscan profile packet, DEX pair evidence, and caveats. +3. After submission, test `/simple/token_price/ethereum` and `/coins/{id}` once an ID exists. + +### CoinMarketCap + +Source URLs: + +- `https://support.coinmarketcap.com/hc/en-us/articles/360043533632-Cryptoasset-Listings` +- `https://coinmarketcap.com/api/documentation/` + +What matters: + +- CMC has separate flows for new assets, market pairs, supply updates, swaps, and info updates. +- CMC API exposes listings, quotes, metadata, DEX data, market pairs, and exchange proof-of-reserves categories. +- DexScan visibility is useful evidence but is not the same as a full tracked listing. + +Action: + +1. Submit cWUSDC as a cryptoasset listing/update using the CMC report endpoint. +2. Submit visible Mainnet DEX pairs as market-pair evidence. +3. Track CMC DexScan verification separately from full CMC listing. + +### GeckoTerminal and DexScreener + +What matters: + +- These providers are pair-driven. They generally need an indexed DEX pair with at least some liquidity and activity. +- They are useful as public trade/pair evidence for CoinGecko/CMC and wallets. + +Action: + +1. Keep public cWUSDC/USDC pair addresses, reserves, tx hashes, and screenshots current. +2. Do not overstate depth; report actual reserves and activity. +3. Submit profile/logo/pair metadata where each provider allows. + +### Alchemy + +Source URLs: + +- `https://www.alchemy.com/docs/data/prices-api/prices-api-endpoints/prices-api-endpoints/get-token-prices-by-address` +- `https://www.alchemy.com/docs/reference/get-token-prices-by-symbol` + +What matters: + +- Alchemy Prices API can query token prices by symbol or by network/address pairs. +- The by-address route is the correct cWUSDC probe because `cWUSDC` is not globally unique. +- Successful API response may still contain an empty/missing price for unknown assets. + +Action: + +1. Add an `ALCHEMY_API_KEY` secret if API probes are desired. +2. Probe: + +```text +POST /prices/v1/{apiKey}/tokens/by-address +network: eth-mainnet +address: 0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a +``` + +3. Record missing-price response as provider gap evidence. + +### Moralis + +Source URLs: + +- `https://docs.moralis.com/web3-data-api/evm/reference/token-api` +- `https://docs.moralis.com/web3-data-api/evm/token-search` +- `https://moralis.com/api/token/` + +What matters: + +- Moralis Token API covers balances, transfers, prices, holders, liquidity, swaps, metadata, and token search. +- It can return real-time prices and net worth when a token is covered. +- Token search can reveal whether cWUSDC is discoverable by address/name/symbol. + +Action: + +1. Add a `MORALIS_API_KEY` secret if provider probes are desired. +2. Probe token metadata, token price, token search, and pair/liquidity endpoints for Mainnet cWUSDC. +3. Record whether `logo`, `usdPrice`, `marketCap`, and `isVerifiedContract` appear. + +### thirdweb + +Source URLs: + +- `https://portal.thirdweb.com/bridge/tokens` +- `https://github.com/thirdweb-dev/js` + +What matters: + +- thirdweb Bridge token utility returns token metadata and `priceUsd` for supported tokens. +- thirdweb Insight can also be relevant for indexed chain/pair data where configured. +- thirdweb is an application/API consumer path, not a direct MetaMask provider path. + +Action: + +1. Confirm whether relevant `THIRDWEB_SECRET_KEY` or `THIRDWEB_CLIENT_ID` exists in the app/service env that will run probes. +2. Query `Bridge.tokens({ chainId: 1, tokenAddress: cWUSDC })`. +3. If missing, treat as API-provider gap evidence and include DEX/tracker submission links. + +### QuickNode + +Source URL: + +- `https://www.quicknode.com/token-api/` + +What matters: + +- QuickNode Token API can return ERC-20 metadata, balances, transfers, and token details. +- It is primarily an API consumer/provider path, not a public listing authority. + +Action: + +1. Add QuickNode token API key if this path is needed. +2. Probe metadata and price support for Mainnet cWUSDC if available in the account product tier. + +### Chainlink + +Source URLs: + +- `https://chain.link/data-feeds` +- `https://data.chain.link/` + +What matters: + +- Chainlink Data Feeds aggregate data from premium data providers and independent nodes into onchain reports. +- Chainlink is excellent for onchain protocol pricing after feed creation, but it is not a direct MetaMask token-logo or wallet-price listing route. +- A new cWUSDC/USD feed would require enough credible market data and engagement with Chainlink/provider channels. + +Action: + +1. Do not position Chainlink as the immediate MetaMask fix. +2. Use Chainlink as an institutional/onchain oracle target after CoinGecko/CMC/DEX evidence is accepted. +3. If pursuing, prepare a feed request package with DEX/CEX venues, liquidity, volume, supply proof, and data-provider acceptance. + +### Covalent, Zerion, SimpleHash, Ankr, OKLink, Blockscout-class Indexers + +What matters: + +- These are secondary enrichment and portfolio APIs. +- They can improve ecosystem discoverability if they index cWUSDC correctly. +- Most require API keys, support tickets, or organic indexing from onchain activity and known token lists. + +Action: + +1. Create provider probes after primary Etherscan/CoinGecko/CMC submissions. +2. Use the same CAIP-19 identity and report endpoints. +3. Track each provider's response separately; do not assume one provider propagates to another. + +## Probe Matrix + +| Probe | Requires key | Expected passing result | +|---|---:|---| +| Etherscan token page/profile | no for public page; account for update | cWUSDC logo/profile visible on Etherscan | +| CoinGecko contract lookup | maybe no/pro key depending rate | cWUSDC returns coin ID, image, price, market cap | +| CoinGecko `/simple/token_price/ethereum` | maybe | cWUSDC contract returns `usd` | +| CMC listing/quotes | yes for API; form for listing | cWUSDC has CMC ID, quotes, market pairs | +| Alchemy price by address | yes | `eth-mainnet` + cWUSDC returns USD price | +| Moralis token search | yes | cWUSDC appears by contract with metadata/logo | +| Moralis token price | yes | cWUSDC returns `usdPrice` and pair source | +| thirdweb Bridge.tokens | client/secret | cWUSDC returns `iconUri` and `priceUsd` | +| GeckoTerminal pair page | no | cWUSDC/USDC pair page exists with reserves/activity | +| DexScreener pair search | no | cWUSDC pair appears in API/UI | +| Chainlink Data Feed | external engagement | cWUSDC/USD feed exists on `data.chain.link` | + +## Priority Order + +1. Etherscan profile/logo update for Mainnet cWUSDC. +2. CoinGecko Mainnet cWUSDC listing/update with exact contract and supply proof. +3. CMC listing/update plus DexScan pair/profile evidence. +4. GeckoTerminal/DexScreener/DEXTools/Birdeye pair metadata updates. +5. Provider probes: Alchemy, Moralis, thirdweb, QuickNode, Covalent, Zerion, SimpleHash. +6. Chainlist / chain registry for Chain 138 metadata discoverability. +7. Chainlink feed request only after public market-data providers have enough accepted evidence. + +## Submission Package Checklist + +Every provider packet should include: + +- CAIP-19: `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` +- Contract address and Etherscan URL +- Symbol/name/decimals +- Logo URL and static logo asset +- Website and token explainer +- Supply proof and circulating-supply caveats +- Market cap formula +- Public DEX pair addresses and tx hashes +- Liquidity/reserve caveats +- Chain 138 source cUSDC relationship, clearly separated from Mainnet cWUSDC activity +- Contact email/account used for submission +- Confirmation ID or ticket ID after submission + +## Non-Negotiable Interpretation + +Do not tell operators that MetaMask price can be forced by: + +- contract changes; +- adding a token list alone; +- EIP-747 alone; +- Chain 138 Snap alone; +- Chainlink alone; +- private/internal accounting rails; +- minted supply without public market-data acceptance. + +The only defensible statement is: + +```text +Repo metadata and proofs are ready. MetaMask-native logo and price require external metadata/price provider ingestion for the exact Mainnet cWUSDC CAIP-19 asset. +``` diff --git a/docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md b/docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md new file mode 100644 index 00000000..82e57465 --- /dev/null +++ b/docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md @@ -0,0 +1,193 @@ +# MetaMask EIP-747 and Contract Metadata Reference Packet + +Status: local summarized reference packet for Chain 138, GRU / GRU v2 `c*`, and public-network `cW*` wallet metadata. + +Sources ingested: + +- MetaMask contract metadata: `https://github.com/MetaMask/contract-metadata` +- EIP-747 wallet watchAsset: `https://eips.ethereum.org/EIPS/eip-747` +- MetaMask token display help: `https://support.metamask.io/manage-crypto/tokens/how-to-display-tokens-in-metamask` + +## Related repo documents + +- [METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) — canonical provider submission matrix, live report URLs, and **MetaMask Money rail / mUSD ↔ GRU hub (`cUSDC` / `cUSDC_V2`) and `cWUSDC` transport** narrative (internal alignment only until MetaMask publishes official bindings). +- [../GRU_PROVIDER_POSITIONING_PACKET.md](../GRU_PROVIDER_POSITIONING_PACKET.md), [../CWUSDC_PROVIDER_SUBMISSION_PACKET.md](../CWUSDC_PROVIDER_SUBMISSION_PACKET.md) — GRU positioning and Mainnet `cWUSDC` evidence packet. + +## Executive Interpretation + +For this repo, MetaMask has two usable paths: + +1. EIP-747 `wallet_watchAsset` is the primary practical path for Chain 138 and DBIS assets. +2. `MetaMask/contract-metadata` is useful as a legacy reference and possible low-probability PR path, but MetaMask states that the repository is effectively frozen and recommends EIP-747 for new tokens. + +MetaMask fiat prices are a separate upstream-provider problem. Correct EIP-747 metadata can add a token and its image, but it does not force MetaMask to show USD values. + +## Actionable Rules + +| Rule | Repo implication | +|---|---| +| Use EIP-747 for new or custom tokens | Keep `https://explorer.d-bis.org/api/v1/config/metamask?chainId=138` as the canonical wallet payload. | +| The wallet decides what "listed" means | Treat a `wallet_watchAsset` success as "request recognized", not guaranteed display or user approval. | +| The wallet may reject unsupported asset types | Keep `type: "ERC20"` for MetaMask compatibility in the current implementation. | +| The asset address must be valid for the wallet's chain context | Continue emitting Chain 138 addresses only for `chainId=138` payloads. | +| MetaMask validates contract-facing symbols | Keep V2 wallet symbols aligned to on-chain `symbol()`, with catalog symbols preserved in metadata. | +| The image URL must load successfully | Use DBIS HTTPS image endpoints and avoid localhost/private URLs. | +| Wallets may sanitize schemes/ports for SSRF protection | Keep image URLs HTTPS on `explorer.d-bis.org`; do not emit raw LAN, IPFS-only, or non-HTTPS images in wallet payloads. | +| Similar names/symbols can trigger phishing warnings | Use clear DBIS descriptions and avoid presenting cWUSDC as official Circle USDC. | +| Token detection is not universal | Do not assume Chain 138 autodetection; use add-chain and watch-asset flows. | +| Custom-token cache may persist | Version wallet image URLs and instruct users to remove/re-add stale tokens. | +| Snap allowlisting is external | Do not present the Chain 138 Snap as the production wallet path until the exact npm package/version is accepted by MetaMask. | +| CSP eval warnings must be separated from Snap allowlist failures | The production wallet flow should avoid repo-authored eval; a Snap allowlist rejection is not caused by CSP. | + +## Source-Specific Notes + +### MetaMask Contract Metadata + +MetaMask contract metadata maps EIP-55 checksum addresses / CAIP-19 asset IDs to names and logos. It supports CLI-driven asset additions using a CAIP identifier, token name, symbol, decimals, and image. + +Important constraints: + +- Repository is described by MetaMask as effectively frozen. +- New-token developers are directed toward EIP-747. +- A PR, if attempted, needs: + - CAIP-19 asset ID. + - Small square high-resolution SVG or PNG. + - Checksum address. + - Official project website referencing the address. + - Clear project explanation. + - Activity evidence. + - Verified block-explorer source where possible. + - Ethereum asset reputation of `NEUTRAL` or `OK`. + - ERC-20 only; not ERC-721 or ERC-1155. + +Repo implication: do not block production on MetaMask contract-metadata acceptance. Prepare a PR package only after Etherscan profile and external tracker posture are strong. + +### EIP-747 + +EIP-747 defines a wallet-scoped `wallet_watchAsset` method that lets a site suggest a token for a wallet to track. + +Important semantics: + +- The method returns `true` when the request is recognized, not when the user definitely accepted. +- Errors can occur for unsupported asset type, allowlist/denylist blocking, or failed image/metadata loading. +- `address` is required. +- `chainId` must match a wallet-recognized chain. +- Wallets should warn on suspiciously similar names or symbols. +- Wallets should protect against SSRF by sanitizing URI schemes/ports. + +Repo implication: the current `config/metamask` endpoint must remain conservative, HTTPS-only, chain-specific, and contract-symbol accurate. + +### MetaMask Token Display Docs + +MetaMask says it automatically displays popular ERC-20 and SPL tokens, but it does not maintain an authoritative list of all valid tokens. Users can add tokens through enhanced token detection, token search/address, block explorers, coin listing sites, and Portfolio. + +Important constraints: + +- Enhanced token detection is available only on listed networks such as Ethereum Mainnet, Linea, Avalanche, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base, zkSync, and Solana. +- Chain 138 is not listed as an enhanced-token-detection network. +- MetaMask says enhanced detection uses aggregated community token lists. +- If a token is not discoverable by search/detection, users can add it by address. +- Block explorers and coin listing sites can expose add-to-MetaMask flows. + +Repo implication: Chain 138 must rely on `wallet_addEthereumChain`, EIP-747, token-list endpoints, explorer UI, and external provider submissions. + +## Required Repo Guarantees + +| Area | Required condition | Current repo path | +|---|---|---| +| Chain metadata | Chain 138 has valid EIP-3085 fields and logo URLs | `src/config/networks.ts`; `/api/v1/config/metamask?chainId=138` | +| Token metadata | Every watch asset has address, symbol, decimals, image | `src/api/routes/config.ts` | +| Symbol correctness | `options.symbol` matches contract symbol for MetaMask validation | `resolveWalletWatchAssetSymbol()` | +| Logo hosting | Logos are HTTPS and image endpoints return image content types | `/api/v1/report/logo/` | +| Cache refresh | Wallet image URLs can be versioned | `WALLET_METADATA_IMAGE_VERSION` / default version | +| User caveat | API states MetaMask prices are upstream controlled | `caveats` in `/api/v1/config/metamask` | +| External tracker packet | CoinGecko/CMC/all reports include logo and supply fields | `/api/v1/report/coingecko`, `/api/v1/report/cmc`, `/api/v1/report/all` | + +## Validation Commands + +```bash +curl -fsS 'https://explorer.d-bis.org/api/v1/config/metamask?chainId=138' \ + | jq '{chain:.addEthereumChain.chainName, iconUrls:.addEthereumChain.iconUrls, watchAssets:(.watchAssets|length), sample:.watchAssets[0]}' +``` + +```bash +curl -fsSI 'https://explorer.d-bis.org/api/v1/report/logo/chain-138?v=20260510' +curl -fsSI 'https://explorer.d-bis.org/api/v1/report/logo/cUSDC?v=20260510' +curl -fsSI 'https://explorer.d-bis.org/api/v1/report/logo/ETH?v=20260510' +``` + +```bash +curl -fsS 'https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1' \ + | jq '.tokens[] | select(.symbol=="cWUSDC") | {symbol,contract_address,logo_uri,total_supply,circulating_supply,market_cap:(.market_data.market_cap // null)}' +``` + +## Submission Constraints + +| Target | Constraint | Recommendation | +|---|---|---| +| EIP-747 | User must approve; result does not prove token accepted permanently | Keep explorer wallet flow simple and auditable. | +| MetaMask custom network | Network icon may cache or be ignored by some MetaMask builds | Keep Chain 138 SVG first and document remove/re-add path. | +| MetaMask token logo | Existing custom tokens may cache old image URLs | Version `image` values and tell users to remove/re-add stale assets. | +| MetaMask fiat price | Controlled by MetaMask/upstream providers | Submit to CoinGecko, CMC, Etherscan, DEX indexers; do not claim direct control. | +| MetaMask Snap install | Stable MetaMask installs only allowlisted npm Snap package versions | Keep the Snap optional; use MetaMask Flask for testing or complete allowlist/update review. | +| CSP eval warning | Browser security panels may report blocked eval for third-party or stale bundles | Verify live `Content-Security-Policy` response headers and scan first-party bundles before treating it as a site break. | +| Contract metadata PR | Repo is effectively frozen and no timeline guaranteed | Treat as optional after stronger external acceptance. | +| Token autodetection | Chain 138 is not a listed enhanced detection network | Use explicit EIP-747 and token list import. | + +## CSP and Snap Failure Triage + +The screenshot failure mode `Cannot install version "0.2.3" of snap "npm:chain138-open-snap": The snap is not on the allowlist` is a MetaMask Snaps install gate. It is not resolved by changing explorer CSP. + +Use these checks to separate the two concerns: + +```bash +curl -fsSI 'https://explorer.d-bis.org/wallet' \ + | awk 'BEGIN{IGNORECASE=1} NR==1 || /^content-security-policy:/ {print}' +``` + +```bash +rg -n "eval\\(|new Function|setTimeout\\(['\\\"]|setInterval\\(['\\\"]" \ + explorer-monorepo/frontend/src explorer-monorepo/frontend/pages explorer-monorepo/frontend/libs +``` + +Current repo policy: + +- production wallet setup is `wallet_addEthereumChain` plus EIP-747 `wallet_watchAsset`; +- the Chain 138 Snap is optional and should be labelled Flask-or-allowlisted only; +- do not add `unsafe-eval` just to fix a Snap allowlist failure; +- if a real CSP break appears, first identify whether the active CSP comes from the Next frontend, nginx/NPMplus, or Cloudflare. + +## Exact cWUSDC Package + +| Field | Value | +|---|---| +| CAIP-19 | `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Name | `Wrapped cUSDC` | +| Symbol | `cWUSDC` | +| Decimals | `6` | +| Logo | `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` | +| Website | `https://d-bis.org/` | +| Token explainer | `https://d-bis.org/gru/tokens` | +| Etherscan profile packet | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| Tracker packet | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | + +## Implementation Checklist + +- [x] Keep Chain 138 wallet payload live. +- [x] Emit DBIS-hosted HTTPS logo URLs. +- [x] Match V2 wallet symbols to on-chain symbols. +- [x] Version wallet image URLs for cache refresh. +- [x] Add caveat that MetaMask fiat prices are upstream controlled. +- [x] Add CoinGecko/CMC logo fields. +- [x] Add supply proof and market-cap fields for tracker packets. +- [ ] Submit/update Etherscan token profile. +- [ ] Submit/update CoinGecko token profile. +- [ ] Submit/update CMC token profile. +- [ ] Submit/update DEX pair metadata where public indexed pools exist. +- [ ] Optionally prepare MetaMask contract-metadata PR after Etherscan/tracker posture improves. + +## References + +- MetaMask contract metadata: https://github.com/MetaMask/contract-metadata +- EIP-747: https://eips.ethereum.org/EIPS/eip-747 +- MetaMask token display docs: https://support.metamask.io/manage-crypto/tokens/how-to-display-tokens-in-metamask diff --git a/docs/04-configuration/verification-evidence/rpc-502-diagnostics-20260510-130753.txt b/docs/04-configuration/verification-evidence/rpc-502-diagnostics-20260510-130753.txt new file mode 100644 index 00000000..84e00f5c --- /dev/null +++ b/docs/04-configuration/verification-evidence/rpc-502-diagnostics-20260510-130753.txt @@ -0,0 +1,437 @@ +============================================== +RPC 502 diagnostics — 2026-05-10T13:07:53-07:00 +============================================== + +--- VMID 2101 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 511 0.0.0.0:8443 0.0.0.0:* users:(("nginx",pid=168,fd=16),("nginx",pid=167,fd=16),("nginx",pid=166,fd=16),("nginx",pid=165,fd=16),("nginx",pid=163,fd=16)) + LISTEN 0 511 0.0.0.0:8544 0.0.0.0:* users:(("node",pid=114,fd=18)) + LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=168,fd=12),("nginx",pid=167,fd=12),("nginx",pid=166,fd=12),("nginx",pid=165,fd=12),("nginx",pid=163,fd=12)) + LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=168,fd=14),("nginx",pid=167,fd=14),("nginx",pid=166,fd=14),("nginx",pid=165,fd=14),("nginx",pid=163,fd=14)) + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=349,fd=13)) + LISTEN 0 511 127.0.0.1:8080 0.0.0.0:* users:(("nginx",pid=168,fd=18),("nginx",pid=167,fd=18),("nginx",pid=166,fd=18),("nginx",pid=165,fd=18),("nginx",pid=163,fd=18)) + LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=104,fd=14)) + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=2498,fd=3)) + LISTEN 0 511 [::]:8443 [::]:* users:(("nginx",pid=168,fd=17),("nginx",pid=167,fd=17),("nginx",pid=166,fd=17),("nginx",pid=165,fd=17),("nginx",pid=163,fd=17)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=968674,fd=402)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=968674,fd=403)) + LISTEN 0 3 *:9545 *:* users:(("java",pid=968674,fd=399)) + LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=168,fd=13),("nginx",pid=167,fd=13),("nginx",pid=166,fd=13),("nginx",pid=165,fd=13),("nginx",pid=163,fd=13)) + LISTEN 0 4096 *:22 *:* users:(("systemd",pid=1,fd=44)) + LISTEN 0 511 [::]:443 [::]:* users:(("nginx",pid=168,fd=15),("nginx",pid=167,fd=15),("nginx",pid=166,fd=15),("nginx",pid=165,fd=15),("nginx",pid=163,fd=15)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=968674,fd=404)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=349,fd=14)) + Besu service (systemctl list-units): + besu-rpc.service loaded active running Hyperledger Besu RPC Node + journalctl -u besu-rpc -n 25: + May 10 13:07:17 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:17.042-0700 | EthScheduler-Workers-3 | INFO | PersistBlockTask | Imported empty block #5,024,276 / 0 tx / 0 om / 0 (0.0%) gas / (0x2094aa9b9ae76cbc0a606f406a018e1e8cb0ca11360502eb3f0c3c5761c863c7) in 0.019s. Peers: 36 + May 10 13:07:19 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:19.032-0700 | EthScheduler-Workers-2 | INFO | PersistBlockTask | Imported empty block #5,024,277 / 0 tx / 0 om / 0 (0.0%) gas / (0xbeb244e324cb7d9e5609ac86d479aa53945cbe1e149f07dba4b0e688976571e9) in 0.008s. Peers: 36 + May 10 13:07:21 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:21.054-0700 | EthScheduler-Workers-7 | INFO | PersistBlockTask | Imported empty block #5,024,278 / 0 tx / 0 om / 0 (0.0%) gas / (0xfa04fb4276d4b42b2820c248a162dd2fbd929d444326d85752546d260f2db594) in 0.013s. Peers: 36 + May 10 13:07:23 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:23.059-0700 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported empty block #5,024,279 / 0 tx / 0 om / 0 (0.0%) gas / (0x83331c7d6c1cc405dfa3ce44f811fa670e0720af9852eea60818d302100bcee4) in 0.021s. Peers: 36 + May 10 13:07:25 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:25.034-0700 | EthScheduler-Workers-4 | INFO | PersistBlockTask | Imported empty block #5,024,280 / 0 tx / 0 om / 0 (0.0%) gas / (0x29088a9862365e23503f2a699ffa276601cb900f9c4226a320bb5a123858136f) in 0.005s. Peers: 36 + May 10 13:07:27 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:27.036-0700 | EthScheduler-Workers-1 | INFO | PersistBlockTask | Imported empty block #5,024,281 / 0 tx / 0 om / 0 (0.0%) gas / (0x6e46414deb4d4fd37e20450932014f5f98da653b66086a5e1b96683dc0d64768) in 0.003s. Peers: 36 + May 10 13:07:29 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:29.044-0700 | EthScheduler-Workers-6 | INFO | PersistBlockTask | Imported empty block #5,024,282 / 0 tx / 0 om / 0 (0.0%) gas / (0x645dc2185ced198ad01d48bac309875cb4584a6076a25170d9c0e2a5db5c2c00) in 0.009s. Peers: 36 + May 10 13:07:31 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:31.042-0700 | EthScheduler-Workers-5 | INFO | PersistBlockTask | Imported empty block #5,024,283 / 0 tx / 0 om / 0 (0.0%) gas / (0xfd49171d44666e7ce3dfdb54e4976bcdc8a67aec3a64efb00cb5bc9491b8d5f6) in 0.019s. Peers: 36 + May 10 13:07:33 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:33.036-0700 | EthScheduler-Workers-3 | INFO | PersistBlockTask | Imported empty block #5,024,284 / 0 tx / 0 om / 0 (0.0%) gas / (0x98fdc422789289b5092568ffd4ea353763c25558255220a198e3ece601588890) in 0.016s. Peers: 36 + May 10 13:07:35 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:35.037-0700 | EthScheduler-Workers-2 | INFO | PersistBlockTask | Imported empty block #5,024,285 / 0 tx / 0 om / 0 (0.0%) gas / (0x4d0563c29eb1604d5fc11f7cc7a6c7f8ead7708a3f6fc986e86ec89ecadf7918) in 0.006s. Peers: 36 + May 10 13:07:37 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:37.052-0700 | EthScheduler-Workers-7 | INFO | PersistBlockTask | Imported empty block #5,024,286 / 0 tx / 0 om / 0 (0.0%) gas / (0x34fca6abe3994518643f6cdcb779715972ce818e85125b7b429ab8b53bedd824) in 0.004s. Peers: 36 + May 10 13:07:39 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:39.033-0700 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported empty block #5,024,287 / 0 tx / 0 om / 0 (0.0%) gas / (0x83a8d4b5ec4305d6395f2991b0b93a47fcf496968b0c2b5ad9bb05cd810fe019) in 0.011s. Peers: 36 + May 10 13:07:41 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:41.027-0700 | EthScheduler-Workers-4 | INFO | PersistBlockTask | Imported empty block #5,024,288 / 0 tx / 0 om / 0 (0.0%) gas / (0x1213cbba02637a5f78680949bbd9630ec7ac937a24678047be7522aed4a1be8a) in 0.007s. Peers: 36 + May 10 13:07:43 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:43.030-0700 | EthScheduler-Workers-1 | INFO | PersistBlockTask | Imported empty block #5,024,289 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3bf0b503fc62847f06bcada375fc872386ff305464f0eeeb26aa5c940324b5c) in 0.007s. Peers: 36 + May 10 13:07:45 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:45.035-0700 | EthScheduler-Workers-6 | INFO | PersistBlockTask | Imported empty block #5,024,290 / 0 tx / 0 om / 0 (0.0%) gas / (0x3195f831c6c1ffb592c92fe91e954c6c91510593adb22528c1b798e79d6b76bc) in 0.009s. Peers: 36 + May 10 13:07:47 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:47.032-0700 | EthScheduler-Workers-5 | INFO | PersistBlockTask | Imported empty block #5,024,291 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ac5495e7ec8f93d2a3f325b5363be8c841a4b5e69b34e9518a573cdcc780bcd) in 0.007s. Peers: 36 + May 10 13:07:49 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:49.044-0700 | EthScheduler-Workers-3 | INFO | PersistBlockTask | Imported empty block #5,024,292 / 0 tx / 0 om / 0 (0.0%) gas / (0x8fdde14826ff657d086dc80c426310b2ca9257372b32c407c56bd8fbc07044a5) in 0.008s. Peers: 36 + May 10 13:07:51 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:51.035-0700 | EthScheduler-Workers-2 | INFO | PersistBlockTask | Imported empty block #5,024,293 / 0 tx / 0 om / 0 (0.0%) gas / (0x7fd14f183435fd4f59d0ab43270f301be6ddbd1fbba0b87f4f7bf154111d8ef8) in 0.004s. Peers: 36 + May 10 13:07:53 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:53.034-0700 | EthScheduler-Workers-6 | INFO | PersistBlockTask | Imported empty block #5,024,294 / 0 tx / 0 om / 0 (0.0%) gas / (0xa8823b3e59fce3ad85549cd5f7a9ec401ea95273413519838bb7bd8cb3c1d958) in 0.013s. Peers: 36 + May 10 13:07:55 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:55.101-0700 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported empty block #5,024,295 / 0 tx / 0 om / 0 (0.0%) gas / (0x43a6c37d20fd151058ffe73f45f4de8e40a841920f1410122e4b4a80acf5c5a3) in 0.007s. Peers: 36 + May 10 13:07:57 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:57.027-0700 | EthScheduler-Workers-4 | INFO | PersistBlockTask | Imported empty block #5,024,296 / 0 tx / 0 om / 0 (0.0%) gas / (0x44cec125480959167c90854b461cc295dbf82d179a6416d054d3580a24d11c30) in 0.005s. Peers: 36 + May 10 13:07:59 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:07:59.040-0700 | EthScheduler-Workers-1 | INFO | PersistBlockTask | Imported empty block #5,024,297 / 0 tx / 0 om / 0 (0.0%) gas / (0xaf105e58bc058e39f6035940c7d5a7b431a1a5f2f10a900086d48f247c3b9f09) in 0.009s. Peers: 36 + May 10 13:08:01 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:08:01.036-0700 | EthScheduler-Workers-7 | INFO | PersistBlockTask | Imported empty block #5,024,298 / 0 tx / 0 om / 0 (0.0%) gas / (0xedd7307ce16d10c89a58e8f43e30cfd1d3f68c3fa3e6bfc1fe1206bddb914b4a) in 0.010s. Peers: 36 + May 10 13:08:03 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:08:03.043-0700 | EthScheduler-Workers-5 | INFO | PersistBlockTask | Imported empty block #5,024,299 / 0 tx / 0 om / 0 (0.0%) gas / (0xad665942dd0bc93fa7d674a6c03b4254409b953e35cd728d23835790290e8361) in 0.004s. Peers: 36 + May 10 13:08:05 besu-rpc-core-1 besu-rpc[968674]: 2026-05-10 13:08:05.057-0700 | EthScheduler-Workers-3 | INFO | PersistBlockTask | Imported empty block #5,024,300 / 0 tx / 0 om / 0 (0.0%) gas / (0xcae412ef6e563ed5653f7dbe40559fe4a1f0a0e48566e11d84f9a6d472814676) in 0.031s. Peers: 36 + journalctl -u besu -n 25: + -- No entries -- + +--- VMID 2500 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=325,fd=13)) + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=981,fd=3)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=161,fd=3),("systemd",pid=1,fd=66)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=518,fd=359)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=518,fd=361)) + LISTEN 0 4096 *:8547 *:* users:(("java",pid=518,fd=360)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=518,fd=358)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=518,fd=362)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=325,fd=14)) + Besu service (systemctl list-units): + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + -- No entries -- + journalctl -u besu -n 25: + May 10 20:07:31 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:31.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,283 / 0 tx / 0 om / 0 (0.0%) gas / (0xfd49171d44666e7ce3dfdb54e4976bcdc8a67aec3a64efb00cb5bc9491b8d5f6) in 0.002s. Peers: 24 + May 10 20:07:33 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:33.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,284 / 0 tx / 0 om / 0 (0.0%) gas / (0x98fdc422789289b5092568ffd4ea353763c25558255220a198e3ece601588890) in 0.002s. Peers: 24 + May 10 20:07:35 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:35.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,285 / 0 tx / 0 om / 0 (0.0%) gas / (0x4d0563c29eb1604d5fc11f7cc7a6c7f8ead7708a3f6fc986e86ec89ecadf7918) in 0.003s. Peers: 24 + May 10 20:07:37 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:37.032+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,286 / 0 tx / 0 om / 0 (0.0%) gas / (0x34fca6abe3994518643f6cdcb779715972ce818e85125b7b429ab8b53bedd824) in 0.002s. Peers: 24 + May 10 20:07:39 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:39.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,287 / 0 tx / 0 om / 0 (0.0%) gas / (0x83a8d4b5ec4305d6395f2991b0b93a47fcf496968b0c2b5ad9bb05cd810fe019) in 0.002s. Peers: 24 + May 10 20:07:41 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:41.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,288 / 0 tx / 0 om / 0 (0.0%) gas / (0x1213cbba02637a5f78680949bbd9630ec7ac937a24678047be7522aed4a1be8a) in 0.002s. Peers: 24 + May 10 20:07:43 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:43.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,289 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3bf0b503fc62847f06bcada375fc872386ff305464f0eeeb26aa5c940324b5c) in 0.002s. Peers: 24 + May 10 20:07:45 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:45.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,290 / 0 tx / 0 om / 0 (0.0%) gas / (0x3195f831c6c1ffb592c92fe91e954c6c91510593adb22528c1b798e79d6b76bc) in 0.001s. Peers: 24 + May 10 20:07:47 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:47.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,291 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ac5495e7ec8f93d2a3f325b5363be8c841a4b5e69b34e9518a573cdcc780bcd) in 0.002s. Peers: 24 + May 10 20:07:49 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:49.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,292 / 0 tx / 0 om / 0 (0.0%) gas / (0x8fdde14826ff657d086dc80c426310b2ca9257372b32c407c56bd8fbc07044a5) in 0.001s. Peers: 24 + May 10 20:07:51 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:51.031+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,293 / 0 tx / 0 om / 0 (0.0%) gas / (0x7fd14f183435fd4f59d0ab43270f301be6ddbd1fbba0b87f4f7bf154111d8ef8) in 0.001s. Peers: 24 + May 10 20:07:53 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:53.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,294 / 0 tx / 0 om / 0 (0.0%) gas / (0xa8823b3e59fce3ad85549cd5f7a9ec401ea95273413519838bb7bd8cb3c1d958) in 0.002s. Peers: 24 + May 10 20:07:55 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:55.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,295 / 0 tx / 0 om / 0 (0.0%) gas / (0x43a6c37d20fd151058ffe73f45f4de8e40a841920f1410122e4b4a80acf5c5a3) in 0.003s. Peers: 24 + May 10 20:07:57 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:57.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,296 / 0 tx / 0 om / 0 (0.0%) gas / (0x44cec125480959167c90854b461cc295dbf82d179a6416d054d3580a24d11c30) in 0.002s. Peers: 24 + May 10 20:07:59 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:07:59.029+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,297 / 0 tx / 0 om / 0 (0.0%) gas / (0xaf105e58bc058e39f6035940c7d5a7b431a1a5f2f10a900086d48f247c3b9f09) in 0.002s. Peers: 24 + May 10 20:08:01 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:01.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,298 / 0 tx / 0 om / 0 (0.0%) gas / (0xedd7307ce16d10c89a58e8f43e30cfd1d3f68c3fa3e6bfc1fe1206bddb914b4a) in 0.002s. Peers: 24 + May 10 20:08:03 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:03.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,299 / 0 tx / 0 om / 0 (0.0%) gas / (0xad665942dd0bc93fa7d674a6c03b4254409b953e35cd728d23835790290e8361) in 0.002s. Peers: 24 + May 10 20:08:05 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:05.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,300 / 0 tx / 0 om / 0 (0.0%) gas / (0xcae412ef6e563ed5653f7dbe40559fe4a1f0a0e48566e11d84f9a6d472814676) in 0.001s. Peers: 24 + May 10 20:08:07 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:07.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,301 / 0 tx / 0 om / 0 (0.0%) gas / (0x3c66fc3e5b9410c83a25e0acea6844fd1eee1c28f3a1fc348322bd0e32f1762e) in 0.002s. Peers: 24 + May 10 20:08:09 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:09.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,302 / 0 tx / 0 om / 0 (0.0%) gas / (0xa878205b88dd420820cb7becfe730fbbeb8f33570e0023f459c2df6413278717) in 0.001s. Peers: 24 + May 10 20:08:11 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:11.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,303 / 0 tx / 0 om / 0 (0.0%) gas / (0x64b03849152b3815fb6aae30e0c5ed048d2aacce05aff2982257c8c16489c54c) in 0.001s. Peers: 24 + May 10 20:08:13 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:13.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,304 / 0 tx / 0 om / 0 (0.0%) gas / (0xc68f2c0daf0f9c455f84025fe98ae66ba8bd2960c5b91a739f5cc7417e440e5e) in 0.001s. Peers: 24 + May 10 20:08:15 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:15.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,305 / 0 tx / 0 om / 0 (0.0%) gas / (0x5ad2ce582093542f5a323b841a1dac5edc1fc3d81436a6f4d891334018b4ba16) in 0.001s. Peers: 24 + May 10 20:08:17 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:17.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,306 / 0 tx / 0 om / 0 (0.0%) gas / (0xe169947f77231d8bca4c146b714a93ee64abd8f3a7bbebec5b9414bb43226613) in 0.001s. Peers: 24 + May 10 20:08:19 besu-rpc-alltra-1 besu[518]: 2026-05-10 20:08:19.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,307 / 0 tx / 0 om / 0 (0.0%) gas / (0xb6282cb029b9970909da3fa580879ccf6071c60373e11868c4bf982f4c75c3e9) in 0.001s. Peers: 24 + +--- VMID 2501 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=336,fd=13)) + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=959,fd=3)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=336,fd=14)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=164,fd=3),("systemd",pid=1,fd=56)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=548,fd=360)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=548,fd=361)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=548,fd=359)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=548,fd=362)) + Besu service (systemctl list-units): + besu-rpc.service loaded activating auto-restart Hyperledger Besu RPC Node + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + May 10 20:07:51 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 7.509s CPU time. + May 10 20:07:51 besu-rpc-alltra-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:07:54 besu-rpc-alltra-2 besu-rpc[6282]: Unable to read TOML configuration, file not found. + May 10 20:07:54 besu-rpc-alltra-2 besu-rpc[6282]: To display full help: + May 10 20:07:54 besu-rpc-alltra-2 besu-rpc[6282]: besu [COMMAND] --help + May 10 20:07:54 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:07:54 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 7.373s CPU time. + May 10 20:08:04 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 16. + May 10 20:08:04 besu-rpc-alltra-2 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:04 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 7.373s CPU time. + May 10 20:08:04 besu-rpc-alltra-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:06 besu-rpc-alltra-2 besu-rpc[6321]: Unable to read TOML configuration, file not found. + May 10 20:08:06 besu-rpc-alltra-2 besu-rpc[6321]: To display full help: + May 10 20:08:06 besu-rpc-alltra-2 besu-rpc[6321]: besu [COMMAND] --help + May 10 20:08:06 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:06 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 6.732s CPU time. + May 10 20:08:16 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 17. + May 10 20:08:16 besu-rpc-alltra-2 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:16 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 6.732s CPU time. + May 10 20:08:16 besu-rpc-alltra-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:19 besu-rpc-alltra-2 besu-rpc[6361]: Unable to read TOML configuration, file not found. + May 10 20:08:19 besu-rpc-alltra-2 besu-rpc[6361]: To display full help: + May 10 20:08:19 besu-rpc-alltra-2 besu-rpc[6361]: besu [COMMAND] --help + May 10 20:08:19 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:19 besu-rpc-alltra-2 systemd[1]: besu-rpc.service: Consumed 7.815s CPU time. + journalctl -u besu -n 25: + May 10 20:07:43 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:43.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,289 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3bf0b503fc62847f06bcada375fc872386ff305464f0eeeb26aa5c940324b5c) in 0.003s. Peers: 40 + May 10 20:07:45 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:45.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,290 / 0 tx / 0 om / 0 (0.0%) gas / (0x3195f831c6c1ffb592c92fe91e954c6c91510593adb22528c1b798e79d6b76bc) in 0.003s. Peers: 40 + May 10 20:07:47 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:47.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,291 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ac5495e7ec8f93d2a3f325b5363be8c841a4b5e69b34e9518a573cdcc780bcd) in 0.003s. Peers: 40 + May 10 20:07:49 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:49.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,292 / 0 tx / 0 om / 0 (0.0%) gas / (0x8fdde14826ff657d086dc80c426310b2ca9257372b32c407c56bd8fbc07044a5) in 0.002s. Peers: 40 + May 10 20:07:51 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:51.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,293 / 0 tx / 0 om / 0 (0.0%) gas / (0x7fd14f183435fd4f59d0ab43270f301be6ddbd1fbba0b87f4f7bf154111d8ef8) in 0.001s. Peers: 40 + May 10 20:07:53 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:53.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,294 / 0 tx / 0 om / 0 (0.0%) gas / (0xa8823b3e59fce3ad85549cd5f7a9ec401ea95273413519838bb7bd8cb3c1d958) in 0.001s. Peers: 40 + May 10 20:07:55 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:55.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,295 / 0 tx / 0 om / 0 (0.0%) gas / (0x43a6c37d20fd151058ffe73f45f4de8e40a841920f1410122e4b4a80acf5c5a3) in 0.004s. Peers: 40 + May 10 20:07:57 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:57.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,296 / 0 tx / 0 om / 0 (0.0%) gas / (0x44cec125480959167c90854b461cc295dbf82d179a6416d054d3580a24d11c30) in 0.001s. Peers: 40 + May 10 20:07:59 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:07:59.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,297 / 0 tx / 0 om / 0 (0.0%) gas / (0xaf105e58bc058e39f6035940c7d5a7b431a1a5f2f10a900086d48f247c3b9f09) in 0.002s. Peers: 40 + May 10 20:08:01 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:01.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,298 / 0 tx / 0 om / 0 (0.0%) gas / (0xedd7307ce16d10c89a58e8f43e30cfd1d3f68c3fa3e6bfc1fe1206bddb914b4a) in 0.001s. Peers: 40 + May 10 20:08:03 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:03.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,299 / 0 tx / 0 om / 0 (0.0%) gas / (0xad665942dd0bc93fa7d674a6c03b4254409b953e35cd728d23835790290e8361) in 0.002s. Peers: 40 + May 10 20:08:05 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:05.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,300 / 0 tx / 0 om / 0 (0.0%) gas / (0xcae412ef6e563ed5653f7dbe40559fe4a1f0a0e48566e11d84f9a6d472814676) in 0.001s. Peers: 40 + May 10 20:08:07 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:07.015+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,301 / 0 tx / 0 om / 0 (0.0%) gas / (0x3c66fc3e5b9410c83a25e0acea6844fd1eee1c28f3a1fc348322bd0e32f1762e) in 0.002s. Peers: 40 + May 10 20:08:09 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:09.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,302 / 0 tx / 0 om / 0 (0.0%) gas / (0xa878205b88dd420820cb7becfe730fbbeb8f33570e0023f459c2df6413278717) in 0.002s. Peers: 40 + May 10 20:08:11 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:11.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,303 / 0 tx / 0 om / 0 (0.0%) gas / (0x64b03849152b3815fb6aae30e0c5ed048d2aacce05aff2982257c8c16489c54c) in 0.001s. Peers: 40 + May 10 20:08:13 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:13.016+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,304 / 0 tx / 0 om / 0 (0.0%) gas / (0xc68f2c0daf0f9c455f84025fe98ae66ba8bd2960c5b91a739f5cc7417e440e5e) in 0.001s. Peers: 40 + May 10 20:08:15 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:15.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,305 / 0 tx / 0 om / 0 (0.0%) gas / (0x5ad2ce582093542f5a323b841a1dac5edc1fc3d81436a6f4d891334018b4ba16) in 0.002s. Peers: 40 + May 10 20:08:17 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:17.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,306 / 0 tx / 0 om / 0 (0.0%) gas / (0xe169947f77231d8bca4c146b714a93ee64abd8f3a7bbebec5b9414bb43226613) in 0.002s. Peers: 40 + May 10 20:08:19 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:19.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,307 / 0 tx / 0 om / 0 (0.0%) gas / (0xb6282cb029b9970909da3fa580879ccf6071c60373e11868c4bf982f4c75c3e9) in 0.002s. Peers: 40 + May 10 20:08:21 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:21.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,308 / 0 tx / 0 om / 0 (0.0%) gas / (0x75a3910d8f3b58d4b41f068ab566796a63c9faaeea46eb65b8e9f54a15e04626) in 0.001s. Peers: 40 + May 10 20:08:23 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:23.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,309 / 0 tx / 0 om / 0 (0.0%) gas / (0x2ee8399e6ad15381ad3d9bdcbd3168efe9c696ddf12dd873be17c5403ca6d12b) in 0.002s. Peers: 40 + May 10 20:08:25 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:25.034+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,310 / 0 tx / 0 om / 0 (0.0%) gas / (0xd9cbe80cfa42f0d206064b2a8583513d05afd67790b95f1b1fa5ed8d0ce62399) in 0.004s. Peers: 40 + May 10 20:08:27 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:27.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,311 / 0 tx / 0 om / 0 (0.0%) gas / (0x5cde394c2fa6e2b606f788801314f7847b1b8568459b7b65e08a8988a54e2692) in 0.002s. Peers: 40 + May 10 20:08:29 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:29.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,312 / 0 tx / 0 om / 0 (0.0%) gas / (0xc2378a23383699dbd7c9eeab3c4ef8ec737bbb7087b166301f747d14787ee5eb) in 0.001s. Peers: 40 + May 10 20:08:31 besu-rpc-alltra-2 besu[548]: 2026-05-10 20:08:31.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,313 / 0 tx / 0 om / 0 (0.0%) gas / (0x0c3fbd2036fd5d87db5a84b06ae272d12196dfc0c437e5789868c8a1db874a26) in 0.001s. Peers: 40 + +--- VMID 2502 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=335,fd=13)) + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=974,fd=3)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=541,fd=358)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=541,fd=359)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=541,fd=357)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=335,fd=14)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=166,fd=3),("systemd",pid=1,fd=48)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=541,fd=360)) + Besu service (systemctl list-units): + besu-rpc.service loaded activating auto-restart Hyperledger Besu RPC Node + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + May 10 20:08:04 besu-rpc-alltra-3 besu-rpc[6617]: besu [COMMAND] --help + May 10 20:08:04 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:04 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 8.394s CPU time. + May 10 20:08:14 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 16. + May 10 20:08:14 besu-rpc-alltra-3 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:14 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 8.394s CPU time. + May 10 20:08:14 besu-rpc-alltra-3 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:17 besu-rpc-alltra-3 besu-rpc[6657]: Unable to read TOML configuration, file not found. + May 10 20:08:17 besu-rpc-alltra-3 besu-rpc[6657]: To display full help: + May 10 20:08:17 besu-rpc-alltra-3 besu-rpc[6657]: besu [COMMAND] --help + May 10 20:08:17 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:17 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 8.643s CPU time. + May 10 20:08:28 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 17. + May 10 20:08:28 besu-rpc-alltra-3 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:28 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 8.643s CPU time. + May 10 20:08:28 besu-rpc-alltra-3 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:30 besu-rpc-alltra-3 besu-rpc[6696]: Unable to read TOML configuration, file not found. + May 10 20:08:30 besu-rpc-alltra-3 besu-rpc[6696]: To display full help: + May 10 20:08:30 besu-rpc-alltra-3 besu-rpc[6696]: besu [COMMAND] --help + May 10 20:08:30 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:30 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 7.949s CPU time. + May 10 20:08:41 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 18. + May 10 20:08:41 besu-rpc-alltra-3 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:41 besu-rpc-alltra-3 systemd[1]: besu-rpc.service: Consumed 7.949s CPU time. + May 10 20:08:41 besu-rpc-alltra-3 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + journalctl -u besu -n 25: + May 10 20:07:55 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:07:55.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,295 / 0 tx / 0 om / 0 (0.0%) gas / (0x43a6c37d20fd151058ffe73f45f4de8e40a841920f1410122e4b4a80acf5c5a3) in 0.004s. Peers: 40 + May 10 20:07:57 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:07:57.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,296 / 0 tx / 0 om / 0 (0.0%) gas / (0x44cec125480959167c90854b461cc295dbf82d179a6416d054d3580a24d11c30) in 0.003s. Peers: 40 + May 10 20:07:59 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:07:59.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,297 / 0 tx / 0 om / 0 (0.0%) gas / (0xaf105e58bc058e39f6035940c7d5a7b431a1a5f2f10a900086d48f247c3b9f09) in 0.004s. Peers: 40 + May 10 20:08:01 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:01.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,298 / 0 tx / 0 om / 0 (0.0%) gas / (0xedd7307ce16d10c89a58e8f43e30cfd1d3f68c3fa3e6bfc1fe1206bddb914b4a) in 0.003s. Peers: 40 + May 10 20:08:03 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:03.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,299 / 0 tx / 0 om / 0 (0.0%) gas / (0xad665942dd0bc93fa7d674a6c03b4254409b953e35cd728d23835790290e8361) in 0.003s. Peers: 40 + May 10 20:08:05 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:05.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,300 / 0 tx / 0 om / 0 (0.0%) gas / (0xcae412ef6e563ed5653f7dbe40559fe4a1f0a0e48566e11d84f9a6d472814676) in 0.003s. Peers: 40 + May 10 20:08:07 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:07.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,301 / 0 tx / 0 om / 0 (0.0%) gas / (0x3c66fc3e5b9410c83a25e0acea6844fd1eee1c28f3a1fc348322bd0e32f1762e) in 0.004s. Peers: 40 + May 10 20:08:09 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:09.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,302 / 0 tx / 0 om / 0 (0.0%) gas / (0xa878205b88dd420820cb7becfe730fbbeb8f33570e0023f459c2df6413278717) in 0.003s. Peers: 40 + May 10 20:08:11 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:11.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,303 / 0 tx / 0 om / 0 (0.0%) gas / (0x64b03849152b3815fb6aae30e0c5ed048d2aacce05aff2982257c8c16489c54c) in 0.004s. Peers: 40 + May 10 20:08:13 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:13.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,304 / 0 tx / 0 om / 0 (0.0%) gas / (0xc68f2c0daf0f9c455f84025fe98ae66ba8bd2960c5b91a739f5cc7417e440e5e) in 0.002s. Peers: 40 + May 10 20:08:15 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:15.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,305 / 0 tx / 0 om / 0 (0.0%) gas / (0x5ad2ce582093542f5a323b841a1dac5edc1fc3d81436a6f4d891334018b4ba16) in 0.004s. Peers: 40 + May 10 20:08:17 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:17.033+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,306 / 0 tx / 0 om / 0 (0.0%) gas / (0xe169947f77231d8bca4c146b714a93ee64abd8f3a7bbebec5b9414bb43226613) in 0.004s. Peers: 40 + May 10 20:08:19 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:19.029+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,307 / 0 tx / 0 om / 0 (0.0%) gas / (0xb6282cb029b9970909da3fa580879ccf6071c60373e11868c4bf982f4c75c3e9) in 0.009s. Peers: 40 + May 10 20:08:21 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:21.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,308 / 0 tx / 0 om / 0 (0.0%) gas / (0x75a3910d8f3b58d4b41f068ab566796a63c9faaeea46eb65b8e9f54a15e04626) in 0.002s. Peers: 40 + May 10 20:08:23 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:23.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,309 / 0 tx / 0 om / 0 (0.0%) gas / (0x2ee8399e6ad15381ad3d9bdcbd3168efe9c696ddf12dd873be17c5403ca6d12b) in 0.003s. Peers: 40 + May 10 20:08:25 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:25.035+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,310 / 0 tx / 0 om / 0 (0.0%) gas / (0xd9cbe80cfa42f0d206064b2a8583513d05afd67790b95f1b1fa5ed8d0ce62399) in 0.008s. Peers: 40 + May 10 20:08:27 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:27.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,311 / 0 tx / 0 om / 0 (0.0%) gas / (0x5cde394c2fa6e2b606f788801314f7847b1b8568459b7b65e08a8988a54e2692) in 0.001s. Peers: 40 + May 10 20:08:29 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:29.048+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,312 / 0 tx / 0 om / 0 (0.0%) gas / (0xc2378a23383699dbd7c9eeab3c4ef8ec737bbb7087b166301f747d14787ee5eb) in 0.018s. Peers: 40 + May 10 20:08:31 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:31.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,313 / 0 tx / 0 om / 0 (0.0%) gas / (0x0c3fbd2036fd5d87db5a84b06ae272d12196dfc0c437e5789868c8a1db874a26) in 0.002s. Peers: 40 + May 10 20:08:33 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:33.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,314 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3190d68f60a316816ac9a8f02296c4a447a58fe0b238aac38d84b35ba16553e) in 0.001s. Peers: 40 + May 10 20:08:35 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:35.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,315 / 0 tx / 0 om / 0 (0.0%) gas / (0x7976585940bc4e7edfee434d2a793638888035c8ad7bbadd8362787e184df6ed) in 0.003s. Peers: 40 + May 10 20:08:37 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:37.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,316 / 0 tx / 0 om / 0 (0.0%) gas / (0x9689fc7ef463f1fcc789523264f09fff2138531ad3b67ffca451d914d61a7721) in 0.005s. Peers: 40 + May 10 20:08:39 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:39.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,317 / 0 tx / 0 om / 0 (0.0%) gas / (0x11a5ba96b9f99699b944326450ed367048dd99a0e939adf16027ab38cd91c2db) in 0.004s. Peers: 40 + May 10 20:08:41 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:41.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,318 / 0 tx / 0 om / 0 (0.0%) gas / (0x68d4479715cd4bdfcb34871b5f763b89d7cf3dcddb6b80ad639137e5ffc4caa5) in 0.003s. Peers: 40 + May 10 20:08:43 besu-rpc-alltra-3 besu[541]: 2026-05-10 20:08:43.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,319 / 0 tx / 0 om / 0 (0.0%) gas / (0xfeaba9671447b66b6f0b4b88716a4cc9dde77e726c654e4119bda51486d839e4) in 0.003s. Peers: 40 + +--- VMID 2503 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=964,fd=3)) + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=336,fd=13)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=553,fd=361)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=553,fd=358)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=553,fd=359)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=553,fd=360)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=163,fd=3),("systemd",pid=1,fd=54)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=336,fd=14)) + Besu service (systemctl list-units): + besu-rpc.service loaded activating auto-restart Hyperledger Besu RPC Node + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + May 10 20:08:21 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 7.722s CPU time. + May 10 20:08:21 besu-rpc-hybx-1 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:24 besu-rpc-hybx-1 besu-rpc[8618]: Unable to read TOML configuration, file not found. + May 10 20:08:24 besu-rpc-hybx-1 besu-rpc[8618]: To display full help: + May 10 20:08:24 besu-rpc-hybx-1 besu-rpc[8618]: besu [COMMAND] --help + May 10 20:08:24 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:24 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 8.020s CPU time. + May 10 20:08:34 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 17. + May 10 20:08:34 besu-rpc-hybx-1 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:34 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 8.020s CPU time. + May 10 20:08:34 besu-rpc-hybx-1 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:37 besu-rpc-hybx-1 besu-rpc[8657]: Unable to read TOML configuration, file not found. + May 10 20:08:37 besu-rpc-hybx-1 besu-rpc[8657]: To display full help: + May 10 20:08:37 besu-rpc-hybx-1 besu-rpc[8657]: besu [COMMAND] --help + May 10 20:08:37 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:37 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 7.759s CPU time. + May 10 20:08:47 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 18. + May 10 20:08:47 besu-rpc-hybx-1 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:47 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 7.759s CPU time. + May 10 20:08:47 besu-rpc-hybx-1 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:50 besu-rpc-hybx-1 besu-rpc[8697]: Unable to read TOML configuration, file not found. + May 10 20:08:50 besu-rpc-hybx-1 besu-rpc[8697]: To display full help: + May 10 20:08:50 besu-rpc-hybx-1 besu-rpc[8697]: besu [COMMAND] --help + May 10 20:08:50 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:50 besu-rpc-hybx-1 systemd[1]: besu-rpc.service: Consumed 7.647s CPU time. + journalctl -u besu -n 25: + May 10 20:08:07 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:07.016+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,301 / 0 tx / 0 om / 0 (0.0%) gas / (0x3c66fc3e5b9410c83a25e0acea6844fd1eee1c28f3a1fc348322bd0e32f1762e) in 0.002s. Peers: 40 + May 10 20:08:09 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:09.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,302 / 0 tx / 0 om / 0 (0.0%) gas / (0xa878205b88dd420820cb7becfe730fbbeb8f33570e0023f459c2df6413278717) in 0.004s. Peers: 40 + May 10 20:08:11 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:11.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,303 / 0 tx / 0 om / 0 (0.0%) gas / (0x64b03849152b3815fb6aae30e0c5ed048d2aacce05aff2982257c8c16489c54c) in 0.001s. Peers: 40 + May 10 20:08:13 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:13.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,304 / 0 tx / 0 om / 0 (0.0%) gas / (0xc68f2c0daf0f9c455f84025fe98ae66ba8bd2960c5b91a739f5cc7417e440e5e) in 0.001s. Peers: 40 + May 10 20:08:15 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:15.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,305 / 0 tx / 0 om / 0 (0.0%) gas / (0x5ad2ce582093542f5a323b841a1dac5edc1fc3d81436a6f4d891334018b4ba16) in 0.002s. Peers: 40 + May 10 20:08:17 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:17.034+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,306 / 0 tx / 0 om / 0 (0.0%) gas / (0xe169947f77231d8bca4c146b714a93ee64abd8f3a7bbebec5b9414bb43226613) in 0.004s. Peers: 40 + May 10 20:08:19 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:19.033+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,307 / 0 tx / 0 om / 0 (0.0%) gas / (0xb6282cb029b9970909da3fa580879ccf6071c60373e11868c4bf982f4c75c3e9) in 0.005s. Peers: 40 + May 10 20:08:21 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:21.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,308 / 0 tx / 0 om / 0 (0.0%) gas / (0x75a3910d8f3b58d4b41f068ab566796a63c9faaeea46eb65b8e9f54a15e04626) in 0.002s. Peers: 40 + May 10 20:08:23 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:23.034+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,309 / 0 tx / 0 om / 0 (0.0%) gas / (0x2ee8399e6ad15381ad3d9bdcbd3168efe9c696ddf12dd873be17c5403ca6d12b) in 0.008s. Peers: 40 + May 10 20:08:25 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:25.032+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,310 / 0 tx / 0 om / 0 (0.0%) gas / (0xd9cbe80cfa42f0d206064b2a8583513d05afd67790b95f1b1fa5ed8d0ce62399) in 0.002s. Peers: 40 + May 10 20:08:27 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:27.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,311 / 0 tx / 0 om / 0 (0.0%) gas / (0x5cde394c2fa6e2b606f788801314f7847b1b8568459b7b65e08a8988a54e2692) in 0.002s. Peers: 40 + May 10 20:08:29 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:29.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,312 / 0 tx / 0 om / 0 (0.0%) gas / (0xc2378a23383699dbd7c9eeab3c4ef8ec737bbb7087b166301f747d14787ee5eb) in 0.002s. Peers: 40 + May 10 20:08:31 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:31.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,313 / 0 tx / 0 om / 0 (0.0%) gas / (0x0c3fbd2036fd5d87db5a84b06ae272d12196dfc0c437e5789868c8a1db874a26) in 0.002s. Peers: 40 + May 10 20:08:33 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:33.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,314 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3190d68f60a316816ac9a8f02296c4a447a58fe0b238aac38d84b35ba16553e) in 0.004s. Peers: 40 + May 10 20:08:35 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:35.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,315 / 0 tx / 0 om / 0 (0.0%) gas / (0x7976585940bc4e7edfee434d2a793638888035c8ad7bbadd8362787e184df6ed) in 0.010s. Peers: 40 + May 10 20:08:37 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:37.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,316 / 0 tx / 0 om / 0 (0.0%) gas / (0x9689fc7ef463f1fcc789523264f09fff2138531ad3b67ffca451d914d61a7721) in 0.004s. Peers: 40 + May 10 20:08:39 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:39.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,317 / 0 tx / 0 om / 0 (0.0%) gas / (0x11a5ba96b9f99699b944326450ed367048dd99a0e939adf16027ab38cd91c2db) in 0.001s. Peers: 40 + May 10 20:08:41 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:41.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,318 / 0 tx / 0 om / 0 (0.0%) gas / (0x68d4479715cd4bdfcb34871b5f763b89d7cf3dcddb6b80ad639137e5ffc4caa5) in 0.002s. Peers: 40 + May 10 20:08:43 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:43.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,319 / 0 tx / 0 om / 0 (0.0%) gas / (0xfeaba9671447b66b6f0b4b88716a4cc9dde77e726c654e4119bda51486d839e4) in 0.004s. Peers: 40 + May 10 20:08:45 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:45.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,320 / 0 tx / 0 om / 0 (0.0%) gas / (0xc8764a00f5a9e756ad63fc538f763782c5a6090bcaee01e509b2ebacc84d26f6) in 0.002s. Peers: 40 + May 10 20:08:47 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:47.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,321 / 0 tx / 0 om / 0 (0.0%) gas / (0x564a59dd1f25de2dfcfe58aa892b7e8e0bed5916a042fa3f9c56b557d982f1d3) in 0.002s. Peers: 40 + May 10 20:08:49 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:49.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,322 / 0 tx / 0 om / 0 (0.0%) gas / (0xea4bb1aff7c0be0fdd5fad6be2b362b8edaf207b810371ad94ac22a8b4ef97b0) in 0.001s. Peers: 40 + May 10 20:08:51 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:51.017+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,323 / 0 tx / 0 om / 0 (0.0%) gas / (0x7bf1becee96d9f6c4d3cbadb6d25dd383e189cb181b2b5d37763c4d8db52db1f) in 0.002s. Peers: 40 + May 10 20:08:53 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:53.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,324 / 0 tx / 0 om / 0 (0.0%) gas / (0xc5ec25641f4c396b319e1efe18494b4779a61300b9eaf5bad120bef5332097d8) in 0.003s. Peers: 40 + May 10 20:08:55 besu-rpc-hybx-1 besu[553]: 2026-05-10 20:08:55.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,325 / 0 tx / 0 om / 0 (0.0%) gas / (0x0335249ccbc498a3ab8cca4d1424f3ec2f34b4151aa64f63e21968e97a98d36c) in 0.002s. Peers: 40 + +--- VMID 2504 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=958,fd=3)) + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=335,fd=13)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=335,fd=14)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=545,fd=360)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=173,fd=3),("systemd",pid=1,fd=70)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=545,fd=357)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=545,fd=359)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=545,fd=358)) + Besu service (systemctl list-units): + besu-rpc.service loaded activating auto-restart Hyperledger Besu RPC Node + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + May 10 20:08:27 besu-rpc-hybx-2 besu-rpc[6316]: besu [COMMAND] --help + May 10 20:08:27 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:27 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 6.947s CPU time. + May 10 20:08:37 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 16. + May 10 20:08:37 besu-rpc-hybx-2 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:37 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 6.947s CPU time. + May 10 20:08:37 besu-rpc-hybx-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:40 besu-rpc-hybx-2 besu-rpc[6356]: Unable to read TOML configuration, file not found. + May 10 20:08:40 besu-rpc-hybx-2 besu-rpc[6356]: To display full help: + May 10 20:08:40 besu-rpc-hybx-2 besu-rpc[6356]: besu [COMMAND] --help + May 10 20:08:40 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:40 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 7.220s CPU time. + May 10 20:08:50 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 17. + May 10 20:08:50 besu-rpc-hybx-2 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:50 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 7.220s CPU time. + May 10 20:08:50 besu-rpc-hybx-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:08:53 besu-rpc-hybx-2 besu-rpc[6396]: Unable to read TOML configuration, file not found. + May 10 20:08:53 besu-rpc-hybx-2 besu-rpc[6396]: To display full help: + May 10 20:08:53 besu-rpc-hybx-2 besu-rpc[6396]: besu [COMMAND] --help + May 10 20:08:53 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:08:53 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 7.525s CPU time. + May 10 20:09:03 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Scheduled restart job, restart counter is at 18. + May 10 20:09:03 besu-rpc-hybx-2 systemd[1]: Stopped besu-rpc.service - Hyperledger Besu RPC Node. + May 10 20:09:03 besu-rpc-hybx-2 systemd[1]: besu-rpc.service: Consumed 7.525s CPU time. + May 10 20:09:03 besu-rpc-hybx-2 systemd[1]: Started besu-rpc.service - Hyperledger Besu RPC Node. + journalctl -u besu -n 25: + May 10 20:08:19 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:19.038+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,307 / 0 tx / 0 om / 0 (0.0%) gas / (0xb6282cb029b9970909da3fa580879ccf6071c60373e11868c4bf982f4c75c3e9) in 0.004s. Peers: 40 + May 10 20:08:21 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:21.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,308 / 0 tx / 0 om / 0 (0.0%) gas / (0x75a3910d8f3b58d4b41f068ab566796a63c9faaeea46eb65b8e9f54a15e04626) in 0.004s. Peers: 40 + May 10 20:08:23 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:23.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,309 / 0 tx / 0 om / 0 (0.0%) gas / (0x2ee8399e6ad15381ad3d9bdcbd3168efe9c696ddf12dd873be17c5403ca6d12b) in 0.004s. Peers: 40 + May 10 20:08:25 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:25.038+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,310 / 0 tx / 0 om / 0 (0.0%) gas / (0xd9cbe80cfa42f0d206064b2a8583513d05afd67790b95f1b1fa5ed8d0ce62399) in 0.008s. Peers: 40 + May 10 20:08:27 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:27.031+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,311 / 0 tx / 0 om / 0 (0.0%) gas / (0x5cde394c2fa6e2b606f788801314f7847b1b8568459b7b65e08a8988a54e2692) in 0.001s. Peers: 40 + May 10 20:08:29 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:29.050+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,312 / 0 tx / 0 om / 0 (0.0%) gas / (0xc2378a23383699dbd7c9eeab3c4ef8ec737bbb7087b166301f747d14787ee5eb) in 0.021s. Peers: 40 + May 10 20:08:31 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:31.041+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,313 / 0 tx / 0 om / 0 (0.0%) gas / (0x0c3fbd2036fd5d87db5a84b06ae272d12196dfc0c437e5789868c8a1db874a26) in 0.021s. Peers: 40 + May 10 20:08:33 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:33.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,314 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3190d68f60a316816ac9a8f02296c4a447a58fe0b238aac38d84b35ba16553e) in 0.003s. Peers: 40 + May 10 20:08:35 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:35.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,315 / 0 tx / 0 om / 0 (0.0%) gas / (0x7976585940bc4e7edfee434d2a793638888035c8ad7bbadd8362787e184df6ed) in 0.003s. Peers: 40 + May 10 20:08:37 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:37.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,316 / 0 tx / 0 om / 0 (0.0%) gas / (0x9689fc7ef463f1fcc789523264f09fff2138531ad3b67ffca451d914d61a7721) in 0.009s. Peers: 40 + May 10 20:08:39 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:39.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,317 / 0 tx / 0 om / 0 (0.0%) gas / (0x11a5ba96b9f99699b944326450ed367048dd99a0e939adf16027ab38cd91c2db) in 0.001s. Peers: 40 + May 10 20:08:41 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:41.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,318 / 0 tx / 0 om / 0 (0.0%) gas / (0x68d4479715cd4bdfcb34871b5f763b89d7cf3dcddb6b80ad639137e5ffc4caa5) in 0.003s. Peers: 40 + May 10 20:08:43 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:43.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,319 / 0 tx / 0 om / 0 (0.0%) gas / (0xfeaba9671447b66b6f0b4b88716a4cc9dde77e726c654e4119bda51486d839e4) in 0.001s. Peers: 40 + May 10 20:08:45 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:45.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,320 / 0 tx / 0 om / 0 (0.0%) gas / (0xc8764a00f5a9e756ad63fc538f763782c5a6090bcaee01e509b2ebacc84d26f6) in 0.005s. Peers: 40 + May 10 20:08:47 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:47.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,321 / 0 tx / 0 om / 0 (0.0%) gas / (0x564a59dd1f25de2dfcfe58aa892b7e8e0bed5916a042fa3f9c56b557d982f1d3) in 0.005s. Peers: 40 + May 10 20:08:49 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:49.033+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,322 / 0 tx / 0 om / 0 (0.0%) gas / (0xea4bb1aff7c0be0fdd5fad6be2b362b8edaf207b810371ad94ac22a8b4ef97b0) in 0.004s. Peers: 40 + May 10 20:08:51 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:51.024+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,323 / 0 tx / 0 om / 0 (0.0%) gas / (0x7bf1becee96d9f6c4d3cbadb6d25dd383e189cb181b2b5d37763c4d8db52db1f) in 0.006s. Peers: 40 + May 10 20:08:53 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:53.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,324 / 0 tx / 0 om / 0 (0.0%) gas / (0xc5ec25641f4c396b319e1efe18494b4779a61300b9eaf5bad120bef5332097d8) in 0.001s. Peers: 40 + May 10 20:08:55 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:55.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,325 / 0 tx / 0 om / 0 (0.0%) gas / (0x0335249ccbc498a3ab8cca4d1424f3ec2f34b4151aa64f63e21968e97a98d36c) in 0.007s. Peers: 40 + May 10 20:08:57 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:57.031+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,326 / 0 tx / 0 om / 0 (0.0%) gas / (0x49cc6f5a406e88d66dca74c8b40dc84c87e613c8fab4840b5311a8822f3a8d93) in 0.003s. Peers: 40 + May 10 20:08:59 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:08:59.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,327 / 0 tx / 0 om / 0 (0.0%) gas / (0x0829f4ca670a62c4bb5945fd0e63102ff3ff424666d2bb3282d624598d6912cf) in 0.004s. Peers: 40 + May 10 20:09:01 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:09:01.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,328 / 0 tx / 0 om / 0 (0.0%) gas / (0x342f7292c3089ef7e491396bb6fc538ab4595326bcd4045226d9bf5c110fdb5f) in 0.004s. Peers: 40 + May 10 20:09:03 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:09:03.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,329 / 0 tx / 0 om / 0 (0.0%) gas / (0x4f5a731793f00ab464bcd1996854c76223c9bfb3d70df2872dda3ddd2015de86) in 0.003s. Peers: 40 + May 10 20:09:05 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:09:05.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,330 / 0 tx / 0 om / 0 (0.0%) gas / (0x510ff027c71458a02dd0b22a2661c2fbff33c7ab930b6bb6b84b790cf33ca66c) in 0.002s. Peers: 40 + May 10 20:09:07 besu-rpc-hybx-2 besu[545]: 2026-05-10 20:09:07.032+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,331 / 0 tx / 0 om / 0 (0.0%) gas / (0xf88444f460fd2db69273e3dd265ab06b940b12abcd3ad440bfd4e1af68311dcd) in 0.002s. Peers: 40 + +--- VMID 2505 @ 192.168.11.11 (status: running) --- + Listening ports (ss -tlnp): + State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess + LISTEN 0 5 0.0.0.0:18545 0.0.0.0:* users:(("python3",pid=941,fd=3)) + LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=325,fd=13)) + LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=325,fd=14)) + LISTEN 0 4096 *:30303 *:* users:(("java",pid=531,fd=360)) + LISTEN 0 4096 *:22 *:* users:(("sshd",pid=169,fd=3),("systemd",pid=1,fd=62)) + LISTEN 0 4096 *:9545 *:* users:(("java",pid=531,fd=357)) + LISTEN 0 4096 *:8545 *:* users:(("java",pid=531,fd=358)) + LISTEN 0 4096 *:8546 *:* users:(("java",pid=531,fd=359)) + Besu service (systemctl list-units): + besu-rpc.service loaded activating auto-restart Hyperledger Besu RPC Node + besu.service loaded active running Hyperledger Besu + journalctl -u besu-rpc -n 25: + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: org.hyperledger.besu.util.InvalidConfigurationException: Port(s) '[30303, 8545, 8546, 9545]' already in use. Check for other processes using the port(s). + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.BesuCommand.checkIfRequiredPortsAreAvailable(BesuCommand.java:3317) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.BesuCommand.configure(BesuCommand.java:2074) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.BesuCommand.run(BesuCommand.java:1461) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine.executeUserObject(CommandLine.java:2026) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine.access$1500(CommandLine.java:148) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine.execute(CommandLine.java:2170) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.util.ConfigOptionSearchAndRunHandler.handle(ConfigOptionSearchAndRunHandler.java:62) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.util.ConfigOptionSearchAndRunHandler.handle(ConfigOptionSearchAndRunHandler.java:33) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at picocli.CommandLine.execute(CommandLine.java:2170) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.BesuCommand.parse(BesuCommand.java:1628) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.cli.BesuCommand.parse(BesuCommand.java:1423) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: at org.hyperledger.besu.Besu.main(Besu.java:39) + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: Port(s) '[30303, 8545, 8546, 9545]' already in use. Check for other processes using the port(s). + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: To display full help: + May 10 20:09:13 besu-rpc-hybx-3 besu-rpc[9759]: besu [COMMAND] --help + May 10 20:09:13 besu-rpc-hybx-3 systemd[1]: besu-rpc.service: Deactivated successfully. + May 10 20:09:13 besu-rpc-hybx-3 systemd[1]: besu-rpc.service: Consumed 9.083s CPU time. + journalctl -u besu -n 25: + May 10 20:08:31 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:31.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,313 / 0 tx / 0 om / 0 (0.0%) gas / (0x0c3fbd2036fd5d87db5a84b06ae272d12196dfc0c437e5789868c8a1db874a26) in 0.001s. Peers: 40 + May 10 20:08:33 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:33.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,314 / 0 tx / 0 om / 0 (0.0%) gas / (0xf3190d68f60a316816ac9a8f02296c4a447a58fe0b238aac38d84b35ba16553e) in 0.002s. Peers: 40 + May 10 20:08:35 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:35.021+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,315 / 0 tx / 0 om / 0 (0.0%) gas / (0x7976585940bc4e7edfee434d2a793638888035c8ad7bbadd8362787e184df6ed) in 0.003s. Peers: 40 + May 10 20:08:37 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:37.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,316 / 0 tx / 0 om / 0 (0.0%) gas / (0x9689fc7ef463f1fcc789523264f09fff2138531ad3b67ffca451d914d61a7721) in 0.005s. Peers: 40 + May 10 20:08:39 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:39.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,317 / 0 tx / 0 om / 0 (0.0%) gas / (0x11a5ba96b9f99699b944326450ed367048dd99a0e939adf16027ab38cd91c2db) in 0.003s. Peers: 40 + May 10 20:08:41 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:41.028+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,318 / 0 tx / 0 om / 0 (0.0%) gas / (0x68d4479715cd4bdfcb34871b5f763b89d7cf3dcddb6b80ad639137e5ffc4caa5) in 0.009s. Peers: 40 + May 10 20:08:43 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:43.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,319 / 0 tx / 0 om / 0 (0.0%) gas / (0xfeaba9671447b66b6f0b4b88716a4cc9dde77e726c654e4119bda51486d839e4) in 0.002s. Peers: 40 + May 10 20:08:45 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:45.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,320 / 0 tx / 0 om / 0 (0.0%) gas / (0xc8764a00f5a9e756ad63fc538f763782c5a6090bcaee01e509b2ebacc84d26f6) in 0.005s. Peers: 40 + May 10 20:08:47 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:47.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,321 / 0 tx / 0 om / 0 (0.0%) gas / (0x564a59dd1f25de2dfcfe58aa892b7e8e0bed5916a042fa3f9c56b557d982f1d3) in 0.002s. Peers: 40 + May 10 20:08:49 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:49.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,322 / 0 tx / 0 om / 0 (0.0%) gas / (0xea4bb1aff7c0be0fdd5fad6be2b362b8edaf207b810371ad94ac22a8b4ef97b0) in 0.006s. Peers: 40 + May 10 20:08:51 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:51.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,323 / 0 tx / 0 om / 0 (0.0%) gas / (0x7bf1becee96d9f6c4d3cbadb6d25dd383e189cb181b2b5d37763c4d8db52db1f) in 0.003s. Peers: 40 + May 10 20:08:53 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:53.023+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,324 / 0 tx / 0 om / 0 (0.0%) gas / (0xc5ec25641f4c396b319e1efe18494b4779a61300b9eaf5bad120bef5332097d8) in 0.002s. Peers: 40 + May 10 20:08:55 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:55.020+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,325 / 0 tx / 0 om / 0 (0.0%) gas / (0x0335249ccbc498a3ab8cca4d1424f3ec2f34b4151aa64f63e21968e97a98d36c) in 0.001s. Peers: 40 + May 10 20:08:57 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:57.047+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,326 / 0 tx / 0 om / 0 (0.0%) gas / (0x49cc6f5a406e88d66dca74c8b40dc84c87e613c8fab4840b5311a8822f3a8d93) in 0.002s. Peers: 40 + May 10 20:08:59 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:08:59.025+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,327 / 0 tx / 0 om / 0 (0.0%) gas / (0x0829f4ca670a62c4bb5945fd0e63102ff3ff424666d2bb3282d624598d6912cf) in 0.006s. Peers: 40 + May 10 20:09:01 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:01.027+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,328 / 0 tx / 0 om / 0 (0.0%) gas / (0x342f7292c3089ef7e491396bb6fc538ab4595326bcd4045226d9bf5c110fdb5f) in 0.008s. Peers: 40 + May 10 20:09:03 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:03.019+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,329 / 0 tx / 0 om / 0 (0.0%) gas / (0x4f5a731793f00ab464bcd1996854c76223c9bfb3d70df2872dda3ddd2015de86) in 0.001s. Peers: 40 + May 10 20:09:05 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:05.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,330 / 0 tx / 0 om / 0 (0.0%) gas / (0x510ff027c71458a02dd0b22a2661c2fbff33c7ab930b6bb6b84b790cf33ca66c) in 0.008s. Peers: 40 + May 10 20:09:07 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:07.034+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,331 / 0 tx / 0 om / 0 (0.0%) gas / (0xf88444f460fd2db69273e3dd265ab06b940b12abcd3ad440bfd4e1af68311dcd) in 0.011s. Peers: 40 + May 10 20:09:09 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:09.022+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,332 / 0 tx / 0 om / 0 (0.0%) gas / (0x78a049e5bfd7eb2d1b8aa7d056c6dccfdd4aed12ba22cecb5a4e1dc9c0ab0e71) in 0.004s. Peers: 40 + May 10 20:09:11 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:11.036+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,333 / 0 tx / 0 om / 0 (0.0%) gas / (0xee5ce8bd9df13b9219f863f6890cb9cd175f0528bd85e8f1871cedc1a3db5629) in 0.019s. Peers: 40 + May 10 20:09:13 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:13.018+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,334 / 0 tx / 0 om / 0 (0.0%) gas / (0x1b0a2f6ccdb8eb31ac1ed5334b418e567fd6a455b88b49be9585f99830e494e4) in 0.001s. Peers: 40 + May 10 20:09:15 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:15.039+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,335 / 0 tx / 0 om / 0 (0.0%) gas / (0x5dfaa1f90dfde05da98750145fac9b20aa65ad11836cee7bc5f70af02fe232f1) in 0.011s. Peers: 40 + May 10 20:09:17 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:17.026+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,336 / 0 tx / 0 om / 0 (0.0%) gas / (0x15abc63a4280bea8ee1d58a56e1fdcfbf7ef10764091185b840a901dcc68f724) in 0.001s. Peers: 40 + May 10 20:09:19 besu-rpc-hybx-3 besu[531]: 2026-05-10 20:09:19.030+00:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #5,024,337 / 0 tx / 0 om / 0 (0.0%) gas / (0xa8fe82729501302fb1fd545ffe22367c4e22b170eb36efde15524fff003269f6) in 0.009s. Peers: 40 + +============================================== +If 8545 is not in ss -tlnp, Besu is not binding. Check journal for genesis/nodekey/config errors. +Then run: ./scripts/besu/fix-all-besu-nodes.sh (optionally --no-restart first) +============================================== diff --git a/docs/07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md b/docs/07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md index ff3d9743..13840472 100644 --- a/docs/07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md +++ b/docs/07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md @@ -248,7 +248,7 @@ The CCIP Monitor service (VMID 3501) listens to these events and tracks: ## 🔗 External Links -- **Blockscout (Chain 138)**: `https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684` ✅ **Use this** +- **Blockscout (Chain 138)**: `https://explorer.d-bis.org/addresses/0x105F8A15b819948a89153505762444Ee9f324684` ✅ **Use this** - **Chainlink CCIP Documentation**: https://docs.chain.link/ccip - **Source Project**: `/home/intlc/projects/smom-dbis-138` @@ -279,7 +279,7 @@ RPC_URL_138=http://192.168.11.211:8545 RPC_URL_138=https://rpc-core.d-bis.org # Block Explorer -EXPLORER_URL=https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684 +EXPLORER_URL=https://explorer.d-bis.org/addresses/0x105F8A15b819948a89153505762444Ee9f324684 ``` --- diff --git a/docs/07-ccip/CW_BRIDGE_APPROACH.md b/docs/07-ccip/CW_BRIDGE_APPROACH.md index 8267e28b..e11f5e32 100644 --- a/docs/07-ccip/CW_BRIDGE_APPROACH.md +++ b/docs/07-ccip/CW_BRIDGE_APPROACH.md @@ -13,7 +13,7 @@ - **Option 1 (extend existing bridge):** Would require changing CCIPWETH9Bridge / CCIPRelayBridge to accept more than WETH9 and mint cW* in `ccipReceive`. That mixes WETH and cW* in one contract and complicates upgrades. - **Option 2 (dedicated receiver):** Use a contract that only handles cW* mint-on-receive and burn-on-send (e.g. **TwoWayTokenBridgeL2** or a minimal **CCIPReceiverCW**). Keeps WETH bridges unchanged; cW* flow is separate and easier to reason about. -**Concrete choice:** Use **TwoWayTokenBridgeL2** (or equivalent) per (chain, token) — one deployment per chain for cWUSDT and one for cWUSDC, or a generic receiver that supports multiple cW* via message data. **CompliantWrappedToken** is extended with **burnFrom** so TwoWayTokenBridgeL2’s outbound `burnFrom` works (Phase C1). +**Concrete choice:** Use **CWMultiTokenBridgeL1** on Chain 138 and **CWMultiTokenBridgeL2** on each active public mesh chain. This is the preferred implementation because one receiver address can support the full cW* family through canonical-to-mirrored token-pair configuration. **TwoWayTokenBridgeL2** remains a narrow per-token fallback. **CompliantWrappedToken** is extended with **burnFrom** so outbound burn-and-send flows work. --- @@ -21,27 +21,27 @@ 1. **User on Chain 138** locks cUSDT (or cUSDC) in a sender contract (e.g. UniversalCCIPBridge, or a dedicated c*→cW* bridge on 138). 2. **Sender** sends a CCIP message to the **destination chain** with: - - **Receiver:** Dedicated cW* receiver (e.g. TwoWayTokenBridgeL2 instance for cWUSDT on that chain). - - **Data:** `abi.encode(recipient, amount)` (same as TwoWayTokenBridgeL2). + - **Receiver:** Dedicated cW* receiver, preferably CWMultiTokenBridgeL2 on that chain. + - **Data:** `abi.encode(canonicalToken, recipient, amount)`. - **Token amounts:** Either none (lock-and-mint: 138 locks c*, destination mints cW*) or source token as specified by the bridge design. -3. **On destination chain,** the **cW* receiver**’s `ccipReceive` is called by the CCIP router. It decodes `(recipient, amount)` and calls **cWUSDT.mint(recipient, amount)** (receiver must have MINTER_ROLE on the cW* token). +3. **On destination chain,** the **cW* receiver**’s `ccipReceive` is called by the CCIP router. It decodes `(canonicalToken, recipient, amount)`, resolves the configured mirrored cW* token, and mints that token to the recipient (receiver must have MINTER_ROLE on the cW* token). 4. **User on destination** receives cWUSDT. -**Contracts implementing receive:** Dedicated cW* receiver (e.g. TwoWayTokenBridgeL2 with `mirroredToken` = cWUSDT or cWUSDC). Not CCIPWETH9Bridge / CCIPRelayBridge (they remain WETH-only). +**Contracts implementing receive:** Dedicated cW* receiver, preferably CWMultiTokenBridgeL2 with canonical-to-mirrored token pairs configured. Not CCIPWETH9Bridge / CCIPRelayBridge (they remain WETH-only). -**Contracts implementing send (138 side):** UniversalCCIPBridge (if extended for c* and destination = cW* receiver), or a dedicated “Lock c* and send CCIP” contract that configures receiver = TwoWayTokenBridgeL2 on the target chain. +**Contracts implementing send (138 side):** CWMultiTokenBridgeL1, which locks supported canonical c* tokens on Chain 138 and sends CCIP messages to the configured CWMultiTokenBridgeL2 receiver on the target chain. --- ## 3. Flow chain → 138 (burn cW* on chain, release c* on 138) -1. **User on destination chain** calls the **cW* receiver**’s outbound function (e.g. TwoWayTokenBridgeL2.**burnAndSend**(destSelector, recipient, amount)). -2. **Receiver** burns cW* from the user (`cWUSDT.burnFrom(user, amount)` — requires CompliantWrappedToken to implement **burnFrom**; see Phase C1) and sends a CCIP message to **Chain 138** with receiver = L1 bridge and data `(recipient, amount)`. +1. **User on destination chain** calls the **cW* receiver**’s outbound function (CWMultiTokenBridgeL2.**burnAndSend**(mirroredToken, destSelector, recipient, amount)). +2. **Receiver** burns cW* from the user (`cW*.burnFrom(user, amount)`) and sends a CCIP message to **Chain 138** with receiver = L1 bridge and data `(canonicalToken, recipient, amount)`. 3. **On Chain 138,** the L1 bridge (or release contract) receives the message and releases cUSDT to the recipient (e.g. transfer from escrow or mint if L1 is mintable). -**Contracts implementing burn-and-send:** Same dedicated cW* receiver (TwoWayTokenBridgeL2) that has BURNER_ROLE on the cW* token and implements **burnAndSend**. CompliantWrappedToken must expose **burnFrom** for TwoWayTokenBridgeL2. +**Contracts implementing burn-and-send:** Same dedicated cW* receiver (CWMultiTokenBridgeL2) that has BURNER_ROLE on each configured cW* token and implements **burnAndSend**. -**Contracts implementing receive on 138:** L1 bridge or release contract that holds or mints c* and credits the recipient. +**Contracts implementing receive on 138:** CWMultiTokenBridgeL1, which verifies the configured peer and releases the locked canonical c* token to the recipient. --- @@ -49,17 +49,19 @@ | Role | Contract(s) | |------|-------------| -| **cW* token (destination chain)** | CompliantWrappedToken (cWUSDT, cWUSDC). MINTER_ROLE and BURNER_ROLE granted to the dedicated receiver (e.g. TwoWayTokenBridgeL2). | -| **Receive on destination (mint cW*)** | TwoWayTokenBridgeL2 (or CCIPReceiverCW). Constructor(router, cWUSDT, feeToken). Implements ccipReceive → mint(recipient, amount). | -| **Send from destination (burn cW*, send CCIP)** | Same TwoWayTokenBridgeL2. burnAndSend → burnFrom(user) → ccipSend to 138. | -| **Send from 138 (lock c*, send CCIP)** | UniversalCCIPBridge (with c* and cW* receiver config) or dedicated lock-and-send contract. Receiver address = TwoWayTokenBridgeL2 on destination. | -| **Receive on 138 (release c*)** | L1 bridge or release contract (existing or new) that credits recipient when message received from destination chain. | +| **cW* token (destination chain)** | CompliantWrappedToken (cWUSDT, cWUSDC, and broader cW* family). MINTER_ROLE and BURNER_ROLE granted to CWMultiTokenBridgeL2. | +| **Receive on destination (mint cW*)** | CWMultiTokenBridgeL2. Constructor(sendRouter, receiveRouter, feeToken). Implements ccipReceive -> resolve mirrored token -> mint(recipient, amount). | +| **Send from destination (burn cW*, send CCIP)** | Same CWMultiTokenBridgeL2. burnAndSend(mirroredToken, ...) -> burnFrom(user) -> ccipSend to 138. | +| **Send from 138 (lock c*, send CCIP)** | CWMultiTokenBridgeL1. Receiver address = CWMultiTokenBridgeL2 on destination. | +| **Receive on 138 (release c*)** | CWMultiTokenBridgeL1 releases locked canonical c* after configured peer verification. | --- ## 5. References -- [TwoWayTokenBridgeL2.sol](../../smom-dbis-138/contracts/bridge/TwoWayTokenBridgeL2.sol) — Mint on receive, burnAndSend for outbound. +- [CWMultiTokenBridgeL1.sol](../../smom-dbis-138/contracts/bridge/CWMultiTokenBridgeL1.sol) — Chain 138 escrow, send, receive, and release side. +- [CWMultiTokenBridgeL2.sol](../../smom-dbis-138/contracts/bridge/CWMultiTokenBridgeL2.sol) — Public-chain mint, burn, and return side. +- [TwoWayTokenBridgeL2.sol](../../smom-dbis-138/contracts/bridge/TwoWayTokenBridgeL2.sol) — Per-token fallback receiver. - [CompliantWrappedToken.sol](../../smom-dbis-138/contracts/tokens/CompliantWrappedToken.sol) — mint, burn, burnFrom (Phase C1). - [CW_BRIDGE_TASK_LIST.md](../00-meta/CW_BRIDGE_TASK_LIST.md) — Full task list and phases. - [CW_DEPLOY_AND_WIRE_RUNBOOK.md](CW_DEPLOY_AND_WIRE_RUNBOOK.md) — Operator steps to deploy cW*, wire config, verify. diff --git a/docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md b/docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md index 17947c2a..4608a0b8 100644 --- a/docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md +++ b/docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md @@ -8,7 +8,7 @@ ## Prerequisites - `smom-dbis-138/.env` has `CW_BRIDGE_` set (already done from deployed bridge suite for Mainnet, Cronos, BSC, Polygon, Gnosis, Avalanche, Base, Arbitrum, Optimism). -- For **cross-chain mint** to work, the bridge at that address must either be extended to mint cW* in `ccipReceive` or you must deploy a dedicated cW* receiver (e.g. TwoWayTokenBridgeL2) and point `CW_BRIDGE_` to it; see [CW_BRIDGE_APPROACH.md](CW_BRIDGE_APPROACH.md). +- For **cross-chain mint** to work, the bridge at that address must either be extended to mint cW* in `ccipReceive` or you must deploy the dedicated cW* bridge path. The preferred path is **CWMultiTokenBridgeL1** on Chain 138 plus **CWMultiTokenBridgeL2** on each public mesh chain; see [CW_BRIDGE_APPROACH.md](CW_BRIDGE_APPROACH.md). - RPC URL and `PRIVATE_KEY` for the target chain(s). --- @@ -108,10 +108,14 @@ If using the existing CCIPRelayBridge for cW* on Mainnet, that contract is WETH- ### E2. Direct CCIP (138 → chain) -If Chain 138 uses UniversalCCIPBridge or a dedicated sender to send c* to a destination chain: +If Chain 138 uses the preferred CWMultiTokenBridgeL1 sender to send c* to a destination chain: -- Add destination config for the c* token with **receiver** = the cW* receiver on the destination (e.g. TwoWayTokenBridgeL2 address). -- Ensure the receiver on the destination has MINTER_ROLE on the cW* token and implements `ccipReceive` → `cW*.mint(recipient, amount)` (see [CW_BRIDGE_APPROACH.md](CW_BRIDGE_APPROACH.md)). +- Deploy CWMultiTokenBridgeL1 on Chain 138 with the Chain 138 send/receive routers and fee token. +- Deploy CWMultiTokenBridgeL2 on each active public mesh chain with that chain's send/receive routers and fee token. +- Configure each canonical c* token on L1 with destination selector -> CWMultiTokenBridgeL2 receiver. +- Configure each L2 canonical-to-mirrored token pair and L2 destination selector -> CWMultiTokenBridgeL1 receiver. +- Ensure the receiver on the destination has MINTER_ROLE and BURNER_ROLE on each configured cW* token. +- Freeze configured token pairs/destinations only after the canary route passes. ### E3. Test E2E @@ -130,7 +134,7 @@ If Chain 138 uses UniversalCCIPBridge or a dedicated sender to send c* to a dest | 3 | Set `CWUSDT_`, `CWUSDC_` in .env (D2). | | 4 | Update `config/token-mapping-multichain.json` `addressTo` for _cW entries (D3). | | 5 | Verify MINTER_ROLE and BURNER_ROLE on cW* for the bridge (D4). | -| 6 | If cross-chain mint is required, ensure the bridge/receiver code mints cW* in ccipReceive (Phase B or C); then wire relay/direct CCIP (E1, E2) and run E2E test (E3). | +| 6 | If cross-chain mint is required, deploy/configure CWMultiTokenBridgeL1/L2; then wire relay/direct CCIP (E1, E2) and run E2E test (E3). | --- @@ -211,5 +215,9 @@ Then run `./scripts/deployment/run-cw-remaining-steps.sh --update-mapping`. - [CW_BRIDGE_TASK_LIST.md](../00-meta/CW_BRIDGE_TASK_LIST.md) - [CW_BRIDGE_APPROACH.md](CW_BRIDGE_APPROACH.md) +- [CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md](CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md) - [CW_TOKENS_AND_NETWORKS.md](../11-references/CW_TOKENS_AND_NETWORKS.md) - [C_TO_CW_MAPPER_MAPPING.md](../04-configuration/C_TO_CW_MAPPER_MAPPING.md) +- `pnpm cw:full-readiness` — read-only readiness report for source-of-truth, indexing, bridge, and external tracker gates. +- `pnpm cw:bridge-e2e-readiness` — read-only CWMultiToken L1/L2 route and role evidence. +- `pnpm cwusdc:external-trackers` — read-only cWUSDC external tracker/indexing evidence. diff --git a/docs/07-ccip/CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md b/docs/07-ccip/CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md new file mode 100644 index 00000000..e7b28175 --- /dev/null +++ b/docs/07-ccip/CW_MULTITOKEN_BRIDGE_BLOCKER_REMEDIATION.md @@ -0,0 +1,62 @@ +# CW MultiToken Bridge Blocker Remediation + +Generated: `2026-05-09` + +## Current Evidence + +Run: + +```bash +pnpm cw:bridge-e2e-readiness +pnpm cw:full-readiness +``` + +Evidence files: + +- `reports/status/cw-multitoken-bridge-e2e-latest.json` +- `reports/status/cw-multitoken-bridge-e2e-latest.md` +- `reports/status/cw-full-operational-readiness-latest.json` +- `reports/status/cw-full-operational-readiness-latest.md` + +Current bridge state from the latest evidence: + +| Area | Status | +|---|---| +| Chain 138 CWMultiTokenBridgeL1 | Pass | +| Ethereum Mainnet CWMultiTokenBridgeL2 | Pass | +| Avalanche CWMultiTokenBridgeL2 | Pass | +| Optimism | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Cronos | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| BSC | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Gnosis | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Polygon | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Base | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Arbitrum | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | +| Celo | Blocked: receiver lacks CWMultiToken canonical-to-mirrored mappings | + +## Required Fix + +For each failed chain: + +1. Deploy `CWMultiTokenBridgeL2` with that chain's send router, receive router, and fee token. +2. Update `CW_BRIDGE_` to the new CWMultiTokenBridgeL2 address. +3. Configure `canonicalToMirrored` pairs for at least `cUSDT -> cWUSDT` and `cUSDC -> cWUSDC`; use `--full-family` once all wrapped family routes are intended to be production-live. +4. Configure destination `138 -> CWMultiTokenBridgeL1`. +5. Grant `MINTER_ROLE` and `BURNER_ROLE` on each cW token to the new L2 bridge. +6. Re-run: + +```bash +pnpm cw:bridge-e2e-readiness +pnpm cw:full-readiness +``` + +## Existing Helpers + +- `smom-dbis-138/script/DeployCWMultiTokenBridgeL2.s.sol` +- `smom-dbis-138/scripts/deployment/cw-l1-bootstrap-gru-v2-ccip-routes.sh` +- `smom-dbis-138/scripts/deployment/configure-cw-public-bridge-mesh.sh` +- `scripts/deployment/run-cw-remaining-steps.sh --verify` + +## Safety Note + +Do not point `CW_BRIDGE_` at a WETH-only bridge and claim cW mint/burn support. WETH-oriented receivers can hold roles, but they do not prove c* -> cW* -> c* bridge semantics. diff --git a/docs/08-monitoring/BLOCKSCOUT_START_INSTRUCTIONS.md b/docs/08-monitoring/BLOCKSCOUT_START_INSTRUCTIONS.md index f68efd82..5b2e2d6b 100644 --- a/docs/08-monitoring/BLOCKSCOUT_START_INSTRUCTIONS.md +++ b/docs/08-monitoring/BLOCKSCOUT_START_INSTRUCTIONS.md @@ -188,8 +188,8 @@ Or manually: ### 2. Verify Individual Contracts Navigate to contract on Blockscout: -- Oracle Proxy: https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 -- CCIP Router: https://explorer.d-bis.org/address/0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817 +- Oracle Proxy: https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 +- CCIP Router: https://explorer.d-bis.org/addresses/0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817 ### 3. Check Verification Status diff --git a/docs/08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md b/docs/08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md index 64004bf4..94674588 100644 --- a/docs/08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md +++ b/docs/08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md @@ -206,7 +206,7 @@ Or run the batch script with the proxy pointing at the public explorer URL (from **Solution**: - The contract is already verified on Blockscout -- Check the contract on the explorer: `https://explorer.d-bis.org/address/` +- Check the contract on the explorer: `https://explorer.d-bis.org/addresses/` ### Issue: Blockscout API Timeout @@ -232,7 +232,7 @@ Or run the batch script with the proxy pointing at the public explorer URL (from If automated verification fails, you can verify contracts manually through the Blockscout web interface: -1. Navigate to the contract address: `https://explorer.d-bis.org/address/` +1. Navigate to the contract address: `https://explorer.d-bis.org/addresses/` 2. Click on **"Verify & Publish"** tab 3. Select verification method: - **Via Standard JSON Input** (recommended) diff --git a/docs/10-best-practices/PROXMOX_COMPLETE_RECOMMENDATIONS.md b/docs/10-best-practices/PROXMOX_COMPLETE_RECOMMENDATIONS.md index 962df805..55aeda3c 100644 --- a/docs/10-best-practices/PROXMOX_COMPLETE_RECOMMENDATIONS.md +++ b/docs/10-best-practices/PROXMOX_COMPLETE_RECOMMENDATIONS.md @@ -1,6 +1,6 @@ # Proxmox VE Complete Recommendations and Review -**Last Updated:** 2026-01-31 +**Last Updated:** 2026-05-09 **Document Version:** 1.0 **Status:** Active Documentation @@ -20,7 +20,7 @@ All pre-start tasks have been completed successfully: - ✅ Storage enabled and configured - ✅ All Proxmox services operational -**Status:** Ready to start VMs on all hosts. +**Status:** Cluster operational (**136** guests on **r630-01** … **r630-04**, **ml110** idle — **2026-05-09**). See [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md). --- @@ -41,16 +41,17 @@ All pre-start tasks have been completed successfully: ### 2. IP Address Audit ✅ COMPLETE -**Results:** -- **Total VMs/Containers:** 34 with static IPs -- **IP Conflicts:** 0 ✅ +**Results (historical IP audit — counts superseded):** +- **Cluster guests (2026-05-09):** **136** running LXC/QEMU; **ml110** **0**; see [PROXMOX_CLUSTER_ARCHITECTURE.md](PROXMOX_CLUSTER_ARCHITECTURE.md). +- **IP Conflicts:** 0 ✅ (re-verify when adding CTs) - **Invalid IPs:** 0 ✅ - **DHCP IPs:** 2 (VMIDs 3500, 3501) -**All VMs Currently On:** ml110 (192.168.11.10) +**All VMs Currently On (obsolete summary):** -**IP Allocation:** -- 192.168.11.57, .60-.64, .80, .100-.106, .112, .120, .130, .150-.156, .201-.204, .240-.242, .250-.254 +Guest placement is distributed across **r630-01** … **r630-04** — **not** consolidated on ml110. Use live inventory scripts. + +**Historical IP listing (representative ranges):** 192.168.11.57, .60-.64, .80, .100-.106, .112, .120, .130, .150-.156, .201-.204, .240-.242, .250-.254 ### 3. Storage Configuration ✅ COMPLETE @@ -83,58 +84,46 @@ All pre-start tasks have been completed successfully: | Property | Value | Status | |----------|-------|--------| | **Hostname** | ml110 | ✅ Correct | -| **Proxmox Version** | 9.1.0 | ✅ Current | +| **Proxmox Version** | **9.1.7** (kernel **6.17.13-2-pve**) | ✅ Current | | **CPU** | 6 cores @ 1.60GHz | ⚠️ Older/slower | -| **Memory** | 125GB (75% used) | ⚠️ High usage | -| **Storage** | 907GB (26% used) | ✅ Good | -| **VMs** | 34 containers | ⚠️ Overloaded | +| **Memory** | ~63 GiB reported (`maxmem`); ~3.5% used | ✅ Low scheduling load | +| **Cluster guests** | **0** LXC/QEMU (**2026-05-09**) | ✅ Idle compute | -**Recommendations:** -- Consider migrating some VMs to r630-01/r630-02 -- Monitor memory usage closely -- CPU is slower - better suited for lightweight workloads +**Recommendations:** Prefer **r630-*** nodes for new workloads; keep ml110 as quorum / lightweight only unless expanded. ### r630-01 (192.168.11.11) | Property | Value | Status | |----------|-------|--------| | **Hostname** | r630-01 | ✅ Migrated | -| **Proxmox Version** | 9.1.0 | ✅ Current | +| **Proxmox Version** | **9.1.7** | ✅ Current | | **CPU** | 32 cores @ 2.40GHz | ✅ Good | -| **Memory** | 503GB (1% used) | ✅ Excellent | -| **Storage** | 736GB available | ✅ Ready | -| **VMs** | 0 containers | ✅ Ready | +| **Memory** | ~125 GiB reported; **~66%** used | ⚠️ Monitor | +| **Cluster guests** | **57** | Primary density | -**Recommendations:** -- Ready for VM deployment -- Excellent resources available -- Can handle many VMs +**Recommendations:** Watch **thin1** / **data** pool utilization before large new disks. ### r630-02 (192.168.11.12) | Property | Value | Status | |----------|-------|--------| | **Hostname** | r630-02 | ✅ Migrated | -| **Proxmox Version** | 9.1.0 | ✅ Current | +| **Proxmox Version** | **9.1.7** | ✅ Current | | **CPU** | 56 cores @ 2.00GHz | ✅ Excellent | -| **Memory** | 251GB (2% used) | ✅ Excellent | -| **Storage** | 1.3TB+ available | ✅ Ready | -| **VMs** | Has VMs on thin4 | ⚠️ Need verification | +| **Memory** | ~125 GiB reported; **~62%** used | ⚠️ Monitor | +| **Cluster guests** | **41** | Infra / workloads | -**Recommendations:** -- Best CPU performance (56 cores) -- Has VMs on storage (need to verify) -- Ready for additional VMs +**Recommendations:** Strong CPU headroom; verify thin pool **%** on **`thin1-r630-02` … `thin6`** when provisioning. --- ## 🎯 Critical Recommendations -### 1. Verify Existing VMs on r630-02 ⚠️ HIGH PRIORITY +**Inventory note (2026-05-09):** Guests are **distributed** across the cluster; VMIDs listed below were **examples** from an older audit — confirm with [`ALL_VMIDS_ENDPOINTS.md`](../04-configuration/ALL_VMIDS_ENDPOINTS.md) / [`check-cluster-besu-inventory.sh`](../../scripts/verify/check-cluster-besu-inventory.sh). -**Issue:** Storage shows VMs exist (VMIDs: 100, 101, 102, 103, 104, 105, 130, 5000, 6200, 7800) +### 1. Verify workloads on r630-02 (periodic) -**Action Required:** +**Reference VMIDs (infra — verify live):** 100, 101, 102, 103, 104, 105, 130, 5000, 6200, 7800… ```bash ssh root@192.168.11.12 pct list @@ -211,7 +200,7 @@ pvecm nodes ### Performance Recommendations #### Workload Distribution -**Current:** All 34 VMs on ml110 (overloaded) +**Current (2026-05-09):** **136** running guests cluster-wide; **ml110** **0**; see [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md). **Recommended Distribution:** - **ml110:** Keep 10-15 lightweight/management VMs @@ -336,9 +325,13 @@ pvesh get /nodes//status | Host | CPU Cores | Memory | Storage Available | VMs | Status | |------|-----------|--------|-------------------|-----|--------| -| ml110 | 6 (slow) | 125GB (75% used) | 907GB | 34 | ⚠️ Overloaded | -| r630-01 | 32 | 503GB (1% used) | 736GB | 0 | ✅ Ready | -| r630-02 | 56 | 251GB (2% used) | 1.3TB+ | Has VMs | ✅ Ready | +| Host | CPU | Memory | Storage (summary) | Guests (2026-05-09) | Status | +|------|-----|--------|-------------------|----------------------|--------| +| ml110 | 6 (slow) | ~63 GiB reported (~3% used) | thin pools near empty | **0** | Quorum / light use | +| r630-01 | 32 | ~125 GiB (~66% used) | thin1/data — check % | **57** | Primary load | +| r630-02 | 56 | ~125 GiB (~62% used) | thin1-r630-02…6 | **41** | Heavy / infra | +| r630-03 | 32 | ~125 GiB (~62% used) | data + thin*-r630-03 | **19** | Expansion | +| r630-04 | 32 | ~125 GiB (~17% used) | data + mev-local-lvm | **19** | Capacity | | **Total** | **94** | **879GB** | **~2.4TB** | **34+** | ✅ **Ready** | --- diff --git a/docs/10-best-practices/PROXMOX_FINAL_RECOMMENDATIONS.md b/docs/10-best-practices/PROXMOX_FINAL_RECOMMENDATIONS.md index 1eb9d8d6..9d811ae9 100644 --- a/docs/10-best-practices/PROXMOX_FINAL_RECOMMENDATIONS.md +++ b/docs/10-best-practices/PROXMOX_FINAL_RECOMMENDATIONS.md @@ -1,11 +1,13 @@ # Proxmox VE Final Recommendations and Summary -**Last Updated:** 2026-01-31 +**Last Updated:** 2026-05-09 **Document Version:** 1.0 **Status:** Active Documentation --- +**Live cluster (2026-05-09):** [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md) — PVE **9.1.7**, **136** running guests, **ml110 0**; r630-01 **57**, r630-02 **41**, r630-03/04 **19** each. The sections below retain **historical** migration and audit notes; do not use them as the current placement source of truth. + **Date:** 2025-01-20 **Status:** Complete Review with Actionable Recommendations @@ -20,10 +22,8 @@ - /etc/hosts updated on both hosts ### 2. IP Address Audit - COMPLETE ✅ -- **Total VMs/Containers:** 34 with static IPs (all on ml110) -- **IP Conflicts:** 0 ✅ -- **Invalid IPs:** 0 ✅ -- **All IPs documented and verified** +- **Cluster (2026-05-09):** **136** running LXC/QEMU; static IP inventory: [ALL_VMIDS_ENDPOINTS.md](../04-configuration/ALL_VMIDS_ENDPOINTS.md) +- **IP Conflicts:** 0 ✅ (re-verify when adding CTs) ### 3. Proxmox Configuration Review - COMPLETE ✅ - All hosts reviewed @@ -58,35 +58,25 @@ sed -i 's/nodes pve2 /nodes r630-02 /' /etc/pve/storage.cfg ## 📊 Host Configuration Summary ### ml110 (192.168.11.10) -- **Status:** ✅ Operational -- **CPU:** 6 cores (older, slower) -- **Memory:** 125GB (75% used - high) -- **Storage:** local (94GB) + local-lvm (813GB, 26% used) -- **VMs:** 34 containers (all current VMs) -- **Recommendation:** Consider migrating some VMs to r630-01/r630-02 +- **Status:** ✅ Operational (cluster member) +- **CPU:** 6 cores +- **Memory:** ~63 GiB reported; ~3.5% used +- **Guests:** **0** (2026-05-09) +- **Recommendation:** Use **r630-*** for new workloads unless intentionally placing on ml110. ### r630-01 (192.168.11.11) - Previously "pve" - **Status:** ✅ Operational -- **CPU:** 32 cores @ 2.40GHz (good performance) -- **Memory:** 503GB (1% used - excellent) -- **Storage:** - - local: 536GB (0% used) - - local-lvm: Exists but needs activation - - thin1: 208GB thin pool exists -- **VMs:** 0 containers -- **Recommendation:** Enable storage, ready for VM deployment +- **CPU:** 32 cores @ 2.40GHz +- **Memory:** ~125 GiB reported; **~66%** used +- **Guests:** **57** +- **Recommendation:** Monitor **thin1**/**data** utilization before large disks. ### r630-02 (192.168.11.12) - Previously "pve2" - **Status:** ✅ Operational -- **CPU:** 56 cores @ 2.00GHz (excellent performance) -- **Memory:** 251GB (2% used - excellent) -- **Storage:** - - local: 220GB (0% used) - - thin1-thin6: 6 volume groups (~230GB each) - - **VMs Found:** VMIDs 100, 101, 102, 103, 104, 105, 130, 5000, 6200 on thin1 - - **VMs Found:** VMID 7800 on thin4 -- **VMs:** Has VMs on storage (need verification) -- **Recommendation:** Verify VMs are accessible, enable storage +- **CPU:** 56 cores @ 2.00GHz +- **Memory:** ~125 GiB reported; **~62%** used +- **Guests:** **41** (includes infra CTs such as NPMplus — see inventory docs) +- **Recommendation:** Watch **thin1-r630-02** … **thin6** pool **%**. --- @@ -365,36 +355,36 @@ qm list ## 📊 Resource Summary -| Host | CPU | Memory | Storage | VMs | Status | -|------|-----|--------|---------|-----|--------| -| ml110 | 6 cores (slow) | 125GB (75% used) | 907GB (26% used) | 34 | ⚠️ Overloaded | -| r630-01 | 32 cores | 503GB (1% used) | 536GB (0% used) | 0 | ✅ Ready | -| r630-02 | 56 cores | 251GB (2% used) | 1.4TB (thin pools) | Has VMs | ✅ Ready | +| Host | CPU | Memory (reported) | Guests (2026-05-09) | Notes | +|------|-----|-------------------|---------------------|-------| +| ml110 | 6 | ~63 GiB · ~3% used | **0** | Quorum / idle | +| r630-01 | 32 | ~125 GiB · ~66% used | **57** | Highest count | +| r630-02 | 56 | ~125 GiB · ~62% used | **41** | Thin pools active | +| r630-03 | 32 | ~125 GiB · ~62% used | **19** | | +| r630-04 | 32 | ~125 GiB · ~17% used | **19** | | -**Total Resources:** -- **CPU:** 94 cores total -- **Memory:** 879GB total -- **Storage:** ~2.8TB total -- **VMs:** 34+ (need to verify r630-02) +**Totals:** **158** logical cores in cluster; **~562 GiB** reported `maxmem` sum (API); **136** running guests. Storage is **node-local thin** — see `pvesm status` per host. --- ## 🎯 Priority Actions -### 🔴 CRITICAL (Do Before Starting VMs) -1. Enable storage on r630-01 -2. Enable storage on r630-02 -3. Verify existing VMs on r630-02 +### Historical (migration era) + +The checklist below applied when **r630** storage names and hostname references were being repaired. For **current** capacity actions, use [PROXMOX_CLUSTER_ARCHITECTURE.md](../02-architecture/PROXMOX_CLUSTER_ARCHITECTURE.md) and live `pvesm status`. + +### 🔴 CRITICAL (historical) +1. ~~Enable storage on r630-01~~ — validate pools if UI shows **disabled** stubs +2. ~~Enable storage on r630-02~~ — **thin** pools are active on **r630-02** (verify utilization) ### ⚠️ HIGH PRIORITY -1. Update cluster configuration -2. Verify all VMs are accessible -3. Test storage performance +1. Continue distributing new CTs across **r630-01** … **r630-04** using thin pool headroom +2. Reconcile any **disabled** storage rows that reference foreign node names (cosmetic in `pvesm`) ### 📋 RECOMMENDED -1. Distribute VMs across hosts -2. Implement monitoring -3. Plan VLAN migration +1. Monitor **thin pool %** on busy nodes (**r630-01**, **r630-02**) +2. Implement / maintain Prometheus/Grafana per operational stack +3. Keep [ALL_VMIDS_ENDPOINTS.md](../04-configuration/ALL_VMIDS_ENDPOINTS.md) updated when adding VMIDs --- diff --git a/docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md b/docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md index b93e1158..59411175 100644 --- a/docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md +++ b/docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md @@ -38,6 +38,9 @@ The Transaction Router + Policy Engine maps chain labels to IDs: | ALL_MAINNET | 651940 | | HUB_EVM | 1 | | TEZOS | 1729 | +| SOLANA | non-EVM (planned hops) | +| TRON | non-EVM (planned hops) | +| XRPL | non-EVM (planned hops) | ## Contract References @@ -46,8 +49,18 @@ The Transaction Router + Policy Engine maps chain labels to IDs: ## API Endpoints -- **POST /v1/routes/chain138-to-usdtz** (multi-chain-execution): Accepts `source_chain_id=651940` -- **POST /api/v1/routes/chain138-to-usdtz** (dbis_core): Same +Structural route plans (multi-hop through Ethereum hub) are implemented in **multi-chain-execution** and mirrored in **dbis_core** under `/api/v1/routes`. + +| Method | Path | Service | Purpose | +|--------|------|---------|---------| +| POST | `/v1/routes/chain138-to-usdtz` | multi-chain-execution | Tezos USDtz path; `source_chain_id` **138** or **651940** | +| GET | `/v1/routes/non-evm-families` | multi-chain-execution | Lists `tezos_usdtz`, `solana_usdc`, `tron_usdt`, `xrpl_usdc` metadata | +| POST | `/v1/routes/plan-non-evm` | multi-chain-execution | Non-EVM multi-hop plan + `quote_hints`; body `destination_family` + `destination_address` | +| POST | `/api/v1/routes/chain138-to-usdtz` | dbis_core | Same as above with optional `async_quotes` (CCIP / Plenty enrichment) | +| GET | `/api/v1/routes/non-evm-families` | dbis_core | Same listing as multi-chain-execution | +| POST | `/api/v1/routes/plan-non-evm` | dbis_core | Same planner + protocol **allowlist**; `async_quotes` supported for `tezos_usdtz` only | + +Canonical planner source: `multi-chain-execution/src/lib/non-evm-route-planner.ts` — keep `dbis_core/src/core/defi/tezos-usdtz/non-evm-route-planner.ts` in sync when editing hops. ## Related Docs diff --git a/docs/11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md b/docs/11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md index 5f8bca0c..85925c6a 100644 --- a/docs/11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md +++ b/docs/11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md @@ -1,6 +1,6 @@ # Chains & Protocols: Bridges, Ledger, and Integrations -**Last Updated:** 2026-01-29 +**Last Updated:** 2026-05-09 **Status:** Authoritative reference for bridge chains and protocol acceptance --- @@ -92,6 +92,16 @@ To move Gnosis (100), Celo (42220), and Wemix (1111) from **Config ready** to ** --- +### 1.5 Cosmos ecosystem (optional — IBC / Noble / Osmosis / CosmWasm) + +**Status:** Not a live default bridge in this matrix. Chain 138 is EVM; Cosmos connectivity is **optional** and requires explicit bridges, registry rows, and ops. + +**Canonical runbook (streams A–E, checklists, completion criteria):** [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md](COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md) — templates: [`config/cosmos-chain138-optional/README.md`](../../config/cosmos-chain138-optional/README.md) — **gaps audit:** [COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md](COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md) + +**On-chain design hook:** `ChainRegistry` supports `ChainType.Cosmos`. Historical stub: `smom-dbis-138/archive/solidity/contracts/bridge/adapters/non-evm/CosmosAdapter.sol` (not production IBC). + +--- + ## Part 2: Protocols That Have Accepted ChainID 138 ### 2.1 Ledger App-Ethereum @@ -222,6 +232,7 @@ Ledger Live and other clients can discover ChainID 138 RPCs via Chainlist. | **CCIP** | ✅ Custom implementation | ❌ | | **Li.Fi** | ❌ | ❌ | | **Bridge Vault** | — | — | +| **Cosmos / IBC (optional)** | ⚠️ Not live by default | — | --- diff --git a/docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md b/docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md index bacc465c..e485064d 100644 --- a/docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md +++ b/docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md @@ -102,7 +102,7 @@ Contracts deployed after chain initialization: | Role | Address | Explorer (Chain 138 only) | |------|---------|---------------------------| -| **Deployer / Admin** | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | [explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8](https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8) | +| **Deployer / Admin** | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | [explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8](https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8) | - **Chain 138:** use the link above. **Other chains (e.g. mainnet):** use [blockscan.com](https://blockscan.com/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8) to check balances on those chains. See [EXPLORER_AND_BLOCKSCAN_REFERENCE](EXPLORER_AND_BLOCKSCAN_REFERENCE.md). @@ -167,7 +167,7 @@ Use these addresses in config and .env. **smom-dbis-138/.env** has been reconcil | UNIVERSAL_CCIP_BRIDGE | `0xCd42e8eD79Dc50599535d1de48d3dAFa0BE156F8` | | BRIDGE_ORCHESTRATOR | `0x89aB428c437f23bAB9781ff8Db8D3848e27EeD6c` | -**Multicall / Oracle Aggregator (operator to confirm):** Address `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` is documented as both. **Action:** Open [explorer](https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506), confirm which contract is at this slot (Multicall vs Oracle Aggregator), and document the result here (e.g. "Verified: Multicall" or "Verified: Oracle Aggregator"). See [CONTRACT_NEXT_STEPS_LIST](CONTRACT_NEXT_STEPS_LIST.md) and [OPERATOR_ACTIONS](OPERATOR_ACTIONS.md). +**Multicall / Oracle Aggregator (operator to confirm):** Address `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` is documented as both. **Action:** Open [explorer](https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506), confirm which contract is at this slot (Multicall vs Oracle Aggregator), and document the result here (e.g. "Verified: Multicall" or "Verified: Oracle Aggregator"). See [CONTRACT_NEXT_STEPS_LIST](CONTRACT_NEXT_STEPS_LIST.md) and [OPERATOR_ACTIONS](OPERATOR_ACTIONS.md). **Reconcile .env:** ~~Copy the canonical block from `.env.example` into `.env`.~~ **Done 2026-02-11.** One entry per variable; matches this table. @@ -192,7 +192,7 @@ Chain 138 WETH9 bridges (LINK fee and native ETH fee) have mainnet destination s 2. **Oracle Proxy** address is the primary address for MetaMask price feeds 3. **CCIP Router** is required for cross-chain communication 4. All addresses are on ChainID 138 -5. **On-chain confirmation:** Verify each contract at https://explorer.d-bis.org/address/
and use [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md) for source verification. +5. **On-chain confirmation:** Verify each contract at https://explorer.d-bis.org/addresses/
and use [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md) for source verification. 6. **.env:** Reconciled to single source of truth (one entry per variable). When adding new contract vars, keep one entry and align with this table and `.env.example`. --- diff --git a/docs/11-references/CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md b/docs/11-references/CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md index 4cccdaa2..91090039 100644 --- a/docs/11-references/CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md +++ b/docs/11-references/CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md @@ -94,7 +94,7 @@ source smom-dbis-138/.env 2>/dev/null ./scripts/verify/run-contract-verification-with-proxy.sh ``` -Manual verification: https://explorer.d-bis.org/address/
#verify-contract +Manual verification: https://explorer.d-bis.org/addresses/
#verify-contract --- @@ -163,7 +163,7 @@ Manual verification: https://explorer.d-bis.org/address/
#verify-contrac | **Deploy all phases (138)** | `cd smom-dbis-138 && ./scripts/deployment/deploy-all-phases.sh` — Skips when env set; `--all` run every phase; `--phase N` one phase; `--dry-run` preview. | | **Run all commands on Proxmox via SSH** | `./scripts/run-on-proxmox-via-ssh.sh` (optionally `--sync` to rsync repo first). Runs: on-chain check, deploy-all-phases, phoenix-deploy-api install, Blockscout verification. Set PROXMOX_HOST, PROXMOX_REPO_PATH if needed. | | Single contract bytecode check | `cast code
--rpc-url https://rpc-core.d-bis.org` | -| Explorer link | https://explorer.d-bis.org/address/
| +| Explorer link | https://explorer.d-bis.org/addresses/
| --- diff --git a/docs/11-references/CONTRACT_NEXT_STEPS_LIST.md b/docs/11-references/CONTRACT_NEXT_STEPS_LIST.md index 875f733c..ab27ce5f 100644 --- a/docs/11-references/CONTRACT_NEXT_STEPS_LIST.md +++ b/docs/11-references/CONTRACT_NEXT_STEPS_LIST.md @@ -48,7 +48,7 @@ **Last run summary:** [OPERATOR_RUN_SUMMARY](OPERATOR_RUN_SUMMARY.md) (2026-02-11). From a host without LAN/VPN: on-chain check and Blockscout were run but RPC/Blockscout unreachable; .env verified reconciled; Multicall/Oracle not confirmed (explorer timeout). - [x] **On-chain check:** Run `./scripts/verify/check-contracts-on-chain-138.sh` — **Done 2026-02-11** (26/26 OK). Re-run when new contracts are deployed. -- [ ] **Blockscout verification:** From host that can reach Blockscout: `source smom-dbis-138/.env 2>/dev/null; ./scripts/verify/run-contract-verification-with-proxy.sh`. Or verify each contract at https://explorer.d-bis.org/address/
#verify-contract. +- [ ] **Blockscout verification:** From host that can reach Blockscout: `source smom-dbis-138/.env 2>/dev/null; ./scripts/verify/run-contract-verification-with-proxy.sh`. Or verify each contract at https://explorer.d-bis.org/addresses/
#verify-contract. - [x] **Reconcile .env:** Verified 2026-02-11: `smom-dbis-138/.env` has one entry per variable and matches [CONTRACT_ADDRESSES_REFERENCE § Canonical](CONTRACT_ADDRESSES_REFERENCE.md#-canonical-source-of-truth-chain-138). No change needed. - [x] **Multicall vs Oracle at 0x99b3...:** **Done 2026-02-11.** Confirmed via RPC (`latestRoundData()` returns data, `getBlockNumber()` reverts): **Oracle Aggregator**. Documented in [CONTRACT_ADDRESSES_REFERENCE](CONTRACT_ADDRESSES_REFERENCE.md). diff --git a/docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md b/docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md new file mode 100644 index 00000000..a3c5ff1e --- /dev/null +++ b/docs/11-references/COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md @@ -0,0 +1,90 @@ +# Cosmos ↔ Chain 138 — Gaps and Inconsistencies (full inventory) + +**Last Updated:** 2026-05-09 +**Companion:** [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md](COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md), [`config/cosmos-chain138-optional/STATUS.md`](../../config/cosmos-chain138-optional/STATUS.md) +**Purpose:** Single list of **missing implementation**, **documentation conflicts**, and **operator/config drift** relevant to the optional Cosmos program and adjacent Chain 138 surfaces. Use this for remediation planning; do not treat archive paths as live authority. + +--- + +## 1. Cosmos program — implementation gaps + +| ID | Gap | Impact | +|----|-----|--------| +| C-01 | **No production IBC path** on Chain 138 (EVM only). No Noble, Axelar, Wormhole, or native light-client consumer contracts in the active `smom-dbis-138/contracts/` compile graph for Cosmos. | Streams A–D cannot go “live” without new contracts + vendor stack. | +| C-02 | **`CosmosAdapter` is archived** (`smom-dbis-138/archive/solidity/.../CosmosAdapter.sol`), not deployed as production IBC; oracle-lock pattern only. | Any doc implying “Cosmos adapter shipped” is wrong unless scoped to archive/history. | +| C-03 | **No `forge` / bash deploy script** in repo for registering a Cosmos chain in `ChainRegistry` or deploying a revived Cosmos adapter. | Operators have no copy-paste deploy for stream A4. | +| C-04 | **No CI gate** for `config/cosmos-chain138-optional/*` (optional JSON/YAML schema validation). | Typos in future real configs may slip until manual review. | +| C-05 | **Route planner / `dbis_core`** has no checked-in Cosmos leg (Osmosis quotes, IBC denom parser) wired to the runbook’s stream B/C. | Stream B2–B4 are spec-only. | +| C-06 | **`NON_EVM_NETWORK_HEALTH_AND_LANE_STATUS`** covers Solana / Tron / XRPL only — not Cosmos Hub, Noble, or Osmosis RPC health. | Stream E3 observability gap for Cosmos legs. | +| C-07 | **Token lists / token-aggregation** have no ICS-20 denom schema or allowlist file consumed in CI (only human templates under `config/cosmos-chain138-optional/`). | Stream C governance is out-of-band. | +| C-08 | **No Keplr / Leap / Snap integration** in this monorepo for Cosmos UX. | Stream E2 remains documentation-only. | +| C-09 | **Hyperledger Phase 4** (Cacti/Fabric/Indy) still partially open per `MULTI_CHAIN_DEPLOYMENT_GUIDE.md`; CosmWasm stream D4 depends on an explicit decision. | D4 may be N/A or blocked on unrelated work. | + +--- + +## 2. Cosmos program — documentation and naming inconsistencies + +| ID | Inconsistency | Resolution hint | +|----|----------------|-----------------| +| D-01 | **Archive** `COMPLETE_MULTI_CHAIN_DEPLOYMENT.md` marks **CosmosAdapter** as “Complete” while **current** `MULTI_CHAIN_DEPLOYMENT_GUIDE.md` leaves Cosmos as unchecked Phase 3 and points to the optional runbook. | Treat archive as historical; add banner in archive file or link to runbook (optional cleanup). | +| D-02 | Runbook **§7 E6** says “adopted subset of **A–D**” for closure; streams are now **A–E** (E is closure). | Wording: “product streams A–D + stream E closure” to avoid implying E is optional when anything is live. | +| D-03 | `config/cosmos-chain138-optional/cross-cutting.example.md` table still says “Streams adopted (subset of **A–D**)”. | Align to A–D product + E closure. | +| D-04 | **`.cursor/rules/project-doc-and-deployment-refs.mdc`** description line still says deployment phases **A–D** only (Cosmos is optional, not a phase letter). | Cosmetic; optional edit to “A–D + optional Cosmos runbook”. | +| D-05 | **GALATIC_SUMMARY** §1.2 table still lists **DODOPMMIntegration** at `0x5BDc62f1…` while workspace canonical token/PMM rule and on-chain probe narrative use **live traded** `0x86ADA6Ef…` (parallel stack `0x5BDc62f1…` documented as seeded / different role). | **Critical:** Reconcile `GALATIC_SUMMARY`, `POOL_ACCESS_DASHBOARD_API_MCP`, token-aggregation env examples, and `CONTRACT_ADDRESSES_REFERENCE` with [EXPLORER_TOKEN_LIST_CROSSCHECK.md](EXPLORER_TOKEN_LIST_CROSSCHECK.md) section 8 and [ADDRESS_MATRIX_AND_STATUS.md](ADDRESS_MATRIX_AND_STATUS.md). | + +--- + +## 3. Chain 138 global gaps (affects operator trust, not only Cosmos) + +| ID | Issue | Evidence / notes | +|----|--------|------------------| +| G-01 | **`config/smart-contracts-master.json`** is referenced as the master JSON in `CONTRACT_ADDRESSES_REFERENCE.md` and `load-project-env.sh`, but the file is **often absent** from checkout (see `reports/inventory/deployed-contracts-by-network.md`). | Single-source-of-truth claim in docs is weaker than reality; `.env` drives most scripts. | +| G-02 | **`CCIP_SENDER` address drift:** canonical doc lists **`0x105F8A15b819948a89153505762444Ee9f324684`**; `smom-dbis-138/.env` may set **`CCIP_SENDER=0x958Ae39Fb387A3653402a7eDA6847629b6F6F195`**. Verification then skips CCIPSender (“no bytecode” at 958…). | Reconcile `.env` with `CONTRACT_ADDRESSES_REFERENCE.md` and `scripts/verify-contracts-blockscout.sh` defaults. | +| G-03 | **`CCIP_ROUTER`:** `CONTRACT_ADDRESSES_REFERENCE` lists **`0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817`**; canonical `.env` reconcile output (completable step) has shown **`0x89EC6574eeAC72Ed1b93DfCa4DB43547C8367FF0`**. | Same as G-02: pick canonical row and align docs + env. | +| G-04 | **`CCIPWETH9Bridge` on 138:** doc line `0xcacfd227…` vs reconcile snippet **`0x9cba0D04…`** (from operator env templates). | Confirm on explorer which address holds live WETH9 bridge; fix the other surface. | +| G-05 | **`CONTRACT_ADDRESSES_REFERENCE`** notes **Multicall** and **Oracle Aggregator** share **`0x99b3511a2d315a497c8112c1fdd8d508d4b1e506`** with a warning — operator confusion risk. | Explorer slot verification + doc clarification. | +| G-06 | **`OPERATOR_READY_CHECKLIST`** historical note: WETH10 “not a smart contract” vs later verification success. | May be stale; refresh or date-stamp. | +| G-07 | **61-address on-chain check** includes a fixed list; it does **not** assert consistency between that list and `CONTRACT_ADDRESSES_REFERENCE` / `.env` for every CCIP variant. | Add optional cross-check script or extend check script. | + +--- + +## 4. In-repo contradictions (PMM “canonical” stack) + +Two different “canonical” narratives coexist: + +- **Narrative A (many deployment docs, GALATIC, CONTRACT_ADDRESSES, thirdweb insight examples):** `DODOPMMIntegration = 0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` as corrected stack; pools such as `0xff8d3b8f…`. +- **Narrative B (workspace rules, EXPLORER_TOKEN_LIST_CROSSCHECK section 8 on-chain table, cursor `chain138-tokens-and-pmm.mdc`):** **Live traded** integration **`0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895`** with listed pools; **`0x5BDc62f1…`** described as parallel / different immutables / not for dApp wiring. + +Until reconciled, **any automation** (PMM mesh, liquidity scripts, MCP pool indexer env) may point at the wrong integration. + +--- + +## 5. Optional Cosmos templates — limitations + +| ID | Limitation | +|----|------------| +| T-01 | All `*.example.*` files use **TODO** placeholders — intentionally not production. | +| T-02 | No JSON Schema (`.schema.json`) for `denom-trace.example.json` — validation is manual. | +| T-03 | **STATUS.md** “Doc complete” for A–E means **runbook + templates**, not mainnet IBC. | + +--- + +## 6. Suggested remediation order (repo hygiene) + +1. **Resolve PMM dual-canon (section 4)** in `CONTRACT_ADDRESSES_REFERENCE`, `GALATIC_SUMMARY`, env examples, and aggregation docs — align with `EXPLORER_TOKEN_LIST_CROSSCHECK.md` section 8 after one on-chain proof export. +2. **Reconcile CCIP** env vars vs `CONTRACT_ADDRESSES_REFERENCE` (G-02–G-04). +3. **Restore or retire** `config/smart-contracts-master.json` claim (G-01). +4. **Fix wording** D-02, D-03, optional D-01 archive banner. +5. **Cosmos implementation** only after (1)–(3): deploy path, then C-03 script, then C-04 CI. + +--- + +## 7. Related documents + +- [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md](COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md) +- [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md](CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md) +- [CONTRACT_ADDRESSES_REFERENCE.md](CONTRACT_ADDRESSES_REFERENCE.md) +- [ADDRESS_MATRIX_AND_STATUS.md](ADDRESS_MATRIX_AND_STATUS.md) +- [EXPLORER_TOKEN_LIST_CROSSCHECK.md](EXPLORER_TOKEN_LIST_CROSSCHECK.md) +- [NON_EVM_NETWORK_HEALTH_AND_LANE_STATUS.md](NON_EVM_NETWORK_HEALTH_AND_LANE_STATUS.md) +- [`config/cosmos-chain138-optional/STATUS.md`](../../config/cosmos-chain138-optional/STATUS.md) diff --git a/docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md b/docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md new file mode 100644 index 00000000..bd0ca8c9 --- /dev/null +++ b/docs/11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md @@ -0,0 +1,154 @@ +# Cosmos Ecosystem and Chain 138 — Optional Integrations Runbook + +**Last Updated:** 2026-05-09 +**Status:** Optional program — streams **A–E** fully documented; live bridges remain operator-adopted (see `config/cosmos-chain138-optional/STATUS.md`) +**Audience:** Architecture, bridge operators, compliance, routing/backend owners + +--- + +## 1. Scope and facts + +- **Chain 138** is an **EVM (Besu)** network. It is **not** a Cosmos SDK zone and does **not** run the Cosmos stack natively. +- **“Full Cosmos integration”** therefore means **bridges, attestations, routing, wallets, and ops** that connect **IBC-capable chains** to **138 contracts and policies**, not enabling IBC on 138 itself. +- **Canonical Chain 138 tokens and PMM** remain per [EXPLORER_TOKEN_LIST_CROSSCHECK.md](EXPLORER_TOKEN_LIST_CROSSCHECK.md) (sections 5 and 8) and [ADDRESS_MATRIX_AND_STATUS.md](ADDRESS_MATRIX_AND_STATUS.md). Any Cosmos-side asset must map to those policies explicitly. +- **Known cross-repo conflicts** (PMM addresses, CCIP env drift, missing `smart-contracts-master.json`): [COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md](COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md) (section 3–4 are global, not Cosmos-only). +- **On-chain today:** `ChainRegistry` includes `ChainType.Cosmos` for metadata registration. A historical **`CosmosAdapter`** stub lives under `smom-dbis-138/archive/solidity/contracts/bridge/adapters/non-evm/CosmosAdapter.sol` (oracle-confirmed lock pattern; **not** production IBC). See [MASTER_CONTRACTS_AND_INFRASTRUCTURE_LIST.md](../../smom-dbis-138/docs/MASTER_CONTRACTS_AND_INFRASTRUCTURE_LIST.md). + +--- + +## 2. Preconditions (all streams) + +Complete before treating any stream as “in progress”: + +| # | Gate | Owner | +|---|------|--------| +| P1 | **Bridge class chosen** per corridor: trust-minimized (e.g. general-message bridge vendor), CCTP-style where applicable, or oracle/custodial (closest to archived adapter) | Architecture + risk | +| P2 | **Allowlist policy** for Cosmos denoms and bridge contracts (who may mint/list on 138) | Compliance + engineering | +| P3 | **Relayer / vendor SLA** or explicit “public relayer only” acceptance | Ops | +| P4 | **Incident playbooks** (stuck IBC packet, bridge pause, oracle disagreement) | Ops | +| P5 | **Explorer / indexer** plan: Blockscout covers 138 EVM only; Cosmos legs need Mintscan (or equivalent) and/or internal indexer | Platform | + +--- + +## 3. Stream A — Noble (and similar) native Cosmos stable corridor + +**Objective:** Recognized native Cosmos stablecoin (e.g. Noble-issued USDC) maps cleanly to **138 canonical stables** or wrapped representations, with auditability. + +| Step | Task | Done when | +|------|------|-----------| +| A1 | Select **source chain** (e.g. Noble) and **bridge stack** (vendor contracts + supported routes) | Written decision + vendor docs linked in internal wiki | +| A2 | Define **138-side mint/burn or lock/mint** contract(s) and roles (admin, pauser, oracle or light-client consumer) | Spec reviewed; addresses reserved in deployment tracker | +| A3 | Map **denom → 138 token address** (single canonical mapping table; no duplicate “explorer” addresses) | Row in repo config or registry doc + CI check if applicable | +| A4 | Register **non-EVM metadata** in `ChainRegistry` (`ChainType.Cosmos`, `chainIdentifier`, `adapter`, `additionalData` for channel/bridge IDs) | On-chain tx executed; [CONTRACT_ADDRESSES_REFERENCE.md](CONTRACT_ADDRESSES_REFERENCE.md) updated | +| A5 | **Liquidity** plan: seed PMM/vault or rely on external DEX only | Funding signed off | +| A6 | **E2E dry path**: small amount round-trip (Cosmos → 138 → Cosmos or to declared sink) | Tx hashes recorded; monitoring dashboards live | +| A7 | Update [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md](CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md) and [GALATIC_SUMMARY.md](../GALATIC_SUMMARY.md) | PR merged | + +--- + +## 4. Stream B — Osmosis (and other Cosmos DEX) liquidity and routing + +**Objective:** Quotes and optional **execution legs** on Cosmos DEXes appear in the same **route-planning** discipline as other non-EVM legs (compare [TEZOS_USDTZ_INTEGRATION.md](TEZOS_USDTZ_INTEGRATION.md): route classes, not native 138 DEX). + +| Step | Task | Done when | +|------|------|-----------| +| B1 | Choose **read-only vs executable** integration (quotes only vs signed swaps on Osmosis) | Flag in route engine config | +| B2 | **Denom/path parser** for pool routes and IBC hops | Unit tests + sample traces | +| B3 | Integrate **slippage, timeout, and failure** handling for IBC + DEX latency | Documented limits in API/runbook | +| B4 | If using **aggregator stack**: align with existing Axelar/Squid-class patterns where applicable ([BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md](BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md)) | Code path reviewed | +| B5 | **Security review** for any server-side signing or custody | Sign-off recorded | + +--- + +## 5. Stream C — Generic IBC token (ICS-20 / app tokens) + +**Objective:** Any **allowlisted** IBC-traced asset can be registered and routed, not only USDC. + +| Step | Task | Done when | +|------|------|-----------| +| C1 | Define **IBC hash / full trace** schema stored in `ChainMetadata.additionalData` (or off-chain registry mirrored on-chain) | Schema doc + one example on testnet | +| C2 | **Tiering:** Tier-1 (manual governance allowlist) vs Tier-2 (automated with stricter caps) | Policy published | +| C3 | Per-token: **bridge + DEX + 138 contract** triple documented | Matrix row per denom | +| C4 | **User-facing warnings** for non-Noble / long trace paths | UI/API copy merged | +| C5 | Align token list / explorer publication with [EXPLORER_TOKEN_LIST_CROSSCHECK.md](EXPLORER_TOKEN_LIST_CROSSCHECK.md) | No conflicting canonical rows | + +--- + +## 6. Stream D — CosmWasm application ↔ Chain 138 + +**Objective:** One or more **named CosmWasm contracts** (e.g. DEX, lending, ID) integrate via explicit messages, not “all of CosmWasm.” + +| Step | Task | Done when | +|------|------|-----------| +| D1 | Pin **contract address(es), code ID, migrate policy** | Version doc | +| D2 | Choose **control path**: ICA/ICQ, general-message bridge to EVM, or off-chain coordinator + oracle | Sequence diagrams stored | +| D3 | **138-side counterpart** (vault, adapter, settlement hook) deployed or extended | Addresses in CONTRACT_ADDRESSES_REFERENCE | +| D4 | **Hyperledger** path only if required: Cacti/Firefly alignment per [MULTI_CHAIN_DEPLOYMENT_GUIDE.md](../../smom-dbis-138/docs/deployment/MULTI_CHAIN_DEPLOYMENT_GUIDE.md) Phase 4 | Explicit decision recorded | +| D5 | Wasm **CI/build** and upgrade runbook (outside or inside monorepo) | Maintainer sign-off | + +--- + +## 7. Stream E — Cross-cutting layers and program closure + +**Objective:** Relayers, wallets, indexing, audits, rate limits, and **formal program closure** so Cosmos legs are operable and governable, not only contract code. + +| Step | Task | Done when | +|------|------|-----------| +| E1 | **IBC relayers:** channels, fees, redundancy, key custody documented | Table in ops doc or [`config/cosmos-chain138-optional/cross-cutting.example.md`](../../config/cosmos-chain138-optional/cross-cutting.example.md) filled for live | +| E2 | **Wallets:** Keplr / Leap / MetaMask Snaps (if used) user flows documented | Links in cross-cutting doc | +| E3 | **Indexing:** Cosmos txs and IBC events in SIEM or internal logs | Dashboard or log path recorded | +| E4 | **Audits:** per bridge deployment and per new token class | Report URLs stored | +| E5 | **Rate limits:** API and on-chain caps for mint/burn | Limits published to integrators | +| E6 | **Program closure:** P1–P5 signed; adopted **product streams A–D** named; stream **E** (E1–E6) complete for adopted scope; `CHAINS_AND_PROTOCOLS` + `GALATIC_SUMMARY` updated for **live only**; annual review owner | [`config/cosmos-chain138-optional/STATUS.md`](../../config/cosmos-chain138-optional/STATUS.md) reflects live vs doc-only | + +**Templates (copy before live use):** [`config/cosmos-chain138-optional/README.md`](../../config/cosmos-chain138-optional/README.md) + +--- + +## 8. Suggested implementation order (still optional) + +1. Preconditions (section 2) +2. Stream A (one stable corridor end-to-end) +3. Stream C on top of the same bridge (allowlist + schema) +4. Stream B (quotes, then optional execution) +5. Stream D (first CosmWasm app as reference) +6. Stream E (relayers through program closure) — typically **last**, but E1–E3 planning can start in parallel + +--- + +## 9. Definition of “complete” for this program + +The **program** is complete when: + +- Every stream (**A–E**) that the organization **chooses to adopt** has all its rows in sections 3–7 marked done, with **on-chain or operational evidence** (tx hashes, run URLs, audit PDFs) referenced from [ADDRESS_MATRIX_AND_STATUS.md](ADDRESS_MATRIX_AND_STATUS.md) or a linked ops doc; and +- [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md](CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md) reflects **live** vs **not used** for Cosmos-related bridges; and +- Deferred streams are explicitly listed as **out of scope** in [`config/cosmos-chain138-optional/STATUS.md`](../../config/cosmos-chain138-optional/STATUS.md) or in [PHASE_D_OPTIONAL_CHECKLIST.md](../03-deployment/PHASE_D_OPTIONAL_CHECKLIST.md). + +**Repo doc-and-template completion (no live bridge implied):** Streams A–E are **fully specified** in this runbook plus `config/cosmos-chain138-optional/*`; see `STATUS.md` for doc vs live matrix. + +Streams explicitly **not** adopted remain **optional**; no further work is required. + +--- + +## 10. Repo map (quick) + +| Item | Location | +|------|----------| +| Templates + status matrix | `config/cosmos-chain138-optional/` | +| `ChainType.Cosmos` | `smom-dbis-138/contracts/registry/ChainRegistry.sol` | +| Historical Cosmos adapter | `smom-dbis-138/archive/solidity/contracts/bridge/adapters/non-evm/CosmosAdapter.sol` | +| Multi-chain Phase 3 checklist | `smom-dbis-138/docs/deployment/MULTI_CHAIN_DEPLOYMENT_GUIDE.md` | +| Non-EVM adapter backlog | `smom-dbis-138/docs/deployment/REMAINING_TASKS_COMPLETE_LIST.md` (`BRG-DEP-005`) | +| Bridge reference (EVM-focused) | This directory, `CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md` | +| Tezos route pattern (analogy) | `TEZOS_USDTZ_INTEGRATION.md` | + +--- + +## 11. Related documents + +- [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md](CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md) +- [TEZOS_USDTZ_INTEGRATION.md](TEZOS_USDTZ_INTEGRATION.md) +- [BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md](BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md) +- [NON_EVM_NETWORK_HEALTH_AND_LANE_STATUS.md](NON_EVM_NETWORK_HEALTH_AND_LANE_STATUS.md) +- [EXPLORER_TOKEN_LIST_CROSSCHECK.md](EXPLORER_TOKEN_LIST_CROSSCHECK.md) +- [COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md](COSMOS_CHAIN138_GAPS_AND_INCONSISTENCIES.md) — gaps, doc conflicts, env drift, PMM dual-canon diff --git a/docs/11-references/CW_TOKENS_AND_NETWORKS.md b/docs/11-references/CW_TOKENS_AND_NETWORKS.md index efcde856..943fbc9d 100644 --- a/docs/11-references/CW_TOKENS_AND_NETWORKS.md +++ b/docs/11-references/CW_TOKENS_AND_NETWORKS.md @@ -2,20 +2,20 @@ **Purpose:** Single reference for all compliant wrapped tokens (cW*) and the networks where they are defined or deployed. -**Source of truth:** `config/token-mapping-multichain.json` (`cToCwSymbolMapping`), `smom-dbis-138/script/deploy/DeployCWTokens.s.sol`, and `smom-dbis-138/.env` (for recorded addresses). +**Source of truth:** `config/token-mapping-multichain.json` (`cToCwSymbolMapping`), `cross-chain-pmm-lps/config/deployment-status.json`, `reports/status/cw-mesh-deployment-matrix-latest.json`, `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts`, `smom-dbis-138/script/deploy/DeployCWTokens.s.sol`, and `smom-dbis-138/.env` (for recorded addresses). --- ## 1. All cW* tokens and deployability -All 12 cW* tokens are deployable via `DeployCWTokens.s.sol` (env flags `DEPLOY_CWUSDT=1`, `DEPLOY_CWEURC=1`, etc.; default all 1). Set `DEPLOY_*=0` to skip a token. +All 12 primary GRU cW* tokens are deployable via `DeployCWTokens.s.sol` (env flags `DEPLOY_CWUSDT=1`, `DEPLOY_CWEURC=1`, etc.; default all 1). Set `DEPLOY_*=0` to skip a token. | cW* Token | Deploy script | Networks deployable (script) | Deployed on (addresses in .env) | |-----------|---------------|------------------------------|----------------------------------| -| **cWUSDT** | Yes | 1, 25, 56, 137, 100, 43114, 8453, 42161, 10 | All 9 chains (Mainnet, Cronos, BSC, Polygon, Gnosis, Avalanche, Base, Arbitrum, Optimism) | -| **cWUSDC** | Yes | 1, 25, 56, 137, 100, 43114, 8453, 42161, 10 | All 9 chains | -| **cWEURC** | Yes | 1, 25, 56, 137, 100, 43114, 8453, 42161, 10 | BSC, Polygon, Gnosis, Avalanche, Base, Optimism (Mainnet/Cronos/Arbitrum: deploy failed nonce/gas) | -| **cWEURT** | Yes | Same | Same as cWEURC | +| **cWUSDT** | Yes | 1, 10, 56, 100, 137, 8453, 42161, 42220, 43114 (+ optional tooling for `25`) | Active on nine promoted public mesh chains (excludes Cronos `25`) | +| **cWUSDC** | Yes | Same | Same | +| **cWEURC** | Yes | Same | Same | +| **cWEURT** | Yes | Same | Same | | **cWGBPC** | Yes | Same | Same | | **cWGBPT** | Yes | Same | Same | | **cWAUDC** | Yes | Same | Same | @@ -37,11 +37,12 @@ All 12 cW* tokens are deployable via `DeployCWTokens.s.sol` (env flags `DEPLOY_C | 56 | BSC (BNB Chain) | | 100 | Gnosis Chain | | 137 | Polygon | +| 42220 | Celo | | 43114 | Avalanche C-Chain | | 8453 | Base | | 42161 | Arbitrum One | -Chains **42220** (Celo) and **1111** (Wemix) are in the token-mapping file for c*→cW* mapping but are not in the current `deploy-tokens-and-weth-all-chains-skip-canonical.sh` chain list for cW* deployment. **651940** (ALL Mainnet) is env-validation only; no cW* deploy from this repo. +Chain **1111** (Wemix) is in the token-mapping file and has gas-scaffold entries, but it is not promoted as a live cW settlement surface because the current Chain 138 CCIP router still rejects the Wemix selector. **651940** (ALL Mainnet) is a separate Alltra corridor: bidirectional bridge inventory is published, but it is not a public cW mesh destination in the current canonical registry. --- @@ -49,7 +50,7 @@ Chains **42220** (Celo) and **1111** (Wemix) are in the token-mapping file for c | Chain(s) | Bridge / receiver | Bridge code mints cW*? | Notes | |----------|-------------------|------------------------|-------| -| All (1, 25, 56, 137, 100, 43114, 8453, 42161, 10) | CCIPRelayBridge (Mainnet), CCIPWETH9_BRIDGE_* (others) | **No** | Current suite is WETH-only; `ccipReceive` only transfers the received token. Granting MINTER/BURNER to these addresses allows DeployCWTokens to run but does not enable cross-chain mint until the receiver is extended or a dedicated cW* receiver (e.g. TwoWayTokenBridgeL2) is deployed. See [CW_BRIDGE_APPROACH.md](../07-ccip/CW_BRIDGE_APPROACH.md) and [CW_BRIDGE_TASK_LIST.md](CW_BRIDGE_TASK_LIST.md). | +| Active cW mesh chains (nine-chain promoted surface: 1, 10, 56, 100, 137, 8453, 42161, 42220, 43114) | CCIPRelayBridge (Mainnet), CCIPWETH9_BRIDGE_* (others) | **No, for cW mint/burn semantics** | Current bridge suite is WETH-oriented; `ccipReceive` only transfers the received token. cW token contracts, roles, PMM pools, and Uniswap V2 mesh evidence are active on the nine-chain set, but do not claim full c*<->cW* mint/burn E2E until dedicated cW receivers are deployed and proof transfers pass. Cronos `25` may appear in legacy wave-1 artifacts; it is **not** part of the promoted nine-chain public `cW*` count. See [CW_BRIDGE_APPROACH.md](../07-ccip/CW_BRIDGE_APPROACH.md) and [CW_BRIDGE_TASK_LIST.md](CW_BRIDGE_TASK_LIST.md). | | After Phase B or C | Extended bridge or TwoWayTokenBridgeL2 / CCIPReceiverCW | **Yes** (when implemented) | Per [CW_BRIDGE_APPROACH.md](../07-ccip/CW_BRIDGE_APPROACH.md), Option 2 (dedicated receiver) is chosen; deploy TwoWayTokenBridgeL2 or equivalent per chain and point `CW_BRIDGE_` to it for cW* mint/burn. | --- @@ -72,7 +73,7 @@ Chains **42220** (Celo) and **1111** (Wemix) are in the token-mapping file for c ## 4. References -- [C_TO_CW_MAPPER_MAPPING.md](../04-configuration/C_TO_CW_MAPPER_MAPPING.md) — c*→cW* symbol and address mapping for the mapper. -- [TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS.md](TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS.md) — Deployer tokens on other chains; cW* deploy path. -- [config/token-mapping-multichain.json](../../config/token-mapping-multichain.json) — `cToCwSymbolMapping` and per-pair `_cW` tokens. -- **[CW_BRIDGE_TASK_LIST.md](../00-meta/CW_BRIDGE_TASK_LIST.md)** — Detailed task list: note review, checks performed, and phases (bridge extension vs dedicated receiver, deploy cW*, wire config, E2E). +- [C_TO_CW_MAPPER_MAPPING.md](../04-configuration/C_TO_CW_MAPPER_MAPPING.md) - c* to cW* symbol and address mapping for the mapper. +- [TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS.md](TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS.md) - Deployer tokens on other chains; cW* deploy path. +- [config/token-mapping-multichain.json](../../config/token-mapping-multichain.json) - `cToCwSymbolMapping` and per-pair `_cW` tokens. +- **[CW_BRIDGE_TASK_LIST.md](../00-meta/CW_BRIDGE_TASK_LIST.md)** - Detailed task list: note review, checks performed, and phases (bridge extension vs dedicated receiver, deploy cW*, wire config, E2E). diff --git a/docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md b/docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md new file mode 100644 index 00000000..d69c21b7 --- /dev/null +++ b/docs/11-references/DEFILLAMA_DFIO_META_MAIN_DODO_ADAPTER_TVL.md @@ -0,0 +1,58 @@ +# DefiLlama DODO adapter — `dfio_meta_main` TVL breakdown + +**Purpose:** Explain why the DODO protocol TVL **per-chain breakdown** can show **`dfio_meta_main` (Chain 138, SDK key `dfio_meta_main`) as `0.00`** while other chains (BSC, Ethereum, Avax, …) show non-zero balances that still sum to a plausible **total** (for example ~12M when meta-main is missing from the priced subtotal). + +**Operator replay (full procedure):** [../00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md](../00-meta/METAMASK_GRU_DEFILLAMA_CHAIN138_MASTER_REFERENCE.md) (section 3 — DefiLlama fork, test, PR tracking, post-merge updates). + +**Upstream tracking (open PR):** [DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) — *Add dfio_meta_main (chain 138) to DODO adapter + token mappings* (head: `Defi-Oracle-Meta-Blockchain:feat/chain-138-dfio-meta-main-dodo`). **GitHub `state` was verified `OPEN` on 2026-05-10** — keep using the PR URL as source of truth; update this note when it merges or is replaced. + +**Production `defillama.com` picks this up when that PR merges** (plus their usual indexer lag). + +**Canonical DefiLlama ↔ Chain 138 map:** [../04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md](../04-configuration/defillama/CHAIN138_DEFILLAMA_ECOSYSTEM_MAP.md). + +**Provider matrix row (DeFiLlama):** [../04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md](../04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md) (external repos table, DeFiLlama row). + +## Symptom + +Example breakdown shape: + +- `bsc`, `ethereum`, `avax`, … — non-zero. +- **`dfio_meta_main` — `0.00`.** +- **`total`** — equals the sum of the priced chains only (e.g. ~12.36M), so it **looks** as if meta-main contributes nothing. + +That pattern usually means **Chain 138 was not fully wired into the DODO TVL path** (missing chain key, missing hub-stable **`fixBalancesTokens`** entries, or no DVM factory/`fromBlock` slice for 138), so **`dfio_meta_main` USD attribution is wrong or absent** — not that DODO necessarily has zero inventory on 138. + +**CI / comment tables:** [PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) notes that workflow summary tables can **abbreviate** per-chain USD; a small slice next to a large total may show as **`0.00`** in that summary even when the full log or a local run shows a non-zero **`dfio_meta_main`** line — use the full workflow log or local test below when auditing. + +## Root cause (adapter) + +Until **`dfio_meta_main`** is integrated end-to-end in [DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters), DODO TVL on Chain 138 does not flow through the same **chain registry + token price/fix-up + pool discovery** path as the other networks. [PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) adds, per its description: + +- `projects/helper/chains.json` — **`dfio_meta_main`** +- `projects/helper/tokenMapping.js` — **`fixBalancesTokens.dfio_meta_main`** (canonical **cUSDT** / **cUSDC** → priced IDs for USD valuation) +- `projects/dodo/index.js` — DODO V2 **DVM** on **`dfio_meta_main`** (factory `0xc93870594C7f83A0aE076c2e30b494Efc526b68E`, **`fromBlock` `3510162`**) + +The exact balance helper (`sumTokens` vs `sumTokens2`, etc.) is whatever lands in **`master`** after review; the important operator signal is **merge [PR #19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** for integrated 138 coverage. + +## Fix (maintainer / fork) + +Track and land **[DefiLlama/DefiLlama-Adapters#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198)** (or an equivalent maintainer commit that carries the same three files). Fork for pushes: [Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters](https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters). + +After the change is in your clone, a local check should show a dedicated **`dfio_meta_main`** line (magnitude depends on live on-chain DODO custody and Llama pricing): + +```bash +cd DefiLlama-Adapters && node test.js projects/dodo/index.js +``` + +Look for `--- dfio_meta_main ---` in the output. A **very large** USD number can occur if large hub stable balances sit in counted contracts and price feeds resolve. + +## “Resolved” for operators + +| Surface | Meaning | +|--------|---------| +| **Fork / PR branch** matching [#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) | **Resolved** for local adapter output; **`dfio_meta_main` should not be missing** from the integrated DODO path for that reason. | +| **defillama.com** public UI | **Resolved** when [#19198](https://github.com/DefiLlama/DefiLlama-Adapters/pull/19198) is **merged** into [DefiLlama/DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters) `master` (or whatever branch production indexes), then after their deploy lag. | + +## Machine-readable touchpoints + +[`config/defillama-chain138-touchpoints.json`](../../config/defillama-chain138-touchpoints.json) — includes **`upstreamPullRequest`**, **`upstreamPullRequestState`**, **`upstreamPullRequestStateAsOf`**, **`upstreamPullRequestLastGhCheckUtc`**, and under **`docs`**: **`dodoDfioMetaMainTvlNote`**, **`masterReference`**, **`repositoriesAndPrs`** (update when GitHub state or paths change). diff --git a/docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md b/docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md index 035d2348..85f9ab42 100644 --- a/docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md +++ b/docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md @@ -1,6 +1,6 @@ # Deployed Tokens, Bridges, DODO/Uniswap LPs — Status & Complete Routing Map -**Last Updated:** 2026-04-21 +**Last Updated:** 2026-05-09 **Purpose:** Single reference for (1) deployed tokens/coins and bridges per destination network, (2) DODO and Uniswap LPs with addresses, and (3) a complete mapping of all possible routes for routing **to** and **from** each chain. > Audit note (2026-04-19): this doc was synced against the current machine-readable deployment graph and generated mesh reports. When this doc disagrees with older narrative runbooks, prefer `cross-chain-pmm-lps/config/deployment-status.json`, `reports/status/cw-mesh-deployment-matrix-latest.json`, and `reports/extraction/promod-uniswap-v2-phase2-wave1-completion-status-latest.json`. See `reports/status/MULTI_NETWORK_DEPLOYMENT_AUDIT_20260419.md`. @@ -14,8 +14,8 @@ | **Chain 138 tokens** | ✅ Live | Chain 138 inventory is broader than older summaries implied: cUSDT, cUSDC, WETH, WETH10, LINK, the 10 compliant fiat additions, cXAUC/cXAUT, and `cAUSDT` are all evidenced in current repo-backed inventories. | | **Chain 138 DODO PMM** | ✅ Live | DODOPMMIntegration + 6 public pools are live on Chain 138: stable pairs plus the three public XAU pools. Official mirror `USDT/USDC` pools were corrected and funded locally. DODOPMMProvider remains deployed; routing cUSDT↔cUSDC and the live local direct/ XAU paths are active. | | **Chain 138 → destination bridges** | ✅ CCIP + Alltra with one blocked lane | CCIP WETH9/WETH10 routing is evidenced to Ethereum, BSC, Polygon, Arbitrum, Optimism, Avalanche, Cronos, Gnosis, and Celo; AlltraAdapter 138↔651940 is live. Wemix contracts are deployed and wired, but the current Chain 138 CCIP router still rejects the Wemix selector (`CCIPRouter: chain not supported`), so the lane is not sendable yet. | -| **Destination tokens (cW\*)** | ✅ Active on 10 public chains, scaffold-only on Wemix | `deployment-status.json` records active public-chain `cW*` inventory on `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`; `1111` currently remains `planned_gas_scaffold` with `bridgeAvailable=false`, not a promoted live settlement surface. | -| **Destination DODO/Uniswap LPs** | ⚠️ Mixed by venue and confidence | Public-chain deployment evidence is no longer design-only: `deployment-status.json` records PMM pool inventories on the active public chains, and generated Uniswap V2 reports confirm a complete wave-1 wrapped-mesh rollout on `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`. Explorer publication is still blocked in some cases. | +| **Destination tokens (cW\*)** | ✅ Active on 9 public chains, scaffold-only on Wemix | `deployment-status.json` records active public-chain `cW*` inventory on `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` (Cronos `25` is **not** counted here: no promoted live `cW*` surface); `1111` currently remains `planned_gas_scaffold` with `bridgeAvailable=false`, not a promoted live settlement surface. | +| **Destination DODO/Uniswap LPs** | ⚠️ Mixed by venue and confidence | Public-chain deployment evidence is no longer design-only: `deployment-status.json` records PMM pool inventories on the active public chains, and generated Uniswap V2 reports confirm wave-1 wrapped-mesh rollout on the same nine-chain `cW*` set (excluding Cronos). Explorer publication is still blocked in some cases. | | **Uniswap on 138** | ❌ | No Uniswap V2/V3 factory on Chain 138. | | **Uniswap on ALL Mainnet (651940)** | ⚠️ Documentation only | HYDX token and other Alltra ecosystem tokens are present on-chain, but Uniswap V2/V3, DODO, HYDX router/factory, and pool inventory are still not committed in canonical deployment status. | @@ -41,7 +41,7 @@ | Chain ID | Name | Tokens / bridges | |----------|------|-------------------| | **1** | Ethereum Mainnet | WETH, USDT, USDC, DAI; CCIP WETH9/WETH10 bridges; relay router. cW* deployable. | -| **25** | Cronos | Active `cW*` inventory plus wave-1 wrapped-mesh completion evidence. | +| **25** | Cronos | CCIP WETH9/WETH10; **no** promoted public `cW*` inventory (excluded from the nine-chain `cW*` count). | | **56** | BSC | Active `cW*` inventory plus wave-1 wrapped-mesh completion evidence. | | **100** | Gnosis | Active `cW*` inventory plus wave-1 wrapped-mesh completion evidence. | | **137** | Polygon | Active `cW*` inventory plus wave-1 wrapped-mesh completion evidence. | @@ -118,7 +118,7 @@ | DODO PMM | ⚠️ Env | `CHAIN_651940_DODO_POOL_MANAGER`, `_DODO_VENDING_MACHINE` | | HYDX | Present | Token `0x0d9793861AEB9244AD1B34375a83A6730F6AdD38`; no pool addresses in repo. | -### 4.3 Public chains (1, 56, 137, 10, 100, 25, 42161, 8453, 43114, 42220, 1111) — cW* edge pools +### 4.3 Public chains (1, 56, 137, 10, 100, 42161, 8453, 43114, 42220, 1111) — cW* edge pools **Designed (pool-matrix.json):** Per chain, first-tier pools: cWUSDT/USDC or cWUSDT/USDT, cWUSDC/USDC or cWUSDC/USDT, plus cWAUSDT, cWEURC, cWEURT, cWUSDW vs hub stable. Optional: cW*/USDT, cW*/DAI, cW*/BUSD, cW*/mUSD. @@ -184,7 +184,7 @@ | 138 | DeFi Oracle | cUSDT, cUSDC, cEURT, cXAUC, cXAUT, WETH, WETH10, LINK, official mirrors | — | — | DODO: 6 public pools live + 3 private XAU pools live | | 1 | Ethereum | WETH, USDT, USDC, DAI | ✅ CCIP WETH9/10 | ✅ CCIP relay | Native DEX; cW* design | | 651940 | ALL Mainnet | AUSDT, USDC, WETH, WALL | ✅ AlltraAdapter | ✅ AlltraAdapter | Documentation-only same-chain surface; no canonical router/factory/pool inventory committed yet | -| 25 | Cronos | cW* active | ✅ CCIP | ✅ CCIP | Wave-1 wrapped-mesh complete; explorer publication still partial | +| 25 | Cronos | No promoted `cW*` | ✅ CCIP | ✅ CCIP | WETH CCIP live; `cW*` not counted in nine-chain public surface | | 56, 100, 137, 10, 42161, 8453, 43114 | BSC, Gnosis, Polygon, Optimism, Arbitrum, Base, Avalanche | cW* active | ✅ CCIP | ✅ CCIP | Active cW* inventory plus generated wrapped-mesh rollout evidence | | 42220 | Celo | cW* active | ✅ CCIP | ✅ CCIP | Active cW* inventory plus generated wrapped-mesh rollout evidence | | 1111 | Wemix | planned_gas_scaffold | ⏳ | ⏳ | Contracts exist and destinations are wired, but the current Chain 138 CCIP router still rejects the Wemix selector, so proof transfer/promotion cannot proceed yet | diff --git a/docs/11-references/DEPLOYER_CONTRACTS_INVENTORY_AND_VERIFICATION_STATUS.md b/docs/11-references/DEPLOYER_CONTRACTS_INVENTORY_AND_VERIFICATION_STATUS.md index bd43912b..6ef30e9a 100644 --- a/docs/11-references/DEPLOYER_CONTRACTS_INVENTORY_AND_VERIFICATION_STATUS.md +++ b/docs/11-references/DEPLOYER_CONTRACTS_INVENTORY_AND_VERIFICATION_STATUS.md @@ -171,7 +171,7 @@ Files that contain smart contract addresses or deployment configuration: 1. **Chain 138:** From a host that can reach Blockscout (e.g. LAN), run: - `./scripts/verify/run-contract-verification-with-proxy.sh` to submit verification for contracts in the verification config. - - Open https://explorer.d-bis.org/address/
for each contract and confirm “Contract source code verified” (or equivalent). + - Open https://explorer.d-bis.org/addresses/
for each contract and confirm “Contract source code verified” (or equivalent). 2. **This doc:** Set **Verified** to **Yes** or **No** for each contract after checking. Leave **Unknown** until checked. --- diff --git a/docs/11-references/DEPLOYER_WALLET_FUNDING_PLAN_PMM_POOLS.md b/docs/11-references/DEPLOYER_WALLET_FUNDING_PLAN_PMM_POOLS.md index 941f1351..02f98fd9 100644 --- a/docs/11-references/DEPLOYER_WALLET_FUNDING_PLAN_PMM_POOLS.md +++ b/docs/11-references/DEPLOYER_WALLET_FUNDING_PLAN_PMM_POOLS.md @@ -12,7 +12,7 @@ | Item | Value | |------|--------| | **Address** | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | -| **Chain 138 Explorer** | https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 | +| **Chain 138 Explorer** | https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8 | | **Other chains (e.g. Mainnet)** | https://blockscan.com/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 | This address is the **documented deployer/admin** for Chain 138 (contracts, pools, and operations). The same address may hold assets or be used for deployments on other networks. diff --git a/docs/11-references/EXPLORER_AND_BLOCKSCAN_REFERENCE.md b/docs/11-references/EXPLORER_AND_BLOCKSCAN_REFERENCE.md index 1ff47579..5f414a43 100644 --- a/docs/11-references/EXPLORER_AND_BLOCKSCAN_REFERENCE.md +++ b/docs/11-references/EXPLORER_AND_BLOCKSCAN_REFERENCE.md @@ -11,7 +11,7 @@ | Chain | Explorer | Example (deployer address) | |-------|----------|----------------------------| | **Ethereum mainnet, etc.** | **https://blockscan.com** | [blockscan.com/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8](https://blockscan.com/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8) — use to check balances on mainnet and other supported chains | -| **Chain 138 (SMOM-DBIS-138)** | **https://explorer.d-bis.org** | [explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8](https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8) — use for Chain 138 only | +| **Chain 138 (SMOM-DBIS-138)** | **https://explorer.d-bis.org** | [explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8](https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8) — use for Chain 138 only | - **To check balances on other chains:** Use **blockscan.com** (or etherscan.io) and select the chain; same address, different chain = different balance. - **To check balances on Chain 138:** Use **explorer.d-bis.org** only; Blockscan does not show Chain 138. @@ -21,7 +21,7 @@ ## Deployer / Admin address - **Address:** `0x4A666F96fC8764181194447A7dFdb7d471b301C8` -- **Chain 138 (balance, txs, contracts):** https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 +- **Chain 138 (balance, txs, contracts):** https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8 - **Other chains (e.g. Ethereum mainnet):** https://blockscan.com/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 - **RPC (Chain 138):** https://rpc-core.d-bis.org or http://192.168.11.211:8545 diff --git a/docs/11-references/LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md b/docs/11-references/LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md index 2463df4f..f0d2c978 100644 --- a/docs/11-references/LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md +++ b/docs/11-references/LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE.md @@ -49,7 +49,7 @@ defi_oracle_meta_mainnet: { ethereumLikeInfo: { chainId: 138 }, explorerViews: [ { - address: "https://explorer.d-bis.org/address/$address", + address: "https://explorer.d-bis.org/addresses/$address", tx: "https://explorer.d-bis.org/tx/$hash", token: "https://explorer.d-bis.org/token/$contractAddress?a=$address", }, diff --git a/docs/11-references/OPERATOR_OPTIONAL_CHECKLIST.md b/docs/11-references/OPERATOR_OPTIONAL_CHECKLIST.md index d5ff54d8..d0d285d5 100644 --- a/docs/11-references/OPERATOR_OPTIONAL_CHECKLIST.md +++ b/docs/11-references/OPERATOR_OPTIONAL_CHECKLIST.md @@ -32,7 +32,7 @@ forge verify-contract 0x105F8A15b819948a89153505762444Ee9f324684 \ - Other contracts and full manual commands: [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md) and script `scripts/verify-contracts-blockscout.sh` (addresses/paths). **Option C — Manual UI:** -Open https://explorer.d-bis.org/address/
#verify-contract and use "Verify & Publish" with Standard JSON or flattened source. +Open https://explorer.d-bis.org/addresses/
#verify-contract and use "Verify & Publish" with Standard JSON or flattened source. --- diff --git a/docs/11-references/OPERATOR_RUN_SUMMARY.md b/docs/11-references/OPERATOR_RUN_SUMMARY.md index 77981033..af814d8a 100644 --- a/docs/11-references/OPERATOR_RUN_SUMMARY.md +++ b/docs/11-references/OPERATOR_RUN_SUMMARY.md @@ -31,7 +31,7 @@ **Result:** Proxy runs and submits to Blockscout. Submission for CCIPSender can fail with `Invalid JSON, result=None` (Blockscout API response). When Blockscout is unreachable from the host, run times out. -**To complete:** Run from a host that can reach Blockscout. If submission returns Invalid JSON, try manual verification at https://explorer.d-bis.org/address/<ADDRESS>#verify-contract or check [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md). +**To complete:** Run from a host that can reach Blockscout. If submission returns Invalid JSON, try manual verification at https://explorer.d-bis.org/addresses/<ADDRESS>#verify-contract or check [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md). --- @@ -45,7 +45,7 @@ ## 4. Multicall vs Oracle at 0x99b3... -**Action:** Attempted to fetch the contract page at https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506 to determine which contract (Multicall or Oracle Aggregator) is deployed at that slot. +**Action:** Attempted to fetch the contract page at https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506 to determine which contract (Multicall or Oracle Aggregator) is deployed at that slot. **Result:** **Done 2026-02-11.** Confirmed via RPC: `latestRoundData()` returns data, `getBlockNumber()` reverts — **Oracle Aggregator**. Documented in [CONTRACT_ADDRESSES_REFERENCE](CONTRACT_ADDRESSES_REFERENCE.md). diff --git a/docs/11-references/SMART_CONTRACTS_INVENTORY_SIMPLE.md b/docs/11-references/SMART_CONTRACTS_INVENTORY_SIMPLE.md index 149153d6..57f08831 100644 --- a/docs/11-references/SMART_CONTRACTS_INVENTORY_SIMPLE.md +++ b/docs/11-references/SMART_CONTRACTS_INVENTORY_SIMPLE.md @@ -42,7 +42,7 @@ **Full next steps, operator checklist, and all recommendations:** [CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE](CONTRACT_NEXT_STEPS_AND_RECOMMENDATIONS_COMPLETE.md). -1. **Confirm on-chain** — Run `./scripts/verify/check-contracts-on-chain-138.sh` (36 addresses) or open each address at https://explorer.d-bis.org/address/
. +1. **Confirm on-chain** — Run `./scripts/verify/check-contracts-on-chain-138.sh` (36 addresses) or open each address at https://explorer.d-bis.org/addresses/
. 2. **Verify source on Blockscout** — Use [BLOCKSCOUT_VERIFICATION_GUIDE](../08-monitoring/BLOCKSCOUT_VERIFICATION_GUIDE.md) and `scripts/verify/run-contract-verification-with-proxy.sh`. 3. **Do not use deprecated bridge** — Use **CCIPWETH9Bridge** at `0xcacfd227A040002e49e2e01626363071324f820a` only. 4. **If deploying more contracts** — Use **`--with-gas-price 1000000000`** for all `forge script`/`forge create` on Chain 138. Phased core: [CONTRACTS_TO_DEPLOY](CONTRACTS_TO_DEPLOY.md), [CONTRACT_DEPLOYMENT_RUNBOOK](../03-deployment/CONTRACT_DEPLOYMENT_RUNBOOK.md). RPC: Set `RPC_URL_138` in `smom-dbis-138/.env` (e.g. `http://192.168.11.211:8545` or `https://rpc-core.d-bis.org`). Set `PRIVATE_KEY` there too. diff --git a/docs/12-quick-reference/QUICK_REFERENCE.md b/docs/12-quick-reference/QUICK_REFERENCE.md index 9df21dc3..9756ec0e 100644 --- a/docs/12-quick-reference/QUICK_REFERENCE.md +++ b/docs/12-quick-reference/QUICK_REFERENCE.md @@ -200,6 +200,6 @@ bash ProxmoxVE/ct/AppName.sh -u - [ ] Use `msg_*` functions for messages - [ ] Use `$STD` for command execution - [ ] Quote all variables -- [ ] Test on Proxmox VE 8.4+ or 9.0+ +- [ ] Test on Proxmox VE **9.x** (live cluster **9.1.7**, kernel **6.17.13-2-pve**, **2026-05-09**) - [ ] Implement update function (if applicable) - [ ] Update documentation (if needed) diff --git a/docs/GALATIC_SUMMARY.md b/docs/GALATIC_SUMMARY.md index e2509c17..df310e90 100644 --- a/docs/GALATIC_SUMMARY.md +++ b/docs/GALATIC_SUMMARY.md @@ -1,7 +1,7 @@ # Galatic Summary — Chain 138 Ecosystem, Routing, and Integrations **Audience:** Galatic -**Last Updated:** 2026-03-26 +**Last Updated:** 2026-05-09 **Purpose:** Single reference for what is built, all available routing (DEX and aggregators), On-Ramp/Off-Ramp, Fireblocks, and other integrations. --- @@ -193,6 +193,7 @@ | **Bridge Vault** | Multi-chain stablecoin (Ethereum, Polygon, BNB) | cUSDT, cUSDC | Vault: `0x31884f84555210FFB36a19D2471b8eBc7372d0A8` | | **Truth Network** | Ethereum ↔ Truth (Substrate); adapter on 138 | TRUU (lift/burn) | TruthNetworkAdapter on 138; Truth registered in ChainRegistry | | **AlltraAdapter** | ALL Mainnet (651940) | Custom | CCIP/Li.Fi not supported on 651940 | +| **Cosmos / IBC (optional)** | Cosmos Hub, Noble, Osmosis, app chains | Policy-dependent | Not live by default; streams A–E + templates: [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK](11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md), [`config/cosmos-chain138-optional/`](../config/cosmos-chain138-optional/README.md) | **References:** - [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION](11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md) @@ -228,7 +229,7 @@ | Quote API | token-aggregation: GET /api/v1/quote, POST /api/bridge/quote | | On/off-ramp | MAINNET_RAMP_USER_FLOWS, INTEGRATIONS_QUICK_REFERENCE | | Fireblocks | FIREBLOCKS_WEB3_INTEGRATION, RPC_ENDPOINTS_MASTER | -| Bridges & chains | CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION, CCIP_CHAIN_SELECTORS | +| Bridges & chains | CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION, CCIP_CHAIN_SELECTORS, [COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK](11-references/COSMOS_ECOSYSTEM_CHAIN138_OPTIONAL_INTEGRATIONS_RUNBOOK.md) | | Integrations list | INTEGRATIONS_QUICK_REFERENCE (root) | --- diff --git a/docs/api/openapi-multi-chain-execution.yaml b/docs/api/openapi-multi-chain-execution.yaml index c47aab0f..95401b13 100644 --- a/docs/api/openapi-multi-chain-execution.yaml +++ b/docs/api/openapi-multi-chain-execution.yaml @@ -29,6 +29,41 @@ paths: '400': description: Validation error + /v1/routes/non-evm-families: + get: + summary: List non-EVM route families (Tezos, Solana, Tron, XRPL) and supported source chains + responses: + '200': + description: family metadata and supported_source_chain_ids (138, 651940) + + /v1/routes/plan-non-evm: + post: + summary: Multi-hop route plan from Chain 138 or ALL Mainnet through Ethereum hub to a non-EVM destination + requestBody: + content: + application/json: + schema: + type: object + required: [destination_family, destination_address] + properties: + destination_family: + type: string + enum: [tezos_usdtz, solana_usdc, tron_usdt, xrpl_usdc] + destination_address: + type: string + description: Destination address validated per family (Tezos tz1… / Solana base58 / Tron T… / XRPL r…) + source_chain_id: { type: integer, default: 138 } + source_asset: { type: string, description: Defaults to cUSDC on 138 or AUSDC on 651940 when omitted } + source_amount: { type: string } + async_quotes: + type: boolean + description: Reserved for future enrichment (Tezos path uses chain138-to-usdtz with async_quotes) + responses: + '200': + description: Route plan with hops, optional quote_hints (aggregator / bridge entry points), destination_family + '400': + description: Validation error + /v1/intents: post: summary: Create intent diff --git a/docs/archive/completion/ALI_INFRASTRUCTURE_COMPLETE.md b/docs/archive/completion/ALI_INFRASTRUCTURE_COMPLETE.md index 8a82dc57..568507d2 100644 --- a/docs/archive/completion/ALI_INFRASTRUCTURE_COMPLETE.md +++ b/docs/archive/completion/ALI_INFRASTRUCTURE_COMPLETE.md @@ -95,9 +95,9 @@ These contracts were pre-deployed when ChainID 138 was initialized: | **Multicall** | `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` | ✅ Pre-deployed | Batch contract calls | **Explorer Links:** -- [WETH9](https://explorer.d-bis.org/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) -- [WETH10](https://explorer.d-bis.org/address/0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f) -- [Multicall](https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) +- [WETH9](https://explorer.d-bis.org/addresses/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) +- [WETH10](https://explorer.d-bis.org/addresses/0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f) +- [Multicall](https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) --- @@ -112,9 +112,9 @@ Price feed and oracle infrastructure: | **Price Feed Keeper** | `0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04` | ✅ Deployed | Automated price updates | **Explorer Links:** -- [Oracle Proxy](https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6) -- [Oracle Aggregator](https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) -- [Price Feed Keeper](https://explorer.d-bis.org/address/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04) +- [Oracle Proxy](https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6) +- [Oracle Aggregator](https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) +- [Price Feed Keeper](https://explorer.d-bis.org/addresses/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04) **Note:** The Oracle Proxy address (`0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6`) is the primary address used by MetaMask for price feeds. @@ -130,8 +130,8 @@ Cross-Chain Interoperability Protocol contracts: | **CCIP Sender** | `0x105F8A15b819948a89153505762444Ee9f324684` | ✅ Deployed | Cross-chain message sender | **Explorer Links:** -- [CCIP Router](https://explorer.d-bis.org/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) -- [CCIP Sender](https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684) +- [CCIP Router](https://explorer.d-bis.org/addresses/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) +- [CCIP Sender](https://explorer.d-bis.org/addresses/0x105F8A15b819948a89153505762444Ee9f324684) --- @@ -145,8 +145,8 @@ Cross-chain bridge contracts for WETH tokens: | **CCIPWETH10Bridge** | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | ✅ Deployed | Bridge for WETH10 | **Explorer Links:** -- [CCIPWETH9Bridge](https://explorer.d-bis.org/address/0x89dd12025bfCD38A168455A44B400e913ED33BE2) -- [CCIPWETH10Bridge](https://explorer.d-bis.org/address/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) +- [CCIPWETH9Bridge](https://explorer.d-bis.org/addresses/0x89dd12025bfCD38A168455A44B400e913ED33BE2) +- [CCIPWETH10Bridge](https://explorer.d-bis.org/addresses/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) --- @@ -164,12 +164,12 @@ Core eMoney infrastructure contracts: | **eMoneyToken Implementation** | `0x0059e237973179146237aB49f1322E8197c22b21` | 10,088 bytes | ✅ Deployed | eMoney token implementation | **Explorer Links:** -- [TokenFactory138](https://explorer.d-bis.org/address/0xEBFb5C60dE5f7C4baae180CA328D3BB39E1a5133) -- [BridgeVault138](https://explorer.d-bis.org/address/0x31884f84555210FFB36a19D2471b8eBc7372d0A8) -- [ComplianceRegistry](https://explorer.d-bis.org/address/0xbc54fe2b6fda157c59d59826bcfdbcc654ec9ea1) -- [DebtRegistry](https://explorer.d-bis.org/address/0x95BC4A997c0670d5DAC64d55cDf3769B53B63C28) -- [PolicyManager](https://explorer.d-bis.org/address/0x0C4FD27018130A00762a802f91a72D6a64a60F14) -- [eMoneyToken Implementation](https://explorer.d-bis.org/address/0x0059e237973179146237aB49f1322E8197c22b21) +- [TokenFactory138](https://explorer.d-bis.org/addresses/0xEBFb5C60dE5f7C4baae180CA328D3BB39E1a5133) +- [BridgeVault138](https://explorer.d-bis.org/addresses/0x31884f84555210FFB36a19D2471b8eBc7372d0A8) +- [ComplianceRegistry](https://explorer.d-bis.org/addresses/0xbc54fe2b6fda157c59d59826bcfdbcc654ec9ea1) +- [DebtRegistry](https://explorer.d-bis.org/addresses/0x95BC4A997c0670d5DAC64d55cDf3769B53B63C28) +- [PolicyManager](https://explorer.d-bis.org/addresses/0x0C4FD27018130A00762a802f91a72D6a64a60F14) +- [eMoneyToken Implementation](https://explorer.d-bis.org/addresses/0x0059e237973179146237aB49f1322E8197c22b21) --- @@ -185,10 +185,10 @@ Compliance and token management contracts: | **FeeCollector** | `0xF78246eB94c6CB14018E507E60661314E5f4C53f` | 5,084 bytes | ✅ Deployed | Fee collection | **Explorer Links:** -- [CompliantUSDT](https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22) -- [CompliantUSDC](https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b) -- [TokenRegistry](https://explorer.d-bis.org/address/0x91Efe92229dbf7C5B38D422621300956B55870Fa) -- [FeeCollector](https://explorer.d-bis.org/address/0xF78246eB94c6CB14018E507E60661314E5f4C53f) +- [CompliantUSDT](https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22) +- [CompliantUSDC](https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b) +- [TokenRegistry](https://explorer.d-bis.org/addresses/0x91Efe92229dbf7C5B38D422621300956B55870Fa) +- [FeeCollector](https://explorer.d-bis.org/addresses/0xF78246eB94c6CB14018E507E60661314E5f4C53f) --- @@ -913,7 +913,7 @@ curl -X POST http://192.168.11.253:8545 \ **Check Contract on Explorer:** ```bash # Open contract in explorer -xdg-open "https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6" +xdg-open "https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6" ``` ### Service Scripts diff --git a/docs/archive/completion/ALL_NEXT_ACTIONS_COMPLETE.md b/docs/archive/completion/ALL_NEXT_ACTIONS_COMPLETE.md index f30994da..670c95ec 100644 --- a/docs/archive/completion/ALL_NEXT_ACTIONS_COMPLETE.md +++ b/docs/archive/completion/ALL_NEXT_ACTIONS_COMPLETE.md @@ -133,7 +133,7 @@ cd /home/intlc/projects/proxmox 3. Foundry to be properly configured **Alternative**: Manual verification via Blockscout UI: -1. Navigate to contract: `https://explorer.d-bis.org/address/
` +1. Navigate to contract: `https://explorer.d-bis.org/addresses/
` 2. Click "Verify & Publish" tab 3. Upload source code and metadata 4. Submit for verification diff --git a/docs/archive/completion/ALL_REMAINING_ACTIONS_COMPLETE.md b/docs/archive/completion/ALL_REMAINING_ACTIONS_COMPLETE.md index 9315c4ce..58596663 100644 --- a/docs/archive/completion/ALL_REMAINING_ACTIONS_COMPLETE.md +++ b/docs/archive/completion/ALL_REMAINING_ACTIONS_COMPLETE.md @@ -120,7 +120,7 @@ cd /home/intlc/projects/proxmox **Manual Verification**: - See `docs/BLOCKSCOUT_VERIFICATION_GUIDE.md` for detailed instructions -- Navigate to contract on Blockscout: `https://explorer.d-bis.org/address/
` +- Navigate to contract on Blockscout: `https://explorer.d-bis.org/addresses/
` - Click "Verify & Publish" tab - Upload source code and metadata diff --git a/docs/archive/completion/BLOCKSCOUT_PARAMETERS_COMPLETE_GUIDE.md b/docs/archive/completion/BLOCKSCOUT_PARAMETERS_COMPLETE_GUIDE.md index 591d3e9d..6d385c00 100644 --- a/docs/archive/completion/BLOCKSCOUT_PARAMETERS_COMPLETE_GUIDE.md +++ b/docs/archive/completion/BLOCKSCOUT_PARAMETERS_COMPLETE_GUIDE.md @@ -264,7 +264,7 @@ docker exec blockscout /app/bin/blockscout version Once you have specific block numbers or addresses, try: ``` https://explorer.d-bis.org/block/ -https://explorer.d-bis.org/address/
+https://explorer.d-bis.org/addresses/
``` These routes may work even if root path doesn't. diff --git a/docs/archive/completion/BRIDGE_CONFIGURATION_COMPLETE.md b/docs/archive/completion/BRIDGE_CONFIGURATION_COMPLETE.md index 1e07702a..b82f69e0 100644 --- a/docs/archive/completion/BRIDGE_CONFIGURATION_COMPLETE.md +++ b/docs/archive/completion/BRIDGE_CONFIGURATION_COMPLETE.md @@ -79,8 +79,8 @@ The Chain 138 bridges are fully configured to receive from Ethereum Mainnet. For ### Blockscout Links -- **CCIPWETH9Bridge (Chain 138)**: https://explorer.d-bis.org/address/0x89dd12025bfcd38a168455a44b400e913ed33be2 -- **CCIPWETH10Bridge (Chain 138)**: https://explorer.d-bis.org/address/0xe0e93247376aa097db308b92e6ba36ba015535d0 +- **CCIPWETH9Bridge (Chain 138)**: https://explorer.d-bis.org/addresses/0x89dd12025bfcd38a168455a44b400e913ed33be2 +- **CCIPWETH10Bridge (Chain 138)**: https://explorer.d-bis.org/addresses/0xe0e93247376aa097db308b92e6ba36ba015535d0 ### Verification Status diff --git a/docs/archive/completion/FINAL_VALIDATION_REPORT.md b/docs/archive/completion/FINAL_VALIDATION_REPORT.md index ce7135b1..1888558d 100644 --- a/docs/archive/completion/FINAL_VALIDATION_REPORT.md +++ b/docs/archive/completion/FINAL_VALIDATION_REPORT.md @@ -60,13 +60,13 @@ | Contract | Verified | Blockscout Link | |----------|----------|----------------| -| Oracle Proxy | ⏳ Pending | https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 | -| Oracle Aggregator | ⏳ Pending | https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506 | -| CCIP Router | ⏳ Pending | https://explorer.d-bis.org/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e | -| CCIP Sender | ⏳ Pending | https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684 | -| CCIPWETH9Bridge | ⏳ Pending | https://explorer.d-bis.org/address/0x89dd12025bfCD38A168455A44B400e913ED33BE2 | -| CCIPWETH10Bridge | ⏳ Pending | https://explorer.d-bis.org/address/0xe0E93247376aa097dB308B92e6Ba36bA015535D0 | -| Price Feed Keeper | ⏳ Pending | https://explorer.d-bis.org/address/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04 | +| Oracle Proxy | ⏳ Pending | https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 | +| Oracle Aggregator | ⏳ Pending | https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506 | +| CCIP Router | ⏳ Pending | https://explorer.d-bis.org/addresses/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e | +| CCIP Sender | ⏳ Pending | https://explorer.d-bis.org/addresses/0x105F8A15b819948a89153505762444Ee9f324684 | +| CCIPWETH9Bridge | ⏳ Pending | https://explorer.d-bis.org/addresses/0x89dd12025bfCD38A168455A44B400e913ED33BE2 | +| CCIPWETH10Bridge | ⏳ Pending | https://explorer.d-bis.org/addresses/0xe0E93247376aa097dB308B92e6Ba36bA015535D0 | +| Price Feed Keeper | ⏳ Pending | https://explorer.d-bis.org/addresses/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04 | **Status**: ⏳ All contracts pending verification on Blockscout. diff --git a/docs/archive/completion/NEXT_ACTIONS_COMPLETED.md b/docs/archive/completion/NEXT_ACTIONS_COMPLETED.md index c1288aff..f9724688 100644 --- a/docs/archive/completion/NEXT_ACTIONS_COMPLETED.md +++ b/docs/archive/completion/NEXT_ACTIONS_COMPLETED.md @@ -98,7 +98,7 @@ cd /home/intlc/projects/proxmox If automated verification fails, verify contracts manually: 1. Navigate to contract on Blockscout: - - Example: `https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` + - Example: `https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` 2. Click "Verify & Publish" tab diff --git a/docs/archive/fixes/ALL_ISSUES_FIXED_SUMMARY.md b/docs/archive/fixes/ALL_ISSUES_FIXED_SUMMARY.md index 3e79aa6b..4e195b4f 100644 --- a/docs/archive/fixes/ALL_ISSUES_FIXED_SUMMARY.md +++ b/docs/archive/fixes/ALL_ISSUES_FIXED_SUMMARY.md @@ -135,8 +135,8 @@ - CCIPWETH10Bridge: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` **Links**: -- https://explorer.d-bis.org/address/0x89dd12025bfcd38a168455a44b400e913ed33be2 -- https://explorer.d-bis.org/address/0xe0e93247376aa097db308b92e6ba36ba015535d0 +- https://explorer.d-bis.org/addresses/0x89dd12025bfcd38a168455a44b400e913ed33be2 +- https://explorer.d-bis.org/addresses/0xe0e93247376aa097db308b92e6ba36ba015535d0 ### 2. Monitor Bridge Transactions diff --git a/docs/archive/historical/ALL_BRIDGE_ADDRESSES_AND_ROUTES.md b/docs/archive/historical/ALL_BRIDGE_ADDRESSES_AND_ROUTES.md index 65fd09e6..535a8351 100644 --- a/docs/archive/historical/ALL_BRIDGE_ADDRESSES_AND_ROUTES.md +++ b/docs/archive/historical/ALL_BRIDGE_ADDRESSES_AND_ROUTES.md @@ -130,11 +130,11 @@ ### Bridge Contracts to Verify 1. **CCIPWETH9Bridge**: `0x89dd12025bfCD38A168455A44B400e913ED33BE2` - - **Blockscout**: https://explorer.d-bis.org/address/0x89dd12025bfcd38a168455a44b400e913ed33be2 + - **Blockscout**: https://explorer.d-bis.org/addresses/0x89dd12025bfcd38a168455a44b400e913ed33be2 - **Status**: ⏳ Needs verification 2. **CCIPWETH10Bridge**: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` - - **Blockscout**: https://explorer.d-bis.org/address/0xe0e93247376aa097db308b92e6ba36ba015535d0 + - **Blockscout**: https://explorer.d-bis.org/addresses/0xe0e93247376aa097db308b92e6ba36ba015535d0 - **Status**: ⏳ Needs verification ### Verification Commands diff --git a/docs/archive/historical/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md b/docs/archive/historical/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md index 579a7878..b138eb6c 100644 --- a/docs/archive/historical/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md +++ b/docs/archive/historical/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md @@ -12,8 +12,8 @@ | Contract | Address | Blockscout Link | Status | |----------|---------|-----------------|--------| -| **CCIPWETH9Bridge** | `0x89dd12025bfCD38A168455A44B400e913ED33BE2` | [View](https://explorer.d-bis.org/address/0x89dd12025bfcd38a168455a44b400e913ed33be2) | ✅ Deployed | -| **CCIPWETH10Bridge** | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | [View](https://explorer.d-bis.org/address/0xe0e93247376aa097db308b92e6ba36ba015535d0) | ✅ Deployed | +| **CCIPWETH9Bridge** | `0x89dd12025bfCD38A168455A44B400e913ED33BE2` | [View](https://explorer.d-bis.org/addresses/0x89dd12025bfcd38a168455a44b400e913ed33be2) | ✅ Deployed | +| **CCIPWETH10Bridge** | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | [View](https://explorer.d-bis.org/addresses/0xe0e93247376aa097db308b92e6ba36ba015535d0) | ✅ Deployed | ### Constructor Arguments @@ -102,8 +102,8 @@ ### Step 1: Navigate to Contract -1. **CCIPWETH9Bridge**: https://explorer.d-bis.org/address/0x89dd12025bfcd38a168455a44b400e913ed33be2 -2. **CCIPWETH10Bridge**: https://explorer.d-bis.org/address/0xe0e93247376aa097db308b92e6ba36ba015535d0 +1. **CCIPWETH9Bridge**: https://explorer.d-bis.org/addresses/0x89dd12025bfcd38a168455a44b400e913ed33be2 +2. **CCIPWETH10Bridge**: https://explorer.d-bis.org/addresses/0xe0e93247376aa097db308b92e6ba36ba015535d0 ### Step 2: Click "Verify & Publish" diff --git a/docs/archive/historical/BLOCKSCOUT_PARAMETERS_AND_ENDPOINTS.md b/docs/archive/historical/BLOCKSCOUT_PARAMETERS_AND_ENDPOINTS.md index eb077cfc..d2573e0c 100644 --- a/docs/archive/historical/BLOCKSCOUT_PARAMETERS_AND_ENDPOINTS.md +++ b/docs/archive/historical/BLOCKSCOUT_PARAMETERS_AND_ENDPOINTS.md @@ -213,8 +213,8 @@ Once the web interface is fully operational, these routes will be available: - `https://explorer.d-bis.org/tx/` - Specific transaction ### Address Routes -- `https://explorer.d-bis.org/address/
` - Address details -- `https://explorer.d-bis.org/address/
/transactions` - Address transactions +- `https://explorer.d-bis.org/addresses/
` - Address details +- `https://explorer.d-bis.org/addresses/
/transactions` - Address transactions ### Token Routes - `https://explorer.d-bis.org/tokens` - All tokens diff --git a/docs/archive/historical/CHAINID_138_BLOCKSCOUT_INTEGRATION.md b/docs/archive/historical/CHAINID_138_BLOCKSCOUT_INTEGRATION.md index 1aadbc4d..d4317922 100644 --- a/docs/archive/historical/CHAINID_138_BLOCKSCOUT_INTEGRATION.md +++ b/docs/archive/historical/CHAINID_138_BLOCKSCOUT_INTEGRATION.md @@ -119,7 +119,7 @@ forge verify-contract \ ### View Contract on Explorer -- **Contract Page**: `https://explorer.d-bis.org/address/` +- **Contract Page**: `https://explorer.d-bis.org/addresses/` - **Manual Verification**: Navigate to contract → "Verify & Publish" tab ### Blockscout API Endpoints diff --git a/docs/archive/root-cleanup-20260220/TOKEN_ADDRESS_VERIFICATION_REPORT.md b/docs/archive/root-cleanup-20260220/TOKEN_ADDRESS_VERIFICATION_REPORT.md index d69abc8e..17319687 100644 --- a/docs/archive/root-cleanup-20260220/TOKEN_ADDRESS_VERIFICATION_REPORT.md +++ b/docs/archive/root-cleanup-20260220/TOKEN_ADDRESS_VERIFICATION_REPORT.md @@ -44,7 +44,7 @@ 4. **Deployment Records:** - ✅ Deployed by: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` - ✅ Code Size: 6,806 bytes - - ✅ Explorer: https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 + - ✅ Explorer: https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 5. **Integration Documentation:** - ✅ `metamask-integration/EXTENSIBILITY_COMPLETE_SUMMARY.md` - Listed as active @@ -82,7 +82,7 @@ 4. **Deployment Records:** - ✅ Deployed by: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` - ✅ Code Size: 6,806 bytes - - ✅ Explorer: https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b + - ✅ Explorer: https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b 5. **Integration Documentation:** - ✅ `metamask-integration/EXTENSIBILITY_COMPLETE_SUMMARY.md` - Listed as active @@ -171,7 +171,7 @@ cast code 0xf22258f57794CC8E06237084b353Ab30fFfa640b \ | **Decimals** | 6 | | **Chain ID** | 138 | | **Network** | DeFi Oracle Meta Mainnet | -| **Explorer** | https://explorer.d-bis.org/address/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 | +| **Explorer** | https://explorer.d-bis.org/addresses/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 | | **Status** | ✅ Deployed and Verified | | **Deployer** | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | | **Code Size** | 6,806 bytes | @@ -186,7 +186,7 @@ cast code 0xf22258f57794CC8E06237084b353Ab30fFfa640b \ | **Decimals** | 6 | | **Chain ID** | 138 | | **Network** | DeFi Oracle Meta Mainnet | -| **Explorer** | https://explorer.d-bis.org/address/0xf22258f57794CC8E06237084b353Ab30fFfa640b | +| **Explorer** | https://explorer.d-bis.org/addresses/0xf22258f57794CC8E06237084b353Ab30fFfa640b | | **Status** | ✅ Deployed and Verified | | **Deployer** | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | | **Code Size** | 6,806 bytes | diff --git a/docs/archive/root-status-reports/BRIDGE_EXECUTION_COMPLETE.md b/docs/archive/root-status-reports/BRIDGE_EXECUTION_COMPLETE.md index 99745bcd..1c5492dc 100644 --- a/docs/archive/root-status-reports/BRIDGE_EXECUTION_COMPLETE.md +++ b/docs/archive/root-status-reports/BRIDGE_EXECUTION_COMPLETE.md @@ -115,7 +115,7 @@ cast call 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 \ ``` 2. **Check transaction on explorer**: - - Visit: `https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8` + - Visit: `https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8` - Look for recent transactions 3. **Check nonce**: diff --git a/docs/archive/root-status-reports/BRIDGE_EXECUTION_STATUS.md b/docs/archive/root-status-reports/BRIDGE_EXECUTION_STATUS.md index f15ce9d9..f5b058f6 100644 --- a/docs/archive/root-status-reports/BRIDGE_EXECUTION_STATUS.md +++ b/docs/archive/root-status-reports/BRIDGE_EXECUTION_STATUS.md @@ -137,7 +137,7 @@ cast call 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 \ 1. **Check if transaction was sent**: ```bash # Check recent transactions on explorer - # https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 + # https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8 ``` 2. **Try with higher gas price**: diff --git a/docs/archive/root-status-reports/BRIDGE_MANUAL_EXECUTION.md b/docs/archive/root-status-reports/BRIDGE_MANUAL_EXECUTION.md index cad93d93..a454b8bd 100644 --- a/docs/archive/root-status-reports/BRIDGE_MANUAL_EXECUTION.md +++ b/docs/archive/root-status-reports/BRIDGE_MANUAL_EXECUTION.md @@ -164,7 +164,7 @@ fi 1. **Check if transaction was sent**: - Look for transaction hash in output - - Check explorer: `https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8` + - Check explorer: `https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8` 2. **Try with higher gas price**: ```bash diff --git a/docs/archive/root-status-reports/BRIDGE_START_STATUS.md b/docs/archive/root-status-reports/BRIDGE_START_STATUS.md index 34aa72b6..afd5a141 100644 --- a/docs/archive/root-status-reports/BRIDGE_START_STATUS.md +++ b/docs/archive/root-status-reports/BRIDGE_START_STATUS.md @@ -78,7 +78,7 @@ cast send 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 \ cast tx --rpc-url http://192.168.11.211:8545 # Or check on explorer -# https://explorer.d-bis.org/address/0x4A666F96fC8764181194447A7dFdb7d471b301C8 +# https://explorer.d-bis.org/addresses/0x4A666F96fC8764181194447A7dFdb7d471b301C8 ``` --- diff --git a/docs/archive/status/BLOCKSCOUT_STATUS_AND_VERIFICATION.md b/docs/archive/status/BLOCKSCOUT_STATUS_AND_VERIFICATION.md index 7abaf5c7..7dae98c4 100644 --- a/docs/archive/status/BLOCKSCOUT_STATUS_AND_VERIFICATION.md +++ b/docs/archive/status/BLOCKSCOUT_STATUS_AND_VERIFICATION.md @@ -137,7 +137,7 @@ cd /home/intlc/projects/proxmox ### Manual Verification 1. Navigate to contract on Blockscout: - - Example: https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 + - Example: https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 2. Click "Code" tab, then "Verify & Publish" diff --git a/docs/archive/status/BRIDGE_VERIFICATION_FINAL_STATUS.md b/docs/archive/status/BRIDGE_VERIFICATION_FINAL_STATUS.md index 685a069b..00319273 100644 --- a/docs/archive/status/BRIDGE_VERIFICATION_FINAL_STATUS.md +++ b/docs/archive/status/BRIDGE_VERIFICATION_FINAL_STATUS.md @@ -160,7 +160,7 @@ **Alternative Verification Methods**: 1. Use different RPC endpoint (if available) -2. Check Blockscout explorer: `https://explorer.d-bis.org/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` +2. Check Blockscout explorer: `https://explorer.d-bis.org/addresses/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` 3. Use internal RPC if accessible: `http://192.168.11.250:8545` ### If On-Chain Verification Passes diff --git a/docs/archive/status/CONTRACT_VALIDATION_STATUS_REPORT.md b/docs/archive/status/CONTRACT_VALIDATION_STATUS_REPORT.md index 9698b1b9..d79c2e06 100644 --- a/docs/archive/status/CONTRACT_VALIDATION_STATUS_REPORT.md +++ b/docs/archive/status/CONTRACT_VALIDATION_STATUS_REPORT.md @@ -42,13 +42,13 @@ All 7 core contracts have been deployed and have bytecode on-chain: | Contract | Address | Verification Status | Blockscout Link | |----------|---------|---------------------|-----------------| -| Oracle Proxy | `0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6) | -| Oracle Aggregator | `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) | -| CCIP Router | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) | -| CCIP Sender | `0x105F8A15b819948a89153505762444Ee9f324684` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684) | -| CCIPWETH9Bridge | `0x89dd12025bfCD38A168455A44B400e913ED33BE2` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0x89dd12025bfCD38A168455A44B400e913ED33BE2) | -| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) | -| Price Feed Keeper | `0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04` | ⏳ Not Verified | [View](https://explorer.d-bis.org/address/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04) | +| Oracle Proxy | `0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6) | +| Oracle Aggregator | `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) | +| CCIP Router | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) | +| CCIP Sender | `0x105F8A15b819948a89153505762444Ee9f324684` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0x105F8A15b819948a89153505762444Ee9f324684) | +| CCIPWETH9Bridge | `0x89dd12025bfCD38A168455A44B400e913ED33BE2` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0x89dd12025bfCD38A168455A44B400e913ED33BE2) | +| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) | +| Price Feed Keeper | `0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04` | ⏳ Not Verified | [View](https://explorer.d-bis.org/addresses/0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04) | **Action Required**: Verify all contracts on Blockscout using `./scripts/verify-all-contracts.sh` diff --git a/docs/archive/status/CONTRACT_VERIFICATION_STATUS.md b/docs/archive/status/CONTRACT_VERIFICATION_STATUS.md index 8f81235a..dcb9c764 100644 --- a/docs/archive/status/CONTRACT_VERIFICATION_STATUS.md +++ b/docs/archive/status/CONTRACT_VERIFICATION_STATUS.md @@ -163,7 +163,7 @@ forge verify-contract \ ### Via Blockscout Web UI -1. Navigate to contract address: `https://explorer.d-bis.org/address/
` +1. Navigate to contract address: `https://explorer.d-bis.org/addresses/
` 2. Look for "Contract" tab 3. Check if "Contract Source Code" is visible (indicates verification) diff --git a/docs/archive/tests/CONTRACT_VALIDATION_CHECKLIST.md b/docs/archive/tests/CONTRACT_VALIDATION_CHECKLIST.md index a8c19214..2cc524ec 100644 --- a/docs/archive/tests/CONTRACT_VALIDATION_CHECKLIST.md +++ b/docs/archive/tests/CONTRACT_VALIDATION_CHECKLIST.md @@ -13,7 +13,7 @@ #### Oracle Proxy (`0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6`) - [ ] **Verification Status** - - [ ] Verified on Blockscout: `https://explorer.d-bis.org/address/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` + - [ ] Verified on Blockscout: `https://explorer.d-bis.org/addresses/0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6` - [ ] Source code visible and matches deployment - [ ] Compiler version matches deployment diff --git a/docs/archive/tests/REMAINING_STEPS_AND_VALIDATION.md b/docs/archive/tests/REMAINING_STEPS_AND_VALIDATION.md index f93168a9..c8680cbe 100644 --- a/docs/archive/tests/REMAINING_STEPS_AND_VALIDATION.md +++ b/docs/archive/tests/REMAINING_STEPS_AND_VALIDATION.md @@ -83,7 +83,7 @@ These contracts were pre-deployed in genesis: **Tools Available**: - Automated script: `./scripts/verify-all-contracts.sh` - Manual verification: See `docs/BLOCKSCOUT_VERIFICATION_GUIDE.md` -- Blockscout UI: `https://explorer.d-bis.org/address/
` +- Blockscout UI: `https://explorer.d-bis.org/addresses/
` ### Priority 2: Contract Validation & Testing diff --git a/multi-chain-execution/package.json b/multi-chain-execution/package.json index a2adfd13..c48c0ef3 100644 --- a/multi-chain-execution/package.json +++ b/multi-chain-execution/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "tsc", "start": "node dist/main.js", - "test": "node --test dist/**/*.test.js 2>/dev/null || true" + "test": "npm run build && node --test dist/lib/non-evm-route-planner.test.js" }, "dependencies": { "ethers": "^6.16.0", diff --git a/multi-chain-execution/src/api/route-routes.ts b/multi-chain-execution/src/api/route-routes.ts index bc9bcda0..4551a01c 100644 --- a/multi-chain-execution/src/api/route-routes.ts +++ b/multi-chain-execution/src/api/route-routes.ts @@ -1,18 +1,26 @@ /** - * Chain138 -> Tezos USDtz route planning API + * Chain138 / ALL Mainnet → hub EVM → non-EVM route planning API */ import { Router, Request, Response } from 'express'; +import { + NON_EVM_FAMILY_META, + defaultSourceAssetForChain, + planNonEvmRoute, + supportedSourceChainIds, + validateDestinationAddress, + type NonEvmFamily, +} from '../lib/non-evm-route-planner.js'; -const TEZOS_REGEX = /^(tz[1-4]|KT1)[1-9A-HJ-NP-Za-km-z]{33}$/; -const CHAIN_138 = 138; -const CHAIN_ALL_MAINNET = 651940; -const CUSDC = '0xf22258f57794CC8E06237084b353Ab30fFfa640b'; -const AUSDC = '0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881'; -/** Active ETH→Tezos bridge (from bridge-capability-matrix) */ -const ETH_TO_TEZOS_PROVIDER = 'Wrap Protocol'; +const router: Router = Router(); -interface RoutePlanRequest { +const NON_EVM_FAMILIES = Object.keys(NON_EVM_FAMILY_META) as NonEvmFamily[]; + +function isNonEvmFamily(s: string): s is NonEvmFamily { + return NON_EVM_FAMILIES.includes(s as NonEvmFamily); +} + +interface Chain138ToUsdtzBody { source_chain_id?: number; source_asset?: string; source_amount?: string; @@ -22,65 +30,90 @@ interface RoutePlanRequest { prefer_non_custodial?: boolean; } -interface RouteHop { - chain: string; - action: string; - protocol: string; - asset_in: string; - amount_in: string; - asset_out: string; - min_amount_out: string; - estimated_fees: string; +interface PlanNonEvmBody { + destination_family: string; + source_chain_id?: number; + source_asset?: string; + source_amount?: string; + destination_address: string; } -interface RoutePlan { - route_id: string; - hops: RouteHop[]; - totalEstimatedFees: string; - estimatedTimeSeconds: number; -} - -const router: Router = Router(); - +/** @deprecated Prefer POST /v1/routes/plan-non-evm with destination_family=tezos_usdtz */ router.post('/v1/routes/chain138-to-usdtz', (req: Request, res: Response) => { try { - const body = req.body as RoutePlanRequest; + const body = req.body as Chain138ToUsdtzBody; const sourceChainId = body.source_chain_id ?? 138; - const sourceAsset = body.source_asset ?? CUSDC; + const sourceAsset = body.source_asset ?? defaultSourceAssetForChain(sourceChainId); const sourceAmount = body.source_amount ?? '0'; const destAddr = body.destination_tezos_address ?? ''; - if (sourceChainId !== CHAIN_138 && sourceChainId !== CHAIN_ALL_MAINNET) { - return res.status(400).json({ valid: false, error: 'Only source_chain_id=138 (Chain138) or 651940 (ALL Mainnet) is supported' }); - } - if (!destAddr.trim() || !TEZOS_REGEX.test(destAddr.trim())) { - return res.status(400).json({ valid: false, error: 'Invalid destination_tezos_address' }); - } - const amount = BigInt(sourceAmount); - if (amount <= 0n) { - return res.status(400).json({ valid: false, error: 'source_amount must be > 0' }); + const destOk = validateDestinationAddress('tezos_usdtz', destAddr); + if (!destOk.ok) { + return res.status(400).json({ valid: false, error: destOk.error }); } - const routeId = `route-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; - const isChain138 = sourceChainId === CHAIN_138; - const sourceLabel = isChain138 ? 'CHAIN138' : 'ALL_MAINNET'; - const stableOut = isChain138 ? CUSDC : AUSDC; - const srcBridge = isChain138 ? 'CCIP' : 'AlltraAdapter'; - const hops: RouteHop[] = [ - { chain: sourceLabel, action: 'SWAP', protocol: isChain138 ? 'EnhancedSwapRouter' : 'AlltraDEX', asset_in: sourceAsset, amount_in: sourceAmount, asset_out: stableOut, min_amount_out: sourceAmount, estimated_fees: '0' }, - { chain: sourceLabel, action: 'BRIDGE', protocol: srcBridge, asset_in: stableOut, amount_in: sourceAmount, asset_out: 'USDC', min_amount_out: sourceAmount, estimated_fees: '0' }, - { chain: 'HUB_EVM', action: 'BRIDGE', protocol: ETH_TO_TEZOS_PROVIDER, asset_in: 'USDC', amount_in: sourceAmount, asset_out: 'USDC', min_amount_out: sourceAmount, estimated_fees: '0' }, - { chain: 'TEZOS', action: 'SWAP', protocol: 'Plenty', asset_in: 'USDC', amount_in: sourceAmount, asset_out: 'USDtz', min_amount_out: sourceAmount, estimated_fees: '0' }, - ]; + const planned = planNonEvmRoute({ + family: 'tezos_usdtz', + source_chain_id: sourceChainId, + source_asset: sourceAsset, + source_amount: sourceAmount, + }); + if (!planned.ok) { + return res.status(400).json({ valid: false, error: planned.error }); + } - const plan: RoutePlan = { - route_id: routeId, - hops, - totalEstimatedFees: '0', - estimatedTimeSeconds: 1800, - }; + res.status(200).json({ valid: true, routes: [planned.plan] }); + } catch (e) { + res.status(500).json({ valid: false, error: e instanceof Error ? e.message : 'Internal error' }); + } +}); - res.status(200).json({ valid: true, routes: [plan] }); +router.get('/v1/routes/non-evm-families', (_req: Request, res: Response) => { + res.status(200).json({ + valid: true, + supported_source_chain_ids: supportedSourceChainIds(), + families: NON_EVM_FAMILY_META, + family_ids: NON_EVM_FAMILIES, + }); +}); + +router.post('/v1/routes/plan-non-evm', (req: Request, res: Response) => { + try { + const body = req.body as PlanNonEvmBody; + const familyRaw = body.destination_family ?? ''; + if (!familyRaw || !isNonEvmFamily(familyRaw)) { + return res.status(400).json({ + valid: false, + error: `destination_family must be one of: ${NON_EVM_FAMILIES.join(', ')}`, + }); + } + + const destAddr = body.destination_address ?? ''; + const destOk = validateDestinationAddress(familyRaw, destAddr); + if (!destOk.ok) { + return res.status(400).json({ valid: false, error: destOk.error }); + } + + const sourceChainId = body.source_chain_id ?? 138; + const sourceAsset = body.source_asset ?? defaultSourceAssetForChain(sourceChainId); + const sourceAmount = body.source_amount ?? '0'; + + const planned = planNonEvmRoute({ + family: familyRaw, + source_chain_id: sourceChainId, + source_asset: sourceAsset, + source_amount: sourceAmount, + }); + if (!planned.ok) { + return res.status(400).json({ valid: false, error: planned.error }); + } + + res.status(200).json({ + valid: true, + destination_family: familyRaw, + destination_address: destAddr.trim(), + routes: [planned.plan], + }); } catch (e) { res.status(500).json({ valid: false, error: e instanceof Error ? e.message : 'Internal error' }); } diff --git a/multi-chain-execution/src/index.ts b/multi-chain-execution/src/index.ts index d7e9acff..166dc7b4 100644 --- a/multi-chain-execution/src/index.ts +++ b/multi-chain-execution/src/index.ts @@ -1,5 +1,16 @@ export * from './chain-adapters/index.js'; export * from './intent/types.js'; +export { + NON_EVM_FAMILY_META, + defaultSourceAssetForChain, + planNonEvmRoute, + supportedSourceChainIds, + validateDestinationAddress, + type NonEvmFamily, + type QuoteHints, + type RouteHop, + type RoutePlan, +} from './lib/non-evm-route-planner.js'; export { createIntent, getIntent, executeIntent, getExecution, getExecutionByIntent } from './eo/execution-orchestrator.js'; export { validateAndPlan } from './trpe/trpe.js'; export { nonceService } from './nonce-service/nonce-service.js'; diff --git a/multi-chain-execution/src/lib/non-evm-route-planner.test.ts b/multi-chain-execution/src/lib/non-evm-route-planner.test.ts new file mode 100644 index 00000000..ef4875ee --- /dev/null +++ b/multi-chain-execution/src/lib/non-evm-route-planner.test.ts @@ -0,0 +1,45 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { + defaultSourceAssetForChain, + planNonEvmRoute, + validateDestinationAddress, +} from './non-evm-route-planner.js'; + +test('defaultSourceAssetForChain uses AUSDC on ALL Mainnet', () => { + assert.equal( + defaultSourceAssetForChain(651940).toLowerCase(), + '0xa95eed79f84e6a0151eaeb9d441f9ffd50e8e881' + ); +}); + +test('validateDestinationAddress rejects empty Solana', () => { + const r = validateDestinationAddress('solana_usdc', ''); + assert.equal(r.ok, false); +}); + +test('planNonEvmRoute returns quote_hints and TRANSFER when already on stable', () => { + const r = planNonEvmRoute({ + family: 'solana_usdc', + source_chain_id: 138, + source_asset: '0xf22258f57794CC8E06237084b353Ab30fFfa640b', + source_amount: '1000000', + }); + assert.equal(r.ok, true); + if (!r.ok) return; + assert.ok(r.plan.quote_hints?.swap_quote); + assert.equal(r.plan.hops[0]!.action, 'TRANSFER'); + assert.equal(r.plan.hops[0]!.protocol, 'Direct'); +}); + +test('planNonEvmRoute uses SWAP when source differs from stable on 138', () => { + const r = planNonEvmRoute({ + family: 'xrpl_usdc', + source_chain_id: 138, + source_asset: '0x93E66202A11B1772E55407B32B44e5Cd8eda7f22', + source_amount: '1000000', + }); + assert.equal(r.ok, true); + if (!r.ok) return; + assert.equal(r.plan.hops[0]!.action, 'SWAP'); +}); diff --git a/multi-chain-execution/src/lib/non-evm-route-planner.ts b/multi-chain-execution/src/lib/non-evm-route-planner.ts new file mode 100644 index 00000000..4ed3d298 --- /dev/null +++ b/multi-chain-execution/src/lib/non-evm-route-planner.ts @@ -0,0 +1,386 @@ +/** + * Multi-hop route plans from Chain 138 / ALL Mainnet through Ethereum hub to non-EVM networks. + * Plans are structural (protocol labels identify bridge families); execution picks a live venue. + * + * Canonical copy — edit here first, then sync `dbis_core/src/core/defi/tezos-usdtz/non-evm-route-planner.ts`. + */ + +export interface RouteHop { + chain: string; + action: string; + protocol: string; + asset_in: string; + amount_in: string; + asset_out: string; + min_amount_out: string; + estimated_fees: string; + /** Optional operator hint for bridge selection or compliance. */ + notes?: string; +} + +/** Optional aggregator / bridge quote entry points for execution layers (LiFi, Jumper, native APIs). */ +export interface QuoteHints { + /** Same-chain swap on source (138 / ALL Mainnet) when the first hop is a SWAP. */ + swap_quote?: string; + /** CCIP / AlltraAdapter fee or quote surfaces for source → Ethereum. */ + source_bridge_quote?: string; + /** Ethereum → destination chain / ledger bridge (Wormhole, CCTP, Axelar, etc.). */ + hub_to_destination_quote?: string; + /** Stable conversion on Ethereum when bridge delivers USDT but the next hop expects USDC (or vice versa). */ + ethereum_stable_conversion?: string; + reference_urls?: string[]; +} + +export interface RoutePlan { + route_id: string; + hops: RouteHop[]; + totalEstimatedFees: string; + estimatedTimeSeconds: number; + destination_family: NonEvmFamily; + quote_hints?: QuoteHints; +} + +export type NonEvmFamily = 'tezos_usdtz' | 'solana_usdc' | 'tron_usdt' | 'xrpl_usdc'; + +const CHAIN_138 = 138; +const CHAIN_ALL_MAINNET = 651940; + +const CUSDC = '0xf22258f57794CC8E06237084b353Ab30fFfa640b'; +const AUSDC = '0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881'; +const AUSDT = '0x015B1897Ed5279930bC2Be46F661894d219292A6'; + +const TEZOS_REGEX = /^(tz[1-4]|KT1)[1-9A-HJ-NP-Za-km-z]{33}$/; +/** Base58 Solana pubkey — length varies slightly by encoding; exclude leading zeros edge cases. */ +const SOLANA_REGEX = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/; +const TRON_REGEX = /^T[1-9A-HJ-NP-Za-km-z]{33}$/; +const XRPL_REGEX = /^r[1-9A-HJ-NP-Za-km-z]{24,34}$/; + +const ETH_TO_TEZOS_PROVIDER = 'Wrap Protocol'; + +export function validateDestinationAddress(family: NonEvmFamily, addr: string): { ok: true } | { ok: false; error: string } { + const trimmed = addr.trim(); + if (!trimmed) { + return { ok: false, error: 'destination_address is required' }; + } + switch (family) { + case 'tezos_usdtz': + return TEZOS_REGEX.test(trimmed) ? { ok: true } : { ok: false, error: 'Invalid Tezos destination address' }; + case 'solana_usdc': + return SOLANA_REGEX.test(trimmed) ? { ok: true } : { ok: false, error: 'Invalid Solana base58 address' }; + case 'tron_usdt': + return TRON_REGEX.test(trimmed) ? { ok: true } : { ok: false, error: 'Invalid Tron base58check address' }; + case 'xrpl_usdc': + return XRPL_REGEX.test(trimmed) ? { ok: true } : { ok: false, error: 'Invalid XRPL classic address' }; + default: { + const _exhaustive: never = family; + return { ok: false, error: `Unknown family ${_exhaustive as string}` }; + } + } +} + +export function supportedSourceChainIds(): number[] { + return [CHAIN_138, CHAIN_ALL_MAINNET]; +} + +/** Default stable-like asset for routing when the client omits `source_asset`. */ +export function defaultSourceAssetForChain(source_chain_id: number): string { + return source_chain_id === CHAIN_ALL_MAINNET ? AUSDC : CUSDC; +} + +function assertPositiveAmount(source_amount: string): bigint | null { + try { + const amount = BigInt(source_amount); + return amount > 0n ? amount : null; + } catch { + return null; + } +} + +function newRouteId(): string { + return `route-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; +} + +function resolveStableOutAllMainnet(sourceAsset: string): string { + const lower = sourceAsset.toLowerCase(); + if (lower === AUSDT.toLowerCase() || lower === AUSDC.toLowerCase()) return sourceAsset; + return AUSDC; +} + +/** Human ticker after bridging to Ethereum mainnet for subsequent hub hops. */ +function hubStableTicker(stableAddress: string): 'USDC' | 'USDT' { + return stableAddress.toLowerCase() === AUSDT.toLowerCase() ? 'USDT' : 'USDC'; +} + +function evmStableBridgeSegment( + sourceChainId: number, + sourceAsset: string, + _sourceAmount: string +): { sourceLabel: string; stableOut: string; srcBridge: string; isChain138: boolean } | null { + if (sourceChainId !== CHAIN_138 && sourceChainId !== CHAIN_ALL_MAINNET) { + return null; + } + const isChain138 = sourceChainId === CHAIN_138; + const stableOut = isChain138 ? CUSDC : resolveStableOutAllMainnet(sourceAsset); + return { + sourceLabel: isChain138 ? 'CHAIN138' : 'ALL_MAINNET', + stableOut, + srcBridge: isChain138 ? 'CCIP' : 'AlltraAdapter', + isChain138, + }; +} + +/** + * Build hops from source EVM chain → Ethereum stable at hub (same pattern as Tezos USDtz path). + */ +function buildEvmToHubHops( + sourceLabel: string, + isChain138: boolean, + stableOut: string, + srcBridge: string, + sourceAsset: string, + sourceAmount: string +): RouteHop[] { + const needsSwap = sourceAsset.toLowerCase() !== stableOut.toLowerCase(); + const bridgeOutTicker = hubStableTicker(stableOut); + + return [ + { + chain: sourceLabel, + action: needsSwap ? 'SWAP' : 'TRANSFER', + protocol: needsSwap ? (isChain138 ? 'EnhancedSwapRouter' : 'AlltraDEX') : 'Direct', + asset_in: sourceAsset, + amount_in: sourceAmount, + asset_out: stableOut, + min_amount_out: sourceAmount, + estimated_fees: '0', + }, + { + chain: sourceLabel, + action: 'BRIDGE', + protocol: srcBridge, + asset_in: stableOut, + amount_in: sourceAmount, + asset_out: bridgeOutTicker, + min_amount_out: sourceAmount, + estimated_fees: '0', + }, + ]; +} + +function buildQuoteHints(family: NonEvmFamily, stableOut: string, isChain138: boolean): QuoteHints { + const hints: QuoteHints = { + swap_quote: isChain138 + ? 'token-aggregation / EnhancedSwapRouter quote on Chain 138' + : 'AlltraDEX or configured router on ALL Mainnet', + source_bridge_quote: isChain138 ? 'CCIP fee / delivery quote (LINK)' : 'AlltraAdapter bridge fee quote', + hub_to_destination_quote: '', + reference_urls: ['https://docs.llama.fi/', 'https://jumper.exchange/', 'https://portalbridge.com/'], + }; + + if (stableOut.toLowerCase() === AUSDT.toLowerCase()) { + hints.ethereum_stable_conversion = + 'If the next hub hop expects USDC, swap USDT→USDC on Ethereum before the bridge to Tezos or non-EVM.'; + } + + switch (family) { + case 'tezos_usdtz': + hints.hub_to_destination_quote = `${ETH_TO_TEZOS_PROVIDER} + Tezos Plenty USDtz quote`; + break; + case 'solana_usdc': + hints.hub_to_destination_quote = 'Wormhole / Portal / Circle CCTP quote (Ethereum → Solana USDC)'; + break; + case 'tron_usdt': + hints.hub_to_destination_quote = 'TRON↔Ethereum bridge or aggregator quote (USDT leg)'; + break; + case 'xrpl_usdc': + hints.hub_to_destination_quote = 'Axelar / Chainflip / XRPL bridge quote'; + break; + } + + return hints; +} + +export function planNonEvmRoute(params: { + family: NonEvmFamily; + source_chain_id: number; + source_asset: string; + source_amount: string; +}): { ok: true; plan: RoutePlan } | { ok: false; error: string } { + const amount = assertPositiveAmount(params.source_amount); + if (amount === null) { + return { ok: false, error: 'source_amount must be a positive integer string' }; + } + + const seg = evmStableBridgeSegment(params.source_chain_id, params.source_asset, params.source_amount); + if (!seg) { + return { ok: false, error: `Only source_chain_id=${CHAIN_138} (Chain138) or ${CHAIN_ALL_MAINNET} (ALL Mainnet) is supported` }; + } + + const { sourceLabel, stableOut, srcBridge, isChain138 } = seg; + const prefix = buildEvmToHubHops(sourceLabel, isChain138, stableOut, srcBridge, params.source_asset, params.source_amount); + + const crossBoundaryNote = + 'EVM→non-EVM boundary: choose a live bridge with inventory (Wormhole/Portal/CCTP, Axelar, TRON official, etc.).'; + + let tail: RouteHop[]; + let estimatedTimeSeconds: number; + + switch (params.family) { + case 'tezos_usdtz': { + const hubStableForWrap: 'USDC' | 'USDT' = + stableOut.toLowerCase() === AUSDT.toLowerCase() ? 'USDT' : 'USDC'; + tail = [ + { + chain: 'HUB_EVM', + action: 'BRIDGE', + protocol: ETH_TO_TEZOS_PROVIDER, + asset_in: hubStableForWrap, + amount_in: params.source_amount, + asset_out: hubStableForWrap, + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: + hubStableForWrap === 'USDT' + ? 'Confirm Wrap path accepts USDT from Ethereum; otherwise swap to USDC on Ethereum first.' + : undefined, + }, + { + chain: 'TEZOS', + action: 'SWAP', + protocol: 'Plenty', + asset_in: hubStableForWrap, + amount_in: params.source_amount, + asset_out: 'USDtz', + min_amount_out: params.source_amount, + estimated_fees: '0', + }, + ]; + estimatedTimeSeconds = 1800; + break; + } + case 'solana_usdc': + tail = [ + { + chain: 'HUB_EVM', + action: 'BRIDGE', + protocol: 'USDC→Solana (Wormhole / Portal / Circle CCTP)', + asset_in: 'USDC', + amount_in: params.source_amount, + asset_out: 'USDC', + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: + stableOut.toLowerCase() === AUSDT.toLowerCase() + ? `${crossBoundaryNote} Swap USDT→USDC on Ethereum before Solana bridge when the venue requires USDC.` + : crossBoundaryNote, + }, + { + chain: 'SOLANA', + action: 'SETTLE', + protocol: 'SPL (USDC)', + asset_in: 'USDC', + amount_in: params.source_amount, + asset_out: 'USDC', + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: 'Destination mint is venue-specific (native USDC vs portal-wrapped); reconcile off-chain.', + }, + ]; + estimatedTimeSeconds = 1200; + break; + case 'tron_usdt': + tail = [ + { + chain: 'HUB_EVM', + action: 'BRIDGE', + protocol: 'USDT→Tron (TRON-Ethereum bridge / Synapse / Multichain-class)', + asset_in: 'USDC', + amount_in: params.source_amount, + asset_out: 'USDT', + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: `${crossBoundaryNote} Often swap USDC→USDT on Ethereum before Tron bridge when required.`, + }, + { + chain: 'TRON', + action: 'SETTLE', + protocol: 'TRC-20 (USDT)', + asset_in: 'USDT', + amount_in: params.source_amount, + asset_out: 'USDT', + min_amount_out: params.source_amount, + estimated_fees: '0', + }, + ]; + estimatedTimeSeconds = 2400; + break; + case 'xrpl_usdc': + tail = [ + { + chain: 'HUB_EVM', + action: 'BRIDGE', + protocol: 'USDC→XRPL (Axelar / Chainflip / XRPL-Axo — IOU vs stable)', + asset_in: 'USDC', + amount_in: params.source_amount, + asset_out: 'USDC', + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: `${crossBoundaryNote} Confirm trust lines / destination tags with issuer policy.`, + }, + { + chain: 'XRPL', + action: 'SETTLE', + protocol: 'Issued stable / RLUSD-class', + asset_in: 'USDC', + amount_in: params.source_amount, + asset_out: 'USDC', + min_amount_out: params.source_amount, + estimated_fees: '0', + notes: 'Map to live XRPL USD stable issuer per ops policy.', + }, + ]; + estimatedTimeSeconds = 1800; + break; + default: { + const _exhaustive: never = params.family; + return { ok: false, error: `Unknown family ${_exhaustive as string}` }; + } + } + + const plan: RoutePlan = { + route_id: newRouteId(), + hops: [...prefix, ...tail], + totalEstimatedFees: '0', + estimatedTimeSeconds, + destination_family: params.family, + quote_hints: buildQuoteHints(params.family, stableOut, isChain138), + }; + + return { ok: true, plan }; +} + +export const NON_EVM_FAMILY_META: Record< + NonEvmFamily, + { label: string; destinationAsset: string; hubBridgeHint: string } +> = { + tezos_usdtz: { + label: 'Tezos USDtz', + destinationAsset: 'USDtz', + hubBridgeHint: ETH_TO_TEZOS_PROVIDER, + }, + solana_usdc: { + label: 'Solana USDC (SPL)', + destinationAsset: 'USDC', + hubBridgeHint: 'Wormhole / Portal / CCTP', + }, + tron_usdt: { + label: 'Tron USDT (TRC-20)', + destinationAsset: 'USDT', + hubBridgeHint: 'TRON-Ethereum bridge / aggregator-class routes', + }, + xrpl_usdc: { + label: 'XRPL USD stable', + destinationAsset: 'USDC', + hubBridgeHint: 'Axelar / Chainflip / XRPL hooks', + }, +}; diff --git a/package.json b/package.json index bff279df..11331b7d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "test:basic": "cd mcp-proxmox && node test-basic-tools.js", "test:workflows": "cd mcp-proxmox && node test-workflows.js", "verify:ws-chain138": "node scripts/verify-ws-rpc-chain138.mjs", + "multi-chain:test": "pnpm --filter @proxmox/multi-chain-execution test", "ura:validate": "node scripts/validate/validate-universal-resource-activation.mjs", "ura:validate-profiles": "node scripts/validate/validate-ura-policy-profiles.mjs", "ura:validate-closure": "node scripts/ura/validate-manifest-closure.mjs", @@ -46,6 +47,23 @@ "mission-control:test": "pnpm --filter mission-control test", "token-lists:validate-metadata": "node scripts/validation/validate-token-list-metadata.mjs", "pool-matrix:validate": "node scripts/validation/validate-pool-creation-matrix.mjs", + "cw:full-readiness": "bash scripts/verify/check-cw-full-operational-readiness.sh", + "cw:bridge-e2e-readiness": "bash scripts/verify/check-cw-multitoken-bridge-e2e-readiness.sh", + "cwusdc:external-trackers": "bash scripts/verify/check-cwusdc-external-trackers-live.sh", + "cwusdc:provider-checks": "bash scripts/verify/run-cwusdc-provider-nonmanual-checks.sh", + "cwusdc:provider-ci": "bash scripts/verify/check-cwusdc-provider-readiness-ci.sh", + "cwusdc:provider-handoff": "python3 scripts/verify/build-cwusdc-provider-handoff-report.py", + "cwusdc:etherscan-dossier": "python3 scripts/verify/build-cwusdc-etherscan-value-dossier.py", + "cwusdc:role-audit": "python3 scripts/verify/audit-cwusdc-mainnet-roles.py", + "cwusdc:role-appendix": "python3 scripts/verify/build-cwusdc-role-deployment-appendix.py", + "cwusdc:doc-links": "python3 scripts/verify/check-cwusdc-institutional-doc-links.py", + "cwusdc:submission-prefill": "python3 scripts/verify/build-cwusdc-provider-submission-prefill.py", + "cwusdc:provider-monitor": "bash scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh", + "cwusdc:evidence-bundle": "bash scripts/verify/build-cwusdc-institutional-evidence-bundle.sh", + "provider:cmc-sanity": "python3 scripts/verify/check-cmc-provider-report-sanity.py", + "provider:submission-index": "python3 scripts/verify/build-external-submission-packet-index.py", + "ecosystem:cmc-top10": "python3 scripts/verify/build-cmc-top10-ecosystem-coverage.py", + "non-evm:requirements": "python3 scripts/verify/build-non-evm-requirement-stubs.py", "all-mainnet:readiness": "node scripts/status/generate-all-mainnet-readiness.mjs", "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", @@ -63,6 +81,7 @@ "engine-x:canary-preflight": "bash scripts/verify/preflight-dbis-engine-x-virtual-batch-canary.sh", "engine-x:v2-deploy": "EXECUTE=0 bash scripts/deployment/deploy-engine-x-v2-mainnet.sh", "engine-x:borrow-vault-deploy": "EXECUTE=0 bash scripts/deployment/deploy-engine-x-xaut-usdc-borrow-vault-mainnet.sh", + "engine-x:single-sided-dodo-deploy": "EXECUTE=0 bash scripts/deployment/deploy-engine-x-single-sided-dodo-cwusdc-vault-mainnet.sh", "engine-x:indexed-vault-deploy": "EXECUTE=0 bash scripts/deployment/deploy-engine-x-indexed-liquidity-vault-mainnet.sh", "engine-x:indexed-lp-migration": "EXECUTE=0 bash scripts/deployment/migrate-engine-x-vault-to-mainnet-cwusdc-usdc-univ3.sh", "engine-x:legacy-retirement": "EXECUTE=0 bash scripts/deployment/retire-engine-x-legacy-vault.sh", @@ -70,6 +89,9 @@ "engine-x:univ3-swap-proof": "EXECUTE=0 bash scripts/deployment/run-engine-x-univ3-public-swap-proof.sh", "engine-x:indexed-proof-record": "EXECUTE=0 bash scripts/deployment/record-engine-x-indexed-liquidity-proof.sh", "engine-x:public-readiness": "bash scripts/verify/check-engine-x-public-indexed-readiness.sh", + "engine-x:mev-defense": "bash scripts/verify/check-engine-x-mev-defense-readiness.sh", + "engine-x:automation-advisor": "bash scripts/verify/plan-engine-x-automated-liquidity-advisor.sh", + "engine-x:weth-liquidity-eval": "bash scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh", "engine-x:audit-manifest": "bash scripts/verify/build-engine-x-audit-manifest.sh" }, "keywords": [ diff --git a/pr-workspace/ledger-chain138-integration/step-01-currency/currencies.chain138.ts b/pr-workspace/ledger-chain138-integration/step-01-currency/currencies.chain138.ts index 39277818..78e0f88c 100644 --- a/pr-workspace/ledger-chain138-integration/step-01-currency/currencies.chain138.ts +++ b/pr-workspace/ledger-chain138-integration/step-01-currency/currencies.chain138.ts @@ -27,7 +27,7 @@ export const defiOracleMetaMainnetCurrency = { // disableCountervalue: true, // uncomment if fiat should not be shown explorerViews: [ { - address: "https://explorer.d-bis.org/address/$address", + address: "https://explorer.d-bis.org/addresses/$address", tx: "https://explorer.d-bis.org/tx/$hash", token: "https://explorer.d-bis.org/token/$contractAddress?a=$address", }, @@ -54,7 +54,7 @@ export const defiOracleMetaMainnetCurrencyRaw = { blockAvgTime: 2, explorerViews: [ { - address: "https://explorer.d-bis.org/address/$address", + address: "https://explorer.d-bis.org/addresses/$address", tx: "https://explorer.d-bis.org/tx/$hash", token: "https://explorer.d-bis.org/token/$contractAddress?a=$address", }, diff --git a/pyrightconfig.json b/pyrightconfig.json new file mode 100644 index 00000000..e13e7f99 --- /dev/null +++ b/pyrightconfig.json @@ -0,0 +1,66 @@ +{ + "include": [ + "scripts", + "mcp-proxmox", + "docs/scripts", + "smom-dbis-138/scripts", + "smom-dbis-138/services", + "smom-dbis-138/connectors", + "smom-dbis-138/orchestration", + "dbis_core/sdk/python", + "ai-mcp-pmm-controller", + "metaverseDubai/scripts", + "gru-docs/scripts", + "pr-workspace/app-ethereum" + ], + "exclude": [ + "ProxmoxVE", + "explorer-monorepo", + "MEV_Bot", + "miracles_in_motion", + "OMNIS", + "alltra-lifi-settlement", + "amex-high-value-rails", + "arromis-monorepo", + "atomic-swap-dapp", + "cross-chain-pmm-lps", + "cross-chain-pmm-lps-publish", + "tmp", + ".tmp", + ".codex-artifacts", + ".devin", + ".venv-checkjson", + "third-party", + "vendor", + "pr-workspace/app-ethereum/glyphs", + "**/.*", + "**/node_modules", + "**/__pycache__", + "**/.git", + "**/.pnpm-store", + "**/.pnpm", + "**/dist", + "**/build", + "**/.next", + "**/out", + "**/coverage", + "**/.mypy_cache", + "**/.pytest_cache", + "**/.ruff_cache", + "**/.tox", + "**/.turbo", + "**/.parcel-cache", + "**/.nx", + "**/.vite", + "**/.cache", + "**/forge-cache", + "**/broadcast", + "**/artifacts", + "logs", + "reports", + "backups", + "output", + "venv", + "home" + ] +} diff --git a/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json b/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json index f04981ab..8b69f39d 100644 --- a/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json +++ b/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json @@ -1,6 +1,6 @@ { - "generated_at": "2026-04-22T04:59:28Z", - "write_discovered": false, + "generated_at": "2026-05-09T05:43:24Z", + "write_discovered": true, "discovered_live_pair_count": 19, "healthy_live_pair_count": 10, "writes_applied": [], @@ -20,14 +20,14 @@ "poolAddress": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", "live": true, "health": { - "baseReserveRaw": "6267", - "quoteReserveRaw": "6267", - "baseReserveUnits": "0.006267", - "quoteReserveUnits": "0.006267", - "priceQuotePerBase": "1", - "deviationBps": "0", + "baseReserveRaw": "1267071063797", + "quoteReserveRaw": "2167762", + "baseReserveUnits": "1267071.063797", + "quoteReserveUnits": "2.167762", + "priceQuotePerBase": "0.000001710844846779092339761738687", + "deviationBps": "9999.982891551532209076602383", "depthOk": false, - "parityOk": true, + "parityOk": false, "healthy": false } }, @@ -43,12 +43,12 @@ "poolAddress": "0x422608c5dDff909675ac2C5F872fD42f16B9287A", "live": true, "health": { - "baseReserveRaw": "9898542641851", - "quoteReserveRaw": "9898540782562", - "baseReserveUnits": "9898542.641851", - "quoteReserveUnits": "9898540.782562", - "priceQuotePerBase": "0.9999998121653795641660116571", - "deviationBps": "0.0018783462043583398834290000", + "baseReserveRaw": "9900803423129", + "quoteReserveRaw": "9900803423131", + "baseReserveUnits": "9900803.423129", + "quoteReserveUnits": "9900803.423131", + "priceQuotePerBase": "1.000000000000202003808633131", + "deviationBps": "2.020038086331310000E-9", "depthOk": true, "parityOk": true, "healthy": true diff --git a/reports/extraction/promod-uniswap-v2-phase1-funding-actions-latest.json b/reports/extraction/promod-uniswap-v2-phase1-funding-actions-latest.json index ef07d570..938b2925 100644 --- a/reports/extraction/promod-uniswap-v2-phase1-funding-actions-latest.json +++ b/reports/extraction/promod-uniswap-v2-phase1-funding-actions-latest.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-17T18:13:05Z", + "generated_at": "2026-05-09T21:07:05Z", "program_name": "Mr. Promod Uniswap V2 phase 1 funding actions", "purpose": "Strict phase-1 funding actions: seed-now, mint-then-seed, and bridge-possible notes for each target chain.", "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", @@ -8,15 +8,24 @@ "chain_id": 1, "network": "Ethereum Mainnet", "phase_1_pair": "cWUSDT/cWUSDC", - "action_type": "seed_now", - "tokens_missing": [], + "action_type": "mint_destination_then_seed", + "tokens_missing": [ + "cWUSDC" + ], "minimum_gas_issue": false, "gas_topup_note": "No minimum gas top-up issue from the latest preflight snapshot.", - "recommended_seed_human": "8888511.867466", + "recommended_seed_human": "1000", "bridge_possible": true, "bridge_note": "Bridge path is structurally available for chain `1` via `CW_BRIDGE_MAINNET` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script.", - "mint_steps": [], - "exact_post_funding_deploy_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\nexport RPC_URL=\"${ETHEREUM_MAINNET_RPC}\"\nexport FACTORY=\"${CHAIN_1_UNISWAP_V2_FACTORY}\"\nexport ROUTER=\"${CHAIN_1_UNISWAP_V2_ROUTER}\"\nexport CWUSDT=\"0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE\"\nexport CWUSDC=\"0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a\"\nexport SIGNER=\"$(cast wallet address --private-key \"$PRIVATE_KEY\")\"\nexport AMOUNT_RAW=\"8888511867466\"\nexport DEADLINE=\"$(( $(date +%s) + 3600 ))\"\n\nPAIR=\"$(cast call \"$FACTORY\" 'getPair(address,address)(address)' \"$CWUSDT\" \"$CWUSDC\" --rpc-url \"$RPC_URL\")\"\nif [[ \"$PAIR\" == \"0x0000000000000000000000000000000000000000\" ]]; then\n cast send \"$FACTORY\" 'createPair(address,address)(address)' \"$CWUSDT\" \"$CWUSDC\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\nfi\n\ncast send \"$CWUSDT\" 'approve(address,uint256)(bool)' \"$ROUTER\" \"$AMOUNT_RAW\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\ncast send \"$CWUSDC\" 'approve(address,uint256)(bool)' \"$ROUTER\" \"$AMOUNT_RAW\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\ncast send \"$ROUTER\" \\\n 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \\\n \"$CWUSDT\" \"$CWUSDC\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$SIGNER\" \"$DEADLINE\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\npython3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered\nbash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh\nnode cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json" + "mint_steps": [ + { + "token": "cWUSDC", + "amount_human": "1000", + "amount_raw": 1000000000, + "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${ETHEREUM_MAINNET_RPC}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" + } + ], + "exact_post_funding_deploy_block": null }, { "chain_id": 10, @@ -27,7 +36,7 @@ "cWUSDT", "cWUSDC" ], - "minimum_gas_issue": true, + "minimum_gas_issue": false, "gas_topup_note": "Top up native gas on Optimism before minting or seeding; current balance is below the 0.001 safety threshold.", "recommended_seed_human": "1000", "bridge_possible": true, @@ -53,29 +62,13 @@ "network": "Cronos", "phase_1_pair": "cWUSDT/cWUSDC", "action_type": "mint_destination_then_seed", - "tokens_missing": [ - "cWUSDT", - "cWUSDC" - ], + "tokens_missing": [], "minimum_gas_issue": false, "gas_topup_note": "No minimum gas top-up issue from the latest preflight snapshot.", "recommended_seed_human": "1000", "bridge_possible": true, "bridge_note": "Bridge path is structurally available for chain `25` via `CW_BRIDGE_CRONOS` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script.", - "mint_steps": [ - { - "token": "cWUSDT", - "amount_human": "1000", - "amount_raw": 1000000000, - "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x72948a7a813B60b37Cd0c920C4657DbFF54312b8\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${CRONOS_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" - }, - { - "token": "cWUSDC", - "amount_human": "1000", - "amount_raw": 1000000000, - "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${CRONOS_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" - } - ], + "mint_steps": [], "exact_post_funding_deploy_block": null }, { @@ -83,29 +76,13 @@ "network": "BSC", "phase_1_pair": "cWUSDT/cWUSDC", "action_type": "mint_destination_then_seed", - "tokens_missing": [ - "cWUSDT", - "cWUSDC" - ], + "tokens_missing": [], "minimum_gas_issue": false, "gas_topup_note": "No minimum gas top-up issue from the latest preflight snapshot.", "recommended_seed_human": "1000", "bridge_possible": true, "bridge_note": "Bridge path is structurally available for chain `56` via `CW_BRIDGE_BSC` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script.", - "mint_steps": [ - { - "token": "cWUSDT", - "amount_human": "1000", - "amount_raw": 1000000000, - "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x9a1D0dBEE997929ED02fD19E0E199704d20914dB\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${BSC_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" - }, - { - "token": "cWUSDC", - "amount_human": "1000", - "amount_raw": 1000000000, - "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x5355148C4740fcc3D7a96F05EdD89AB14851206b\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${BSC_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" - } - ], + "mint_steps": [], "exact_post_funding_deploy_block": null }, { @@ -142,15 +119,24 @@ "chain_id": 137, "network": "Polygon", "phase_1_pair": "cWUSDT/cWUSDC", - "action_type": "seed_now", - "tokens_missing": [], + "action_type": "mint_destination_then_seed", + "tokens_missing": [ + "cWUSDC" + ], "minimum_gas_issue": false, "gas_topup_note": "No minimum gas top-up issue from the latest preflight snapshot.", - "recommended_seed_human": "996.297636", + "recommended_seed_human": "1000", "bridge_possible": true, "bridge_note": "Bridge path is structurally available for chain `137` via `CW_BRIDGE_POLYGON` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script.", - "mint_steps": [], - "exact_post_funding_deploy_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\nexport RPC_URL=\"${POLYGON_MAINNET_RPC}\"\nexport FACTORY=\"${CHAIN_137_UNISWAP_V2_FACTORY}\"\nexport ROUTER=\"${CHAIN_137_UNISWAP_V2_ROUTER}\"\nexport CWUSDT=\"0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF\"\nexport CWUSDC=\"0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4\"\nexport SIGNER=\"$(cast wallet address --private-key \"$PRIVATE_KEY\")\"\nexport AMOUNT_RAW=\"996297636\"\nexport DEADLINE=\"$(( $(date +%s) + 3600 ))\"\n\nPAIR=\"$(cast call \"$FACTORY\" 'getPair(address,address)(address)' \"$CWUSDT\" \"$CWUSDC\" --rpc-url \"$RPC_URL\")\"\nif [[ \"$PAIR\" == \"0x0000000000000000000000000000000000000000\" ]]; then\n cast send \"$FACTORY\" 'createPair(address,address)(address)' \"$CWUSDT\" \"$CWUSDC\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\nfi\n\ncast send \"$CWUSDT\" 'approve(address,uint256)(bool)' \"$ROUTER\" \"$AMOUNT_RAW\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\ncast send \"$CWUSDC\" 'approve(address,uint256)(bool)' \"$ROUTER\" \"$AMOUNT_RAW\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\ncast send \"$ROUTER\" \\\n 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \\\n \"$CWUSDT\" \"$CWUSDC\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$AMOUNT_RAW\" \"$SIGNER\" \"$DEADLINE\" \\\n --private-key \"$PRIVATE_KEY\" --rpc-url \"$RPC_URL\"\n\npython3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered\nbash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh\nnode cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json" + "mint_steps": [ + { + "token": "cWUSDC", + "amount_human": "1000", + "amount_raw": 1000000000, + "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${POLYGON_MAINNET_RPC}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" + } + ], + "exact_post_funding_deploy_block": null }, { "chain_id": 8453, @@ -161,7 +147,7 @@ "cWUSDT", "cWUSDC" ], - "minimum_gas_issue": true, + "minimum_gas_issue": false, "gas_topup_note": "Top up native gas on Base before minting or seeding; current balance is below the 0.001 safety threshold.", "recommended_seed_human": "1000", "bridge_possible": true, @@ -246,21 +232,28 @@ "chain_id": 43114, "network": "Avalanche", "phase_1_pair": "cWUSDT/cWUSDC", - "action_type": "mint_missing_side_then_seed", + "action_type": "mint_destination_then_seed", "tokens_missing": [ + "cWUSDT", "cWUSDC" ], "minimum_gas_issue": false, "gas_topup_note": "No minimum gas top-up issue from the latest preflight snapshot.", - "recommended_seed_human": "0.8", + "recommended_seed_human": "1000", "bridge_possible": true, "bridge_note": "Bridge path is structurally available for chain `43114` via `CW_BRIDGE_AVALANCHE` and `bridgeAvailable=true`, but the repo-native executable path today is destination-side cW minting. Cross-chain c* -> cW delivery still follows `docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md` and `docs/07-ccip/CW_BRIDGE_APPROACH.md` rather than a single helper script.", "mint_steps": [ + { + "token": "cWUSDT", + "amount_human": "1000", + "amount_raw": 1000000000, + "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x8142BA530B08f3950128601F00DaaA678213DFdf\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${AVALANCHE_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" + }, { "token": "cWUSDC", - "amount_human": "0.8", - "amount_raw": 800000, - "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x0C242b513008Cd49C89078F5aFb237A3112251EB\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"800000\" \\\n --rpc-url \"${AVALANCHE_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" + "amount_human": "1000", + "amount_raw": 1000000000, + "exact_mint_block": "source smom-dbis-138/scripts/load-env.sh >/dev/null\ncast send \"0x0C242b513008Cd49C89078F5aFb237A3112251EB\" 'mint(address,uint256)' \"$(cast wallet address --private-key \"$PRIVATE_KEY\")\" \"1000000000\" \\\n --rpc-url \"${AVALANCHE_RPC_URL}\" --private-key \"$PRIVATE_KEY\" --legacy --gas-limit 100000" } ], "exact_post_funding_deploy_block": null diff --git a/reports/extraction/promod-uniswap-v2-phase1-funding-readiness-latest.json b/reports/extraction/promod-uniswap-v2-phase1-funding-readiness-latest.json index 677a4551..e094f133 100644 --- a/reports/extraction/promod-uniswap-v2-phase1-funding-readiness-latest.json +++ b/reports/extraction/promod-uniswap-v2-phase1-funding-readiness-latest.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-17T20:05:54Z", + "generated_at": "2026-05-09T20:53:57Z", "program_name": "Mr. Promod Uniswap V2 phase 1 funding readiness", "purpose": "Live deployer-wallet funding view for seeding cWUSDT/cWUSDC phase-1 pools chain by chain.", "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", @@ -30,30 +30,28 @@ "pair_address": "0x422608c5dDff909675ac2C5F872fD42f16B9287A", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.028982898459925766", + "native_balance": "0.002397937659907006", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE", "decimals": 6, - "balance_raw": "397197013", - "balance_human": "397.197013", + "balance_raw": "8523829088635", + "balance_human": "8523829.088635", "allowance_raw": "0" }, "cwusdc": { "address": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "56705345129226", + "balance_human": "56705345.129226", + "allowance_raw": "300011896" }, - "max_equal_seed_human": "0", - "reserve0_raw": "8888511867466", - "reserve1_raw": "[8.888e12]", + "max_equal_seed_human": "8523829.088635", + "reserve0_raw": "9900803423131", + "reserve1_raw": "[9.9e12]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDC balance is zero" - ] + "funding_blockers": [] }, { "chain_id": 10, @@ -66,30 +64,29 @@ "pair_address": "0xe28BFf306442a8A512d2441847c27211a7C4C613", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.001980670026642148", - "native_balance_ok_for_ops": true, + "native_balance": "0.000430532335030017", + "native_balance_ok_for_ops": false, "cwusdt": { "address": "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "3000984101", + "balance_human": "3000.984101", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "3000986900", + "balance_human": "3000.9869", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", + "max_equal_seed_human": "3000.984101", "reserve0_raw": "3000000000", "reserve1_raw": "[3e9]", "execution_status": "completed", "funding_ready_now": false, "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" + "native gas below 0.001" ] }, { @@ -103,23 +100,23 @@ "pair_address": "0x438d8E1a8E311d2ae4b75a38E0044675fD324133", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "22.401143346977489259", + "native_balance": "19.154691909389182692", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x72948a7a813B60b37Cd0c920C4657DbFF54312b8", "decimals": 6, - "balance_raw": "1000000000", - "balance_human": "1000", - "allowance_raw": "0" + "balance_raw": "999991800", + "balance_human": "999.9918", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec", "decimals": 6, - "balance_raw": "1000000000", - "balance_human": "1000", - "allowance_raw": "0" + "balance_raw": "999993800", + "balance_human": "999.9938", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "1000", + "max_equal_seed_human": "999.9918", "reserve0_raw": "3000000000", "reserve1_raw": "[3e9]", "execution_status": "completed", @@ -137,23 +134,23 @@ "pair_address": "0x7e308c12bd609607DF9C4137E30235D5A9Da2A64", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.010626271367072709", + "native_balance": "0.003681967051288879", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x9a1D0dBEE997929ED02fD19E0E199704d20914dB", "decimals": 6, - "balance_raw": "1000000000", - "balance_human": "1000", - "allowance_raw": "0" + "balance_raw": "997995900", + "balance_human": "997.9959", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x5355148C4740fcc3D7a96F05EdD89AB14851206b", "decimals": 6, - "balance_raw": "1000000000", - "balance_human": "1000", - "allowance_raw": "0" + "balance_raw": "997995900", + "balance_human": "997.9959", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "1000", + "max_equal_seed_human": "997.9959", "reserve0_raw": "3000000000", "reserve1_raw": "[3e9]", "execution_status": "completed", @@ -171,31 +168,28 @@ "pair_address": "0x064d782Be0113Cb427f3Af0De9335C9F34A1de34", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "2.407080479781350729", + "native_balance": "0.551078988224567304", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "999995800", + "balance_human": "999.9958", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "998995900", + "balance_human": "998.9959", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", + "max_equal_seed_human": "998.9959", "reserve0_raw": "4000000000", "reserve1_raw": "[4e9]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" - ] + "funding_blockers": [] }, { "chain_id": 137, @@ -208,30 +202,28 @@ "pair_address": "0x3411A20C39773d1A18cb53864893b236f41f1e99", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "24.318080574425380349", + "native_balance": "15.030270707053166727", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF", "decimals": 6, - "balance_raw": "2686028", - "balance_human": "2.686028", - "allowance_raw": "0" + "balance_raw": "3001992967", + "balance_human": "3001.992967", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "2999903173", + "balance_human": "2999.903173", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", - "reserve0_raw": "996297636", - "reserve1_raw": "[9.962e8]", + "max_equal_seed_human": "2999.903173", + "reserve0_raw": "10994302668", + "reserve1_raw": "[1.099e10]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDC balance is zero" - ] + "funding_blockers": [] }, { "chain_id": 8453, @@ -244,31 +236,28 @@ "pair_address": "0x56eb93f747D3B8251d43849cC72B39c1899fcaca", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.002877934067617928", + "native_balance": "0.004958123781375043", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "5998983900", + "balance_human": "5998.9839", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "5998985900", + "balance_human": "5998.9859", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", + "max_equal_seed_human": "5998.9839", "reserve0_raw": "1000000000", "reserve1_raw": "[1e9]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" - ] + "funding_blockers": [] }, { "chain_id": 42161, @@ -281,30 +270,29 @@ "pair_address": "0x2b2ea2EA9e7617de09FCb5063BEfafa01A9ef2b4", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.001055113904178255", - "native_balance_ok_for_ops": true, + "native_balance": "0.000971971100341626", + "native_balance_ok_for_ops": false, "cwusdt": { "address": "0x73ADaF7dBa95221c080db5631466d2bC54f6a76B", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "1999884800", + "balance_human": "1999.8848", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "999884800", + "balance_human": "999.8848", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", + "max_equal_seed_human": "999.8848", "reserve0_raw": "3000000000", "reserve1_raw": "[3e9]", "execution_status": "completed", "funding_ready_now": false, "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" + "native gas below 0.001" ] }, { @@ -318,31 +306,28 @@ "pair_address": "0x6F97dE8AB68c722DcBC02cEA0cE6B587b8210052", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "8.537307308649465530", + "native_balance": "5.373727945247599766", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x73376eB92c16977B126dB9112936A20Fa0De3442", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "6999988900", + "balance_human": "6999.9889", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "5999988900", + "balance_human": "5999.9889", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", + "max_equal_seed_human": "5999.9889", "reserve0_raw": "1000000000", "reserve1_raw": "[1e9]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" - ] + "funding_blockers": [] }, { "chain_id": 43114, @@ -355,31 +340,28 @@ "pair_address": "0x79c8eA153e77BC69b989f59F69BfA44c466D5DEE", "pair_exists": true, "pair_seeded_live": true, - "native_balance": "0.446784013286210977", + "native_balance": "0.014891739291454170", "native_balance_ok_for_ops": true, "cwusdt": { "address": "0x8142BA530B08f3950128601F00DaaA678213DFdf", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "998985900", + "balance_human": "998.9859", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, "cwusdc": { "address": "0x0C242b513008Cd49C89078F5aFb237A3112251EB", "decimals": 6, - "balance_raw": "0", - "balance_human": "0", - "allowance_raw": "0" + "balance_raw": "998985900", + "balance_human": "998.9859", + "allowance_raw": "115792089237316195423570985008687907853269984665640564039457584007913129639935" }, - "max_equal_seed_human": "0", - "reserve0_raw": "800000", - "reserve1_raw": "[8e5]", + "max_equal_seed_human": "998.9859", + "reserve0_raw": "10000800000", + "reserve1_raw": "[1e10]", "execution_status": "completed", "funding_ready_now": false, - "funding_blockers": [ - "cWUSDT balance is zero", - "cWUSDC balance is zero" - ] + "funding_blockers": [] } ], "source_artifacts": [ diff --git a/reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md b/reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md new file mode 100644 index 00000000..d1e04a38 --- /dev/null +++ b/reports/status/cusdc-chain138-explorer-decimal-normalization-fix-20260511.md @@ -0,0 +1,90 @@ +# cUSDC Chain 138 Explorer Decimal Normalization Fix + +Generated: 2026-05-11T05:00:00Z + +## Issue + +The Chain 138 Explorer token page for native `cUSDC` showed visible liquidity as: + +`$5,180,095,723,066,127` + +The same token uses 6 decimals. The Etherscan wrapped `cWUSDC` page demonstrates the correct interpretation for the wrapped transport asset: raw base units must be divided by `10^6` before display. + +## Correct Interpretation + +| Asset | Surface | Contract | Decimals | +|---|---|---|---:| +| `cUSDC` | Chain 138 Explorer native / hub-side asset | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | `6` | +| `cWUSDC` | Etherscan wrapped Mainnet transport asset | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | `6` | + +The problematic Chain 138 Explorer liquidity value normalizes as: + +```text +5,180,095,723,066,127 / 10^6 = 5,180,095,723.066127 +``` + +So the display error was a 6-decimal raw-unit normalization issue, not evidence of quadrillion-dollar liquidity. + +The `/tokens` list showed the same pattern for the stable-token cards: + +| Token | Raw/stale visible liquidity | Corrected 6-decimal display | +|---|---:|---:| +| `cUSDT` | `$2,270,037,545,569` | `$2,270,037.545569` | +| `cUSDC` | `$5,180,095,723,066,127` | `$5,180,095,723.066127` | + +The gold tokens in the same screenshot (`cXAUC`, `cXAUT`) did not exhibit this raw-unit symptom because their displayed liquidity was already below the token's normalized supply value at the current canonical XAU price. + +## Code Completed + +Updated: + +- `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.ts` +- `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.test.ts` +- `explorer-monorepo/frontend/src/services/api/tokenAggregation.ts` +- `explorer-monorepo/frontend/src/services/api/tokens.test.ts` + +Behavior added: + +- If token market liquidity is larger than the token's normalized supply value, and dividing by `10 ** decimals` produces a plausible value, the token API returns the normalized liquidity value. +- This preserves ordinary market rows while correcting stale/raw liquidity rows for 6-decimal assets such as `cUSDC`. +- The Explorer frontend applies the same defensive normalization to token aggregation snapshots so `/tokens` cannot display stale raw-unit liquidity while a backend deploy is pending. + +## Verification + +Commands run: + +```bash +cd smom-dbis-138/services/token-aggregation +npm test -- --runTestsByPath src/api/routes/tokens.test.ts src/services/chain138-dodo-liquidity.test.ts +npm run build + +cd ../../../explorer-monorepo/frontend +npm run test:unit -- src/services/api/tokens.test.ts +``` + +Result: + +- `13` focused tests passed. +- TypeScript build passed. +- Frontend token API unit test passed. + +## Deployment Verification + +Completed: 2026-05-11T05:13:26Z + +Patched services were deployed to the live Chain 138 Explorer host and restarted on VMID 5000: + +- `solacescanscout-frontend`: active +- `token-aggregation`: active + +Public API output now returns normalized liquidity: + +| Token | Decimals | Live API liquidity | +|---|---:|---:| +| `cUSDT` | 6 | `2270037.545568842` | +| `cUSDC` | 6 | `5180095723.066127` | + +The live `/tokens` page now hydrates with the corrected visible values: + +- `cUSDT`: `$2,270,038` +- `cUSDC`: `$5,180,095,723` diff --git a/reports/status/cusdc-token-page-review-20260511.png b/reports/status/cusdc-token-page-review-20260511.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8fa39bc75c61b9ecf03c159a75b8a3160dca8c GIT binary patch literal 2412097 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

    v9zZ)jP(mUS>v%|-H|HC*L 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

    |1KeXEoenm=WBb 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�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¬G0=!}j>k#`QKVEu)|CVk$ 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

    sJK}CEOq5O4TVKXs!rXZa-0z5j{2o?)U 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

    eT0TgK1EUdGIBD) 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
    a*#75MQf4z-ee%1MKORBB<;8BVu5N8|M-?FJRn| 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%0Dg#?W~eFi6gSs~u(X>?`2 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≥r`VrQ*lGZZq}kH>6%L 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

    p$1nuagC9+TEVOt^75^OPiQX+!JQ@Hajxg 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

    ^e|3Y8s{><2|3cm`*k@YB~s-qA(;kX`lkgwIa^S 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�Nuz$^@z#p}++f;t` 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/reports/status/cw-mesh-full-operational-live-readiness-20260509.md b/reports/status/cw-mesh-full-operational-live-readiness-20260509.md new file mode 100644 index 00000000..2dff69d6 --- /dev/null +++ b/reports/status/cw-mesh-full-operational-live-readiness-20260509.md @@ -0,0 +1,67 @@ +# cW Mesh Full Operational Live Readiness + +Generated: `2026-05-09` + +## Executive Status + +Chain 138 is the canonical source of truth for the GRU c* asset family and public cW* transport mirrors. The active public cW mesh is broad, but the system should not yet be described as fully implemented, operational, and live with every optional add-on until the remaining live execution gates below are closed. + +## Complete / Active + +| Area | Status | Evidence | +|---|---|---| +| Chain 138 source of truth | Complete | `cross-chain-pmm-lps/config/deployment-status.json` has `homeChainId=138`; `config/token-mapping-multichain.json` has `cToCwSymbolMapping`. | +| Canonical token registry | Updated | `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` now includes the active nine-chain promoted GRU cW set and the broader 12-token wrapped fiat/commodity family. | +| Active cW public mesh chains | Active | Nine-chain promoted surface: `1, 10, 56, 100, 137, 8453, 42161, 42220, 43114` (Cronos `25` excluded from this public count; may still appear in legacy tooling/reports). | +| cWUSDC / cWUSDT mesh | Active | `reports/status/cw-mesh-deployment-matrix-latest.json` reports cWUSDC and cWUSDT on the active public chains with UniV2 pair discovery and cWUSDT/cWUSDC live/healthy. | +| Broader cW fiat/commodity family | Registry active | cWEURC, cWEURT, cWGBPC, cWGBPT, cWAUDC, cWJPYC, cWCHFC, cWCADC, cWXAUC, and cWXAUT are now represented in canonical token aggregation for the active public mesh. | +| Mainnet cWUSDC technical packet | Complete | `reports/status/mainnet-cwusdc-technical-completion-20260508.json`; Etherscan profile packet and logo assets under `docs/04-configuration/etherscan/`. | +| Branding/tracker packets | Complete internally | Etherscan, CoinGecko/CMC, logo, E2E, and branding docs exist under `docs/04-configuration/etherscan/` and `docs/04-configuration/coingecko/`. | +| Automated readiness gate | Added | `pnpm cw:full-readiness` writes `reports/status/cw-full-operational-readiness-latest.{json,md}`. Current in-repo source-of-truth status is green; live bridge E2E and external tracker approvals remain blocked. | +| Bridge evidence gate | Added | `pnpm cw:bridge-e2e-readiness` writes `reports/status/cw-multitoken-bridge-e2e-latest.{json,md}`. Latest evidence shows Chain 138, Ethereum, and Avalanche passing; Optimism, Cronos, BSC, Gnosis, Polygon, Base, Arbitrum, and Celo still need CWMultiToken L2 receiver/mapping remediation. | +| External tracker evidence gate | Added | `pnpm cwusdc:external-trackers` writes `reports/status/cwusdc-external-trackers-live-latest.{json,md}`. Latest evidence shows Etherscan, CMC DEX, and GeckoTerminal reachable; CoinGecko listing and DexScreener pair API payloads remain blocked. | + +## Not Yet Fully Complete + +| Gate | Current state | Required to call it fully live | +|---|---|---| +| Dedicated cW mint/burn receivers | Pending | Deploy or wire `CWMultiTokenBridgeL1` on Chain 138 and `CWMultiTokenBridgeL2` per active destination, grant minter/burner roles, and prove c* -> cW* -> c* transfers. | +| Wemix `1111` | Scaffold only | Chain 138 CCIP router must support the Wemix selector; bridge proof transfer must pass; then promote from `planned_gas_scaffold`. | +| ALL Mainnet `651940` | Bridge corridor live, not cW mesh | Decide whether ALL Mainnet is a cW destination or only an Alltra corridor; if cW destination, deploy cW inventory and same-chain routing; otherwise document as non-cW optional add-on. | +| Official-USDC public liquidity depth | Capital-gated | Fund official Mainnet USDC, rerun repeg plan, repair public cWUSDC/USDC liquidity, and sustain policy-floor depth. | +| Etherscan token profile | External pending | Submit profile with `@d-bis.org` email and 32x32 SVG; capture approval evidence. | +| CoinGecko / CMC listing | External pending | Submit tracker packets; wait for public listing and circulating-supply acceptance. | +| DexScreener / GeckoTerminal profile metadata | External pending | Submit/update token and pool profile metadata. | +| Wallet/token-list distribution | Pending | Publish updated token lists/logos, then submit to wallet ecosystems where applicable. | +| Oracle/direct price feed | Not live for cWUSDC | Keep valuation precedence documented or deploy/obtain approved direct feed. | +| E2E monitoring | Needs production gate | Add recurring checks for cW receiver roles, bridge proof transfers, LP depth, tracker metadata, and public endpoint health. | + +## Optional Add-Ons Required For "All Optional Add-Ons" + +1. **Public tracker profiles:** Etherscan, CoinGecko, CoinMarketCap, DexScreener, GeckoTerminal. +2. **Wallet recognition:** token-list exports, logo hosting, Trust Wallet / MetaMask / wallet import packages where applicable. +3. **Bridge proof suite:** live c* lock/burn/mint/release proofs for each active destination chain. +4. **Liquidity policy:** per-chain minimum depth policy, automated top-up/repeg reports, and public LP repair execution evidence. +5. **Oracle policy:** direct cWUSDC feed or documented valuation precedence with periodic review. +6. **Monitoring:** daily/CI reports for contract code, roles, balances, LP depth, price deviation, tracker status, and bridge sendability. +7. **Wemix promotion:** only after router support and proof transfer succeeds. +8. **ALL Mainnet decision:** promote as cW destination or keep as separate Alltra corridor with its own docs. + +## Recommended Execution Order + +1. Keep the canonical registry and docs reconciled with the deployment graph. +2. Deploy/wire dedicated cW receivers for active public mesh chains. +3. Run one small c* -> cW* -> c* proof transfer per active chain. +4. Fund official-USDC liquidity gaps and execute public liquidity repair. +5. Submit/complete Etherscan profile, then mirror the same facts to CoinGecko, CMC, DexScreener, and GeckoTerminal. +6. Publish wallet-ready token-list/logo updates. +7. Add recurring monitoring and a daily readiness report. +8. Promote Wemix and/or ALL Mainnet only after their respective gates pass. + +## Validation Performed + +- `pnpm --dir smom-dbis-138/services/token-aggregation test -- --runInBand canonical-tokens.test.ts` +- `pnpm token-lists:validate-metadata` +- `pnpm cw:full-readiness` +- `pnpm cw:bridge-e2e-readiness` +- `pnpm cwusdc:external-trackers` diff --git a/reports/status/cw-multitoken-l2-receiver-remediation-20260509.md b/reports/status/cw-multitoken-l2-receiver-remediation-20260509.md new file mode 100644 index 00000000..ee9811ca --- /dev/null +++ b/reports/status/cw-multitoken-l2-receiver-remediation-20260509.md @@ -0,0 +1,81 @@ +# CWMultiToken L2 Receiver Remediation - 2026-05-09 + +## Scope + +Completed live deployment/configuration for the eight chains that previously failed CWMultiToken bridge E2E readiness: + +| Chain | Receiver | +| --- | --- | +| Optimism `10` | `0x0b92EFd17f5FFA8E5941fdF7E8Ce1E670C3BD67f` | +| Cronos `25` | `0xc4e2ce800Ec5441a0D0B5787010F7363BF175B3E` | +| BSC `56` | `0x0909Fc58D8014FA8e8DB778F6bC913B923694889` | +| Gnosis `100` | `0xE3a1dA8Eb0fbE0968250656C0cC38411aC187CBa` | +| Polygon `137` | `0x69b0D30789E403ea8e69A4Fe95a66d358EF7D510` | +| Base `8453` | `0x159c8E779731625Ba4fE92E3AD18F9D217Ba79fb` | +| Arbitrum `42161` | `0x6627b125e4E8e0f274b6aF876737f6dB7526f26C` | +| Celo `42220` | `0x32aD687F24F77bF8C86605c202c829163Ac5Ab36` | + +## Completed Configuration + +- Deployed or reused a `CWMultiTokenBridgeL2` receiver on each failed chain. +- Updated `smom-dbis-138/.env` `CW_BRIDGE_*` source-of-truth entries for the receiver addresses. +- Configured each L2 receiver destination back to Chain 138 L1 bridge `0x152eD3e9912161b76BDFd368D0C84B7C31C10dE7`. +- Configured Chain 138 L1 destinations for each remote chain selector. +- Configured the core token pairs on each receiver: + - `Compliant_USDT_cW` + - `Compliant_USDC_cW` +- Granted each receiver `MINTER_ROLE` and `BURNER_ROLE` on its remote cWUSDT and cWUSDC mirrors. + +## Deployer Balance Check + +Deployer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` + +Post-remediation balances were still non-zero on all eight remediated chains: + +| Chain | Balance Wei | +| --- | ---: | +| Optimism | `430532335030017` | +| Cronos | `19154691909389182692` | +| BSC | `3681967051288879` | +| Gnosis | `551078988224567304` | +| Polygon | `15030270707053166727` | +| Base | `4958123781375043` | +| Arbitrum | `971971100341626` | +| Celo | `5373727945247599766` | + +## Verification + +Passed: + +- `pnpm cw:bridge-e2e-readiness` + - `readyForProduction: true` + - `allActiveChainsPassed: true` + - `activeChainCount: 10` + - `failedChainIds: []` +- `pnpm cw:full-readiness` + - `inRepoSourceOfTruthConfigured: true` + - `cw_mint_burn_bridge_live_e2e: pass` + - Remaining blocked gate: `external_trackers_live` +- `pnpm token-lists:validate-metadata` +- `pnpm --dir smom-dbis-138/services/token-aggregation test -- --runInBand canonical-tokens.test.ts` + +Evidence: + +- `reports/status/cw-multitoken-bridge-e2e-latest.json` +- `reports/status/cw-multitoken-bridge-e2e-latest.md` +- `reports/status/cw-full-operational-readiness-latest.json` +- `reports/status/cw-full-operational-readiness-latest.md` +- `reports/status/cw-multitoken-l2-remediation-20260509T150147Z.jsonl` +- `reports/status/cw-multitoken-l2-remediation-20260509T150513Z.jsonl` +- `reports/status/cw-multitoken-l2-remediation-20260509T150647Z.jsonl` + +## Remaining Blocker + +The CWMultiToken bridge blocker is resolved. The remaining `fullyOperationalAndLive: false` status is external tracker approval/indexing, not L2 receiver configuration: + +- `external_trackers_live` +- failed required tracker IDs: + - `coingecko_token_price_api` + - `dexscreener_v3_pool` + - `dexscreener_v2_pool` + diff --git a/reports/status/cwusdc-etherscan-token-page-review-20260511.md b/reports/status/cwusdc-etherscan-token-page-review-20260511.md new file mode 100644 index 00000000..8401f274 --- /dev/null +++ b/reports/status/cwusdc-etherscan-token-page-review-20260511.md @@ -0,0 +1,85 @@ +# cWUSDC Etherscan Token Page Review + +Generated: 2026-05-11T04:52:44Z + +Reviewed page: + +`https://etherscan.io/token/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a` + +## Summary + +Etherscan resolves the Ethereum Mainnet cWUSDC contract and shows the ERC-20 supply, holder count, verified source, and contract ABI. The token is still not profile-approved as `Wrapped cUSDC` / `cWUSDC` in Etherscan's primary display layer, and Etherscan is not yet showing USD market value fields. + +## Chain 138 Explorer Relationship + +The Etherscan link is the Ethereum Mainnet wrapped representation of the Chain 138 Explorer source asset relationship: + +| Surface | Role | Contract | +|---|---|---| +| Chain 138 Explorer | Native / hub-side `cUSDC` settlement asset | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | +| Etherscan | Ethereum Mainnet wrapped transport `cWUSDC` | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | + +Reviewers should treat the Etherscan token as the wrapped off-hub transport version. Chain 138 Explorer evidence should be used to explain the source-asset and system-of-record relationship, but Etherscan profile, supply, transfer, holder, and market-data submissions must remain scoped to the Ethereum Mainnet wrapped contract. + +## Decimal Normalization Relevance + +The Etherscan page explains the Chain 138 Explorer display issue: both the wrapped Mainnet `cWUSDC` and the Chain 138 hub-side `cUSDC` use 6 decimals. Etherscan displays the wrapped supply as `10,451,316,981.309788`, applying the 6-decimal divisor to raw units. + +The Chain 138 Explorer token-aggregation response was exposing `liquidityUsd: 5180095723066127` for `cUSDC`. That value is consistent with a raw 6-decimal unit value being displayed as dollars. Applying the same 6-decimal normalization yields: + +| Raw displayed value | Decimals | Corrected display value | +|---:|---:|---:| +| `5,180,095,723,066,127` | `6` | `5,180,095,723.066127` | + +Code update: `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.ts` now normalizes clearly raw-unit liquidity rows before returning token market data. The regression test is in `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.test.ts`. + +## Observed Page State + +| Signal | Current result | +|---|---| +| Page title / social metadata | `ERC-20 Token | Address: 0x2de5f116...c24b9284a | Etherscan` | +| Token reputation metadata | `Unknown` | +| Header token label | Generic `Token`; rendered symbol surface shows `ERC20 ***` | +| Tooltip / contract metadata | `Wrapped cUSDC (cWUSDC)` is present as a tooltip string | +| Max total supply | `10,451,316,981.309788 ERC20 ***` | +| Holders | `3,783` | +| Token contract | `0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a`, 6 decimals | +| Onchain market cap | blank | +| Circulating supply market cap | blank | +| Exchange data source section | `Coingecko`, but no accepted cWUSDC market row is visible | +| Contract verification | Source code verified as similar match to `0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE` | +| Contract name | `CompliantWrappedToken` | +| Compiler | `v0.8.20+commit.a1b79de6` | +| Audit surface | No contract security audit submitted | + +## Findings + +1. Etherscan profile approval is still the first blocker. + The page does not yet show the canonical `Wrapped cUSDC` / `cWUSDC` branding in the main token title, social metadata, and token display rows. It still exposes a generic `ERC20 ***` surface. + +2. Etherscan USD value is still blocked by upstream price acceptance. + The contract supply is visible, but both Etherscan market-cap fields are blank. This remains consistent with the current provider monitor result: CoinGecko does not yet return a positive USD price for the exact Ethereum Mainnet cWUSDC contract. + +3. The supply field is visible and can be used as submission evidence. + Etherscan reports `10,451,316,981.309788` units with 6 decimals. This matches the repo-side supply/circulating-supply attestation workstream and should be attached to Etherscan, CoinGecko, and CMC submissions. + +4. Contract verification is not the blocker. + The source/ABI surface is available and identifies `CompliantWrappedToken`. The missing pieces are profile metadata, token image/reputation, market-data acceptance, and optional audit evidence. + +5. The Etherscan page already exposes the update path. + The page includes `Update Token Info`, `Update Name Tag or Label`, `Submit Burn Details`, `Report/Flag Address`, and `Submit Audit` actions. The next operator action is authenticated Etherscan token-profile submission using the existing packet. + +## Required Next Actions + +| Priority | Action | Packet / evidence | +|---:|---|---| +| 1 | Submit or re-submit the Etherscan token profile update. | `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | +| 2 | Use the canonical name, symbol, website, email, and 32x32 logo. | `Wrapped cUSDC`, `cWUSDC`, `https://d-bis.org/`, `submissions@d-bis.org`, `https://d-bis.org/tokens/cwusdc.svg` | +| 3 | Attach supply/circulating-supply proof. | `reports/status/cwusdc-supply-circulating-attestation-latest.*` | +| 4 | Submit CoinGecko and CMC updates for the exact Mainnet contract. | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| 5 | Re-run propagation monitoring after every external response. | `python3 scripts/verify/monitor-cwusdc-etherscan-value-propagation.py` | +| 6 | Consider submitting a contract audit link if available. | Etherscan `Submit Audit` route | + +## Operator Note + +Do not mix Chain 138 `cUSDC` transfer volume or market activity into Ethereum Mainnet `cWUSDC` submissions. Etherscan should receive Ethereum Mainnet `cWUSDC` identity, supply, profile, and price evidence only, with Chain 138 `cUSDC` referenced only as the canonical source-asset relationship. diff --git a/reports/status/cwusdc-external-tracker-remediation-20260509.md b/reports/status/cwusdc-external-tracker-remediation-20260509.md new file mode 100644 index 00000000..adaa8657 --- /dev/null +++ b/reports/status/cwusdc-external-tracker-remediation-20260509.md @@ -0,0 +1,45 @@ +# cWUSDC External Tracker Remediation - 2026-05-09 + +## Result + +Repo-side remediation is complete, but the `external_trackers_live` gate cannot honestly be marked live yet because CoinGecko and DexScreener still require third-party acceptance/indexing. + +## Completed + +- Rechecked CoinGecko, DexScreener, GeckoTerminal, CoinMarketCap DEX, and Etherscan public surfaces. +- Confirmed GeckoTerminal V3 pool evidence is live: + - `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` + - GeckoTerminal identifies it as `cWUSDC/USDC` on Uniswap V3 with a low-liquidity warning. +- Updated `scripts/verify/check-cwusdc-external-trackers-live.py` to probe DexScreener's current `token-pairs/v1` and `tokens/v1` endpoints instead of relying only on legacy pair endpoints. +- Corrected stale submission-packet wording that previously described DexScreener as indexed. +- Added a CoinGecko listing request payload: + - `docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json` +- Added a DexScreener indexing/profile packet: + - `docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md` + +## Live Blockers + +| Surface | Current status | Required completion evidence | +|---|---|---| +| CoinGecko token price API | Empty response for cWUSDC contract | API returns cWUSDC under `simple/token_price/ethereum` | +| DexScreener token pairs API | Empty array for cWUSDC | `token-pairs/v1/ethereum/` returns at least one pool | +| DexScreener profile/order | No approved order | `orders/v1/ethereum/` shows approved profile order or token page metadata appears | + +## On-Chain Funding Boundary + +The smallest honest public UniV2 repair canary is currently blocked by official Mainnet USDC funding: + +| Item | Amount | +|---|---:| +| Wallet USDC | `0.343655 USDC` | +| UniV2 repair canary requirement | `1,657.650239 USDC` | +| UniV2 repair canary shortfall | `1,657.306584 USDC` | +| Public policy-floor quote-side top-up | `2,497.832239 USDC` | +| Public policy-floor shortfall | `2,497.488584 USDC` | + +## Verification Commands + +```bash +pnpm cwusdc:external-trackers +pnpm cw:full-readiness +``` diff --git a/reports/status/cwusdc-institutional-hardening-completion-20260511.md b/reports/status/cwusdc-institutional-hardening-completion-20260511.md new file mode 100644 index 00000000..9d354415 --- /dev/null +++ b/reports/status/cwusdc-institutional-hardening-completion-20260511.md @@ -0,0 +1,58 @@ +# cWUSDC Institutional Hardening Completion + +Generated: `2026-05-11` + +## Completed Now + +The following repo-controlled institutional hardening items have been completed: + +| Item | Status | Artifact | +|---|---|---| +| Evidence bundle index | Complete | `docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md` | +| Supply/circulating methodology | Complete | `docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md` | +| Security/audit disclosure | Complete | `docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md` | +| Mainnet role/control audit | Complete | `reports/status/cwusdc-mainnet-role-audit-latest.md` | +| Provider response tracker template | Complete | `docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md` | +| No-broadcast liquidity readiness plan | Complete | `docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md` | +| Incident-response wording | Complete | `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` | +| Provider packet links | Updated | `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` | +| Non-manual task list | Updated | `docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md` | +| Reproducible evidence bundle command | Complete | `scripts/verify/build-cwusdc-institutional-evidence-bundle.sh` | +| Submission attachment bundle | Complete | `reports/status/cwusdc-institutional-evidence-bundle-20260511.tar.gz` | +| Institutional doc link-check coverage | Complete | `scripts/verify/check-cwusdc-institutional-doc-links.py` | +| Role deployment appendix | Complete | `reports/status/cwusdc-role-deployment-appendix-latest.md` | +| Provider monitoring wrapper | Complete | `scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh` | +| Provider monitoring systemd examples | Complete | `config/systemd/cwusdc-provider-monitor.service.example`; `config/systemd/cwusdc-provider-monitor.timer.example` | +| Provider submission prefill and screenshot checklist | Complete | `reports/status/cwusdc-provider-submission-prefill-latest.md` | +| Public evidence screenshots | Complete | `reports/status/screenshots/cwusdc-etherscan-token-page.png`; `reports/status/screenshots/cwusdc-dbis-token-directory.png`; `reports/status/screenshots/cwusdc-logo-url.png`; `reports/status/screenshots/cwusdc-geckoterminal-univ3-pool.png` | + +## Current Evidence Bundle + +```text +reports/status/cwusdc-institutional-evidence-bundle-20260511.tar.gz +reports/status/cwusdc-institutional-evidence-bundle-20260511.sha256 +``` + +## Still Open But Repo-Actionable + +| Priority | Task | Why still open | +|---:|---|---| +| P3 | Capture fresh browser screenshots immediately before each external submission | Screenshot checklist and commands are ready; screenshots should be captured in the same operator browser context used for submission. | +| P3 | Record external provider ticket IDs after submission | Requires the human-authenticated provider form submission to exist first. | + +## Still Open And External / Operator Bound + +| Task | Boundary | +|---|---| +| Etherscan profile submission/acceptance | Authenticated Etherscan account and review required. | +| CoinGecko listing/update acceptance | Provider form/support review required. | +| CoinMarketCap listing/update acceptance | Provider form/support review required. | +| DexScreener indexing/profile acceptance | Provider indexing or profile flow required. | +| Formal third-party audit URL | External audit or authenticated report source required. | +| Official USDC liquidity funding | Moves funds/broadcasts transactions; operator approval and capital required. | + +## Recommended Next Repo-Controlled Work + +1. Run `pnpm cwusdc:provider-monitor` before each submission window. +2. Run `pnpm cwusdc:evidence-bundle` immediately before the operator submits Etherscan/CoinGecko/CMC forms so the attachment is freshly dated. +3. Capture the screenshots listed in `reports/status/cwusdc-provider-submission-prefill-latest.md` from the operator browser session. diff --git a/reports/status/cwusdc-institutional-readiness-review-20260511.md b/reports/status/cwusdc-institutional-readiness-review-20260511.md new file mode 100644 index 00000000..f3658119 --- /dev/null +++ b/reports/status/cwusdc-institutional-readiness-review-20260511.md @@ -0,0 +1,94 @@ +# cWUSDC Institutional Readiness Review + +Generated: `2026-05-11` + +Target: + +```text +Ethereum Mainnet cWUSDC +0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +CAIP-19: eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a +``` + +## Executive Score + +| Lens | Score | Grade | Interpretation | +|---|---:|---|---| +| Repo-controlled evidence readiness | 86 / 100 | B+ | Dossier, supply proof, contract source verification, URLs, and docs are ready. | +| Etherscan Value readiness | 38 / 100 | D+ | Contract exists and is verified, but Etherscan profile/value fields are not accepted yet. | +| Market-data/provider readiness | 42 / 100 | C- | CMC DEX and GeckoTerminal surfaces exist; CoinGecko and DexScreener are not live for cWUSDC price discovery. | +| Institutional review readiness | 58 / 100 | C+ | Good audit trail and identity discipline, but no accepted market value, no audit submission, thin liquidity, and profile gaps remain. | +| Crypto/tracker adoption readiness | 45 / 100 | C- | Discoverability exists in some venues, but missing CoinGecko/DexScreener and weak liquidity block broad adoption. | +| Overall current state | 54 / 100 | C | Good evidence packet; not yet an accepted/listed/value-bearing asset surface. | + +## Live Status Summary + +| Surface | Current state | +|---|---| +| Etherscan token page | HTTP 200; profile text detected; holders `3,783`; supply `10,451,316,981.309788`; market-cap fields blank. | +| Etherscan source verification | Verified: `CompliantWrappedToken`; compiler `v0.8.20`; ABI available; not a proxy. | +| Etherscan `tokeninfo` | API Pro-gated for current key; metadata/price propagation cannot be monitored through free key. | +| CoinGecko token price API | HTTP 200 but returns no token entry and no USD price. | +| CoinMarketCap DEX page | Public probe passes. | +| DexScreener token-pairs API | HTTP 200 but returns empty array; not currently indexing cWUSDC pairs. | +| GeckoTerminal pools | Both tracked pools return API data; current reserve USD remains very small. | +| Public prerequisite URLs | All required DBIS URLs returned HTTP 200. | +| Supply proof | Mainnet total and circulating supply proof generated. | +| Global family proof | Generated as context only; not valid as Ethereum token-page supply. | +| Etherscan V2 chainlist | 64 chains; Chain 138 is not present, so Chain 138 evidence is provenance, not native Etherscan V2 evidence. | +| L2 deposit evidence | OP checked with no samples; Arbitrum returned one ETH deposit sample for deployer wallet. | + +## Strengths + +- Mainnet cWUSDC contract is deployed, source-verified, ABI-visible, and Etherscan-readable. +- Supply and circulating-supply attestation is generated and internally consistent. +- Submission packets exist for Etherscan, CoinGecko, CMC, MetaMask/provider paths, and bridge/cross-chain context. +- Public prerequisite links and brand assets are reachable. +- Chain 138 source relationship is documented without incorrectly merging Chain 138 activity into Ethereum supply. +- Dossier command `pnpm cwusdc:etherscan-dossier` now creates a repeatable evidence packet. + +## Critical Gaps + +| Priority | Gap | Why it matters | Fix | +|---:|---|---|---| +| P0 | Etherscan profile not visibly accepted | Token still lacks full canonical display/profile/value treatment | Submit or re-submit Etherscan token profile using the canonical packet and capture ticket evidence. | +| P0 | Etherscan market-cap fields blank | Holder rows cannot show credible USD Value without accepted price/supply path | Complete Etherscan profile plus CoinGecko/CMC acceptance for exact Mainnet contract. | +| P0 | CoinGecko has no cWUSDC price entry | Etherscan likely depends on trusted market-data providers | Submit/update CoinGecko listing with supply proof, DEX links, caveats, and logo. | +| P0 | DexScreener does not index pairs | Weakens public DEX discoverability and downstream tracker confidence | Refresh pair events, verify pair URLs, then submit DexScreener profile/update request. | +| P0 | Liquidity is too thin for institutional reliance | A few dollars/hundreds of dollars in reserve is not robust price support | Add official quote-side USDC and maintain visible pool depth/fresh events before making peg/depth claims. | +| P1 | No Etherscan audit submission | Institutional reviewers expect audit or explicit unaudited disclosure | Submit an audit link if available, or document unaudited status and controls. | +| P1 | Etherscan `tokeninfo` monitor is Pro-gated | Cannot confirm Etherscan API-side metadata/price propagation with current key | Upgrade/use Pro API for monitoring or rely on page HTML/manual screenshots. | +| P1 | Global family supply can be misunderstood | Double-counting risk across cUSDC/cWUSDC family | Continue using global proof only as context; never as Mainnet token-page supply. | +| P2 | Non-EVM funding requirements are unresolved | Future Solana/Tron/XRPL claims remain incomplete | Bind native wallets, asset IDs, gas/reserve targets, and venue requirements before provider claims. | + +## Institutional Recommendations + +1. Treat the current state as `submission-ready`, not `market-value-ready`. +2. Submit Etherscan token profile first; it is the cleanest missing identity layer. +3. Submit CoinGecko and CMC immediately after or in parallel, but do not claim external acceptance until visible. +4. Add an audit/security evidence route or explicit unaudited disclosure before institutional outreach. +5. Increase official USDC quote-side liquidity before making any 1:1 peg or market-depth statement. +6. Use only Ethereum Mainnet cWUSDC supply for Etherscan; keep Chain 138 cUSDC and global family supply as provenance/context. +7. Keep all provider tickets CAIP-19 keyed: `eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`. +8. Run `pnpm cwusdc:etherscan-dossier` after every external submission, approval, rejection, or liquidity event. + +## Suggested Fix Order + +1. Submit Etherscan token profile with: + - `Wrapped cUSDC` + - `cWUSDC` + - `https://d-bis.org/` + - `submissions@d-bis.org` + - `https://d-bis.org/tokens/cwusdc.svg` + - supply proof and source verification. +2. Submit CoinGecko listing/update for the exact Mainnet contract. +3. Submit CMC listing/update and reference the existing CMC DEX page. +4. Refresh or create public indexed swap/liquidity events for cWUSDC/USDC. +5. Re-check DexScreener and GeckoTerminal after events settle. +6. Add official USDC liquidity if any peg/value claim will be made. +7. Submit audit/security evidence or publish a formal unaudited risk disclosure. +8. Capture screenshots/ticket IDs and add them to `reports/status/`. + +## Bottom Line + +The evidence machine is now mature enough for an institutional submission packet. The asset is not yet institutionally acceptable as a displayed-value asset because external profile/price acceptance, market-data coverage, audit posture, and quote-side liquidity remain incomplete. diff --git a/reports/status/cwusdc-nonpaid-listing-path-completion-20260511.md b/reports/status/cwusdc-nonpaid-listing-path-completion-20260511.md new file mode 100644 index 00000000..bede7712 --- /dev/null +++ b/reports/status/cwusdc-nonpaid-listing-path-completion-20260511.md @@ -0,0 +1,55 @@ +# cWUSDC Non-Paid Listing Path Completion + +Completed: 2026-05-11T06:52:24Z + +## Completed Without Paid Listings + +| Step | Status | Evidence | +|---|---|---| +| Refresh repo-controlled prerequisite URLs | Complete | `reports/status/cwusdc-etherscan-prereq-urls-latest.md` | +| Refresh external tracker probes | Complete | `reports/status/cwusdc-external-trackers-live-latest.md` | +| Refresh provider handoff report | Complete | `reports/status/cwusdc-provider-handoff-latest.md` | +| Refresh Etherscan value dossier | Complete | `reports/status/cwusdc-etherscan-value-dossier-latest.md` | +| Refresh Mainnet cWUSDC/USDC repeg plan | Complete | `reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json` | +| Refresh WETH liquidity evaluation | Complete | `reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.md` | +| Add compact public cWUSDC evidence endpoint | Complete and deployed | `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cWUSDC?chainId=1` | +| Add compact Chain 138 cUSDC source evidence endpoint | Complete and deployed | `https://explorer.d-bis.org/token-aggregation/api/v1/report/token-price/cUSDC?chainId=138` | +| Normalize report/export liquidity for 6-decimal cUSDC/cUSDT | Complete and deployed | CoinGecko export and `/tokens` endpoint now agree | +| Update tracker/Etherscan packets with compact evidence URLs | Complete | `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md`, `docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md` | + +## Live Endpoint Verification + +| Endpoint | Verified value | +|---|---:| +| `/token-aggregation/api/v1/report/token-price/cWUSDC?chainId=1` | price `$1.00`; market cap `$10,451,316,981.309788`; liquidity `$21,068,680.077819` | +| `/token-aggregation/api/v1/report/token-price/cUSDC?chainId=138` | liquidity `$5,180,095,723.066127`; market cap `$38,601,011,267` | +| `/token-aggregation/api/v1/report/coingecko?chainId=138` cUSDC | liquidity `$5,180,095,723.066127` | +| `/token-aggregation/api/v1/report/coingecko?chainId=138` cUSDT | liquidity `$2,270,037.545568842` | +| `/token-aggregation/api/v1/tokens?chainId=138` cUSDC | liquidity `$5,180,095,723.066127` | +| `/token-aggregation/api/v1/tokens?chainId=138` cUSDT | liquidity `$2,270,037.545568842` | + +## Current Non-Paid Boundary + +The free/non-paid work under local control is now complete. Remaining blockers are external-provider or funding bound: + +| Blocker | Current state | Non-paid next action | +|---|---|---| +| CoinGecko token price API | Still returns no cWUSDC price object | Submit/update free listing packet and wait for review/indexing. | +| DexScreener token-pairs API | Still returns empty arrays for cWUSDC | Wait for organic indexing after enough public pool activity, or submit/update profile/indexing request. | +| Etherscan market-cap/value fields | Still blank | Submit free token info/profile update; Etherscan normally waits on recognized external price sources. | +| Official Mainnet USDC quote funding | Operator wallet has only `0.343655 USDC` | Add external USDC funding before any honest public LP repair/repeg execution. | +| DefiLlama public Chain 138 TVL | Chain 138 still not listed in DefiLlama chain list | Continue adapter/server submission path; no paid listing required, but maintainers must merge/accept. | + +## Validation Commands + +```bash +cd smom-dbis-138/services/token-aggregation +npm test -- --runTestsByPath src/api/routes/report.test.ts src/api/routes/tokens.test.ts +npm run build + +cd /home/intlc/projects/proxmox +pnpm cwusdc:provider-checks +pnpm cwusdc:etherscan-dossier +bash scripts/verify/plan-mainnet-cwusdc-usdc-repeg.sh +pnpm engine-x:weth-liquidity-eval +``` diff --git a/reports/status/cwusdc-provider-automation-enhancements-20260510.md b/reports/status/cwusdc-provider-automation-enhancements-20260510.md new file mode 100644 index 00000000..6e579592 --- /dev/null +++ b/reports/status/cwusdc-provider-automation-enhancements-20260510.md @@ -0,0 +1,52 @@ +# cWUSDC Provider Automation Enhancements + +Generated: 2026-05-10 + +## Completed Enhancements + +| Enhancement | Status | Artifact | +|---|---|---| +| Wrapper for all non-manual provider checks | Complete | `scripts/verify/run-cwusdc-provider-nonmanual-checks.sh` | +| CI-safe provider-readiness check | Complete | `scripts/verify/check-cwusdc-provider-readiness-ci.sh` | +| Dated/status handoff report generator | Complete | `scripts/verify/build-cwusdc-provider-handoff-report.py` | +| JSON/Markdown output for Etherscan prerequisite URL checker | Complete | `scripts/verify/check-cwusdc-etherscan-prereq-urls.sh --json-out ... --md-out ...` | +| Package shortcuts | Complete | `pnpm cwusdc:provider-checks`, `pnpm cwusdc:provider-ci`, `pnpm cwusdc:provider-handoff` | +| Verify README discoverability | Complete | `scripts/verify/README.md` | +| Canonical non-manual task list | Complete | `docs/04-configuration/CWUSDC_NON_MANUAL_PROVIDER_TASKS.md` | + +## Generated Outputs + +| Output | Purpose | +|---|---| +| `reports/status/cwusdc-etherscan-prereq-urls-latest.json` / `.md` | Repo-controlled public URL prerequisite evidence. | +| `reports/status/cwusdc-external-trackers-live-latest.json` / `.md` | External tracker/indexing probe evidence. | +| `reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json` / `.md` | Read-only liquidity-gap planner output. | +| `reports/status/cwusdc-provider-handoff-latest.json` / `.md` | Consolidated provider handoff report. | +| `reports/status/cwusdc-provider-readiness-ci-latest.json` / `.md` | CI-safe readiness gate output. | + +## Verification + +Commands run: + +```bash +bash -n scripts/verify/check-cwusdc-etherscan-prereq-urls.sh scripts/verify/run-cwusdc-provider-nonmanual-checks.sh scripts/verify/check-cwusdc-provider-readiness-ci.sh +python3 -m py_compile scripts/verify/build-cwusdc-provider-handoff-report.py +node -e 'JSON.parse(require("fs").readFileSync("package.json","utf8")); console.log("package.json ok")' +bash scripts/verify/run-cwusdc-provider-nonmanual-checks.sh +bash scripts/verify/check-cwusdc-provider-readiness-ci.sh +``` + +Initial CI-gate verification wrote its summary and exited non-zero when the run could not reach the repo-controlled `d-bis.org` prerequisite URLs (`HTTP 000`). After adding retry/timeout controls and rerunning, the repo-controlled prerequisites passed and `check-cwusdc-provider-readiness-ci.sh` exited `0`; external provider blockers remain advisory in the CI-safe gate. + +## Review Update + +Reviewed after initial implementation and tightened: + +- `check-cwusdc-etherscan-prereq-urls.sh` now supports retry and timeout knobs and records attempts plus curl exit status in JSON/Markdown evidence. +- `build-cwusdc-provider-handoff-report.py` now reports missing input JSON files as explicit repo-controlled blockers instead of silently treating them as zero counts. +- Handoff Markdown now JSON-renders complex values and escapes pipe characters so generated tables remain readable. +- Latest rerun status: repo-controlled prerequisites passed `8 / 8`; CI status `success`; external advisory blockers remain CoinGecko token-price API, DexScreener token-pairs API, DexScreener tokens API, and non-EVM funding requirements. + +## Boundary + +The automation is public/read-only except for report writes under `reports/status/`. It does not submit external provider forms, approve tokens, add liquidity, swap, bridge, or broadcast transactions. diff --git a/reports/status/engine-x-collateral-borrow-repay-swap-loop-calculation-20260508.md b/reports/status/engine-x-collateral-borrow-repay-swap-loop-calculation-20260508.md new file mode 100644 index 00000000..6677cc70 --- /dev/null +++ b/reports/status/engine-x-collateral-borrow-repay-swap-loop-calculation-20260508.md @@ -0,0 +1,148 @@ +# Engine X Collateral Borrow/Repay/Swap Loop Calculation - 2026-05-08 + +## Requested Loop Shape + +```text +Setup: + Supply XAUt collateral + +Loop: + 1. Borrow USDC + 2. Swap cWUSDC -> USDC + 3. Use that USDC to repay borrowed debt + 4. Swap borrowed USDC -> cWUSDC + +Final: + Withdraw XAUt collateral +``` + +Loop invariant: + +```text +ending USDC debt = 0 +borrowed USDC is not used to repay itself +cWUSDC sale produces the debt repayment USDC +borrowed USDC is swapped to cWUSDC after the debt is repaid +``` + +## Live Inputs + +| Item | Value | +|---|---:| +| Block sampled | `25054049` | +| Signer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | +| ETH | `0.000722992853396561 ETH` | +| Wallet cWUSDC | `56,772,406.104296 cWUSDC` | +| Wallet USDC | `8.484451 USDC` | +| Wallet XAUt | `0.00002723 XAUt` | +| Borrow vault position | `1` raw XAUt collateral / `32` raw USDC debt | +| Borrow vault lender USDC | `0` | +| Borrow vault max additional by collateral | `2,314` raw USDC | +| UniV3 pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| UniV3 tick | `-200` | +| UniV3 active liquidity | `66,836,248` | +| UniV3 balances | `183.616951 cWUSDC / 0.000035 USDC` | +| UniV2 reserves | `1,267,071.063797 cWUSDC / 2.167762 USDC` | + +## Executable Now Without Funding Lender + +The borrow vault lender bucket is `0`, so no new borrow can happen until USDC is returned/funded into the lender. + +The only immediate way to create lender availability is to repay the existing `32` raw USDC debt first. After that repayment, lender availability becomes `32` raw USDC, allowing one closed loop at `D = 32` raw USDC. + +### Dust Closed Loop + +| Step | Amount | +|---|---:| +| Pre-loop repay existing debt | `32` raw USDC | +| Borrow amount `D` | `32` raw USDC | +| UniV3 cWUSDC needed for repayment USDC | `35` raw cWUSDC | +| Repayment USDC produced | `32` raw USDC | +| Borrowed USDC swapped to cWUSDC | `31` raw cWUSDC | +| Net cWUSDC delta | `-4` raw cWUSDC | +| Ending debt | `0` | +| XAUt withdrawal eligibility | yes, after debt is zero | + +Human units: + +```text +D = 0.000032 USDC +cWUSDC sold = 0.000035 +cWUSDC received = 0.000031 +net cWUSDC cost = 0.000004 +``` + +This is the only debt-neutral loop executable now without adding USDC to the borrow vault. + +## Larger D Values + +### UniV3 quotes + +| Borrow amount `D` | cWUSDC -> USDC repayment leg | borrowed USDC -> cWUSDC leg | Status | +|---:|---:|---:|---| +| `32` raw | needs `35` raw cWUSDC | returns `31` raw cWUSDC | executable after initial debt repay | +| `100` raw | cWUSDC -> USDC exact-output quote unavailable | returns `100` raw cWUSDC | blocked | +| `1,000` raw | cWUSDC -> USDC exact-output quote unavailable | returns `1,019` raw cWUSDC | blocked | +| `10,000` raw | cWUSDC -> USDC exact-output quote unavailable | returns `10,199` raw cWUSDC | blocked | +| `50,000` raw | cWUSDC -> USDC exact-output quote unavailable | returns `50,966` raw cWUSDC | blocked | + +UniV3 cannot currently support the `cWUSDC -> USDC` repayment leg above dust because the pool has only `35` raw USDC in token balance. + +### UniV2 quotes + +UniV2 can quote larger repayment legs, but it is not a 1:1 proof surface right now. + +| Borrow amount `D` | cWUSDC needed to get `D` USDC | borrowed `D` USDC -> cWUSDC | Net cWUSDC delta | +|---:|---:|---:|---:| +| `0.000032 USDC` | `18.760768 cWUSDC` | `18.647822 cWUSDC` | `-0.112946 cWUSDC` | +| `0.010000 USDC` | `5,889.823414 cWUSDC` | `5,800.850842 cWUSDC` | `-88.972572 cWUSDC` | +| `0.050000 USDC` | `30,005.347980 cWUSDC` | `28,482.661768 cWUSDC` | `-1,522.686212 cWUSDC` | +| `0.664966 USDC` | `562,348.090087 cWUSDC` | `296,754.045404 cWUSDC` | `-265,594.044683 cWUSDC` | +| `1.000000 USDC` | `1,088,307.133596 cWUSDC` | `399,167.409936 cWUSDC` | `-689,139.723660 cWUSDC` | + +These are public/indexable swaps, but they do not prove a 1:1 peg because UniV2 is quote-starved. + +## What Must Be True For Larger 1:1 Loops + +For a larger debt-neutral 1:1 loop at borrow amount `D`: + +```text +borrowVault.lenderUsdcAvailable >= D +maxAdditionalBorrow >= D +UniV3 cWUSDC -> USDC can output D +UniV3 USDC -> cWUSDC can consume D +ending debt after repay = 0 +``` + +Right now: + +```text +borrowVault.lenderUsdcAvailable = 0 +UniV3 cWUSDC -> USDC max practical output ~= 32 raw USDC +``` + +So larger loops need a preparation phase: + +```text +1. Repay existing 32 raw USDC debt. +2. Fund borrow vault lender with the intended D, or otherwise return enough USDC to the lender bucket. +3. Repair/fund the UniV3 quote side so cWUSDC -> USDC can output D. +4. Then run the closed debt-neutral loop. +5. Withdraw XAUt only after debt is zero. +``` + +## Recommended Calculation Target + +For current funds, the only strictly closed loop is: + +```text +pre-repay 32 raw USDC +borrow 32 raw USDC +swap 35 raw cWUSDC -> 32 raw USDC +repay 32 raw USDC debt +swap borrowed 32 raw USDC -> 31 raw cWUSDC +withdraw XAUt collateral +``` + +For a meaningful `0.01` or `0.05` USDC loop, use the same loop shape, but first fund/repair the lender and UniV3 quote side. Do not use UniV2 for 1:1 peg proof unless the UniV2 pool is repaired first. + diff --git a/reports/status/engine-x-debt-neutral-univ3-loop-recalc-20260508.md b/reports/status/engine-x-debt-neutral-univ3-loop-recalc-20260508.md new file mode 100644 index 00000000..c9229f5e --- /dev/null +++ b/reports/status/engine-x-debt-neutral-univ3-loop-recalc-20260508.md @@ -0,0 +1,83 @@ +# Engine X Debt-Neutral UniV3 Loop Recalculation - 2026-05-08 + +## Rule Change + +The loop must not increase USDC debt. + +Revised loop semantics: + +```text +1. Repay existing USDC debt. +2. Run the public/indexable USDC -> cWUSDC swap. +3. Stop. +``` + +No final `borrowUsdc` call is included. Ending debt must be less than or equal to starting debt. + +## Live State + +| Item | Value | +|---|---:| +| Block sampled | `25053853` | +| Signer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | +| ETH | `0.000722992853396561 ETH` | +| Wallet USDC | `8.484451 USDC` | +| Wallet cWUSDC | `56,772,406.104296 cWUSDC` | +| Borrow vault position | `1` raw XAUt collateral / `32` raw USDC debt | +| Borrow vault debt | `0.000032 USDC` | +| UniV3 pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| UniV3 tick | `-200` | +| UniV3 active liquidity | `66,836,248` | +| UniV3 balances | `183.616951 cWUSDC / 0.000035 USDC` | + +## Recalculated Debt-Neutral Options + +All rows assume the existing `0.000032 USDC` debt is repaid first from wallet USDC, then the selected USDC amount is swapped into cWUSDC on the public UniV3 pool. + +| Swap amount | Expected cWUSDC out | Total USDC spent incl. debt repay | Wallet USDC remaining | Ending USDC debt | +|---:|---:|---:|---:|---:| +| `0.000032 USDC` | `0.000031 cWUSDC` | `0.000064 USDC` | `8.484387 USDC` | `0` | +| `0.010000 USDC` | `0.010199 cWUSDC` | `0.010032 USDC` | `8.474419 USDC` | `0` | +| `0.050000 USDC` | `0.050966 cWUSDC` | `0.050032 USDC` | `8.434419 USDC` | `0` | +| `0.664966 USDC` | `0.673251 cWUSDC` | `0.664998 USDC` | `7.819453 USDC` | `0` | +| `1.000000 USDC` | `1.011600 cWUSDC` | `1.000032 USDC` | `7.484419 USDC` | `0` | + +## Interpretation + +The prior borrow-loop shape reopened USDC debt after repayment. This revised shape does not. + +For a tiny 1:1 canary, the cleanest sequence is: + +```text +repay 0.000032 USDC debt +swap 0.010000 USDC -> cWUSDC on UniV3 +swap 0.050000 USDC -> cWUSDC on UniV3 +stop with zero USDC debt +``` + +If the goal is to nudge the UniV3 pool closer to tick `0` before the small proof swaps, use: + +```text +repay 0.000032 USDC debt +swap about 0.664966 USDC -> cWUSDC on UniV3 +then run the 0.010000 and 0.050000 USDC proof swaps +stop with zero USDC debt +``` + +## Gas + +At sampled gas price `107,950,411 wei`, approximate gas costs are small relative to the current ETH balance: + +| Action estimate | Gas | ETH | +|---|---:|---:| +| repay debt | `80,000` | `0.000008636033` | +| approval | `55,000` | `0.000005937273` | +| UniV3 swap | `120,000` | `0.000012954049` | +| repay + approval + one swap | `255,000` | `0.000027527355` | + +## Recommended Next Execution + +Do not open additional USDC debt. + +Run the debt repayment first, then perform the UniV3 USDC -> cWUSDC canary swaps, and stop. This creates public/indexable UniV3 swap evidence while leaving the borrow vault debt at `0`. + diff --git a/reports/status/engine-x-loop-capacity-recalc-20260508.md b/reports/status/engine-x-loop-capacity-recalc-20260508.md new file mode 100644 index 00000000..37697717 --- /dev/null +++ b/reports/status/engine-x-loop-capacity-recalc-20260508.md @@ -0,0 +1,114 @@ +# Engine X Loop Capacity Recalculation - 2026-05-08 + +## Live inputs + +| Item | Value | +|---|---:| +| Mainnet block sampled | `25048672` | +| Deployer / signer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | +| ETH balance | `0.001571419277558750 ETH` | +| Gas price sampled | `306,813,465 wei` | +| cWUSDC balance | `56,772,616.825692 cWUSDC` | +| USDC balance | `8.484451 USDC` | +| XAUt balance | `0.00002723 XAUt` | +| Engine X v2 vault | `0xbc58eCc3de4DAc61c43e041706Bf097920cE5584` | +| Engine X cWUSDC/USDC accounted pool | `0.770000 / 0.770000` | +| Engine X internal lender USDC | `0.060000 USDC` | +| cWUSDC allowance to Engine X v2 vault | `0.013522 cWUSDC` | +| XAUt allowance to Engine X v2 vault | `0.00000927 XAUt` | +| Public UniV3 cWUSDC/USDC pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3`, fee `100` | +| Public two-swap loop status | `blocked` - repay leg gas estimate fails | + +## Public indexed two-swap loop + +Executable public indexed loops are currently `0`. + +The latest public UniV3 plan can quote `0.005000 cWUSDC -> 0.000032 USDC`, then `0.000032 USDC -> 0.000031 cWUSDC`, but the first cWUSDC-to-USDC transaction still fails gas estimation in the current pool/router state. This means it is not safe to run the public two-swap Engine X path until that blocker is repaired. + +## Internal Engine X loop sizing + +The current internal lender bucket caps per-loop debt at `0.060000 USDC`. That makes `0.064905 cWUSDC` the largest exact-output loop currently available without adding more USDC to the Engine X internal lender bucket. + +| Exact cWUSDC output per loop | USDC debt per loop | cWUSDC input per loop | cWUSDC neutralized per loop | Loss on processed input | Max loops with current allowance | Max loops with current cWUSDC balance | +|---:|---:|---:|---:|---:|---:|---:| +| `0.001000` | `0.001002` | `0.001007` | `0.000007` | `0.6951%` | `13` | `56,377,971,028` | +| `0.005000` | `0.004983` | `0.005031` | `0.000031` | `0.6162%` | `2` | `11,284,559,098` | +| `0.010000` | `0.009901` | `0.010061` | `0.000061` | `0.6063%` | `1` | `5,642,840,356` | +| `0.025000` | `0.024280` | `0.025146` | `0.000146` | `0.5806%` | `0` | `2,257,719,590` | +| `0.050000` | `0.047068` | `0.050284` | `0.000284` | `0.5648%` | `0` | `1,129,039,392` | +| `0.064905` | `0.060000` | `0.065267` | `0.000362` | `0.5546%` | `0` | `869,851,790` | + +## What can run without any new approval + +With the current `0.013522 cWUSDC` allowance, only one small internal proof batch is practical: + +| Batch choice | Loops | Total cWUSDC input | Exact output | Neutralized cWUSDC | +|---|---:|---:|---:|---:| +| Most loop count | `13` x `0.001000` | `0.013091` | `0.013000` | `0.000091` | +| Larger proof amount | `2` x `0.005000` | `0.010062` | `0.010000` | `0.000062` | +| Single `0.01` proof | `1` x `0.010000` | `0.010061` | `0.010000` | `0.000061` | + +This path does not need more XAUt allowance and does not need more USDC. + +## What can run after one cWUSDC approval reset + +If the cWUSDC allowance is reset to the intended batch input amount, the best current internal batch is the largest lender-capped size: + +| Batch shape | Loops | Total cWUSDC input | Exact output | Neutralized cWUSDC | cWUSDC left unprocessed | +|---|---:|---:|---:|---:|---:| +| Max wallet sweep at `0.064905` output per loop | `869,851,790` | `56,772,616.777930` | `56,457,730.429950` | `314,886.347980` | `0.047762` | +| Max wallet sweep at `0.050000` output per loop | `1,129,039,392` | `56,772,616.787328` | `56,451,969.600000` | `320,647.187328` | `0.038364` | +| Max wallet sweep at `0.025000` output per loop | `2,257,719,590` | `56,772,616.810140` | `56,442,989.750000` | `329,627.060140` | `0.015552` | + +Recommendation: use the `0.064905` lender-capped loop size for an internal capacity proof because it processes the most cWUSDC per loop and has the lowest modeled loss percentage under the current tiny Engine X internal pool. + +## Gas and rounds + +Observed internal loop execution gas is approximately `147,606` gas once approvals are in place. At the sampled gas price, that is about `0.000045287508314790 ETH` per Engine X virtual proof transaction. A cWUSDC approval costs roughly `45,955` gas, or `0.000014099612784075 ETH`. + +| ETH reserve policy | Loop tx rounds if preapproved | Loop tx rounds if each round needs approval | +|---|---:|---:| +| No ETH reserve | `34` | `26` | +| Keep `0.0005 ETH` reserve | `23` | `18` | +| Keep `0.0010 ETH` reserve | `12` | `9` | + +Because the Engine X v2 proof is a compressed virtual batch, one properly sized transaction can process the current wallet cWUSDC balance. More rounds are only useful for canary staging, not for throughput. + +## 5B target reference + +The current wallet has `56,772,616.825692 cWUSDC`, so it is short `4,943,227,383.174308 cWUSDC` versus a `5,000,000,000.000000 cWUSDC` processing target. + +If `5B cWUSDC` were present in the wallet and the same internal lender bucket remained unchanged, these are the compressed loop counts: + +| Exact cWUSDC output per loop | Loops to process almost `5B` cWUSDC input | Exact output | Neutralized cWUSDC | +|---:|---:|---:|---:| +| `0.001000` | `4,965,243,296,921` | `4,965,243,296.921000` | `34,756,703.078447` | +| `0.005000` | `993,838,203,140` | `4,969,191,015.700000` | `30,808,984.297340` | +| `0.010000` | `496,968,492,197` | `4,969,684,921.970000` | `30,315,078.024017` | +| `0.025000` | `198,838,781,515` | `4,970,969,537.875000` | `29,030,462.101190` | +| `0.050000` | `99,435,208,018` | `4,971,760,400.900000` | `28,239,599.077112` | +| `0.064905` | `76,608,393,215` | `4,972,267,761.619575` | `27,732,238.343830` | + +## Recommendation + +Do not run additional public UniV3 two-swap loops yet; the public repay leg is still blocked. + +For what can be completed now, use one staged internal canary first: + +```bash +EXECUTE=0 LOOPS=13 EXACT_OUTPUT_PER_LOOP_RAW=1000 pnpm engine-x:loop-proof +``` + +If that dry-run is accepted, the smallest no-new-approval live execution is: + +```bash +EXECUTE=1 LOOPS=13 EXACT_OUTPUT_PER_LOOP_RAW=1000 pnpm engine-x:loop-proof +``` + +For maximum current-wallet internal processing, first approve a bounded cWUSDC amount for the selected batch, then run the `0.064905` loop shape: + +```bash +EXECUTE=0 LOOPS=869851790 EXACT_OUTPUT_PER_LOOP_RAW=64905 pnpm engine-x:loop-proof +``` + +Only execute that larger batch after reviewing the generated exact `totalCwusdcInRaw`, proof hashes, and gas estimate. This proves internal Engine X maintained-loop accounting, not public indexable cWUSDC/USDC swap compliance. diff --git a/reports/status/engine-x-public-indexed-swap-loop-capacity-recalc-20260508.md b/reports/status/engine-x-public-indexed-swap-loop-capacity-recalc-20260508.md new file mode 100644 index 00000000..18ca5394 --- /dev/null +++ b/reports/status/engine-x-public-indexed-swap-loop-capacity-recalc-20260508.md @@ -0,0 +1,118 @@ +# Engine X Public Indexed Swap Loop Capacity Recalculation - 2026-05-08 + +This recalculation counts only actual public `cWUSDC/USDC` swap surfaces that are verifiable on Ethereum Mainnet and indexable by explorers/DEX trackers. Engine X internal virtual-batch accounting is excluded. + +## Live Inputs + +| Item | Value | +|---|---:| +| Mainnet block sampled | `25050795` | +| Deployer / signer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | +| ETH balance | `0.001571419277558750 ETH` | +| Gas price sampled | `1.269066225 gwei` | +| cWUSDC balance | `56,772,616.825692 cWUSDC` | +| USDC balance | `8.484451 USDC` | +| UniV3 `cWUSDC/USDC` pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| UniV3 active liquidity | `66,836,248` | +| UniV3 token balances | `183.616951 cWUSDC / 0.000035 USDC` | +| UniV2 `cWUSDC/USDC` pair | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | +| UniV2 reserves | `1,266,860.342401 cWUSDC / 2.167762 USDC` | + +## Strict Conclusion + +Actual public swaps are possible, but they do not currently prove a `1 cWUSDC = 1 USDC` peg. + +- UniV3 is indexable and can execute a dust public loop, but only up to about `0.000030 cWUSDC` in the cWUSDC-to-USDC leg before the swap reverts against the current quote-side state. +- UniV2 is indexable and can process larger cWUSDC inputs, but the quote-side reserve is so thin that `1,000 cWUSDC` only quotes about `0.001704 USDC`. +- Therefore the real public-indexed loop capacity is evidence of public swap activity, not compliant 1:1 peg proof. + +## UniV3 Actual Loop Capacity + +Quoter + gas-estimate checks against the public UniV3 pool show: + +| cWUSDC input raw | cWUSDC input | USDC out raw | Gas estimate | +|---:|---:|---:|---| +| `10` | `0.000010` | `8` | `117,492` | +| `20` | `0.000020` | `18` | `117,492` | +| `30` | `0.000030` | `28` | `117,492` | +| `40+` | `>=0.000040` | quotes `32`, but swap estimate reverts | blocked | + +The best UniV3 two-swap round trip currently is: + +```text +Swap 1: 0.000030 cWUSDC -> 0.000028 USDC +Swap 2: 0.000028 USDC -> about 0.000027 cWUSDC +Net: -0.000003 cWUSDC per public indexed loop +``` + +This is actual and indexable, but it is too small for `0.01` or `0.05` USD proof amounts. + +## UniV2 Actual Loop Capacity + +UniV2 can process larger cWUSDC amounts, but the USDC output is far below 1:1: + +| cWUSDC input | USDC out | Round-trip cWUSDC out | cWUSDC loss | +|---:|---:|---:|---:| +| `1` | `0.000001` | `0.582655` | `41.734500%` | +| `10` | `0.000017` | `9.905076` | `0.949240%` | +| `50` | `0.000085` | `49.523832` | `0.952336%` | +| `100` | `0.000170` | `99.043793` | `0.956207%` | +| `500` | `0.000852` | `496.228551` | `0.754290%` | +| `1,000` | `0.001704` | `992.068511` | `0.793149%` | + +The current deployer cWUSDC balance is not the binding constraint for UniV2. The binding constraint is compliance: these swaps are public and indexable, but they demonstrate a reserve-implied price near `0.0000017 USDC` per `1 cWUSDC`, not a 1:1 USD peg. + +## Rounds From Current ETH + +Assuming about `120,000` gas per public swap and two swaps per loop: + +| ETH reserve policy | Pre-approved public two-swap rounds | Rounds if two approvals are needed first | +|---|---:|---:| +| No ETH reserve | `5` | `4` | +| Keep `0.0005 ETH` reserve | `3` | `3` | +| Keep `0.0010 ETH` reserve | `1` | `1` | + +## What Can Be Done Now + +### Actual indexable dust proof + +Use UniV3 only for a tiny canary: + +```text +1 loop = 0.000030 cWUSDC -> 0.000028 USDC -> ~0.000027 cWUSDC +``` + +This can create real on-chain public swap evidence, but it does not satisfy the requested `0.01` or `0.05` USD proof sizes. + +### Actual indexable larger activity + +Use UniV2 for larger cWUSDC movement: + +```text +1 loop = 1,000 cWUSDC -> 0.001704 USDC -> ~992.068511 cWUSDC +``` + +This creates larger public/indexable swap evidence, but it is explicitly not peg evidence because the USDC side is too shallow. + +## What Is Needed For `0.01` And `0.05` USD Public Proofs + +For a public 1:1 cWUSDC-to-USDC proof: + +| Target proof | Minimum public quote output needed | +|---:|---:| +| `$0.01` | at least `0.010000 USDC` out from the cWUSDC -> USDC leg | +| `$0.05` | at least `0.050000 USDC` out from the cWUSDC -> USDC leg | + +Current UniV3 can execute only about `0.000028 USDC` output in the cWUSDC -> USDC leg. Current UniV2 can output `0.001704 USDC` for `1,000 cWUSDC`, which is public but not 1:1. + +So the public LP still needs actual official Mainnet USDC quote-side liquidity before the `0.01` and `0.05` USD loops can be represented as peg-preserving proof. + +## Recommendation + +Do not use internal Engine X virtual loops for this compliance proof. + +Use one of these two paths: + +1. If the goal is only indexable public swap evidence, run a tiny UniV3 dust loop or a larger UniV2 non-peg loop. +2. If the goal is compliant `1 cWUSDC = 1 USDC` proof, first add real official Mainnet USDC quote-side liquidity, then rerun this calculation before broadcasting swaps. + diff --git a/reports/status/engine-x-univ2-public-indexed-larger-loop-execution-20260508.md b/reports/status/engine-x-univ2-public-indexed-larger-loop-execution-20260508.md new file mode 100644 index 00000000..b87b4c4b --- /dev/null +++ b/reports/status/engine-x-univ2-public-indexed-larger-loop-execution-20260508.md @@ -0,0 +1,76 @@ +# Engine X UniV2 Public Indexed Larger Loop Execution - 2026-05-08 + +Executed the larger actual, verifiable, Etherscan-indexable `cWUSDC/USDC` loops through the public Uniswap V2 pair. + +## Execution Surface + +| Item | Value | +|---|---| +| Pair | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | +| Router | `0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D` | +| Token path forward | `cWUSDC -> USDC` | +| Token path reverse | `USDC -> cWUSDC` | +| Signer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | + +These swaps are real public LP activity. They are not 1:1 peg proof because the public UniV2 pair remains quote-starved. + +## `0.01 USDC` Public Loop + +| Step | Tx | +|---|---| +| cWUSDC approval | `0x58a9d20917717f167b1a8b07a2234f82ebdb132eb47447e412ece95d9dac54d4` | +| Forward swap `cWUSDC -> 0.01 USDC` | `0x5a59e39ea731ba43dc47e44cb69462c34c8e21f78a7ebfadab083d803f11d240` | +| USDC approval | `0xb7f4e0340d15aa4f256e2cbb59763f00490bfd4eff4457e224fc890464974ade` | +| Reverse swap `0.01 USDC -> cWUSDC` | `0xe10ddfedd26ae0aad7e77f80609b15ffdd8f884d30a2c52ecbd20a168b1be1c3` | + +| Metric | Raw | Human | +|---|---:|---:| +| Target USDC out | `10000` | `0.010000 USDC` | +| Expected cWUSDC input | `5888843902` | `5,888.843902 cWUSDC` | +| Expected cWUSDC back | `5799886126` | `5,799.886126 cWUSDC` | +| Actual wallet cWUSDC delta | `35117802` | `35.117802 cWUSDC` | +| Actual ETH gas delta | `436689787714836` | `0.000436689787714836 ETH` | + +## `0.05 USDC` Public Loop + +| Step | Tx | +|---|---| +| cWUSDC approval | `0x94e3773deb76818f3c382cdf8234ec0e015a9c055ac31f8e14e75fbfa1d9e98c` | +| Forward swap `cWUSDC -> 0.05 USDC` | `0xb145d7e931361db5f7d513609b4e29bbf1b26f7bf1c2d22ea5c85b1fb87980aa` | +| USDC approval | `0xb0528f231009b605e78d23250a8b0fed30f4ce0b1cc714715dbc11d46edcb1b2` | +| Reverse swap `0.05 USDC -> cWUSDC` | `0xeb1251dc19c87271151c11a02762ef34e54d4c219df9a2814c9fc2db3010cda5` | + +| Metric | Raw | Human | +|---|---:|---:| +| Target USDC out | `50000` | `0.050000 USDC` | +| Expected cWUSDC input | `30001189533` | `30,001.189533 cWUSDC` | +| Expected cWUSDC back | `28478714351` | `28,478.714351 cWUSDC` | +| Actual wallet cWUSDC delta | `175603594` | `175.603594 cWUSDC` | +| Actual ETH gas delta | `411736636447353` | `0.000411736636447353 ETH` | + +## Combined Result + +| Metric | Value | +|---|---:| +| Public indexed loops completed | `2` | +| Total forward USDC proof amount | `0.060000 USDC` | +| Total wallet cWUSDC delta | `210.721396 cWUSDC` | +| Total ETH gas delta | `0.000848426424162189 ETH` | +| Final ETH balance | `0.000722992853396561 ETH` | +| Final cWUSDC balance | `56,772,406.104296 cWUSDC` | +| Final USDC balance | `8.484451 USDC` | + +## Final Reserves + +```text +1267071063797 [1.267e12] cWUSDC +2167762 [2.167e6] USDC +1778249567 [1.778e9] block timestamp +``` + +## Notes + +- The correct larger-size pool was UniV2 because UniV3 is currently quote-capped for `cWUSDC -> USDC` execution above dust. +- The loop returned the borrowed/received USDC back into cWUSDC in each round. +- The pair remains far from 1:1 and still requires real official Mainnet USDC quote-side liquidity before these larger swaps can be described as peg-preserving proof. + diff --git a/reports/status/engine-x-univ2-public-indexed-loop-20260508T140800Z.json b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140800Z.json new file mode 100644 index 00000000..e06853e5 --- /dev/null +++ b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140800Z.json @@ -0,0 +1,30 @@ +{ + "schema": "engine-x-univ2-public-indexed-loop/v1", + "executed": false, + "stamp": "20260508T140800Z", + "blockBefore": "25050839", + "gasPriceWei": "1475940263", + "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "pair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "router": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "tokens": { + "cwusdc": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + }, + "targetUsdcOutRaw": "10000", + "expectedCwusdcInputRaw": "5888843902", + "maxCwusdcInputRaw": "5947732342", + "expectedCwusdcBackRaw": "5799886126", + "minCwusdcBackRaw": "5741887264", + "reservesBefore": "1266860342401 [1.266e12] 2167762 [2.167e6] 1778215439 [1.778e9] ", + "balancesBefore": { + "ethWei": "1571419277558750", + "cwusdcRaw": "56772616825692", + "usdcRaw": "8484451" + }, + "allowancesBefore": { + "cwusdcRaw": "167511193", + "usdcRaw": "0" + }, + "transactions": {} +} diff --git a/reports/status/engine-x-univ2-public-indexed-loop-20260508T140806Z.json b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140806Z.json new file mode 100644 index 00000000..767b8020 --- /dev/null +++ b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140806Z.json @@ -0,0 +1,30 @@ +{ + "schema": "engine-x-univ2-public-indexed-loop/v1", + "executed": false, + "stamp": "20260508T140806Z", + "blockBefore": "25050839", + "gasPriceWei": "1475940263", + "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "pair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "router": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "tokens": { + "cwusdc": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + }, + "targetUsdcOutRaw": "50000", + "expectedCwusdcInputRaw": "30000357913", + "maxCwusdcInputRaw": "30300361493", + "expectedCwusdcBackRaw": "28477924933", + "minCwusdcBackRaw": "28193145683", + "reservesBefore": "1266860342401 [1.266e12] 2167762 [2.167e6] 1778215439 [1.778e9] ", + "balancesBefore": { + "ethWei": "1571419277558750", + "cwusdcRaw": "56772616825692", + "usdcRaw": "8484451" + }, + "allowancesBefore": { + "cwusdcRaw": "167511193", + "usdcRaw": "0" + }, + "transactions": {} +} diff --git a/reports/status/engine-x-univ2-public-indexed-loop-20260508T140827Z.json b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140827Z.json new file mode 100644 index 00000000..f118c5d8 --- /dev/null +++ b/reports/status/engine-x-univ2-public-indexed-loop-20260508T140827Z.json @@ -0,0 +1,41 @@ +{ + "schema": "engine-x-univ2-public-indexed-loop/v1", + "executed": true, + "stamp": "20260508T140827Z", + "blockBefore": "25050841", + "gasPriceWei": "1487769226", + "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "pair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "router": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "tokens": { + "cwusdc": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + }, + "targetUsdcOutRaw": "10000", + "expectedCwusdcInputRaw": "5888843902", + "maxCwusdcInputRaw": "5947732342", + "expectedCwusdcBackRaw": "5799886126", + "minCwusdcBackRaw": "5741887264", + "reservesBefore": "1266860342401 [1.266e12] 2167762 [2.167e6] 1778215439 [1.778e9] ", + "balancesBefore": { + "ethWei": "1571419277558750", + "cwusdcRaw": "56772616825692", + "usdcRaw": "8484451" + }, + "allowancesBefore": { + "cwusdcRaw": "167511193", + "usdcRaw": "0" + }, + "transactions": { + "cwusdcApprove": "0x58a9d20917717f167b1a8b07a2234f82ebdb132eb47447e412ece95d9dac54d4", + "forwardCwusdcToUsdc": "0x5a59e39ea731ba43dc47e44cb69462c34c8e21f78a7ebfadab083d803f11d240", + "usdcApprove": "0xb7f4e0340d15aa4f256e2cbb59763f00490bfd4eff4457e224fc890464974ade", + "reverseUsdcToCwusdc": "0xe10ddfedd26ae0aad7e77f80609b15ffdd8f884d30a2c52ecbd20a168b1be1c3" + }, + "reservesAfter": "1266895460203 [1.266e12] 2167762 [2.167e6] 1778249423 [1.778e9] ", + "balancesAfter": { + "ethWei": "1134729489843914", + "cwusdcRaw": "56772581707890", + "usdcRaw": "8484451" + } +} diff --git a/reports/status/engine-x-univ2-public-indexed-loop-20260508T141052Z.json b/reports/status/engine-x-univ2-public-indexed-loop-20260508T141052Z.json new file mode 100644 index 00000000..a3db5e82 --- /dev/null +++ b/reports/status/engine-x-univ2-public-indexed-loop-20260508T141052Z.json @@ -0,0 +1,41 @@ +{ + "schema": "engine-x-univ2-public-indexed-loop/v1", + "executed": true, + "stamp": "20260508T141052Z", + "blockBefore": "25050853", + "gasPriceWei": "1320088677", + "signer": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "pair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "router": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", + "tokens": { + "cwusdc": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + }, + "targetUsdcOutRaw": "50000", + "expectedCwusdcInputRaw": "30001189533", + "maxCwusdcInputRaw": "30301201429", + "expectedCwusdcBackRaw": "28478714351", + "minCwusdcBackRaw": "28193927207", + "reservesBefore": "1266895460203 [1.266e12] 2167762 [2.167e6] 1778249423 [1.778e9] ", + "balancesBefore": { + "ethWei": "1134729489843914", + "cwusdcRaw": "56772581707890", + "usdcRaw": "8484451" + }, + "allowancesBefore": { + "cwusdcRaw": "58888440", + "usdcRaw": "0" + }, + "transactions": { + "cwusdcApprove": "0x94e3773deb76818f3c382cdf8234ec0e015a9c055ac31f8e14e75fbfa1d9e98c", + "forwardCwusdcToUsdc": "0xb145d7e931361db5f7d513609b4e29bbf1b26f7bf1c2d22ea5c85b1fb87980aa", + "usdcApprove": "0xb0528f231009b605e78d23250a8b0fed30f4ce0b1cc714715dbc11d46edcb1b2", + "reverseUsdcToCwusdc": "0xeb1251dc19c87271151c11a02762ef34e54d4c219df9a2814c9fc2db3010cda5" + }, + "reservesAfter": "1267071063797 [1.267e12] 2167762 [2.167e6] 1778249567 [1.778e9] ", + "balancesAfter": { + "ethWei": "722992853396561", + "cwusdcRaw": "56772406104296", + "usdcRaw": "8484451" + } +} diff --git a/reports/status/engine-x-wallet-usdc-funded-loop-capacity-20260508.md b/reports/status/engine-x-wallet-usdc-funded-loop-capacity-20260508.md new file mode 100644 index 00000000..874c4495 --- /dev/null +++ b/reports/status/engine-x-wallet-usdc-funded-loop-capacity-20260508.md @@ -0,0 +1,115 @@ +# Engine X Wallet-USDC-Funded Loop Capacity - 2026-05-08 + +## Loop Shape + +```text +Setup: + Supply enough XAUt collateral + Use deployer wallet USDC to: + A. fund the borrow-vault lender bucket + B. prepare the UniV3 cWUSDC/USDC pool quote side + +Loop: + 1. Borrow D USDC + 2. Swap cWUSDC -> D USDC on UniV3 + 3. Repay D USDC debt + 4. Swap borrowed D USDC -> cWUSDC on UniV3 + +Final: + Withdraw XAUt collateral after debt is zero +``` + +The same wallet USDC cannot be counted twice. For a loop size `D`, wallet USDC must cover: + +```text +existing debt repay + lender funding D + UniV3 quote-side prep +``` + +The quote-side prep must be slightly larger than `D` because UniV3 fee tier `100` charges `0.01%`. + +## Live Inputs + +| Item | Value | +|---|---:| +| Block sampled | `25054065` | +| Wallet USDC | `8.484451 USDC` | +| Wallet cWUSDC | `56,772,406.104296 cWUSDC` | +| Wallet XAUt | `0.00002723 XAUt` | +| Current borrow debt | `0.000032 USDC` | +| Borrow lender available | `0 USDC` | +| Max debt using current posted collateral | `0.002314 USDC` additional | +| Max debt if all wallet XAUt is posted | `~6.392266 USDC` | +| UniV3 pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| UniV3 current tick | `-200` | +| UniV3 active liquidity | `66,836,248` | + +## Maximum Theoretical Loop From Current Wallet USDC + +Using every raw unit of current wallet USDC: + +```text +existing debt repay: 0.000032 USDC +lender funding D: 4.241997 USDC +UniV3 prep: 4.242422 USDC +wallet USDC left: 0 +``` + +So the absolute maximum loop amount from current wallet USDC is: + +```text +D = 4.241997 USDC +``` + +This is not the recommended live size because it leaves no USDC reserve. + +## Practical Loop Sizes + +| Borrow `D` | UniV3 prep USDC | Total wallet USDC required incl. old debt | Wallet USDC left | XAUt collateral total needed | Additional XAUt to supply | +|---:|---:|---:|---:|---:|---:| +| `0.000032` | `0.000033` | `0.000097` | `8.484354` | `1` raw | `0` raw | +| `0.010000` | `0.010002` | `0.020034` | `8.464417` | `5` raw | `4` raw | +| `0.050000` | `0.050006` | `0.100038` | `8.384413` | `22` raw | `21` raw | +| `0.100000` | `0.100011` | `0.200043` | `8.284408` | `43` raw | `42` raw | +| `0.500000` | `0.500051` | `1.000083` | `7.484368` | `214` raw | `213` raw | +| `1.000000` | `1.000101` | `2.000133` | `6.484318` | `427` raw | `426` raw | +| `2.000000` | `2.000201` | `4.000233` | `4.484218` | `853` raw | `852` raw | +| `4.000000` | `4.000401` | `8.000433` | `0.484018` | `1,705` raw | `1,704` raw | +| `4.241997` | `4.242422` | `8.484451` | `0` | `1,808` raw | `1,807` raw | + +## Recommended Current-Wallet Size + +Use: + +```text +D = 4.000000 USDC +``` + +Why: + +- Uses current wallet USDC only. +- Leaves about `0.484018 USDC` reserve. +- Requires only `1,704` additional raw XAUt collateral, while wallet has `2,723` raw XAUt. +- Keeps ending USDC debt at `0`. +- Runs the intended loop shape with meaningful public UniV3 `USDC <-> cWUSDC` swap values. + +Expected accounting: + +```text +Repay existing debt: 0.000032 USDC +Fund lender: 4.000000 USDC +Prepare UniV3 quote side: 4.000401 USDC +Borrow: 4.000000 USDC +Swap cWUSDC -> USDC: 4.000000 USDC out +Repay debt: 4.000000 USDC +Swap borrowed USDC: 4.000000 USDC -> cWUSDC +Ending debt: 0 +Withdraw XAUt collateral: yes +``` + +## Notes + +- The `D = 4.241997 USDC` size is the mathematical ceiling from current wallet USDC, not a good operator size. +- The calculation assumes UniV3 quote-side preparation is performed before the loop. +- The borrow vault must be funded with `D` before borrowing. +- XAUt collateral must be posted before borrowing and withdrawn only after debt is confirmed zero. + diff --git a/reports/status/explorer-ux-ui-full-review-20260511.md b/reports/status/explorer-ux-ui-full-review-20260511.md new file mode 100644 index 00000000..06755017 --- /dev/null +++ b/reports/status/explorer-ux-ui-full-review-20260511.md @@ -0,0 +1,148 @@ +# DBIS Explorer UX/UI Full Review + +Generated: 2026-05-11T05:08:00Z + +Scope: live Explorer pages, shared frontend layout primitives, Chain 138 token pages, token aggregation data, wallet/explorer navigation, and high-impact visual density issues. + +## Executive Summary + +The Explorer is functionally broad but visually heavy. The main issue is not one component; it is a repeated layout pattern across the app: + +- large sticky header; +- oversized card-style page intros; +- many nested cards; +- long explanatory copy before primary data; +- duplicated shortcut panels; +- raw/stale token-liquidity values leaking into UI; +- inconsistent density between operational pages, token pages, and search pages. + +This creates the “scroll of death” effect: users spend too much time moving past context blocks before reaching the thing they came for. + +## Live Cross-Checks + +| Surface | Result | +|---|---| +| `/` | HTTP `200`; heavy first viewport, many stacked sections. | +| `/tokens` | HTTP `200`; before fix, visible liquidity cards showed raw 6-decimal values for cUSDT/cUSDC. | +| `/search?q=cUSDC` | HTTP `200`; search resolves but inherits dense card language. | +| `/transactions`, `/blocks`, `/addresses` | HTTP `200`; table/list surfaces available. | +| `/liquidity`, `/routes`, `/pools` | HTTP `200`; operational content available, but copy-heavy. | +| `/wallet`, `/bridge`, `/operations`, `/analytics`, `/system`, `/operator`, `/docs`, `/access`, `/more` | HTTP `200`; navigation breadth is strong but too much is exposed at equal visual priority. | +| Token list API | `31` Chain 138 token-list entries. | +| MetaMask config API | `31` watch assets. | +| Blockscout stats API | `coin_price: null`; app should avoid implying native fiat valuation is available. | +| Token aggregation API | cUSDT/cUSDC liquidity rows still raw on live service until backend patch is deployed. | + +## Critical Issues + +1. The page chrome consumes too much first-viewport height. + The header was 76-84px tall, with large brand lockup and large rounded controls. This made every page feel lower-density before content began. + +2. Page intros looked like another content card. + `PageIntro` used a large rounded panel with shadow, which made every page begin with a decorative block instead of an efficient title/action surface. + +3. Cards were too prominent by default. + The shared `Card` primitive used rounded-xl + shadow-md. Because almost every page is card-based, the whole app became visually noisy. + +4. `/tokens` had unnecessary preamble and repeated cards. + The page showed search, three explanatory shortcut cards, then token cards, then common search cards. The primary task is token scanning; the secondary shortcut cards pushed that task down. + +5. Market evidence text was too long for repeated cards. + The compact variant still printed source, timestamp, absolute date, and method. Repeated six times, this became visual clutter. + +6. cUSDT/cUSDC visible liquidity had a 6-decimal raw-unit display issue. + The Etherscan wrapped `cWUSDC` page clarified the correct 6-decimal normalization. The Explorer should never render raw base units as USD liquidity. + +7. Development API base defaults create local 404 noise. + In local dev, token aggregation calls resolve to `127.0.0.1:3010/token-aggregation/...` unless `NEXT_PUBLIC_API_URL` is set. This does not reflect production, but it makes local visual QA noisy. + +## Fixes Completed + +| Area | File | Change | +|---|---|---| +| Shared card density | `explorer-monorepo/frontend/libs/frontend-ui-primitives/Card.tsx` | Reduced default radius, border/shadow weight, and title scale. | +| Page intros | `explorer-monorepo/frontend/src/components/common/PageIntro.tsx` | Replaced large card panel with compact unframed title/action band. | +| Brand/header density | `BrandLockup.tsx`, `BrandMark.tsx`, `Navbar.tsx` | Reduced brand size and sticky header height from 76-84px to 60-64px. | +| App background | `globals.css` | Removed gradient background; set quiet neutral page background. | +| Token page structure | `pages/tokens/index.tsx` | Removed redundant explanatory shortcut card row; tightened search, token grid, and common searches. | +| Market evidence | `MarketEvidenceNote.tsx` | Compact mode now shows short freshness/source text only. | +| Frontend liquidity guard | `services/api/tokenAggregation.ts` | Added defensive 6-decimal raw-liquidity normalizer for token aggregation snapshots. | +| Frontend regression | `services/api/tokens.test.ts` | Added cUSDT raw-liquidity fixture expectation. | +| Backend liquidity guard | `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.ts` | Added API-side raw-liquidity normalizer. | +| Backend regression | `smom-dbis-138/services/token-aggregation/src/api/routes/tokens.test.ts` | Added exact cUSDC raw-liquidity regression. | + +## Remaining Product Backlog + +| Priority | Issue | Recommendation | +|---:|---|---| +| 1 | Home page still has too many stacked modules. | Convert homepage to a true dashboard: one top status strip, one primary search/action row, one recent activity table, one compact token/route panel. Move explanatory cards below fold or behind tabs. | +| 2 | Operations pages repeat page-shell patterns and prose. | Build a shared `OperationsDashboardLayout` with fixed summary, filters, and dense data sections. | +| 3 | Token detail page needs information hierarchy cleanup. | Put price, supply, holders, transfers, and normalized liquidity in a single top metrics row; move standards/explanations below activity. | +| 4 | Search needs result grouping. | Group exact address, token, block, transaction, and docs results; show exact match first with compact actions. | +| 5 | Mobile nav panel is too long. | Add tabs or accordion sections for Explore/Data/Operations instead of rendering every link card at once. | +| 6 | Local dev API origin should be explicit. | Add `.env.local.example` with `NEXT_PUBLIC_API_URL=https://explorer.d-bis.org`, or add a dev proxy for token aggregation. | +| 7 | Formatting helpers are duplicated. | Consolidate `formatUsd`, `formatCurrency`, and token amount formatting into `src/utils/format.ts`. | +| 8 | Long copy should be mode-gated. | Default to expert/compact mode on data pages; put guided explanations behind expandable details. | +| 9 | Data confidence needs visible states. | Clearly distinguish indexed liquidity, canonical fallback price, external provider price, and unavailable values. | +| 10 | Full visual QA should become automated. | Add Playwright route screenshots for `/`, `/tokens`, `/tokens/:address`, `/search`, `/transactions`, `/blocks`, `/wallet`, `/routes`, `/bridge` at desktop/mobile widths. | + +## Verification Performed + +```bash +cd explorer-monorepo/frontend +npm run type-check +npm run lint +npm run test:unit -- src/services/api/tokens.test.ts +npm run build + +cd smom-dbis-138/services/token-aggregation +npm test -- --runTestsByPath src/api/routes/tokens.test.ts src/services/chain138-dodo-liquidity.test.ts +npm run build +``` + +Current status: + +- Frontend type-check passed. +- Frontend lint passed. +- Frontend token API unit test passed. +- Frontend production build passed. +- Token aggregation focused tests passed. +- Token aggregation TypeScript build passed. + +## Deployment Completed + +Completed: 2026-05-11T05:13:26Z + +Live services restarted on VMID 5000: + +- `solacescanscout-frontend`: active +- `token-aggregation`: active +- `explorer-config-api`: active + +Live frontend release: + +- `/opt/solacescanscout/frontend/releases/20260510_221027` + +Public route checks: + +| Route | Result | +|---|---:| +| `/` | 200 | +| `/tokens` | 200 | +| `/search?q=cUSDC` | 200 | +| `/wallet` | 200 | +| `/routes` | 200 | +| `/bridge` | 200 | + +Public API verification: + +| Token | Decimals | Live liquidity after normalization | +|---|---:|---:| +| `cUSDT` | 6 | `$2,270,037.545568842` | +| `cUSDC` | 6 | `$5,180,095,723.066127` | + +Live browser verification: + +- `https://explorer.d-bis.org/tokens` now renders `cUSDC` liquidity as `$5,180,095,723`. +- `https://explorer.d-bis.org/tokens` now renders `cUSDT` liquidity as `$2,270,038`. +- Screenshot captured: `explorer-tokens-after-redeploy-20260511.png`. diff --git a/reports/status/gru-chain138-provider-recommendations-completion-20260510.md b/reports/status/gru-chain138-provider-recommendations-completion-20260510.md new file mode 100644 index 00000000..09dcc6cb --- /dev/null +++ b/reports/status/gru-chain138-provider-recommendations-completion-20260510.md @@ -0,0 +1,37 @@ +# GRU / Chain 138 Provider Recommendations Completion + +Generated: 2026-05-10 + +## Summary + +The provider-facing recommendation set has been converted into canonical repo documentation and cross-linked from the active MetaMask, Etherscan, CoinGecko/tracker, wallet price-feed, explorer token policy, and master-index surfaces. + +## Completed Artifacts + +| Recommendation | Status | Artifact | +|---|---|---| +| Create provider-safe GRU / Chain 138 narrative | Complete | `docs/04-configuration/GRU_PROVIDER_POSITIONING_PACKET.md` | +| Explain M00, M0, and M1 reserve layers | Complete | `docs/04-configuration/GRU_RESERVE_LAYER_EXPLAINER.md` | +| Define Chain 138 as system-of-record / proof layer | Complete | `docs/04-configuration/CHAIN138_SYSTEM_OF_RECORD_MODEL.md` | +| Add not-crypto / not-stablecoin FAQ | Complete | `docs/04-configuration/GRU_NOT_CRYPTO_NOT_STABLECOIN_FAQ.md` | +| Add standard risk and disclosure language | Complete | `docs/04-configuration/GRU_RISK_AND_DISCLOSURE_LANGUAGE.md` | +| Add reserve and provider evidence index | Complete | `docs/04-configuration/RESERVE_VERIFICATION_EVIDENCE_INDEX.md` | +| Add consolidated cWUSDC provider packet | Complete | `docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md` | +| Link packets from active MetaMask matrix | Complete | `docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md` | +| Link packets from Etherscan and tracker docs | Complete | `docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md`, `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md` | +| Link packets from wallet/explorer policy and master index | Complete | `docs/04-configuration/PRICE_FEED_CHAIN138_METAMASK_AND_WALLETS.md`, `docs/04-configuration/EXPLORER_TOKENS_GRU_POLICY.md`, `docs/MASTER_INDEX.md` | + +## Remaining External Work + +The following items are provider-controlled and cannot be completed by repo edits alone: + +- Etherscan token-profile approval for Ethereum Mainnet `cWUSDC`. +- CoinGecko listing or metadata acceptance. +- Full CoinMarketCap listing acceptance. +- MetaMask provider-side price acceptance. +- DexScreener / GeckoTerminal profile or API indexing acceptance. +- Any custodian, filing, exchange, or counterparty evidence that must be attached by an operator outside this repo. + +## Operator Rule + +Use `repo_ready`, `submitted`, `accepted`, and `blocked` status labels in future submission reports. A `repo_ready` packet means the documentation, metadata, URLs, and evidence pointers are ready; it does not imply external provider acceptance. diff --git a/reports/status/mainnet-cwusdc-supply-proof-20260508.json b/reports/status/mainnet-cwusdc-supply-proof-20260508.json new file mode 100644 index 00000000..80d64fe5 --- /dev/null +++ b/reports/status/mainnet-cwusdc-supply-proof-20260508.json @@ -0,0 +1,94 @@ +{ + "schema": "mainnet-cwusdc-supply-proof/v1", + "generatedAt": "2026-05-08T03:16:54Z", + "network": { + "chainId": 1, + "name": "Ethereum Mainnet", + "referenceBlock": 25047586 + }, + "token": { + "address": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "decimals": 6, + "verifiedSource": { + "etherscan": "https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "sourcifyFullMatch": true, + "compiler": "0.8.20+commit.a1b79de6" + }, + "totalSupplyRaw": "10451316981309788", + "totalSupplyUnits": "10451316981.309788" + }, + "knownBalances": { + "operator": { + "address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "balanceRaw": "56772617595692", + "balanceUnits": "56772617.595692" + }, + "engineXVirtualBatchVault": { + "address": "0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1", + "balanceRaw": "0", + "balanceUnits": "0" + }, + "uniswapV3CwusdcUsdcPool": { + "address": "0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3", + "balanceRaw": "183290270", + "balanceUnits": "183.290270" + }, + "uniswapV2CwusdcUsdcPair": { + "address": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "balanceRaw": "1266860669082", + "balanceUnits": "1266860.669082" + } + }, + "trackerSurfaces": { + "etherscan": { + "status": "verified_contract_page_live", + "url": "https://etherscan.io/token/0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" + }, + "dexscreener": { + "status": "indexed", + "tokenUrl": "https://dexscreener.com/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a", + "pools": [ + "https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9" + ] + }, + "geckoTerminal": { + "status": "indexed", + "pools": [ + { + "address": "0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "url": "https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "reserveUsd": "179.1416", + "volume24hUsd": "90.6693898501" + }, + { + "address": "0xc28706f899266b36bc43cc072b3a921bdf2c48d9", + "url": "https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9", + "reserveUsd": "4.3241", + "volume24hUsd": "114770.233085417" + } + ] + }, + "coinMarketCapDex": { + "status": "token_page_reachable", + "url": "https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/", + "note": "CMC DEX discoverability is not the same as full CoinMarketCap listing acceptance." + }, + "coinGecko": { + "status": "not_listed_by_contract_api", + "note": "CoinGecko Ethereum contract lookup returned 404 during the 2026-05-08 readiness pass." + } + }, + "circulatingSupplyMethodology": { + "status": "ready_for_tracker_review", + "recommendedFormula": "circulatingSupply = totalSupply - protocolControlledNonCirculatingBalances", + "currentConservativeReportableCirculatingSupplyUnits": "10451316981.309788", + "notes": [ + "No public tracker has accepted a circulating-supply value for this contract yet.", + "If a tracker requires exclusion of operator, treasury, bridge, or protocol-controlled balances, use the knownBalances section plus any additional signed treasury inventory supplied at submission time.", + "The value above is an on-chain supply proof, not a third-party listing approval." + ] + } +} diff --git a/reports/status/mainnet-cwusdc-technical-completion-20260508.json b/reports/status/mainnet-cwusdc-technical-completion-20260508.json new file mode 100644 index 00000000..b5cec570 --- /dev/null +++ b/reports/status/mainnet-cwusdc-technical-completion-20260508.json @@ -0,0 +1,53 @@ +{ + "schema": "mainnet-cwusdc-technical-completion/v1", + "generatedAt": "2026-05-08T03:16:54Z", + "network": { + "chainId": 1, + "name": "Ethereum Mainnet" + }, + "operator": { + "address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "ethBalanceUnitsAfter": "0.003845324482783870", + "usdcBalanceUnitsAfter": "0.839784", + "cwusdcBalanceUnitsAfter": "56772617.595692" + }, + "bridgeRoles": { + "cwusdc": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "bridge": "0x2bF74583206A49Be07E0E8A94197C12987AbD7B5", + "minterRole": true, + "burnerRole": true, + "burnerGrantTx": "0x38d292d274158eb3a6015466cd3a4a9f9013c0e75be048a38214b64ae1f73eae", + "burnerGrantBlock": 25047521 + }, + "engineX": { + "v2VirtualBatchVault": { + "address": "0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1", + "deployTx": "0xa02dffa042be591d256b75500d7774da1cf63f69e935d3058632d07871021bb4", + "etherscanVerified": true, + "etherscanVerificationGuid": "vrd4xqswvgpf7nhnthsa7ppcfwr1ms8stvbyevieikhnpkgyjj", + "flashFeeBps": 5, + "maxFlashLoanAmountRaw": "0", + "seeded": false + }, + "indexedLiquidityVault": { + "address": "0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE", + "deployTx": "0x3534657de3d8de2a56fc74d8b4b42f51dc7d56397c3ed33526927c684aa177d5", + "etherscanVerified": true, + "etherscanVerificationGuid": "bnutwelba7vfviyhwzy6ljienccscudsmum5dejyifl5vzqfxg", + "pool": "0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3", + "fee": 100, + "readyForPublicIndexedProof": true + } + }, + "verification": { + "targetedForgeTests": "43 passed, 0 failed", + "readinessReport": "reports/status/engine-x-public-indexed-readiness-latest.json", + "repegPlan": "reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json" + }, + "remainingExternalGates": [ + "Fund official Mainnet USDC for public UniV2 quote-side policy-floor repair.", + "Fund official Mainnet USDC for defended DODO reserve-parity repair.", + "Submit/complete CoinGecko and CoinMarketCap listing workflows.", + "Complete external route validation before claiming full two-way bridge production flow." + ] +} diff --git a/reports/status/mainnet-cwusdc-technical-completion-20260508.md b/reports/status/mainnet-cwusdc-technical-completion-20260508.md new file mode 100644 index 00000000..3f503146 --- /dev/null +++ b/reports/status/mainnet-cwusdc-technical-completion-20260508.md @@ -0,0 +1,30 @@ +# Mainnet cWUSDC Technical Completion + +Generated: `2026-05-08T03:16:54Z` + +## Completed + +- Granted cWUSDC `BURNER_ROLE` to `CW_BRIDGE_MAINNET=0x2bF74583206A49Be07E0E8A94197C12987AbD7B5`; bridge now has minter and burner roles. +- Deployed Engine X v2 virtual batch vault: `0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1`. +- Configured v2 vault flash fee to `5` bps and max flash-loan amount to `0`. +- Deployed indexed-liquidity proof vault: `0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE`. +- Verified both new Engine X contracts on Etherscan. +- Re-ran indexed readiness with the deployed vaults; `readyForPublicIndexedProof=true`. +- Re-ran the USDC repeg planner; remaining blockers are funding/external execution gates. + +## Transactions + +| Action | Transaction | +|---|---| +| Grant bridge burner role | `0x38d292d274158eb3a6015466cd3a4a9f9013c0e75be048a38214b64ae1f73eae` | +| Deploy v2 vault | `0xa02dffa042be591d256b75500d7774da1cf63f69e935d3058632d07871021bb4` | +| Set v2 flash fee | `0x7ae74c050b5e051e195e2a30912ae8064fbdbace20f96b53f3d213704f22e46a` | +| Set v2 max flash loan | `0x87aed485c0adac22452f14e89d6524e8db21226538bbe75652d0b3a94ed2b76c` | +| Deploy indexed proof vault | `0x3534657de3d8de2a56fc74d8b4b42f51dc7d56397c3ed33526927c684aa177d5` | + +## Remaining Gates + +- Public UniV2 policy-floor quote-side top-up still needs `2,497.832239 USDC`; current wallet shortfall is `2,496.992455 USDC`. +- DODO defended reserve-parity quote top-up still needs `290,995.072514 USDC`; current wallet shortfall is `290,994.232730 USDC`. +- CoinGecko and full CoinMarketCap listing acceptance remain external. +- Bridge route validation remains required before claiming full two-way production flow. diff --git a/reports/status/mainnet-cwusdc-tracker-readiness-20260508.md b/reports/status/mainnet-cwusdc-tracker-readiness-20260508.md new file mode 100644 index 00000000..a19db3be --- /dev/null +++ b/reports/status/mainnet-cwusdc-tracker-readiness-20260508.md @@ -0,0 +1,87 @@ +# Mainnet cWUSDC Tracker Readiness + +Generated: `2026-05-08T02:41:04Z` + +## Token + +| Item | Value | +|---|---| +| Network | Ethereum Mainnet (`1`) | +| Token | `Wrapped cUSDC` / `cWUSDC` | +| Contract | `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | +| Decimals | `6` | +| Total supply | `10,451,316,981.309788 cWUSDC` | +| Source verification | Etherscan verified; Sourcify full match, Solidity `0.8.20` | +| Internal metadata registry | Present in `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` | +| Internal CoinGecko export | Present in `docs/04-configuration/coingecko/exports/report-coingecko-1.json` | +| Mainnet cW bridge role check | `CW_BRIDGE_MAINNET=0x2bF74583206A49Be07E0E8A94197C12987AbD7B5` has `MINTER_ROLE=true`, `BURNER_ROLE=true` on cWUSDC after tx `0x38d292d274158eb3a6015466cd3a4a9f9013c0e75be048a38214b64ae1f73eae` | + +## Live Public Market Evidence + +| Surface | Address | Status | Latest evidence | +|---|---|---|---| +| Uniswap V3 `cWUSDC/USDC` | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | Indexed, active for indexed proof canary | Active liquidity `66,836,248`; balances `183.290270 cWUSDC / 0.321772 USDC`; DexScreener and GeckoTerminal index the pool | +| Uniswap V2 `cWUSDC/USDC` | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | Indexed, quote-starved | Reserves `1,266,860.669082 cWUSDC / 2.167761 USDC`; DexScreener liquidity about `$4.33`; GeckoTerminal reserve about `$4.3241`; 24h volume about `$114,638-$114,770` | +| DODO defended `cWUSDC/USDC` | `0x69776fc607e9edA8042e320e7e43f54d06c68f0E` | Internal defended lane, not listing-quality public proof | Repeg planner says `290,995.072514 USDC` quote-side top-up is needed for simple reserve parity | + +DexScreener URLs: + +- `https://dexscreener.com/ethereum/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` +- `https://dexscreener.com/ethereum/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` + +GeckoTerminal URLs: + +- `https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3` +- `https://www.geckoterminal.com/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9` + +CoinMarketCap DEX URL: + +- `https://dex.coinmarketcap.com/token/ethereum/0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a/` + +## Current Gates + +| Gate | Status | +|---|---| +| Contract verified | Complete | +| LP indexed | Complete for V2 and V3 on DexScreener and GeckoTerminal | +| Trading volume present | Present, but thin/distorted and not listing-quality | +| Public circulating supply accepted by tracker | External pending | +| CoinGecko contract lookup | External pending; public API returns `404` | +| CoinMarketCap DEX token page | Reachable; do not treat as full CMC listing acceptance | +| Full CMC token listing | External pending | +| Public LP policy floor | Blocked by official Mainnet USDC shortfall | +| Direct cWUSDC oracle feed | Not live; use valuation precedence until a direct feed is approved | +| Canonical bridge mint/burn wiring | Bridge has minter and burner roles; route validation is still required before full two-way cW flow claims | + +## Internal Tasks Completed + +- Fresh public indexed readiness report: `reports/status/engine-x-public-indexed-readiness-latest.json`. +- Fresh public-pair preflight: `reports/status/mainnet-cwusdc-usdc-preflight-latest.json`. +- Fresh repeg plan: `reports/status/mainnet-cwusdc-usdc-repeg-plan-latest.json`. +- Fresh WETH support-surface evaluation: `reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json`. +- Machine-readable supply proof: `reports/status/mainnet-cwusdc-supply-proof-20260508.json`. +- Tracker submission packet: `docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md`. +- Engine X v2 virtual batch vault deployed: `0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1` (`0xa02dffa042be591d256b75500d7774da1cf63f69e935d3058632d07871021bb4`). +- Engine X indexed-liquidity proof vault deployed: `0xC264005EC6C3C74Ae2DfD0c60fb1EF5E792B45EE` (`0x3534657de3d8de2a56fc74d8b4b42f51dc7d56397c3ed33526927c684aa177d5`). +- Both new Engine X contracts verified on Etherscan. +- Public indexed readiness rerun against the deployed vaults: `readyForPublicIndexedProof=true`. +- Dry-run single-sided DODO wrapper deployment command confirmed. +- Dry-run indexed LP migration now exits cleanly and reports that no balanced vault liquidity remains to migrate. +- Bridge role completion: Mainnet cW receiver can mint and burn cWUSDC. +- Direct-feed strategy documented in the tracker packet as valuation precedence until an external oracle/feed is approved. +- GeckoTerminal pool URLs confirmed for the V2 and V3 public pools. +- CoinMarketCap DEX token URL confirmed reachable. + +## Operator / External Funding Gates + +The latest repeg plan requires official Mainnet USDC before meaningful public proof: + +| Need | Amount | +|---|---:| +| Public V2 quote-side policy-floor top-up | `2,497.832239 USDC` | +| DODO defended reserve-parity top-up | `290,995.072514 USDC` | +| Operator wallet USDC currently available | `0.839784 USDC` | +| Public V2 quote-side shortfall after wallet balance | `2,496.992455 USDC` | +| DODO defended parity shortfall after wallet balance | `290,994.232730 USDC` | + +Do not broadcast public LP repair or claim listing-quality liquidity until official Mainnet USDC is funded and the fresh planner is rerun. diff --git a/reports/status/mainnet-cwusdc-usdc-1to1-peg-proof-requirements-20260508.md b/reports/status/mainnet-cwusdc-usdc-1to1-peg-proof-requirements-20260508.md new file mode 100644 index 00000000..223aae27 --- /dev/null +++ b/reports/status/mainnet-cwusdc-usdc-1to1-peg-proof-requirements-20260508.md @@ -0,0 +1,115 @@ +# Mainnet cWUSDC/USDC 1:1 Peg Proof Requirements - 2026-05-08 + +## Objective + +Produce a real Ethereum Mainnet, public, indexable proof that `1 cWUSDC ~= 1 USDC` using actual `cWUSDC/USDC` LP swaps and official Mainnet USDC. + +Internal Engine X virtual loops, recipient proof transfers, and non-public netting are excluded from this proof standard. + +## Current Public State + +| Item | Value | +|---|---:| +| Block sampled | `25052296` | +| Deployer | `0x4A666F96fC8764181194447A7dFdb7d471b301C8` | +| ETH | `0.000722992853396561 ETH` | +| Wallet USDC | `8.484451 USDC` | +| Wallet cWUSDC | `56,772,406.104296 cWUSDC` | +| UniV2 pair | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | +| UniV2 reserves | `1,267,071.063797 cWUSDC / 2.167762 USDC` | +| UniV3 pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| UniV3 balances | `183.616951 cWUSDC / 0.000035 USDC` | + +## Required 1:1 Repair + +The UniV2 pool is the correct public/indexable surface for the larger proof sizes, but it must be repaired before it can prove a 1:1 peg. + +To move the UniV2 reserves to approximately 1:1 using the public pool itself: + +```text +Swap official Mainnet USDC into UniV2 cWUSDC/USDC. +Required USDC input: 1,657.640239 USDC +Expected cWUSDC out: about 1,265,411.255797 cWUSDC +Post-repair reserves: about 1,659.807999 cWUSDC / 1,659.808001 USDC +``` + +Wallet USDC available is `8.484451`, so the immediate quote-side shortfall is: + +```text +1,649.155788 USDC +``` + +## Depth Targets After Repair + +| Target | Total USDC needed from current state | Notes | +|---:|---:|---| +| Minimal reserve parity | `1,657.640239 USDC` | Produces an indexable 1:1-ish reserve proof, but shallow. | +| `2,500 / 2,500` policy floor | `2,497.832238 USDC` | Repair first, then add about `840.191999 USDC` plus matching cWUSDC. | +| `10,000 / 10,000` preferred evidence target | `9,997.832238 USDC` | Repair first, then add about `8,340.191999 USDC` plus matching cWUSDC. | + +## Required Proof Sequence + +1. Fund the deployer with official Mainnet USDC. +2. Execute quote-side repair swap: + + ```text + USDC -> cWUSDC on UniV2 cWUSDC/USDC + ``` + +3. Confirm post-swap reserves are approximately 1:1. +4. Add balanced liquidity only after the price/reserve ratio is repaired. +5. Execute the proof loops: + + ```text + cWUSDC -> USDC + USDC -> cWUSDC + ``` + +6. Save all tx hashes, reserves before/after, wallet deltas, and DEX indexer links. + +## Blocker + +The 1:1 peg proof is blocked by official Mainnet USDC, not by cWUSDC inventory. + +Current wallet can execute public/indexable swaps, but it cannot truthfully prove `1 cWUSDC = 1 USDC` until the quote side is funded and the pool is repaired. + +## UniV3 Alternative + +The UniV3 pool is much closer to 1:1 by tick price than UniV2, but it is nearly empty on the quote side. + +| Item | Value | +|---|---:| +| UniV3 pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| Fee tier | `100` | +| Current tick | `-200` | +| Tick-implied price | about `0.9801996534 USDC / cWUSDC` | +| Tick deviation from 1:1 | about `198.003466 bps` | +| Active liquidity | `66,836,248` | +| Token balances | `183.616951 cWUSDC / 0.000035 USDC` | + +Estimated USDC needed to move the active UniV3 price from tick `-200` to tick `0`: + +```text +0.664966 USDC +``` + +Estimated cWUSDC out during that price-nudge: + +```text +0.671648 cWUSDC +``` + +This means the current wallet has enough USDC for a tiny UniV3 1:1 canary if the goal is a `0.01` / `0.05` proof, but not enough for listing-quality depth. The correct UniV3 sequence is: + +1. Swap about `0.664966 USDC -> cWUSDC` to bring the pool near tick `0`. +2. Add a small balanced UniV3 position around tick `0` using remaining wallet USDC plus matching cWUSDC. +3. Run tiny proof swaps: + + ```text + cWUSDC -> USDC + USDC -> cWUSDC + ``` + +4. Record tick before/after, position mint tx, swap tx hashes, and pool token balances. + +The UniV3 route can likely produce a tiny 1:1 canary with current wallet USDC. It still will not satisfy the `2,500 / 2,500` policy floor or the `10,000 / 10,000` preferred evidence target. diff --git a/reports/status/mainnet-cwusdc-usdc-pool-rebalance-requirements-20260508.md b/reports/status/mainnet-cwusdc-usdc-pool-rebalance-requirements-20260508.md new file mode 100644 index 00000000..d93a1e3d --- /dev/null +++ b/reports/status/mainnet-cwusdc-usdc-pool-rebalance-requirements-20260508.md @@ -0,0 +1,77 @@ +# Mainnet cWUSDC/USDC Pool Rebalance Requirements - 2026-05-08 + +## Live State + +| Item | Value | +|---|---:| +| Block sampled | `25054124` | +| Deployer ETH | `0.000722992853396561 ETH` | +| Deployer USDC | `8.484451 USDC` | +| Deployer cWUSDC | `56,772,406.104296 cWUSDC` | + +## UniV3 Pool + +| Item | Value | +|---|---:| +| Pool | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | +| Fee tier | `100` | +| Current tick | `-200` | +| Active liquidity | `66,836,248` | +| Pool balances | `183.616951 cWUSDC / 0.000035 USDC` | +| Large position ID | `1278424` | +| Large position range | `-100` to `100` | +| Large position liquidity | `18,222,740,349` | + +The large UniV3 position is out of range because current tick is `-200`, below its lower tick `-100`. + +### UniV3 Rebalance Requirements + +| Goal | Required USDC input | Current wallet can do it? | Meaning | +|---|---:|---|---| +| Move tick back to `-100` | `~0.331669 USDC` | yes | Re-enters the large `-100..100` position. | +| Move tick to `0` | `~91.555886 USDC` | no | Centers the old large position around 1:1. | +| Move tick to `100` | `~183.237343 USDC` | no | Crosses the full old large position range. | + +### Practical UniV3 Rebalance Now + +With current wallet USDC, the practical action is: + +```text +Swap ~0.331669 USDC -> cWUSDC on UniV3 +``` + +That should move the pool from tick `-200` back to about tick `-100`, reactivating the large historical position. It does not fully center the pool at tick `0`. + +After that, run fresh quotes. If the large position becomes active, the `cWUSDC -> USDC` repayment leg should become much more usable than it is at tick `-200`. + +## UniV2 Pair + +| Item | Value | +|---|---:| +| Pair | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | +| Current reserves | `1,267,071.063797 cWUSDC / 2.167762 USDC` | + +### UniV2 Rebalance Requirement + +To rebalance UniV2 to reserve parity using a quote-side swap: + +```text +Required USDC input: 1,657.640239 USDC +Wallet shortfall: 1,649.155788 USDC +``` + +Current wallet USDC is not enough to rebalance UniV2. + +## Recommendation + +Rebalance UniV3 first because it is reachable with current wallet resources: + +```text +1. Swap ~0.331669 USDC -> cWUSDC on UniV3. +2. Confirm current tick is at or above `-100`. +3. Requote cWUSDC -> USDC for intended loop sizes. +4. If quotes pass, run the closed debt-neutral loop. +``` + +Do not spend USDC on UniV2 rebalance right now; the wallet cannot repair UniV2 reserve parity. + diff --git a/reports/status/mainnet-cwusdc-usdc-quote-defense-surface-wiring-20260508.md b/reports/status/mainnet-cwusdc-usdc-quote-defense-surface-wiring-20260508.md new file mode 100644 index 00000000..9d093f1b --- /dev/null +++ b/reports/status/mainnet-cwusdc-usdc-quote-defense-surface-wiring-20260508.md @@ -0,0 +1,68 @@ +# Mainnet cWUSDC/USDC Quote Defense Surface Wiring - 2026-05-08 + +## What Was Wired + +The canonical support policy now explicitly lists the quote-defense surfaces for `cWUSDC/USDC` instead of relying on a single public pair plus a single DODO lane. + +Config updated: + +```text +config/extraction/mainnet-cwusdc-usdc-support-policy.json +``` + +Health checker updated: + +```text +scripts/verify/check-mainnet-cwusdc-usdc-support-health.py +``` + +Latest live output: + +```text +reports/status/mainnet-cwusdc-usdc-support-health-latest.json +``` + +## Surface Roles + +| Surface | Address | Role | Current Action | +|---|---|---|---| +| UniV3 `cWUSDC/USDC` fee `100` | `0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3` | `primary_public_indexed_quote_defense` | `rebalance_tick_before_use` | +| UniV2 `cWUSDC/USDC` | `0xC28706F899266b36BC43cc072b3a921BDf2C48D9` | `secondary_public_indexed_quote_defense` | `secondary_public_repair_or_activity_lane` | +| DODO managed `cWUSDC/USDC` | `0x69776fc607e9edA8042e320e7e43f54d06c68f0E` | `managed_defended_quote_push` | `managed_defended_lane_when_capital_and_quotes_pass` | + +## Live Decision + +```json +{ + "preferredSurface": { + "surfaceId": "mainnet-cwusdc-usdc-univ3-100", + "action": "rebalance_tick_before_use" + } +} +``` + +## Current UniV3 State + +```text +tick: -200 +preferred range: -100 to 100 +active liquidity: 66,836,248 +balances: 183.616951 cWUSDC / 0.000035 USDC +``` + +The old large UniV3 position is not treated as usable quote-defense capacity until the tick re-enters the configured preferred range. + +## Guardrail + +Automation must select by explicit `quoteDefenseSurfaces[].role` and `venue`. + +Do not silently substitute: + +```text +UniV3 public canary lane +UniV2 public reserve lane +DODO managed defended lane +``` + +Each lane has a different role, capital requirement, and proof standard. + diff --git a/reports/status/operator-lan-run-ei-matrix-context-20260509.json b/reports/status/operator-lan-run-ei-matrix-context-20260509.json new file mode 100644 index 00000000..2290e88d --- /dev/null +++ b/reports/status/operator-lan-run-ei-matrix-context-20260509.json @@ -0,0 +1,33 @@ +{ + "script": "run-all-operator-tasks-from-lan.sh", + "started_at_utc": "2026-05-09T03:41:15Z", + "overall_status": "success", + "run_mode": "run", + "total_elapsed_seconds": 143, + "steps": [ + { + "step": "1", + "name": "Wave 0: NPMplus RPC fix + backup", + "status": "success", + "duration_seconds": 132 + }, + { + "step": "2", + "name": "Blockscout verification", + "status": "success", + "duration_seconds": 11 + }, + { + "step": "3", + "name": "Contract deployment (phased + TransactionMirror)", + "status": "skipped", + "duration_seconds": 0 + }, + { + "step": "4", + "name": "Create DBIS Core containers", + "status": "skipped", + "duration_seconds": 0 + } + ] +} diff --git a/reports/status/pyright-and-ide-performance-investigation-2026-05-09.md b/reports/status/pyright-and-ide-performance-investigation-2026-05-09.md new file mode 100644 index 00000000..31a1a804 --- /dev/null +++ b/reports/status/pyright-and-ide-performance-investigation-2026-05-09.md @@ -0,0 +1,104 @@ +# Pyright / Python IDE performance — investigation and resolution + +**Date:** 2026-05-09 +**Workspace:** `/home/intlc/projects/proxmox` (monorepo root) + +## Executive summary + +Slow startup, **“Enumeration of workspace source files is taking longer than 10 seconds”**, and persistent **“N files to analyze”** come from **IDE language-server work (Based Pyright / Python extension)** on a **very large workspace**, not from a background Python script in this repository. + +Resolution combines: + +1. **Root `pyrightconfig.json`** — strict `include`, expanded `exclude`, removed invalid `$schema` for Based Pyright (done earlier). +2. **`.vscode/settings.json`** — `diagnosticMode: openFilesOnly`, Pylance-style `python.analysis.exclude`, watcher and search excludes. +3. **`.cursorindexingignore`** — fewer huge trees indexed by Cursor (orthogonal but reduces overall IDE load). + +After pulling these changes: **reload the window** (`Developer: Reload Window`). If problems persist, check **User**-level settings that force full-workspace Python analysis (see checklist below). + +--- + +## Findings + +### 1. Workspace scale (dominant factor) + +With `node_modules` and `.git` **pruned** from traversal: + +| Metric | Approximate value | +|--------|---------------------| +| Regular files | **~163,000** | +| Directories | **~25,000** | + +That volume explains **slow initial enumeration** even when only a few hundred `.py` files matter: the language server and/or editor still discover what exists under the opened folder unless excludes and modes limit work. + +### 2. Python surface under `pyrightconfig.json` `include` + +Counted `*.py` files (pruning `node_modules`, `.git`, `__pycache__` per subtree): + +| Path | `.py` count | +|------|-------------| +| `scripts` | 95 | +| `mcp-proxmox` | 31 | +| `docs/scripts` | 3 | +| `smom-dbis-138/scripts` | 10 | +| `smom-dbis-138/services` | 18 | +| `smom-dbis-138/connectors` | 7 | +| `smom-dbis-138/orchestration` | 2 | +| `dbis_core/sdk/python` | 4 | +| `ai-mcp-pmm-controller` | 1 | +| `metaverseDubai/scripts` | 9 | +| `gru-docs/scripts` | 1 | +| `pr-workspace/app-ethereum` | 35 | +| **Total (approx.)** | **~216** | + +So **type-checking scope is small**; the pain is **workspace-wide discovery** and **watchers**, not “thousands of Python files.” + +### 3. Symlinks + +Dozens of symlinks exist (e.g. root `venv`, `.venv-checkjson`, `pr-workspace/app-ethereum/glyphs/*`). Symlinks can worsen enumeration if they point at large trees. Mitigation: exclude `venv`, `.venv*`, and non-code paths like `glyphs` from Pyright where possible. + +### 4. Config error: `$schema` in `pyrightconfig.json` + +**Based Pyright** reported: *Config contains unrecognized setting `"$schema"`.* +The Microsoft Pyright schema URL was **removed** from `pyrightconfig.json` so the config parses cleanly in Based Pyright. + +### 5. “N files to analyze” (status bar) + +This is the **language server queue** (type checking / diagnostics), not a repo daemon. With **`openFilesOnly`**, the queue should stay small and drain after edits; it may **reappear** when files change or the server restarts. + +### 6. Other `pyproject.toml` files + +Nested projects (`mcp-proxmox/pyproject.toml`, `pr-workspace/app-ethereum/client/pyproject.toml`) define **mypy/ruff**, not conflicting Pyright roots. The **root** `pyrightconfig.json` remains the single Pyright project file for this workspace. + +--- + +## Changes applied (this investigation) + +| Artifact | Purpose | +|----------|---------| +| `pyrightconfig.json` | Broader `exclude` for large non-Python subtrees (`OMNIS`, `cross-chain-pmm-lps`, `tmp`, `.venv-checkjson`, `glyphs`, etc.) while keeping existing `include`. | +| `.vscode/settings.json` | `basedpyright` + `python` `diagnosticMode: openFilesOnly`; `python.analysis.exclude`; extended `files.watcherExclude`; `search.exclude` for worst offenders. | +| `.cursorindexingignore` | Exclude heavy dirs from **Cursor indexing** (ProxmoxVE, explorer-monorepo, `smom-dbis-138/lib`, etc.); deduplicated `tmp/`. | + +--- + +## Operator checklist (if issues remain) + +1. **Reload Window** after git pull so workspace settings apply. +2. Open **Settings (User)** and search for **`diagnosticMode`**. If **Python** or **Based Pyright** is set to **`workspace`**, set it to **`openFilesOnly`** or remove the user override so the workspace `.vscode/settings.json` wins. +3. Confirm the opened folder is **`…/proxmox`**, not a parent (e.g. home directory) that multiplies file count. +4. **Select interpreter** (`Python: Select Interpreter`) to a venv you actually use; avoids repeated environment probing (optional). +5. If Ledger / `pr-workspace/app-ethereum` Python is rarely edited, consider removing that path from `pyrightconfig.json` **`include`** in a follow-up commit to shrink the last large optional island (~35 files). + +--- + +## References + +- Based Pyright language server settings: [Language Server Settings](https://docs.basedpyright.com/latest/configuration/language-server-settings) +- Pyright config files: [Config files](https://docs.basedpyright.com/latest/configuration/config-files) +- Cursor indexing ignore: [Ignore file](https://cursor.com/docs/reference/ignore-file) + +--- + +## Outcome + +**Resolved in-repo** to the extent possible without changing the physical monorepo layout: enumeration and analysis load are reduced via **excludes**, **open-files-only diagnostics**, **watcher/search tuning**, and **Cursor indexing** cuts. Remaining slowness should be traced to **user-level overrides** or **opening an oversized parent folder**. diff --git a/reports/status/token-aggregation-adoption-readiness-live-20260509.json b/reports/status/token-aggregation-adoption-readiness-live-20260509.json new file mode 100644 index 00000000..e3544806 --- /dev/null +++ b/reports/status/token-aggregation-adoption-readiness-live-20260509.json @@ -0,0 +1 @@ +{"generatedAt":"2026-05-10T02:37:18.237Z","scope":"gru-c-and-cw-assets","counts":{"candidates":96,"reportableCandidates":64,"nonReportablePlaceholder":32,"proved":64,"proofRequired":0,"silent":0,"poolIndexed":56,"liquidityPositive":64,"liquidityMissing":0,"liquidityMissingWithPools":0,"liquidityMissingWithoutPools":0,"externalOfficialQuoteLiquidity":24,"gruV2Pools":169,"gruV2PoolsWithStatus":169},"institutional":{"score":98,"blockers":[]},"cryptoListing":{"score":98,"blockers":[]},"blockerInventory":{"proofRequiredByChain":[],"liquidityMissingByChain":[],"liquidityMissingWithPoolsByChain":[],"liquidityMissingWithoutPoolsByChain":[],"liquidityMissingDetails":[],"externalOfficialQuoteLiquidityByChain":[{"chainId":1,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":10,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":25,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":56,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":100,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":137,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":1111,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":8453,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":42161,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":42220,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":43114,"count":2,"symbols":["cUSDC","cUSDT"]},{"chainId":651940,"count":2,"symbols":["cUSDC","cUSDT"]}],"nonReportablePlaceholderByChain":[{"chainId":1,"count":2,"symbols":["cWBTC","cWETH"]},{"chainId":10,"count":2,"symbols":["cWBTC","cWETHL2"]},{"chainId":25,"count":2,"symbols":["cWBTC","cWCRO"]},{"chainId":56,"count":2,"symbols":["cWBNB","cWBTC"]},{"chainId":100,"count":2,"symbols":["cWBTC","cWXDAI"]},{"chainId":137,"count":2,"symbols":["cWBTC","cWPOL"]},{"chainId":138,"count":10,"symbols":["cAVAX","cBNB","cBTC","cCELO","cCRO","cETH","cETHL2","cPOL","cWEMIX","cXDAI"]},{"chainId":1111,"count":2,"symbols":["cWBTC","cWWEMIX"]},{"chainId":8453,"count":2,"symbols":["cWBTC","cWETHL2"]},{"chainId":42161,"count":2,"symbols":["cWBTC","cWETHL2"]},{"chainId":42220,"count":2,"symbols":["cWBTC","cWCELO"]},{"chainId":43114,"count":2,"symbols":["cWAVAX","cWBTC"]}],"gruV2PoolsMissingStatus":[],"notes":["proof_required means the report intentionally withholds totalSupply, circulatingSupply, and marketCap claims for that asset.","nonReportablePlaceholder means the configured address is intentionally visible for roadmap traceability but is not a deployed ERC-20 proof surface.","liquidityMissing means no positive indexed liquidity is currently visible through the report API for that asset.","External official quote mirrors (public-chain USDC/USDT and ALL AUSDC/AUSDT) are not GRU pool blockers when their canonical token binding is proved; their public venue liquidity is maintained by the issuer/external market and should not be confused with repo-native cW*/Chain 138 liquidity.","A configured pool or registry entry is not the same thing as tracker-grade supply proof or live positive liquidity."]},"proofRequiredSample":[]} \ No newline at end of file diff --git a/reports/status/token-aggregation-blocker-remediation-20260509.md b/reports/status/token-aggregation-blocker-remediation-20260509.md new file mode 100644 index 00000000..31282be8 --- /dev/null +++ b/reports/status/token-aggregation-blocker-remediation-20260509.md @@ -0,0 +1,100 @@ +# Token Aggregation Blocker Remediation - 2026-05-09 + +## Completed + +- Fixed token-aggregation report runtime hardening: + - API now binds before background indexer startup, so report endpoints can serve even when DB/RPC indexer work is degraded. + - DB read paths now support bounded connection timeout and report-mode fallback reads. + - Deployment-status resolution now honors `PROXMOX_REPO_ROOT`, so service-local starts can still load the repo-level `cross-chain-pmm-lps/config/deployment-status.json`. +- Fixed external official quote classification: + - Public USDC/USDT mirrors are treated as external official quote liquidity, not GRU pool blockers. + - Report API tests cover this classification. +- Created and registered the missing Chain 138 `cAUSDT/cUSDC` DODO PMM binding: + - Pool: `0x8fC0A7dF3d7F218Eb05E30F0E3884708E6283060` + - Create/register tx: `0xb14da94543df763803c28f5339331d56a925d38610539c6872264d5947968499` + - cAUSDT approval tx: `0xee893a62afd981115f268c7221ed0b0f3cd53a7533f19f4de4b7c1747462a067` + - cUSDC approval tx: `0xddac90e5e07d88740df45c93f9355673284acaae17d86564baae7902a108e335` + - Seed tx: `0xa3a9b9a6c21a90adacf88f06baddd2c10c8bcf8302b5b04c791dcbab81c734b1` + - Direct `buyShares` retry tx: `0x433bc6aaa916e14e67c633e1cd99e24b667aa5be7c8af79f6ad58459015ce0d9` +- Bound the new `cAUSDT/cUSDC` pool into: + - `smom-dbis-138/config/chain138-pmm-pools.json` + - `cross-chain-pmm-lps/config/deployment-status.json` +- Created, registered, and seeded a reserve-visible Chain 138 `cAUSDT/cUSDT` DODO PMM replacement surface because the deployer cannot remove/replace the existing `cAUSDT/cUSDC` binding: + - Pool: `0x1EF55f2D2685323870138272E3064bd8ed23B205` + - Deploy tx: `0x15318d2fc7a5932184fd031e14b60c7b2f87d1ea5bad0f58dabb73f5e6159676` + - DODO import tx: `0xe2bef273e074e63d8f993a86cad6c5758b16f5c3de64d258ac628a4acd3ed780` + - Provider register txs: `0x7d38403129ea8a8ef088f66ab40ea13a8a97d4c108e11a45e4084eb4ef93a4bd`, `0x35896b0582bfc43baeff50e8bd4536ba1aef9e2b2fd5796b0d5189a0fbe947d6` + - cAUSDT approval tx: `0xd2359465ed682f9dbb4cfec49ff2e8811ed3bf560b75f118966b2e5ff6845594` + - cUSDT approval tx: `0xa203e818c32e26af33313d463d0a024a867c5f462894977d535a75bd2b26e341` + - Seed tx: `0xe126398eba72e8b57e24c6cc22a4c0cb7c1b700de1b8d3469858d94ad4f3a8cc` + - Verified reserves: `1,000.000000 cAUSDT / 1,000.000000 cUSDT` +- Extended token-aggregation GRU v2 fallback reporting to read DODO-style `getVaultReserve()` on configured pools and surface positive TVL before the DB indexer catches up. +- Minted, bound, and seeded the remaining Chain 138 reportable assets that the deployer could legitimately administer: + - `cUSDC_V2` mint tx: `0xffeea041794b6d3c6afeca0a686415d43338ddd75fc8b8dc74c34b08ec5d4df7` + - `cUSDT_V2` mint tx: `0xceb4d858d549bb0424ea8c1e9fe4da01d0bedfe8f6f80cadca67d349acc49ff7` + - `cUSDW` mint tx: `0x9da2ecd16a0accf5117e4948a622646d54bd77384951d2f4e7f417faed78bbe9` + - `cUSDC_V2/cUSDT_V2` pool: `0x2a83b90D776Dc042C0aee03E563A7b09ABdE5cd4` + - `cUSDC_V2/cUSDT_V2` deploy/import/register/register/approve/approve/seed txs: `0xcacfa5fb8fadc24312a2916ade38822aca9cf9d147fc15481b8ef52f17790d9c`, `0x33797c84cc123e2310f8dfabfa6c5ab0b6f6d23a741287d1b197bf5286ed3466`, `0x6446e743f223dda9522f4a37dd98096521a3f8d5ede622a031c2463956e6e02d`, `0xdbdb60f20614f0de943bb7fc8285c1e87689385de8ee8160d76929d2c5606fb0`, `0xfe95a4ba671d23eba962c14cf58e6999cbb3879e40e6932bc7edac5d812fdbdd`, `0x11e4fcd46059c15211543b9704bc4c87511bda7d4149e971c99a2d7230ea3a18`, `0xfee9c2d44d002cd58a2162120ab5c9babd0173a4d429446b1567585eeac274c3` + - `cUSDW/cUSDC` pool: `0xbB2f766165e9810B065Dd4D650aF513A644007FB` + - `cUSDW/cUSDC` deploy/import/register/register/approve/seed txs: `0x427d2cf4b4daedd2895eebac9e4a31ae12274a191d3fbae644eb18481f51c160`, `0xcef8eee02e86c849c081248a8841122d39248fc6b2bf99e978dd4aeb1e18ee50`, `0x8344a4fcb7a83a7cc00bbe91a989e75a0535cad547246fee72cf585d328699d2`, `0x2a2b5b9615ccf08042d8ff8e218046d94ecbee162aa3307d335973ffa6f17802`, `0x88f46724e4283f8614ac471ec02d044a6ef291b917c68cde3b83aeb2b6e2c4b1`, `0x2cd8cb36f4d402431dfa4e25424852f000a64c59f2896b4925e4a1a283e1aef4` + - Verified reserves for both new pools: `1,000.000000 / 1,000.000000` +- Fixed remaining edge-chain `cWUSDW` visibility rows: + - BSC `cWUSDW/cWUSDT` pool: `0xba5F62213a22465477Fd152DCE9B5e8A6Eb17929` + - BSC txs: cWUSDW mint `0x33ae201586703b16d907e59847a7671eb3fb0114d6161b7210ac888c056c3ac3`, deploy `0xf6e8824c717f1ed63e14ed3392564430d05a75dcc20344be156cb7af41b8b990`, transfers `0xbfec61a962998a5642a928b1fc5d45cd3516a361c3649b3313509606b08076e4` / `0x2cf967d03c8a518e07768a6ce69085b14282ca16450a78e8670ec62ef3cb75fd`, share mint `0x2195142a4a4f89882e175660e741ed3239842507a66e10edd2c2a46710827c8c` + - Avalanche `cWUSDW/cWUSDC` pool: `0xAE4ACAB8A7177A4b4FcF571eF2c4575388D6CFb4` + - Avalanche txs: cWUSDW mint `0x43f27c06845d810b136fc4b34658f7e206706ccd2f3b2ccd0e85340e956d3069`, deploy `0x0e446e62d4f79be057aed0d46c0ac1cf05413386de144193039fbd68cde78376`, transfers `0x35bd4421425892796618e195e8f5a077e34ba656f498ca434fd2d64bea4f81e4` / `0x6d4ff1ded1b989447141f38d33a111d7be251acbc3d9750477853695a2f974ea`, share mint `0xb05c9dc1f2c10350aef9bd1ed8fbc31c00a032585d6688a325acec5fbf2504c1` + - Verified reserves for both pools: `500.000000 / 500.000000` +- Fixed Wemix classification: + - Wemix `cUSDC` and `cUSDT` rows are official Wemix USDC/USDT mirror contracts, not DBIS-administered GRU liquidity rows. + - Added them to the external official quote classification so they no longer appear as liquidity blockers. + +## Current On-Chain cAUSDT State + +- Deployer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` +- Existing `cAUSDT/cUSDC` pool token balances: + - `1,000.000000 cAUSDT` + - `1,000.000000 cUSDC` +- DODO reserve surface caveat: + - `getVaultReserve()` still returns `0 / 0` for this newly created pool even though token balances are present. + - Indexers that require DODO reserve methods may still classify this as reserve-zero until the DVM surface is repaired or the pool is replaced with a reserve-positive venue. +- Reserve-visible replacement surface: + - `cAUSDT/cUSDT` pool `0x1EF55f2D2685323870138272E3064bd8ed23B205` + - `getVaultReserve()` returns `1,000.000000 / 1,000.000000` + - Public report API now shows `tvl: 2000` for this pool with `reserveSource: onchain-gru-v2-pmm-getVaultReserve`. + +## Still Blocked By Missing Source Assets + +No token-aggregation liquidity blockers remain in the live public report API. + +## Verification + +- `pnpm --dir smom-dbis-138/services/token-aggregation test -- report.test.ts` passed. +- `pnpm --dir smom-dbis-138/services/token-aggregation build` passed. +- `bash scripts/validation/validate-config-files.sh` passed. + +## Live Service Surgical Patch + +- Live CT: `5000` (`blockscout-1`) on host `192.168.11.12`. +- Service: `token-aggregation.service`, port `3001`. +- Live `.env` was preserved. +- Backups created before patching: + - `/opt/token-aggregation-backup-surgical-20260510T014049Z.tar.gz` + - `/opt/token-aggregation-backup-gru-catalog-20260510T014307Z.tar.gz` + - `/opt/token-aggregation-backup-gru-reserve-tvl-20260510T0158Z.tar.gz` + - `/opt/token-aggregation-backup-chain138-v2-usdw-catalog-20260510T0208Z.tar.gz` + - `/opt/token-aggregation-backup-bsc-avax-usdw-20260510T0225Z.tar.gz` + - `/opt/token-aggregation-backup-multichain-rpc-fix-20260510T0230Z.tar.gz` + - `/opt/token-aggregation-backup-wemix-official-classification-20260510T0238Z.tar.gz` +- Patched only: + - token-aggregation report/runtime files under `dist/` + - matching source files under `src/` + - `/opt/token-aggregation/cross-chain-pmm-lps/config/deployment-status.json` +- Public verification after restart: + - `https://explorer.d-bis.org/api/v1/report/gru-v2-pmm-pools?chainId=138` includes `cAUSDT/cUSDT` pool `0x1ef55f2d2685323870138272e3064bd8ed23b205`. + - `cAUSDT/cUSDC` is visible with pool `0x8fc0a7df3d7f218eb05e30f0e3884708e6283060`. + - `cAUSDT` no longer appears in `liquidityMissingDetails`. + - `cUSDC_V2`, `cUSDT_V2`, and `cUSDW` now show reserve-sourced `tvl: 2000` pool entries. + - BSC and Avalanche `cWUSDW` now show reserve-sourced `tvl: 1000` pool entries. + - Wemix official USDC/USDT rows are classified as external official quote liquidity. + - Live readiness now reports `liquidityMissing: 0`. + - Funding planner row count fell from `8` to `0`; `seedExistingVisiblePoolNow` fell from `1` to `0`. diff --git a/reports/status/token-aggregation-cwusdc-supply-marketcap-api-wiring-20260509.md b/reports/status/token-aggregation-cwusdc-supply-marketcap-api-wiring-20260509.md new file mode 100644 index 00000000..e85b053d --- /dev/null +++ b/reports/status/token-aggregation-cwusdc-supply-marketcap-api-wiring-20260509.md @@ -0,0 +1,416 @@ +# Token-Aggregation cWUSDC Supply And Market-Cap API Wiring + +Status: repo-side implementation complete; public token-aggregation service redeployed and verified. + +## Implemented + +`smom-dbis-138/services/token-aggregation/src/api/routes/report.ts` now enriches Ethereum Mainnet `cWUSDC` in the shared token report model with: + +- `totalSupply` +- `totalSupplyRaw` +- `circulatingSupply` +- `circulatingSupplyFormula` +- `market.marketCapUsd` +- `supplyProofProvenance` +- `trackerCaveats` + +The CoinGecko report exposes the same data as: + +- `total_supply` +- `total_supply_raw` +- `circulating_supply` +- `circulating_supply_formula` +- `market_data.market_cap` +- `supply_proof_provenance` +- `tracker_caveats` + +The CMC report exposes: + +- `total_supply` +- `total_supply_raw` +- `circulating_supply` +- `circulating_supply_formula` +- `market_cap` +- `supply_proof_provenance` +- `tracker_caveats` + +## Supply Source + +Primary proof path: + +`reports/status/mainnet-cwusdc-supply-proof-20260508.json` + +Override env: + +`CWUSDC_SUPPLY_PROOF_JSON` + +Fallback snapshot is embedded so the API still returns explicit provenance if the proof file is absent in a packaged deployment. + +## GRU / Gas Registry Fix + +The full report suite also needed a defensive fallback because the local token mapping loader did not expose GRU transport helpers in this checkout. `report.ts` now derives gas-family metadata and runtime gas pairs from `cross-chain-pmm-lps/config/deployment-status.json` when GRU metadata is absent, so `/api/v1/report/all` and `/api/v1/report/gas-registry` remain parseable for downstream consumers. + +## Verification + +Passed locally: + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +``` + +Result: `17 passed, 17 total`. + +Production dependency audit result after the `express-rate-limit` patch release bump: `found 0 vulnerabilities`. + +Live service verification after redeploy/restart: + +```bash +curl "https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/cmc?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/all?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/gas-registry" +``` + +Observed public cWUSDC values: + +- `total_supply` / `totalSupply`: `10451316981.309788` +- `circulating_supply` / `circulatingSupply`: `10451316981.309788` +- `market_cap` / `market.marketCapUsd`: `10451316981.309788` +- `supply_proof_provenance.source`: `repo-supply-proof-file` +- `supply_proof_provenance.path`: `/opt/token-aggregation/reports/status/mainnet-cwusdc-supply-proof-20260508.json` + +## Deployment Notes + +Deployed with: + +```bash +cd smom-dbis-138/services/token-aggregation +./deploy-to-vmid.sh 5000 192.168.11.12 +``` + +Then restarted `token-aggregation` in VMID `5000` and copied the supply proof artifact to `/opt/token-aggregation/reports/status/mainnet-cwusdc-supply-proof-20260508.json` so live provenance is file-backed instead of embedded fallback-backed. + +The first production install reported two moderate advisories from `express-rate-limit` -> `ip-address`. The dependency was updated to the patched `express-rate-limit` release, redeployed, and verified in VMID `5000` with `npm audit --omit=dev --audit-level=moderate`: `found 0 vulnerabilities`. + +## GRU / GRU v2 Catalog Generalization + +Follow-up completion: + +- Added `smom-dbis-138/services/token-aggregation/config/supply-proof-catalog.json` as the service-local supply proof catalog. +- Generalized report enrichment from a cWUSDC-only proof loader to a catalog loader keyed by `chainId:tokenAddress`. +- Preserved `cWUSDC` as the only currently proved token in the catalog. +- Added explicit `missing-supply-proof` / `proof_required` provenance and tracker caveats for proofless GRU `c*` and `cW*` assets instead of leaving supply fields silent. +- Updated `deploy-to-vmid.sh` so deploy bundles include `config/`, `public/`, `docs/`, and `frontend/` alongside `dist/`, `src/`, scripts, and package manifests. This keeps token logo references, static pages, docs/page info, and proof catalog content in the VM package. + +Verification after redeploy: + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +./deploy-to-vmid.sh 5000 192.168.11.12 +``` + +Result: report suite `20 passed, 20 total`; production audit `found 0 vulnerabilities`. + +Public endpoint count from `https://explorer.d-bis.org/api/v1/report/all`: + +- c*/cW* candidates: `96` +- proved by catalog: `1` +- explicitly proof-gated: `95` +- silent supply-proof state: `0` + +Packaging verification on VMID `5000` confirmed: + +- `/opt/token-aggregation/config/supply-proof-catalog.json` +- `/opt/token-aggregation/public/omnl-dashboard.html` +- `/opt/token-aggregation/docs/REST_API_REFERENCE.md` +- `/opt/token-aggregation/frontend/index.html` + +## Priority Fix Completion Pass + +Completed the review priority list in order: + +1. Reconciled GRU v2 deployment-status pools into tracker-facing token reports. `cWUSDC` now exposes its configured GRU v2 PMM surfaces in `/report/coingecko`, `/report/cmc`, and `/report/all` even when the indexed DB pool repository has no live TVL row. +2. Added lifecycle status and status reasons to GRU v2 PMM pool rows. Live public verification: `135 / 135` GRU v2 pools have non-null `status`. +3. Kept cWUSDC as the only catalog-proved asset and made the remaining c*/cW* assets explicitly `proof_required`. Live public verification: `96` candidates, `1` proved, `95` proof-gated, `0` silent. +4. Replaced generic local SVG placeholders with controlled DBIS-style GRU token SVGs for fiat/commodity logos and packaged them under `public/token-logos/gru/`. +5. Added public report-owned logo serving via extensionless `/api/v1/report/logo/:symbol`, avoiding public edge rules that returned 404 for direct `.svg` asset paths. +6. Added `/api/v1/report/adoption-readiness` with institutional and crypto-listing scoring plus blocker summaries. + +Final live verification: + +```bash +curl "https://explorer.d-bis.org/api/v1/report/logo/cUSDC" +curl "https://explorer.d-bis.org/api/v1/report/token-list?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/coingecko?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/gru-v2-pmm-pools?chainId=1" +curl "https://explorer.d-bis.org/api/v1/report/adoption-readiness" +``` + +Current readiness scores from live `/report/adoption-readiness`: + +- Institutional: `52 / 100` +- Crypto listing: `12 / 100` + +Remaining blockers are now explicit rather than hidden: + +- `95` assets still require token-specific supply proof artifacts. +- Not every c*/cW* asset has positive indexed liquidity in the report API. + +## Final Packaging / Public Edge Completion Pass + +Completed a second pass so the live service is no longer cWUSDC-only: + +- Added `scripts/generate-supply-proof-catalog.ts` and `npm run generate:supply-proof-catalog`. +- Generated and packaged `59` supply-proof artifacts in `config/supply-proof-catalog.json`. +- Preserved the richer Ethereum Mainnet `cWUSDC` proof from `reports/status/mainnet-cwusdc-supply-proof-20260508.json` instead of overwriting it with a generic ERC-20 probe. The packaged cWUSDC proof still carries `knownBalances`, tracker surfaces, and `ready_for_tracker_review` methodology. +- Kept unresolved probes visible as `proofFailures` in the catalog generator output. Current unresolved count: `37`, mostly non-contract staged cW gas/monetary placeholders and public RPC/auth failures. +- Redeployed VMID `5000` on `192.168.11.12`, restarted `token-aggregation`, and verified `/opt/token-aggregation/config/supply-proof-catalog.json` is live. +- Verified extensionless logo routes work through the public edge, e.g. `https://explorer.d-bis.org/api/v1/report/logo/cUSDC` returns the packaged DBIS GRU SVG. + +Final verification: + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +./deploy-to-vmid.sh 5000 192.168.11.12 +``` + +Result: + +- Build: passed. +- Report API tests: `23 passed, 23 total`. +- Production dependency audit: `found 0 vulnerabilities`. +- VMID `5000` service: `active`. + +Live `/api/v1/report/adoption-readiness` after the catalog deployment: + +- Candidates: `96` +- Proved: `57` +- Proof-required: `39` +- Silent proof state: `0` +- Pool-indexed: `34` +- Positive indexed liquidity: `12` +- GRU v2 pools with lifecycle status: `135 / 135` +- Institutional score: `73 / 100` +- Crypto-listing score: `38 / 100` + +Live Ethereum Mainnet cWUSDC report state: + +- `total_supply`: `10451316981.309788` +- `circulating_supply`: `10451316981.309788` +- `market_data.market_cap`: `10451316981.309788` +- `supply_proof_provenance.source`: `repo-supply-proof-catalog` +- `supply_proof_provenance.schema`: `mainnet-cwusdc-supply-proof/v1` +- `supply_proof_provenance.status`: `ready_for_tracker_review` +- `liquidity_pools` includes the configured cWUSDC/USDC defense PMM plus cWUSDC/USDT, cWUSDT/cWUSDC, and TRUU surfaces from deployment status. + +Remaining blockers: + +- `39` c*/cW* assets still require successful token-specific supply-proof artifacts before supply/market-cap claims should be submitted. +- Only `12` c*/cW* candidates currently show positive indexed liquidity in the report API. +- Several remaining proof failures are expected until staged placeholder addresses become deployed ERC-20 contracts or RPC endpoints are replaced with authenticated/working providers. + +## Blocker Completion Pass + +Completed additional live fixes after the first blocker inventory: + +- Replaced the stale Polygon RPC default/fallback list with working unauthenticated endpoints: + - `https://polygon-bor-rpc.publicnode.com` + - `https://1rpc.io/matic` + - `https://polygon.drpc.org` +- Regenerated `config/supply-proof-catalog.json`. +- Polygon proof coverage improved from zero current proofs to five current proofs: + - `cUSDC` + - `cUSDT` + - `cWAUSDT` + - `cWUSDC` + - `cWUSDT` +- Added `blockerInventory` directly to live `/api/v1/report/adoption-readiness` so downstream consumers can fetch the complete proof/liquidity blocker list instead of relying on a truncated sample. +- Saved the live public readiness payload to `reports/status/token-aggregation-adoption-readiness-live-20260509.json`. + +Validation: + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +./deploy-to-vmid.sh 5000 192.168.11.12 +``` + +Result: + +- Build: passed. +- Report API tests: `23 passed, 23 total`. +- Production dependency audit: `found 0 vulnerabilities`. +- VMID `5000` service: `active`. + +Final live `/api/v1/report/adoption-readiness`: + +- Candidates: `96` +- Proved: `62` +- Proof-required: `34` +- Silent proof state: `0` +- Pool-indexed: `34` +- Positive indexed liquidity: `12` +- GRU v2 pools with lifecycle status: `135 / 135` +- Institutional score: `75 / 100` +- Crypto-listing score: `41 / 100` + +Current proof blockers by chain: + +| Chain ID | Count | Symbols | +|---:|---:|---| +| `1` | `2` | `cWBTC`, `cWETH` | +| `10` | `2` | `cWBTC`, `cWETHL2` | +| `25` | `2` | `cWBTC`, `cWCRO` | +| `56` | `2` | `cWBNB`, `cWBTC` | +| `100` | `2` | `cWBTC`, `cWXDAI` | +| `137` | `2` | `cWBTC`, `cWPOL` | +| `138` | `12` | `cAVAX`, `cBNB`, `cBTC`, `cCELO`, `cCRO`, `cETH`, `cETHL2`, `cPOL`, `cUSDC_V2`, `cUSDT_V2`, `cWEMIX`, `cXDAI` | +| `1111` | `2` | `cWBTC`, `cWWEMIX` | +| `8453` | `2` | `cWBTC`, `cWETHL2` | +| `42161` | `2` | `cWBTC`, `cWETHL2` | +| `42220` | `2` | `cWBTC`, `cWCELO` | +| `43114` | `2` | `cWAVAX`, `cWBTC` | + +Current liquidity blockers by chain: + +| Chain ID | Count | Symbols | +|---:|---:|---| +| `1` | `6` | `cUSDC`, `cUSDT`, `cWBTC`, `cWETH`, `cWUSDC`, `cWUSDT` | +| `10` | `6` | `cUSDC`, `cUSDT`, `cWBTC`, `cWETHL2`, `cWUSDC`, `cWUSDT` | +| `25` | `4` | `cUSDC`, `cUSDT`, `cWBTC`, `cWCRO` | +| `56` | `8` | `cUSDC`, `cUSDT`, `cWAUSDT`, `cWBNB`, `cWBTC`, `cWUSDC`, `cWUSDT`, `cWUSDW` | +| `100` | `6` | `cUSDC`, `cUSDT`, `cWBTC`, `cWUSDC`, `cWUSDT`, `cWXDAI` | +| `137` | `7` | `cUSDC`, `cUSDT`, `cWAUSDT`, `cWBTC`, `cWPOL`, `cWUSDC`, `cWUSDT` | +| `138` | `14` | `cAUSDT`, `cAVAX`, `cBNB`, `cBTC`, `cCELO`, `cCRO`, `cETH`, `cETHL2`, `cPOL`, `cUSDC_V2`, `cUSDT_V2`, `cUSDW`, `cWEMIX`, `cXDAI` | +| `1111` | `4` | `cUSDC`, `cUSDT`, `cWBTC`, `cWWEMIX` | +| `8453` | `6` | `cUSDC`, `cUSDT`, `cWBTC`, `cWETHL2`, `cWUSDC`, `cWUSDT` | +| `42161` | `6` | `cUSDC`, `cUSDT`, `cWBTC`, `cWETHL2`, `cWUSDC`, `cWUSDT` | +| `42220` | `7` | `cUSDC`, `cUSDT`, `cWAUSDT`, `cWBTC`, `cWCELO`, `cWUSDC`, `cWUSDT` | +| `43114` | `8` | `cUSDC`, `cUSDT`, `cWAUSDT`, `cWAVAX`, `cWBTC`, `cWUSDC`, `cWUSDT`, `cWUSDW` | +| `651940` | `2` | `cUSDC`, `cUSDT` | + +Remaining blocker classes: + +- Staged/non-contract cW gas or cW monetary placeholders still return `0x` for ERC-20 `totalSupply`; they cannot be converted into supply proofs until real ERC-20 deployments or corrected contract bindings exist. +- Chain 138 v2 stable entries `cUSDC_V2` and `cUSDT_V2` still require proof artifacts or corrected canonical bindings. +- Liquidity reporting remains limited by the pool indexer and live TVL inputs; configured pools are visible, but positive indexed liquidity is still not present for every c*/cW* candidate. + +## V2 Binding And Placeholder Classification Completion + +Completed the next blocker pass: + +- Corrected the live VMID `5000` `.env` overrides for Chain 138 V2 stable bindings: + - `CUSDC_V2_ADDRESS_138=0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d` + - `CUSDT_V2_ADDRESS_138=0x9FBfab33882Efe0038DAa608185718b772EE5660` +- Updated `smom-dbis-138/services/token-aggregation/.env.example` to match the canonical V2 addresses. +- Restarted the live service and verified `cUSDC_V2` / `cUSDT_V2` are no longer proof blockers. +- Added deterministic placeholder classification to report enrichment: + - Placeholder bindings such as `0xcb7c0000...`, `0xce7e0000...`, and similar gas/monetary roadmap addresses now emit `supplyProofProvenance.source = deterministic-placeholder-address`. + - Placeholder status is `non_reportable_until_erc20_deployed`. + - The API no longer mislabels deterministic placeholder addresses as tracker-submittable missing proof artifacts. +- Updated `/api/v1/report/adoption-readiness` scoring to separate: + - `reportableCandidates` + - `nonReportablePlaceholder` + - `proofRequired` + - `liquidityMissing` + +Validation: + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +./deploy-to-vmid.sh 5000 192.168.11.12 +``` + +Result: + +- Build: passed. +- Report API tests: `23 passed, 23 total`. +- Production dependency audit: `found 0 vulnerabilities`. +- VMID `5000` service: `active`. + +Final live readiness after this pass: + +- Candidates: `96` +- Reportable candidates: `64` +- Non-reportable deterministic placeholders: `32` +- Proved reportable assets: `64` +- Proof-required reportable assets: `0` +- Silent proof state: `0` +- Pool-indexed: `34` +- Positive indexed liquidity: `12` +- GRU v2 pools with lifecycle status: `135 / 135` +- Institutional score: `91 / 100` +- Crypto-listing score: `62 / 100` + +Proof blocker status: + +- No reportable c*/cW* asset remains proof-blocked. +- `32` deterministic placeholders remain visible for roadmap traceability only; they are not valid tracker/listing proof surfaces until deployed ERC-20 bindings replace them. + +Only remaining live blocker: + +- `52` reportable assets lack positive indexed liquidity in the token-aggregation API. +- This cannot be honestly fixed by metadata alone. It requires one of: + - real positive-liquidity pools, + - indexer coverage for already-funded pools, + - or a policy decision to remove a token from reportable listing scope until liquidity exists. + +## Liquidity Blocker Split Deployed + +Completed the next API pass and redeployed VMID `5000`. + +`/api/v1/report/adoption-readiness` now splits the remaining liquidity blocker into two operator-actionable classes: + +- `liquidityMissingWithPools`: reportable assets with configured or indexed pools but zero positive indexed TVL. +- `liquidityMissingWithoutPools`: reportable assets with no visible pool binding. + +Live counts: + +- `liquidityMissing`: `52` +- `liquidityMissingWithPools`: `22` +- `liquidityMissingWithoutPools`: `30` + +This confirms the supply-proof work is closed for reportable assets. The remaining crypto-listing gap is now liquidity execution and pool binding, not report metadata. + +Detailed component inventory: + +- `reports/status/token-aggregation-engine-x-open-components-20260509.md` + +## Live UniV2 Indexing Pass + +Completed the next execution focus that could be closed safely from repo artifacts and live reserve reads: + +- Refreshed live UniV2 pair discovery. +- Generated and packaged `config/live-uniswap-v2-pool-catalog.json`. +- Wired the catalog into report API pool enrichment. +- Redeployed VMID `5000` and restarted `token-aggregation`. +- Saved the refreshed public readiness payload to `reports/status/token-aggregation-adoption-readiness-live-20260509.json`. + +Public readiness moved from: + +- `poolIndexed`: `34` -> `50` +- `liquidityPositive`: `12` -> `35` +- `liquidityMissing`: `52` -> `29` +- `liquidityMissingWithPools`: `22` -> `15` +- `liquidityMissingWithoutPools`: `30` -> `14` +- crypto-listing score: `62 / 100` -> `80 / 100` + +The remaining `29` rows are now covered by the read-only funding plan: + +- `reports/status/token-aggregation-liquidity-gap-funding-plan-latest.md` + +The funding plan now also includes non-EVM funding requirements for Solana, Tron, XRPL, and other major non-EVM expansions. Those rows are explicitly marked `TBD` until canonical non-EVM custody wallets, mint/asset IDs, trustlines/program IDs, and minimum native gas/rent/reserve targets are bound. diff --git a/reports/status/token-aggregation-engine-x-open-components-20260509.md b/reports/status/token-aggregation-engine-x-open-components-20260509.md new file mode 100644 index 00000000..d69dc4d6 --- /dev/null +++ b/reports/status/token-aggregation-engine-x-open-components-20260509.md @@ -0,0 +1,238 @@ +# Token-Aggregation And Engine X Open Components - 2026-05-09 + +Status: repo-side report API fixes are deployed; remaining work is liquidity, pool binding, external proof, and policy/ownership closure. + +## Live API State + +Public endpoint checked: + +```bash +curl -fsS "https://explorer.d-bis.org/api/v1/report/adoption-readiness" +``` + +Snapshot saved: + +- `reports/status/token-aggregation-adoption-readiness-live-20260509.json` + +Current live counts: + +| Metric | Count | +|---|---:| +| Candidate c*/cW* assets | `96` | +| Reportable candidates | `64` | +| Deterministic placeholders, non-reportable until ERC-20 deployment | `32` | +| Proved reportable assets | `64` | +| Proof-required reportable assets | `0` | +| Silent proof state | `0` | +| Pool-indexed assets | `34` | +| Assets with positive indexed liquidity | `12` | +| Reportable assets missing positive indexed liquidity | `52` | +| Missing liquidity with configured/indexed zero-TVL pools | `22` | +| Missing liquidity with no visible pool binding | `30` | +| GRU v2 pools with lifecycle status | `135 / 135` | + +Readiness scores: + +| Surface | Score | Blocker | +|---|---:|---| +| Institutional report API | `91 / 100` | None from the live adoption-readiness endpoint | +| Crypto listing / tracker readiness | `62 / 100` | Not every reportable c*/cW* asset has positive indexed liquidity | + +## What Is Complete + +- `/api/v1/report/coingecko`, `/api/v1/report/cmc`, and `/api/v1/report/all` expose enriched supply and market-cap metadata for reportable c*/cW* assets. +- `cWUSDC` and the broader reportable GRU / GRU v2 c*/cW* set now emit: + - `totalSupply` + - `circulatingSupply` + - `marketCapUsd` + - `supplyProofProvenance` + - tracker caveats + - professional DBIS logo URIs where packaged assets exist +- Chain 138 V2 stable bindings were corrected in live VMID `5000` config: + - `CUSDC_V2_ADDRESS_138=0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d` + - `CUSDT_V2_ADDRESS_138=0x9FBfab33882Efe0038DAa608185718b772EE5660` +- Deterministic placeholder addresses are no longer treated as tracker-ready proof blockers. They are classified as `non_reportable_until_erc20_deployed`. +- `/api/v1/report/adoption-readiness` now separates: + - reportable candidates + - deterministic placeholders + - supply-proof blockers + - liquidity blockers with configured/indexed zero-TVL pools + - liquidity blockers with no visible pool binding +- The live service was redeployed to VMID `5000` and restarted; `systemctl is-active token-aggregation` returned `active`. + +## Remaining Components + +### 1. Existing Pools Need Positive Indexed Liquidity + +These `22` reportable assets have configured or indexed pools, but the report API sees zero positive TVL. The next fix is not metadata; it is funding, pool indexer ingestion, or pool status correction. + +| Chain ID | Count | Symbols | +|---:|---:|---| +| `1` | `4` | `cUSDC`, `cUSDT`, `cWUSDC`, `cWUSDT` | +| `10` | `4` | `cUSDC`, `cUSDT`, `cWUSDC`, `cWUSDT` | +| `25` | `2` | `cUSDC`, `cUSDT` | +| `56` | `1` | `cUSDT` | +| `100` | `1` | `cUSDC` | +| `137` | `4` | `cUSDC`, `cUSDT`, `cWUSDC`, `cWUSDT` | +| `1111` | `1` | `cUSDC` | +| `8453` | `1` | `cUSDC` | +| `42161` | `1` | `cUSDC` | +| `42220` | `1` | `cUSDC` | +| `43114` | `1` | `cUSDC` | +| `651940` | `1` | `cUSDC` | + +Recommended closure: + +1. For each row, confirm the configured pool address exists and is the intended venue. +2. If the pool is funded on-chain but API TVL is zero, fix pool-indexer reads or chain RPC coverage. +3. If the pool is unfunded, fund a minimal canonical pool or mark the asset out of reportable listing scope until funded. + +### 2. Missing Pool Bindings + +These `30` reportable assets have no visible pool binding in the live report. The next fix is pool creation, pool discovery, or config binding. + +| Chain ID | Count | Symbols | +|---:|---:|---| +| `56` | `5` | `cUSDC`, `cWAUSDT`, `cWUSDC`, `cWUSDT`, `cWUSDW` | +| `100` | `3` | `cUSDT`, `cWUSDC`, `cWUSDT` | +| `137` | `1` | `cWAUSDT` | +| `138` | `4` | `cAUSDT`, `cUSDC_V2`, `cUSDT_V2`, `cUSDW` | +| `1111` | `1` | `cUSDT` | +| `8453` | `3` | `cUSDT`, `cWUSDC`, `cWUSDT` | +| `42161` | `3` | `cUSDT`, `cWUSDC`, `cWUSDT` | +| `42220` | `4` | `cUSDT`, `cWAUSDT`, `cWUSDC`, `cWUSDT` | +| `43114` | `5` | `cUSDT`, `cWAUSDT`, `cWUSDC`, `cWUSDT`, `cWUSDW` | +| `651940` | `1` | `cUSDT` | + +Recommended closure: + +1. Run or refresh live pair discovery for each affected chain. +2. Add discovered pool bindings to the GRU v2 deployment pool config. +3. For chains without deployable pool evidence, create the minimum canonical pool before marking the asset reportable to trackers. + +### 3. Deterministic Placeholders Are Not Tracker Assets + +The `32` deterministic placeholder entries remain intentionally visible for roadmap and catalog traceability. They should not be submitted to CoinGecko, CMC, Etherscan, or exchange listing workflows as deployed ERC-20 assets. + +Required closure: + +- deploy real ERC-20 contracts for those symbols, or +- replace the placeholder bindings with already deployed canonical token addresses, then regenerate the supply proof catalog. + +### 4. Engine X Public Proof Boundary + +Engine X internal accounting proofs are separate from public DEX peg evidence. + +Current repo evidence supports: + +- internal Engine X accounting proof records, +- recipient proof hashes, +- ISO-style evidence envelopes, +- token-aggregation supply, market-cap, and caveat reporting. + +It does not, by itself, prove: + +- public `1 cWUSDC : 1 USDC` depth across large sizes, +- regulatory approval, +- external audit opinion, +- AML/KYC clearance, +- exchange acceptance, +- public DEX volume from internal accounting loops. + +Required closure: + +1. Use real, indexable `cWUSDC/USDC` pools for public peg proofs. +2. Use actual official USDC in the swap path. +3. Keep internal Engine X proofs and public DEX proofs as separate evidence classes. +4. Avoid claiming market-price or regulatory conclusions from virtual accounting activity. + +### 5. HYBX / Settlement Ownership Decisions + +The HYBX sidecar boundary still needs explicit owner decisions before it can be treated as fully production-owned: + +1. Canonical settlement orchestration owner. +2. Final posting responsibility versus suggested-entry generation. +3. Canonical event consumed by FireFly and on-chain settlement. +4. System-of-record versus adapter versus evidence-generator classification. + +These are policy and architecture decisions, not code-only fixes. + +## Next Best Execution Order + +1. Keep the current report API deployment live; do not roll back the supply-proof and adoption-readiness split. +2. Work the `22` zero-TVL configured/indexed pools first because their missing component is narrower: funding/indexing/status. +3. Work the `30` no-binding rows second by pair discovery, pool creation, or scope removal. +4. Replace deterministic placeholders only when real ERC-20 deployments or canonical bindings are available. +5. For Engine X cWUSDC public proof, route only through actual indexable `cWUSDC/USDC` pools with official USDC and protected execution where available. +6. Treat regulatory, exchange, and audit claims as external approvals until signed third-party evidence exists. + +## Verification Commands + +```bash +cd smom-dbis-138/services/token-aggregation +npm run build +npm test -- --runInBand --testPathPattern=report +npm audit --omit=dev +``` + +Live checks: + +```bash +curl -fsS "https://explorer.d-bis.org/api/v1/report/adoption-readiness" | jq . +curl -fsS "https://explorer.d-bis.org/api/v1/report/all?chainId=1" | jq . +``` + +## Execution Pass - Live UniV2 Indexing And Funding Preflight + +Completed after the first open-components inventory: + +- Refreshed live Uniswap V2 pair discovery and recorded `23` configured UniV2 pool bindings in `cross-chain-pmm-lps/config/deployment-status.json`. +- Generated `smom-dbis-138/services/token-aggregation/config/live-uniswap-v2-pool-catalog.json` from the live pair-discovery artifact. +- Wired the live UniV2 catalog into token-aggregation report responses as `source = live-uniswap-v2-pair-discovery`. +- Redeployed VMID `5000` and restarted `token-aggregation`. +- Generated read-only deployer funding preflight: + - `reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json` + - `reports/status/token-aggregation-liquidity-gap-funding-plan-latest.md` + +Live readiness after deployment: + +| Metric | Before | After | +|---|---:|---:| +| Pool-indexed reportable assets | `34` | `50` | +| Positive-liquidity reportable assets | `12` | `35` | +| Reportable assets missing positive liquidity | `52` | `29` | +| Missing liquidity with configured/indexed zero-TVL pools | `22` | `15` | +| Missing liquidity with no visible pool binding | `30` | `14` | +| Crypto-listing score | `62 / 100` | `80 / 100` | + +Live UniV2 catalog: + +| Metric | Count | +|---|---:| +| Live UniV2 pools with positive reserves | `19` | +| Healthy by existing depth/parity rule | `10` | +| Live but marked repair-needed | `9` | + +Funding preflight from the deployer wallet `0x4A666F96fC8764181194447A7dFdb7d471b301C8`: + +| Status | Count | +|---|---:| +| `fundable_token_balance_present` | `9` | +| `pool_binding_gated` | `7` | +| `token_balance_gated` | `6` | +| `pool_binding_and_token_balance_gated` | `7` | + +Non-EVM funding requirements were added to the same funding scope: + +| Network | Native gas | Current amount | Required amount | Status | +|---|---|---|---|---| +| Solana | `SOL` | not checked by EVM planner | `TBD` | canonical wallet, SPL mint inventory, rent/gas targets required | +| Tron | `TRX` | not checked by EVM planner | `TBD` | native Tron wallet, energy/bandwidth, TRC-20 inventory requirements needed | +| XRPL | `XRP` | not checked by EVM planner | `TBD` | XRPL account reserve, trustline/issuer, wXRP bridge inventory requirements needed | +| Other non-EVM majors | varies | not supported by current planner | `TBD` | per-network adapter, wallet, asset ID, and venue requirements needed | + +No value-moving transaction was broadcast in this pass. The remaining rows require one of: + +- enough token inventory on the target chain, +- pool creation/binding first, +- or a policy decision to remove that asset from reportable listing scope until liquidity exists. diff --git a/scripts/archive/consolidated/fix/fix-blockscout-verification.sh b/scripts/archive/consolidated/fix/fix-blockscout-verification.sh index 2ac288d1..0cc47880 100755 --- a/scripts/archive/consolidated/fix/fix-blockscout-verification.sh +++ b/scripts/archive/consolidated/fix/fix-blockscout-verification.sh @@ -82,7 +82,7 @@ if [ "$WETH9_VERIFIED" != "verified" ]; then log_success "✓ CCIPWETH9Bridge verification submitted!" else log_warn "⚠️ Automated verification failed - manual verification required" - log_info "Manual verification URL: https://explorer.d-bis.org/address/$WETH9_BRIDGE_138#verify" + log_info "Manual verification URL: https://explorer.d-bis.org/addresses/$WETH9_BRIDGE_138#verify" log_info "See docs/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md for instructions" fi fi @@ -109,7 +109,7 @@ if [ "$WETH10_VERIFIED" != "verified" ]; then log_success "✓ CCIPWETH10Bridge verification submitted!" else log_warn "⚠️ Automated verification failed - manual verification required" - log_info "Manual verification URL: https://explorer.d-bis.org/address/$WETH10_BRIDGE_138#verify" + log_info "Manual verification URL: https://explorer.d-bis.org/addresses/$WETH10_BRIDGE_138#verify" log_info "See docs/BLOCKSCOUT_BRIDGE_ADDRESSES_UPDATE.md for instructions" fi fi @@ -120,7 +120,7 @@ log_success "Verification Attempt Complete" log_success "=========================================" log_info "" log_info "Blockscout Links:" -log_info " CCIPWETH9Bridge: https://explorer.d-bis.org/address/$WETH9_BRIDGE_138" -log_info " CCIPWETH10Bridge: https://explorer.d-bis.org/address/$WETH10_BRIDGE_138" +log_info " CCIPWETH9Bridge: https://explorer.d-bis.org/addresses/$WETH9_BRIDGE_138" +log_info " CCIPWETH10Bridge: https://explorer.d-bis.org/addresses/$WETH10_BRIDGE_138" log_info "" diff --git a/scripts/archive/consolidated/fix/fix-blockscout-web-interface-complete.sh b/scripts/archive/consolidated/fix/fix-blockscout-web-interface-complete.sh index 15a7c330..72a7f46f 100755 --- a/scripts/archive/consolidated/fix/fix-blockscout-web-interface-complete.sh +++ b/scripts/archive/consolidated/fix/fix-blockscout-web-interface-complete.sh @@ -147,7 +147,7 @@ echo "" echo "✅ If you have transaction hashes or addresses:" echo " https://explorer.d-bis.org/tx/" -echo " https://explorer.d-bis.org/address/
      " +echo " https://explorer.d-bis.org/addresses/
      " echo "" log_info "Note: Some Blockscout versions serve the web interface" diff --git a/scripts/archive/consolidated/fix/fix-blockscout-web-interface.sh b/scripts/archive/consolidated/fix/fix-blockscout-web-interface.sh index 6ce76170..d7c4954d 100755 --- a/scripts/archive/consolidated/fix/fix-blockscout-web-interface.sh +++ b/scripts/archive/consolidated/fix/fix-blockscout-web-interface.sh @@ -150,7 +150,7 @@ echo "⚠️ WEB INTERFACE ROUTES (May return 404 until more data):" echo " - https://explorer.d-bis.org/ (root)" echo " - https://explorer.d-bis.org/blocks" echo " - https://explorer.d-bis.org/transactions" -echo " - https://explorer.d-bis.org/address/
      " +echo " - https://explorer.d-bis.org/addresses/
      " echo "" log_info "The web interface may need more indexed data or time to fully initialize" echo "" diff --git a/scripts/archive/consolidated/verify/verify-all-contracts.sh b/scripts/archive/consolidated/verify/verify-all-contracts.sh index 141f1d65..a32a7610 100755 --- a/scripts/archive/consolidated/verify/verify-all-contracts.sh +++ b/scripts/archive/consolidated/verify/verify-all-contracts.sh @@ -213,6 +213,6 @@ done echo "" log_info "View contracts on Blockscout:" -log_info " https://explorer.d-bis.org/address/" +log_info " https://explorer.d-bis.org/addresses/" echo "" diff --git a/scripts/archive/consolidated/verify/verify-chain138-bridges-blockscout.sh b/scripts/archive/consolidated/verify/verify-chain138-bridges-blockscout.sh index 8937e4b9..bd498676 100755 --- a/scripts/archive/consolidated/verify/verify-chain138-bridges-blockscout.sh +++ b/scripts/archive/consolidated/verify/verify-chain138-bridges-blockscout.sh @@ -65,7 +65,7 @@ if forge verify-contract \ --via-ir \ 2>&1 | tee /tmp/weth9-bridge-138-verify.log; then log_success "✓ CCIPWETH9Bridge verification submitted!" - log_info "View on Blockscout: https://explorer.d-bis.org/address/$WETH9_BRIDGE_138" + log_info "View on Blockscout: https://explorer.d-bis.org/addresses/$WETH9_BRIDGE_138" else log_warn "⚠️ CCIPWETH9Bridge verification failed or already verified" log_info "Check /tmp/weth9-bridge-138-verify.log for details" @@ -90,7 +90,7 @@ if forge verify-contract \ --via-ir \ 2>&1 | tee /tmp/weth10-bridge-138-verify.log; then log_success "✓ CCIPWETH10Bridge verification submitted!" - log_info "View on Blockscout: https://explorer.d-bis.org/address/$WETH10_BRIDGE_138" + log_info "View on Blockscout: https://explorer.d-bis.org/addresses/$WETH10_BRIDGE_138" else log_warn "⚠️ CCIPWETH10Bridge verification failed or already verified" log_info "Check /tmp/weth10-bridge-138-verify.log for details" @@ -102,7 +102,7 @@ log_success "Verification Complete!" log_success "=========================================" log_info "" log_info "Blockscout Links:" -log_info " CCIPWETH9Bridge: https://explorer.d-bis.org/address/$WETH9_BRIDGE_138" -log_info " CCIPWETH10Bridge: https://explorer.d-bis.org/address/$WETH10_BRIDGE_138" +log_info " CCIPWETH9Bridge: https://explorer.d-bis.org/addresses/$WETH9_BRIDGE_138" +log_info " CCIPWETH10Bridge: https://explorer.d-bis.org/addresses/$WETH10_BRIDGE_138" log_info "" diff --git a/scripts/deployment/continue-cwusdc-ei-matrix-wallets.sh b/scripts/deployment/continue-cwusdc-ei-matrix-wallets.sh new file mode 100755 index 00000000..4a607d6e --- /dev/null +++ b/scripts/deployment/continue-cwusdc-ei-matrix-wallets.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Resume mainnet cWUSDC EI matrix transfers from ei-matrix-cwusdc-send-last-idx.txt + 1. +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +exec "$SCRIPT_DIR/send-cwusdc-ei-matrix-wallets.sh" --resume-next "$@" diff --git a/scripts/deployment/continue-mint-cwusdc-ei-matrix-wallets.sh b/scripts/deployment/continue-mint-cwusdc-ei-matrix-wallets.sh old mode 100644 new mode 100755 diff --git a/scripts/deployment/deploy-configure-cw-multitoken-l2-receivers.sh b/scripts/deployment/deploy-configure-cw-multitoken-l2-receivers.sh new file mode 100755 index 00000000..4b125402 --- /dev/null +++ b/scripts/deployment/deploy-configure-cw-multitoken-l2-receivers.sh @@ -0,0 +1,391 @@ +#!/usr/bin/env bash +# Deploy/configure CWMultiTokenBridgeL2 receivers for active public cW chains. +# Defaults to dry-run. Use --apply to broadcast. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +SMOM_ROOT="$PROJECT_ROOT/smom-dbis-138" +ENV_FILE="$SMOM_ROOT/.env" +REPORT_DIR="$PROJECT_ROOT/reports/status" +APPLY=false +FULL_FAMILY=false +CHAIN_FILTER="" +TS="$(date -u +%Y%m%dT%H%M%SZ)" +MANIFEST="$REPORT_DIR/cw-multitoken-l2-remediation-${TS}.jsonl" + +usage() { + cat <] + +Without --apply this prints actions only. With --apply it broadcasts deployments +and configuration transactions, then updates smom-dbis-138/.env CW_BRIDGE_*. +USAGE +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --apply) APPLY=true ;; + --full-family) FULL_FAMILY=true ;; + --chain) CHAIN_FILTER="${2:-}"; shift ;; + --chain=*) CHAIN_FILTER="${1#*=}" ;; + -h|--help) usage; exit 0 ;; + *) echo "Unknown arg: $1" >&2; usage >&2; exit 1 ;; + esac + shift +done + +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" >/dev/null 2>&1 || true + +[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY is required" >&2; exit 1; } +command -v cast >/dev/null 2>&1 || { echo "cast is required" >&2; exit 1; } +command -v forge >/dev/null 2>&1 || { echo "forge is required" >&2; exit 1; } +command -v jq >/dev/null 2>&1 || { echo "jq is required" >&2; exit 1; } + +mkdir -p "$REPORT_DIR" +: > "$MANIFEST" + +DEPLOYER="${DEPLOYER_ADDRESS:-$(cast wallet address "$PRIVATE_KEY")}" +L1_BRIDGE="${CW_L1_BRIDGE_CHAIN138:-}" +RPC_138="${RPC_URL_138:-${CHAIN138_RPC:-${CHAIN138_RPC_URL:-}}}" +[[ -n "$L1_BRIDGE" && "$L1_BRIDGE" != "0x0000000000000000000000000000000000000000" ]] || { echo "CW_L1_BRIDGE_CHAIN138 is required" >&2; exit 1; } +[[ -n "$RPC_138" ]] || { echo "RPC_URL_138/CHAIN138_RPC is required" >&2; exit 1; } + +MINTER_ROLE="$(cast keccak "MINTER_ROLE")" +BURNER_ROLE="$(cast keccak "BURNER_ROLE")" + +declare -A CHAIN_NAME=( + [10]="Optimism" + [25]="Cronos" + [56]="BSC" + [100]="Gnosis" + [137]="Polygon" + [8453]="Base" + [42161]="Arbitrum" + [42220]="Celo" +) +declare -A CHAIN_SUFFIX=( + [10]="OPTIMISM" + [25]="CRONOS" + [56]="BSC" + [100]="GNOSIS" + [137]="POLYGON" + [8453]="BASE" + [42161]="ARBITRUM" + [42220]="CELO" +) +declare -A CHAIN_SELECTOR=( + [10]="3734403246176062136" + [25]="1456215246176062136" + [56]="11344663589394136015" + [100]="465200170687744372" + [137]="4051577828743386545" + [8453]="15971525489660198786" + [42161]="4949039107694359620" + [42220]="1346049177634351622" +) + +set_env_value() { + local file="$1" key="$2" value="$3" + if grep -qE "^${key}=" "$file"; then + sed -i "s|^${key}=.*|${key}=${value}|" "$file" + else + printf '\n%s=%s\n' "$key" "$value" >> "$file" + fi +} + +var_value() { + local key="$1" + printf '%s' "${!key:-}" +} + +first_env() { + local key value + for key in "$@"; do + value="$(var_value "$key")" + if [[ -n "$value" ]]; then + printf '%s\n' "$value" + return 0 + fi + done + return 1 +} + +rpc_for_chain() { + local suffix="$1" + case "$suffix" in + OPTIMISM) first_env OPTIMISM_RPC_URL OPTIMISM_MAINNET_RPC ;; + CRONOS) first_env CRONOS_RPC_URL CRONOS_RPC CRONOS_MAINNET_RPC ;; + BSC) first_env BSC_RPC_URL BSC_MAINNET_RPC ;; + GNOSIS) first_env GNOSIS_RPC_URL GNOSIS_MAINNET_RPC GNOSIS_RPC ;; + POLYGON) first_env POLYGON_RPC_URL POLYGON_MAINNET_RPC ;; + BASE) first_env BASE_RPC_URL BASE_MAINNET_RPC ;; + ARBITRUM) first_env ARBITRUM_RPC_URL ARBITRUM_MAINNET_RPC ;; + CELO) first_env CELO_RPC_URL CELO_MAINNET_RPC CELO_RPC ;; + esac +} + +old_bridge_for_suffix() { + local suffix="$1" key="CW_BRIDGE_${suffix}" + var_value "$key" +} + +old_bridge_call() { + local bridge="$1" rpc="$2" sig="$3" + [[ -n "$bridge" && -n "$rpc" ]] || return 1 + cast call "$bridge" "$sig" --rpc-url "$rpc" 2>/dev/null | awk 'NF{print $1; exit}' +} + +send_router_for_chain() { + local suffix="$1" old_bridge="$2" rpc="$3" value + value="$(first_env "CCIP_${suffix}_ROUTER" "CCIP_ROUTER_${suffix}" 2>/dev/null || true)" + if [[ -n "$value" ]]; then printf '%s\n' "$value"; return; fi + old_bridge_call "$old_bridge" "$rpc" "ccipRouter()(address)" +} + +receive_router_for_chain() { + local suffix="$1" send_router="$2" value + value="$(first_env "CCIP_RELAY_ROUTER_${suffix}_CW" "CCIP_RELAY_ROUTER_${suffix}" 2>/dev/null || true)" + if [[ -n "$value" ]]; then printf '%s\n' "$value"; return; fi + printf '%s\n' "$send_router" +} + +fee_token_for_chain() { + local suffix="$1" old_bridge="$2" rpc="$3" value + value="$(first_env "CCIP_${suffix}_LINK_TOKEN" "LINK_TOKEN_${suffix}" "LINK_${suffix}" 2>/dev/null || true)" + if [[ -n "$value" ]]; then printf '%s\n' "$value"; return; fi + old_bridge_call "$old_bridge" "$rpc" "feeToken()(address)" || printf '0x0000000000000000000000000000000000000000\n' +} + +json_log() { + python3 - "$MANIFEST" "$@" <<'PY' +import json, sys +path = sys.argv[1] +items = dict(arg.split("=", 1) for arg in sys.argv[2:]) +with open(path, "a", encoding="utf-8") as fh: + fh.write(json.dumps(items, sort_keys=True) + "\n") +PY +} + +token_rows_for_chain() { + local chain_id="$1" + jq -r --argjson cid "$chain_id" --argjson full "$($FULL_FAMILY && echo true || echo false)" ' + .pairs[] + | select(.fromChainId == 138 and .toChainId == $cid) + | .tokens[] + | select((.key == "Compliant_USDT_cW") or (.key == "Compliant_USDC_cW") or ($full and (.key | endswith("_cW")))) + | select(.addressFrom and .addressTo and .addressTo != "0x0000000000000000000000000000000000000000") + | [.key, .addressFrom, .addressTo] | @tsv + ' "$PROJECT_ROOT/config/token-mapping-multichain.json" +} + +send_tx() { + local rpc="$1"; shift + local base_cmd=(cast send --rpc-url "$rpc" --private-key "$PRIVATE_KEY" --gas-limit 500000 "$@") + if ! $APPLY; then + printf '[dry-run] ' + printf '%q ' "${base_cmd[@]/$PRIVATE_KEY/\$PRIVATE_KEY}" + printf '\n' + return 0 + fi + local attempt mode out rc + for mode in legacy eip1559; do + local cmd=("${base_cmd[@]}") + if [[ "$mode" == "legacy" ]]; then + cmd=(cast send --rpc-url "$rpc" --private-key "$PRIVATE_KEY" --legacy --gas-limit 500000 "$@") + fi + for attempt in 1 2 3; do + set +e + out="$("${cmd[@]}" 2>&1)" + rc=$? + set -e + printf '%s\n' "$out" + if [[ "$rc" -eq 0 ]]; then + sleep 3 + return 0 + fi + if [[ "$mode" == "legacy" && ( "$out" == *"Invalid params"* || "$out" == *"legacy"* || "$out" == *"transaction type"* ) ]]; then + echo " legacy tx rejected; retrying with EIP-1559 tx params" + break + fi + if [[ "$out" == *"max fee per gas less than block base fee"* ]]; then + local gas_price + gas_price="$(cast gas-price --rpc-url "$rpc" 2>/dev/null || echo 25000000)" + gas_price="$((gas_price * 2))" + echo " gas price below base fee; retrying with --gas-price $gas_price" + cmd=(cast send --rpc-url "$rpc" --private-key "$PRIVATE_KEY" --gas-limit 500000 --gas-price "$gas_price" "$@") + sleep $((attempt * 3)) + continue + fi + if [[ "$out" == *"replacement transaction underpriced"* || "$out" == *"nonce too low"* || "$out" == *"invalid nonce"* || "$out" == *"invalid sequence"* || "$out" == *"already known"* ]]; then + echo " retryable tx error (attempt $attempt); waiting before retry" + sleep $((attempt * 10)) + continue + fi + return "$rc" + done + done + return "$rc" +} + +forge_create_l2() { + local rpc="$1" chain_id="$2" send_router="$3" receive_router="$4" fee_token="$5" + local mode out rc + for mode in legacy eip1559; do + set +e + if [[ "$mode" == "legacy" ]]; then + out="$( + cd "$SMOM_ROOT" && + forge create contracts/bridge/CWMultiTokenBridgeL2.sol:CWMultiTokenBridgeL2 \ + --rpc-url "$rpc" --chain-id "$chain_id" --broadcast --private-key "$PRIVATE_KEY" --legacy \ + --constructor-args "$send_router" "$receive_router" "$fee_token" 2>&1 + )" + else + out="$( + cd "$SMOM_ROOT" && + forge create contracts/bridge/CWMultiTokenBridgeL2.sol:CWMultiTokenBridgeL2 \ + --rpc-url "$rpc" --chain-id "$chain_id" --broadcast --private-key "$PRIVATE_KEY" \ + --constructor-args "$send_router" "$receive_router" "$fee_token" 2>&1 + )" + fi + rc=$? + set -e + printf '%s\n' "$out" + if [[ "$rc" -eq 0 ]]; then + return 0 + fi + if [[ "$mode" == "legacy" && ( "$out" == *"Invalid params"* || "$out" == *"legacy"* || "$out" == *"transaction type"* ) ]]; then + echo " legacy deploy rejected; retrying with EIP-1559 tx params" + continue + fi + return "$rc" + done + return "$rc" +} + +ensure_token_pair() { + local rpc="$1" bridge="$2" key="$3" canonical="$4" mirrored="$5" + local current + current="$(cast call "$bridge" "canonicalToMirrored(address)(address)" "$canonical" --rpc-url "$rpc" 2>/dev/null || true)" + if [[ "${current,,}" == "${mirrored,,}" ]]; then + echo " pair ok $key" + return + fi + echo " configure pair $key" + send_tx "$rpc" "$bridge" "configureTokenPair(address,address)" "$canonical" "$mirrored" +} + +ensure_l2_destination() { + local rpc="$1" bridge="$2" + local current + current="$(cast call "$bridge" "destinations(uint64)((address,bool))" 138 --rpc-url "$rpc" 2>/dev/null || true)" + if [[ "${current,,}" == *"${L1_BRIDGE,,}"* && "${current,,}" == *"true"* ]]; then + echo " L2 destination 138 ok" + return + fi + echo " configure L2 destination 138" + send_tx "$rpc" "$bridge" "configureDestination(uint64,address,bool)" 138 "$L1_BRIDGE" true +} + +ensure_l1_destination() { + local selector="$1" key="$2" canonical="$3" bridge="$4" + local current + current="$(cast call "$L1_BRIDGE" "destinations(address,uint64)((address,bool))" "$canonical" "$selector" --rpc-url "$RPC_138" 2>/dev/null || true)" + if [[ "${current,,}" == *"${bridge,,}"* && "${current,,}" == *"true"* ]]; then + echo " L1 destination ok $key" + return + fi + echo " configure L1 destination $key selector=$selector" + send_tx "$RPC_138" "$L1_BRIDGE" "configureDestination(address,uint64,address,bool)" "$canonical" "$selector" "$bridge" true +} + +ensure_role() { + local rpc="$1" token="$2" role_name="$3" role="$4" holder="$5" + local current + current="$(cast call "$token" "hasRole(bytes32,address)(bool)" "$role" "$holder" --rpc-url "$rpc" 2>/dev/null || echo false)" + if [[ "$current" == "true" ]]; then + echo " role ok $role_name $token" + return + fi + echo " grant $role_name on $token" + send_tx "$rpc" "$token" "grantRole(bytes32,address)" "$role" "$holder" +} + +deploy_l2() { + local chain_id="$1" suffix="$2" rpc="$3" send_router="$4" receive_router="$5" fee_token="$6" + echo " deploying CWMultiTokenBridgeL2 send=$send_router receive=$receive_router fee=$fee_token" + if ! $APPLY; then + echo " [dry-run] forge script DeployCWMultiTokenBridgeL2" + printf '0x000000000000000000000000000000000000%04x\n' "$chain_id" + return + fi + local out addr + out="$(forge_create_l2 "$rpc" "$chain_id" "$send_router" "$receive_router" "$fee_token")" + printf '%s\n' "$out" + addr="$(printf '%s\n' "$out" | sed -nE 's/.*Deployed to:[[:space:]]*(0x[a-fA-F0-9]{40}).*/\1/p; s/.*CWMultiTokenBridgeL2:[[:space:]]*(0x[a-fA-F0-9]{40}).*/\1/p' | tail -1)" + [[ -n "$addr" ]] || { echo "Could not parse deployed bridge address for $suffix" >&2; return 1; } + printf '%s\n' "$addr" +} + +is_cw_multitoken_l2() { + local rpc="$1" bridge="$2" + [[ -n "$bridge" ]] || return 1 + cast call "$bridge" "sendRouter()(address)" --rpc-url "$rpc" >/dev/null 2>&1 && + cast call "$bridge" "receiveRouter()(address)" --rpc-url "$rpc" >/dev/null 2>&1 && + cast call "$bridge" "canonicalToMirrored(address)(address)" "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22" --rpc-url "$rpc" >/dev/null 2>&1 +} + +echo "CWMultiToken L2 remediation" +echo "Apply: $APPLY" +echo "Full family: $FULL_FAMILY" +echo "Deployer: $DEPLOYER" +echo "Manifest: $MANIFEST" +echo + +for chain_id in 10 25 56 100 137 8453 42161 42220; do + [[ -n "$CHAIN_FILTER" && "$CHAIN_FILTER" != "$chain_id" ]] && continue + suffix="${CHAIN_SUFFIX[$chain_id]}" + rpc="$(rpc_for_chain "$suffix" || true)" + old_bridge="$(old_bridge_for_suffix "$suffix")" + selector="${CHAIN_SELECTOR[$chain_id]}" + echo "=== $chain_id ${CHAIN_NAME[$chain_id]} ($suffix) ===" + if [[ -z "$rpc" ]]; then + echo " skip: missing RPC" + json_log chainId="$chain_id" suffix="$suffix" status="skipped" reason="missing_rpc" + continue + fi + send_router="$(send_router_for_chain "$suffix" "$old_bridge" "$rpc" || true)" + receive_router="$(receive_router_for_chain "$suffix" "$send_router")" + fee_token="$(fee_token_for_chain "$suffix" "$old_bridge" "$rpc")" + if [[ -z "$send_router" || -z "$receive_router" || -z "$fee_token" ]]; then + echo " skip: missing router or fee token" + json_log chainId="$chain_id" suffix="$suffix" status="skipped" reason="missing_router_or_fee" + continue + fi + + current_bridge="$(old_bridge_for_suffix "$suffix")" + if is_cw_multitoken_l2 "$rpc" "$current_bridge"; then + bridge="$current_bridge" + echo " using existing CWMultiTokenBridgeL2: $bridge" + else + bridge="$(deploy_l2 "$chain_id" "$suffix" "$rpc" "$send_router" "$receive_router" "$fee_token" | tail -1)" + echo " new bridge: $bridge" + fi + if $APPLY; then + set_env_value "$ENV_FILE" "CW_BRIDGE_${suffix}" "$bridge" + fi + + ensure_l2_destination "$rpc" "$bridge" + while IFS=$'\t' read -r key canonical mirrored; do + ensure_token_pair "$rpc" "$bridge" "$key" "$canonical" "$mirrored" + ensure_l1_destination "$selector" "$key" "$canonical" "$bridge" + ensure_role "$rpc" "$mirrored" "MINTER_ROLE" "$MINTER_ROLE" "$bridge" + ensure_role "$rpc" "$mirrored" "BURNER_ROLE" "$BURNER_ROLE" "$bridge" + done < <(token_rows_for_chain "$chain_id") + json_log chainId="$chain_id" suffix="$suffix" status="configured" bridge="$bridge" sendRouter="$send_router" receiveRouter="$receive_router" feeToken="$fee_token" +done + +echo +echo "Done. Manifest: $MANIFEST" +echo "Next: pnpm cw:bridge-e2e-readiness && pnpm cw:full-readiness" diff --git a/scripts/deployment/deploy-engine-x-single-sided-dodo-cwusdc-vault-mainnet.sh b/scripts/deployment/deploy-engine-x-single-sided-dodo-cwusdc-vault-mainnet.sh new file mode 100755 index 00000000..495a1630 --- /dev/null +++ b/scripts/deployment/deploy-engine-x-single-sided-dodo-cwusdc-vault-mainnet.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" + +: "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}" + +CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}" +QUOTE_TOKEN="${ENGINE_X_SINGLE_SIDED_DODO_QUOTE_TOKEN:-${WETH9_MAINNET:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}}" +DODO_INTEGRATION="${ENGINE_X_SINGLE_SIDED_DODO_INTEGRATION:-${DODO_PMM_INTEGRATION_MAINNET:-${CHAIN_1_DODO_PMM_INTEGRATION:-}}}" +VERIFY="${VERIFY:-1}" +EXECUTE="${EXECUTE:-0}" + +OWNER="${ENGINE_X_SINGLE_SIDED_DODO_OWNER:-${DEPLOYER_ADDRESS:-}}" +if [[ -n "${PRIVATE_KEY:-}" ]]; then + OWNER="$(cast wallet address --private-key "${PRIVATE_KEY}")" +fi + +if [[ -z "${OWNER}" ]]; then + echo "Set PRIVATE_KEY, DEPLOYER_ADDRESS, or ENGINE_X_SINGLE_SIDED_DODO_OWNER" >&2 + exit 1 +fi +if [[ -z "${DODO_INTEGRATION}" ]]; then + echo "Set DODO_PMM_INTEGRATION_MAINNET or ENGINE_X_SINGLE_SIDED_DODO_INTEGRATION" >&2 + exit 1 +fi +if [[ "${EXECUTE}" == "1" && -z "${PRIVATE_KEY:-}" ]]; then + echo "PRIVATE_KEY is required when EXECUTE=1" >&2 + exit 1 +fi + +VERIFY_ARGS=() +if [[ "${VERIFY}" == "1" ]]; then + VERIFY_ARGS+=(--verify) +fi + +CREATE_CMD_EXEC=( + forge create + --broadcast + --rpc-url "${ETHEREUM_MAINNET_RPC}" + --private-key "${PRIVATE_KEY:-}" + "${VERIFY_ARGS[@]}" + contracts/flash/DBISEngineXSingleSidedDodoCwusdcVault.sol:DBISEngineXSingleSidedDodoCwusdcVault + --constructor-args + "${CWUSDC}" "${QUOTE_TOKEN}" "${DODO_INTEGRATION}" "${OWNER}" +) + +cat </dev/null +DEPLOY_OUT="$("${CREATE_CMD_EXEC[@]}")" +popd >/dev/null +printf '%s\n' "${DEPLOY_OUT}" + +VAULT="$(printf '%s\n' "${DEPLOY_OUT}" | grep -oE 'Deployed to: 0x[a-fA-F0-9]{40}' | awk '{print $3}' | tail -1)" +if [[ -z "${VAULT}" ]]; then + echo "Could not parse deployed single-sided DODO cWUSDC wrapper address" >&2 + exit 1 +fi + +echo "DBIS_ENGINE_X_SINGLE_SIDED_DODO_CWUSDC_VAULT=${VAULT}" diff --git a/scripts/deployment/deploy-sankofa-studio-lxc.sh b/scripts/deployment/deploy-sankofa-studio-lxc.sh index fb96e73d..6aa0194d 100755 --- a/scripts/deployment/deploy-sankofa-studio-lxc.sh +++ b/scripts/deployment/deploy-sankofa-studio-lxc.sh @@ -3,7 +3,8 @@ # Usage: ./scripts/deployment/deploy-sankofa-studio-lxc.sh [--dry-run] [--skip-create] # --dry-run Print commands only. # --skip-create Use existing container 7805 (only install Docker / compose / deploy app). -# Env: PROXMOX_HOST, NODE, VMID, HOSTNAME, IP_SANKOFA_STUDIO, REPO_URL or REPO_PATH, ENV_FILE. +# Env: PROXMOX_HOST (defaults from VMID), NODE, VMID, HOSTNAME, IP_SANKOFA_STUDIO, REPO_URL or REPO_PATH, ENV_FILE. +# DEPLOY_PCT_ON_LOCAL_PVE=1 — only on a Proxmox node: run pct locally (no SSH). # See: docs/03-deployment/SANKOFA_STUDIO_DEPLOYMENT.md set -euo pipefail @@ -45,6 +46,11 @@ for a in "$@"; do [[ "$a" == "--skip-create" ]] && SKIP_CREATE=true done +PROXMOX_MONOREPO_ROOT="$PROXMOX_ROOT" +# shellcheck disable=SC1091 +source "$PROXMOX_ROOT/scripts/lib/require-proxmox-ssh-for-pct.sh" +require_proxmox_ssh_for_pct || exit 1 + run_cmd() { if [[ -n "$PROXMOX_HOST" ]]; then ssh $SSH_OPTS root@"$PROXMOX_HOST" "$@" @@ -72,17 +78,6 @@ echo "URL: https://studio.sankofa.nexus → http://${IP}:8000" echo "IP: $IP | Memory: ${MEMORY_MB}MB | Cores: $CORES | Disk: ${DISK_GB}G" echo "" -# pct runs only on Proxmox hosts; from another machine set PROXMOX_HOST to SSH there -if ! $DRY_RUN && [[ -z "${PROXMOX_HOST:-}" ]] && ! command -v pct &>/dev/null; then - echo "ERROR: 'pct' not found. This script must run on a Proxmox host or with PROXMOX_HOST set." - echo "" - echo "From your current machine, run:" - echo " PROXMOX_HOST=192.168.11.11 REPO_URL='https://gitea.d-bis.org/d-bis/FusionAI-Creator.git' $0" - echo "" - echo "Or SSH to the Proxmox host and run the script there (with REPO_URL set)." - exit 1 -fi - if ! $SKIP_CREATE; then if $DRY_RUN; then echo "[DRY-RUN] Would create LXC $VMID with hostname=$HOSTNAME, ip=$IP/24 (Docker + FusionAI Creator)" diff --git a/scripts/deployment/execute-coffee-money-gas-topups.mjs b/scripts/deployment/execute-coffee-money-gas-topups.mjs new file mode 100644 index 00000000..998feea2 --- /dev/null +++ b/scripts/deployment/execute-coffee-money-gas-topups.mjs @@ -0,0 +1,172 @@ +#!/usr/bin/env node +/** + * Execute the coffee-money gas top-up packet generated by + * scripts/deployment/plan-coffee-money-gas-topups.mjs. + * + * Default mode is dry-run. Pass --execute to approve exact source-token allowance + * and submit the bounded LiFi bridge transactions. + */ + +import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { Contract, JsonRpcProvider, Wallet } from "ethers"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const planPath = resolve(repoRoot, "reports/status/coffee-money-gas-topup-plan-latest.json"); +const outJson = resolve(repoRoot, "reports/status/coffee-money-gas-topup-execution-latest.json"); +const outMd = resolve(repoRoot, "reports/status/coffee-money-gas-topup-execution-latest.md"); +const execute = process.argv.includes("--execute"); +const confirmations = Number(process.env.COFFEE_MONEY_CONFIRMATIONS || "1"); +const rpcUrl = process.env.ETHEREUM_MAINNET_RPC || process.env.RPC_URL_1 || process.env.RPC_URL_MAINNET || "https://ethereum.publicnode.com"; +const privateKey = process.env.PRIVATE_KEY; +const erc20Abi = [ + "function allowance(address owner,address spender) view returns (uint256)", + "function approve(address spender,uint256 amount) returns (bool)", + "function balanceOf(address owner) view returns (uint256)", +]; + +const plan = JSON.parse(readFileSync(planPath, "utf8")); + +if (execute && !privateKey) { + console.error("PRIVATE_KEY is required for --execute"); + process.exit(1); +} + +if (!plan.readiness?.sourceTokenSufficient && !plan.readiness?.sourceUsdcSufficient) { + console.error("Plan source token balance is not sufficient. Re-run the planner and inspect readiness."); + process.exit(1); +} + +if (!plan.readiness?.mainnetEthGasSufficientForQuotedBridgeTxs || !plan.readiness?.allQuotesOk) { + console.error("Plan is not ready for execution. Re-run the planner and inspect readiness."); + process.exit(1); +} + +const provider = new JsonRpcProvider(rpcUrl, 1); +const wallet = execute ? new Wallet(privateKey, provider) : null; +const operator = execute ? await wallet.getAddress() : plan.deployer; + +if (operator.toLowerCase() !== String(plan.deployer).toLowerCase()) { + console.error(`PRIVATE_KEY resolves to ${operator}, expected ${plan.deployer}`); + process.exit(1); +} + +const sourceTokenAddress = plan.source?.tokenAddress; +const sourceTokenSymbol = plan.source?.token || "source token"; +if (!sourceTokenAddress) { + console.error("Plan is missing source.tokenAddress. Re-run the planner with the updated planner script."); + process.exit(1); +} + +const token = new Contract(sourceTokenAddress, erc20Abi, execute ? wallet : provider); +const execution = { + generatedAt: new Date().toISOString(), + mode: execute ? "execute_broadcast" : "dry_run_no_broadcast", + deployer: plan.deployer, + plan: "reports/status/coffee-money-gas-topup-plan-latest.json", + approvals: [], + transactions: [], + totals: plan.totals, +}; + +for (const allowancePlan of plan.allowances ?? []) { + const spender = allowancePlan.spender; + const required = BigInt(allowancePlan.requiredRaw); + const current = await token.allowance(plan.deployer, spender); + const approvalRecord = { + spender, + requiredRaw: required.toString(), + currentRaw: current.toString(), + action: current >= required ? "skip_allowance_sufficient" : "approve_exact_required", + txHash: null, + status: "pending", + }; + if (execute && current < required) { + const tx = await token.approve(spender, required, { gasLimit: 100_000n }); + approvalRecord.txHash = tx.hash; + const receipt = await tx.wait(confirmations); + approvalRecord.status = receipt?.status === 1 ? "confirmed" : "failed"; + approvalRecord.blockNumber = receipt?.blockNumber ?? null; + if (receipt?.status !== 1) { + execution.approvals.push(approvalRecord); + throw new Error(`Approval failed: ${tx.hash}`); + } + } else { + approvalRecord.status = execute ? "confirmed" : "dry_run"; + } + execution.approvals.push(approvalRecord); +} + +for (const row of plan.rows) { + const request = row.transactionRequest; + const record = { + chainId: row.chainId, + nativeSymbol: row.nativeSymbol, + spend: row.spend, + spendUSDC: row.spendUSDC, + expectedOutNative: row.toAmountNative, + tool: row.tool, + to: request?.to ?? null, + value: request?.value ?? null, + gasLimit: request?.gasLimit ?? null, + gasPrice: request?.gasPrice ?? null, + txHash: null, + status: execute ? "pending" : "dry_run", + }; + if (execute) { + const tx = await wallet.sendTransaction({ + to: request.to, + data: request.data, + value: BigInt(request.value || "0"), + gasLimit: BigInt(request.gasLimit), + gasPrice: BigInt(request.gasPrice), + chainId: 1, + }); + record.txHash = tx.hash; + const receipt = await tx.wait(confirmations); + record.status = receipt?.status === 1 ? "confirmed" : "failed"; + record.blockNumber = receipt?.blockNumber ?? null; + if (receipt?.status !== 1) { + execution.transactions.push(record); + throw new Error(`Bridge tx failed: ${tx.hash}`); + } + } + execution.transactions.push(record); +} + +function table(headers, rows) { + return [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...rows.map((row) => `| ${row.map((cell) => String(cell ?? "").replace(/\|/g, "\\|")).join(" | ")} |`), + ].join("\n"); +} + +const md = [ + "# Coffee-Money Gas Top-Up Execution", + "", + `- Generated: \`${execution.generatedAt}\``, + `- Mode: \`${execution.mode}\``, + `- Deployer: \`${execution.deployer}\``, + `- Planned spend: \`${execution.totals.spend || execution.totals.spendUSDC} ${sourceTokenSymbol}\``, + `- Mainnet gas estimate from plan: \`${execution.totals.mainnetGasCostETH} ETH\``, + "", + "## Approvals", + "", + table( + ["Spender", "Required raw", "Action", "Status", "Tx"], + execution.approvals.map((row) => [row.spender, row.requiredRaw, row.action, row.status, row.txHash]), + ), + "", + "## Bridge Transactions", + "", + table( + ["Destination", "Spend", "Expected out", "Tool", "Status", "Tx"], + execution.transactions.map((row) => [row.chainId, `${row.spend || row.spendUSDC} ${sourceTokenSymbol}`, `${row.expectedOutNative} ${row.nativeSymbol}`, row.tool, row.status, row.txHash]), + ), +].join("\n"); + +mkdirSync(resolve(repoRoot, "reports/status"), { recursive: true }); +writeFileSync(outJson, `${JSON.stringify(execution, null, 2)}\n`); +writeFileSync(outMd, `${md}\n`); +console.log(outJson); diff --git a/scripts/deployment/fix-dev-vm-srv-projects-ownership.sh b/scripts/deployment/fix-dev-vm-srv-projects-ownership.sh new file mode 100755 index 00000000..ba1be481 --- /dev/null +++ b/scripts/deployment/fix-dev-vm-srv-projects-ownership.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Recursively chown /srv/projects inside Dev CT 5700 to the primary dev user. +# Use when rsync --delete-remote fails with Permission denied (root-owned files on VM). +# +# Requires: SSH as root to the Proxmox node that hosts VMID 5700 (default r630-04). +# +# Usage: +# ./scripts/deployment/fix-dev-vm-srv-projects-ownership.sh --dry-run +# ./scripts/deployment/fix-dev-vm-srv-projects-ownership.sh +# +# Env: +# DEV_VM_CTID — LXC ID (default 5700) +# DEV_VM_USER — owning user inside CT (default dev1) +# DEV_VM_PVE_HOST — override Proxmox node IP/hostname (default: get_host_for_vmid + R630_04 fallback) +# Do not use generic PROXMOX_HOST here; it may point at the wrong node. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +export PROJECT_ROOT +# shellcheck source=/dev/null +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" 2>/dev/null || true + +DRY_RUN=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=1; shift ;; + --help|-h) + sed -n '1,22p' "$0" | tail -n +2 + exit 0 + ;; + *) + echo "ERROR: unknown argument: $1 (try --help)" >&2 + exit 1 + ;; + esac +done + +CTID="${DEV_VM_CTID:-5700}" +OWNER="${DEV_VM_USER:-dev1}" +if [[ -n "${DEV_VM_PVE_HOST:-}" ]]; then + NODE="$DEV_VM_PVE_HOST" +else + NODE="$(get_host_for_vmid "$CTID" 2>/dev/null || true)" +fi +NODE="${NODE:-${PROXMOX_HOST_R630_04:-192.168.11.14}}" + +REMOTE_CMD="pct exec $CTID -- chown -R ${OWNER}:${OWNER} /srv/projects" + +echo "=== Fix Dev VM /srv/projects ownership ===" +echo "Node: root@${NODE}" +echo "CT: $CTID" +echo "Owner: $OWNER" +echo "" + +if [[ "$DRY_RUN" == "1" ]]; then + echo "DRY-RUN: ssh root@${NODE} \"$REMOTE_CMD\"" + exit 0 +fi + +ssh -o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=accept-new "root@${NODE}" "$REMOTE_CMD" +echo "Done." diff --git a/scripts/deployment/migrate-engine-x-vault-to-mainnet-cwusdc-usdc-univ3.sh b/scripts/deployment/migrate-engine-x-vault-to-mainnet-cwusdc-usdc-univ3.sh index b08a8c0c..abb0fe01 100755 --- a/scripts/deployment/migrate-engine-x-vault-to-mainnet-cwusdc-usdc-univ3.sh +++ b/scripts/deployment/migrate-engine-x-vault-to-mainnet-cwusdc-usdc-univ3.sh @@ -6,6 +6,8 @@ PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" # shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/mev-protection.sh +source "${PROJECT_ROOT}/scripts/lib/mev-protection.sh" : "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}" @@ -103,8 +105,24 @@ available_usdc = vault_usdc if include_lender == "1" else max(vault_usdc - lende amount = min(pool_cw, pool_usdc, vault_cw, available_usdc) if override_amount: amount = int(override_amount) + +def units(raw: int) -> str: + return f"{Decimal(raw) / Decimal(10**6):f}" + +def emit(name, value): + print(f"{name}='{value}'") + +emit("POOL_CWUSDC_UNITS", units(pool_cw)) +emit("POOL_USDC_UNITS", units(pool_usdc)) +emit("LENDER_USDC_UNITS", units(lender_usdc)) +emit("VAULT_CWUSDC_UNITS", units(vault_cw)) +emit("VAULT_USDC_UNITS", units(vault_usdc)) +emit("POOL_USDC_AVAILABLE_FOR_MIGRATION_RAW", available_usdc) +emit("POOL_USDC_AVAILABLE_FOR_MIGRATION_UNITS", units(available_usdc)) if amount <= 0: - raise SystemExit("no balanced vault liquidity is available to migrate") + emit("NO_MIGRATION", "1") + emit("NO_MIGRATION_REASON", "no balanced vault liquidity is available to migrate") + raise SystemExit(0) if amount > vault_cw: raise SystemExit("migration amount exceeds vault cWUSDC balance") if amount > vault_usdc: @@ -117,28 +135,40 @@ token0, token1 = addrs amount0 = amount if token0 == cwusdc.lower() else amount amount1 = amount if token1 == usdc.lower() else amount -def units(raw: int) -> str: - return f"{Decimal(raw) / Decimal(10**6):f}" - -def emit(name, value): - print(f"{name}='{value}'") - +emit("NO_MIGRATION", "0") emit("TOKEN0", token0) emit("TOKEN1", token1) emit("AMOUNT0_RAW", amount0) emit("AMOUNT1_RAW", amount1) emit("MIGRATE_RAW", amount) emit("MIGRATE_UNITS", units(amount)) -emit("POOL_CWUSDC_UNITS", units(pool_cw)) -emit("POOL_USDC_UNITS", units(pool_usdc)) -emit("LENDER_USDC_UNITS", units(lender_usdc)) -emit("VAULT_CWUSDC_UNITS", units(vault_cw)) -emit("VAULT_USDC_UNITS", units(vault_usdc)) -emit("POOL_USDC_AVAILABLE_FOR_MIGRATION_RAW", available_usdc) -emit("POOL_USDC_AVAILABLE_FOR_MIGRATION_UNITS", units(available_usdc)) PY )" +if [[ "${NO_MIGRATION}" == "1" ]]; then + cat </dev/null || echo "$s_raw") - echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" - _s_idx=$((_s_idx + 1)) -done < <(head -3 "$ADDR_TMP") 3< <(head -3 "$AMOUNTS_TMP") -_s_idx=$((OFFSET + WALLET_COUNT - 3)) -while IFS= read -r s_addr && IFS= read -r s_raw <&3; do - h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") - echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" - _s_idx=$((_s_idx + 1)) -done < <(tail -3 "$ADDR_TMP") 3< <(tail -3 "$AMOUNTS_TMP") +echo "Sample mints:" +if [[ "$WALLET_COUNT" -le 6 ]]; then + _s_idx=$OFFSET + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP") +else + _s_idx=$OFFSET + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP" | head -3) + _s_idx=$((OFFSET + WALLET_COUNT - 3)) + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP" | tail -3) +fi echo "" sent=0 diff --git a/scripts/deployment/mirror-github-fork-to-gitea.sh b/scripts/deployment/mirror-github-fork-to-gitea.sh new file mode 100755 index 00000000..65d79d0a --- /dev/null +++ b/scripts/deployment/mirror-github-fork-to-gitea.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# Mirror a GitHub fork to Gitea (push --mirror). Run from operator LAN when Gitea is reachable. +# +# Required: +# GITEA_REMOTE — e.g. https://gitea.d-bis.org/ORG/DefiLlama-Adapters.git +# Optional: +# GITHUB_FORK — default https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters.git +# +# Usage: +# export GITEA_REMOTE='https://USER:TOKEN@gitea.d-bis.org/d-bis/DefiLlama-Adapters.git' +# ./scripts/deployment/mirror-github-fork-to-gitea.sh +# +# Or dry-run (fetch only): +# DRY_RUN=1 ./scripts/deployment/mirror-github-fork-to-gitea.sh +set -euo pipefail +GITHUB_FORK="${GITHUB_FORK:-https://github.com/Defi-Oracle-Meta-Blockchain/DefiLlama-Adapters.git}" +if [[ -z "${GITEA_REMOTE:-}" ]]; then + echo "Set GITEA_REMOTE to your Gitea repo URL (with credentials if needed)." >&2 + exit 1 +fi +TMP="${TMPDIR:-/tmp}/mirror-defillama-$$" +cleanup() { rm -rf "$TMP"; } +trap cleanup EXIT +git clone --mirror "$GITHUB_FORK" "$TMP" +if [[ "${DRY_RUN:-}" == "1" ]]; then + echo "DRY_RUN=1: mirror clone OK; skip push to GITEA_REMOTE" + exit 0 +fi +git -C "$TMP" push --mirror "$GITEA_REMOTE" +echo "Mirror push completed." diff --git a/scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh b/scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh old mode 100644 new mode 100755 index 91544794..3eb0a757 --- a/scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh +++ b/scripts/deployment/pipeline-ei-matrix-mint-cwusdc.sh @@ -49,17 +49,18 @@ if [[ "$CID" != "1" ]]; then exit 1 fi -ROLE=$(cast keccak "MINTER_ROLE()") -# AccessControl MINTER_ROLE is keccak256 of the string "MINTER_ROLE" for OZ — use cast keccak ROLE=$(cast keccak "MINTER_ROLE") -if HR=$(cast call "$CWUSDC" "hasRole(bytes32,address)(bool)" "$ROLE" "$FROM" --rpc-url "$RPC" 2>/dev/null); then - if [[ "${HR,,}" != *true* ]]; then - echo "[WARN] hasRole(MINTER_ROLE) returned false for signer — mints will likely revert." >&2 - else +if [[ "${SKIP_EI_MATRIX_MINT_PREFLIGHT:-}" == "1" ]]; then + echo "Preflight: skipped (SKIP_EI_MATRIX_MINT_PREFLIGHT=1)" +elif HR=$(cast call "$CWUSDC" "hasRole(bytes32,address)(bool)" "$ROLE" "$FROM" --rpc-url "$RPC" 2>/dev/null); then + HR_TR=$(echo "$HR" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]') + if [[ "$HR_TR" == *true* || "$HR_TR" == *0x0000000000000000000000000000000000000000000000000000000000000001* ]]; then echo "Preflight: MINTER_ROLE on cWUSDC for signer — OK" + else + echo "[WARN] hasRole(MINTER_ROLE) not true for signer (got: $HR) — mints may revert if minter is elsewhere." >&2 fi else - echo "[WARN] Could not call hasRole (ABI may differ) — continuing." >&2 + echo "[WARN] Could not call hasRole — continuing (token ABI may differ)." >&2 fi echo "" diff --git a/scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh b/scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh new file mode 100755 index 00000000..5bce6984 --- /dev/null +++ b/scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# Run full-grid readiness audit (optional), then remediate mainnet cWUSDC gaps. +# +# Modes: +# Default: fixed --send-raw to each gap index (send-cwusdc-ei-matrix-targeted.sh). +# --multicall: per-wallet deficit TSV + Multicall3 batches (cheapest; see send-cwusdc-ei-matrix-multicall-batches.sh). +# +# Usage: +# ./scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh --dry-run --send-raw 5000000 +# ./scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh --dry-run --multicall +# ./scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh --execute --multicall +# SKIP_EI_MATRIX_REMEDIATE_AUDIT=1 ./scripts/deployment/pipeline-ei-matrix-remediate-cwusdc-from-audit.sh --multicall --execute +# +# Env: +# SKIP_EI_MATRIX_REMEDIATE_AUDIT=1 +# EI_MATRIX_REMEDIATE_MULTICALL=1 Same as --multicall +# EI_MATRIX_REMEDIATE_TOPUP_TSV=path Default: reports/status/ei-matrix-cwusdc-topup-amounts.tsv +# Rebuild TSV after audit: scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh +# +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +DRY=(false) +SEND_RAW="" +INDICES_OVERRIDE="" +USE_MULTICALL=false +PASS=() +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY=(true); PASS+=(--dry-run); shift ;; + --send-raw) SEND_RAW="${2:?}"; shift 2 ;; + --indices-file) INDICES_OVERRIDE="${2:?}"; shift 2 ;; + --multicall) USE_MULTICALL=true; shift ;; + --) shift; PASS+=("$@"); break ;; + *) PASS+=("$1"); shift ;; + esac +done + +if [[ "${EI_MATRIX_REMEDIATE_MULTICALL:-}" == "1" ]]; then + USE_MULTICALL=true +fi + +AUDIT_SH="$PROJECT_ROOT/scripts/verify/run-ei-matrix-full-readiness-audit.sh" +TARGET_SH="$PROJECT_ROOT/scripts/deployment/send-cwusdc-ei-matrix-targeted.sh" +MULTICALL_SH="$PROJECT_ROOT/scripts/deployment/send-cwusdc-ei-matrix-multicall-batches.sh" +BUILD_TSV_SH="$PROJECT_ROOT/scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh" + +if [[ "$USE_MULTICALL" == true ]]; then + if [[ -n "$SEND_RAW" ]]; then + echo "Do not combine --multicall with --send-raw (multicall uses per-row TSV amounts)." >&2 + exit 1 + fi +else + if [[ -z "$SEND_RAW" ]]; then + echo "Required: --send-raw R, or use --multicall with a top-up TSV." >&2 + exit 1 + fi +fi + +if [[ "${SKIP_EI_MATRIX_REMEDIATE_AUDIT:-}" != "1" ]]; then + echo "→ Step 1: full readiness audit (refreshes gap files; exit 1 means gaps below policy — OK)" + _audit_rc=0 + "$AUDIT_SH" || _audit_rc=$? + if [[ "$_audit_rc" -gt 1 ]]; then + echo "Audit failed with exit $_audit_rc (RPC/config?)." >&2 + exit "$_audit_rc" + fi + if [[ "$USE_MULTICALL" == true ]]; then + echo "→ Step 1b: rebuild top-up TSV from ei-matrix-readiness-audit-latest.json" + "$BUILD_TSV_SH" + fi +else + echo "→ Step 1: skipped (SKIP_EI_MATRIX_REMEDIATE_AUDIT=1)" +fi + +if [[ "$USE_MULTICALL" == true ]]; then + TSV="${EI_MATRIX_REMEDIATE_TOPUP_TSV:-$PROJECT_ROOT/reports/status/ei-matrix-cwusdc-topup-amounts.tsv}" + if [[ ! -f "$TSV" ]]; then + echo "Missing top-up TSV: $TSV — run $BUILD_TSV_SH or audit without SKIP." >&2 + exit 1 + fi + N=$(wc -l <"$TSV" | tr -d ' ') + echo "→ Step 2: Multicall3 batches ($N rows) $TSV" + if $DRY; then + exec "$MULTICALL_SH" --dry-run --tsv "$TSV" + else + exec "$MULTICALL_SH" --execute --tsv "$TSV" + fi +fi + +GAPS="${INDICES_OVERRIDE:-${EI_MATRIX_AUDIT_GAPS_MAINNET:-${PROJECT_ROOT}/reports/status/ei-matrix-readiness-gaps-mainnet-indices.txt}}" +if [[ ! -f "$GAPS" ]]; then + echo "Missing gap file: $GAPS" >&2 + exit 1 +fi +N=$(grep -cE '^[0-9]+$' "$GAPS" 2>/dev/null || echo 0) +if [[ "$N" -eq 0 ]]; then + echo "No mainnet gap indices in $GAPS — nothing to remediate." + exit 0 +fi +echo "→ Step 2: targeted send to $N indices ($GAPS) --send-raw $SEND_RAW" +exec "$TARGET_SH" "${PASS[@]}" --send-raw "$SEND_RAW" --indices-file "$GAPS" diff --git a/scripts/deployment/plan-coffee-money-gas-topups.mjs b/scripts/deployment/plan-coffee-money-gas-topups.mjs new file mode 100644 index 00000000..f1898dd9 --- /dev/null +++ b/scripts/deployment/plan-coffee-money-gas-topups.mjs @@ -0,0 +1,325 @@ +#!/usr/bin/env node +/** + * Read-only coffee-money gas top-up planner. + * + * Quotes a Mainnet source token -> destination native gas via LiFi for the chains that + * currently block token-aggregation stability work. It does not approve, + * bridge, sign, or broadcast transactions. + */ + +import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const fundingPlanPath = resolve(repoRoot, "reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json"); +const jsonOut = resolve(repoRoot, "reports/status/coffee-money-gas-topup-plan-latest.json"); +const mdOut = resolve(repoRoot, "reports/status/coffee-money-gas-topup-plan-latest.md"); +const deployer = process.env.DEPLOYER_ADDRESS || "0x4A666F96fC8764181194447A7dFdb7d471b301C8"; +const sourceChain = 1; +const sourceToken = process.env.COFFEE_MONEY_SOURCE_SYMBOL || "USDC"; +const sourceTokenAddress = process.env.COFFEE_MONEY_SOURCE_TOKEN_ADDRESS || "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const sourceDecimals = Number(process.env.COFFEE_MONEY_SOURCE_DECIMALS || "6"); +const safetyMultiplierBps = BigInt(process.env.COFFEE_MONEY_TOPUP_SAFETY_BPS || "15000"); +const minSpendRaw = BigInt(process.env.COFFEE_MONEY_MIN_SPEND_USDC_RAW || "1000000"); +const maxSpendRaw = BigInt(process.env.COFFEE_MONEY_MAX_SPEND_USDC_RAW || "4000000"); +const targetChains = new Set( + (process.env.COFFEE_MONEY_TARGET_CHAINS || "10,56,137,42161") + .split(",") + .map((value) => Number(value.trim())) + .filter(Boolean), +); +const nativeTokenAddress = "0x0000000000000000000000000000000000000000"; +const nativeTokenOverrides = { + // LiFi models CELO as the canonical CELO token on Celo, not the zero address. + 42220: "0x471EcE3750Da237f93B8E339c536989b8978a438", +}; +const ethereumRpc = process.env.ETHEREUM_MAINNET_RPC || process.env.RPC_URL_1 || "https://ethereum.publicnode.com"; + +const fundingPlan = JSON.parse(readFileSync(fundingPlanPath, "utf8")); + +function parseUnitsDecimal(value, decimals = 18) { + const [whole, frac = ""] = String(value).split("."); + const padded = `${frac}${"0".repeat(decimals)}`.slice(0, decimals); + return BigInt(whole || "0") * 10n ** BigInt(decimals) + BigInt(padded || "0"); +} + +function decimalUnits(raw, decimals) { + const scale = 10n ** BigInt(decimals); + const whole = raw / scale; + const frac = raw % scale; + const fracText = frac.toString().padStart(decimals, "0").replace(/0+$/, ""); + return fracText ? `${whole}.${fracText}` : whole.toString(); +} + +function padAddress(address) { + return String(address).replace(/^0x/i, "").padStart(64, "0"); +} + +async function rpcCall(rpcUrl, method, params) { + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 12_000); + try { + const response = await fetch(rpcUrl, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ jsonrpc: "2.0", method, params, id: 1 }), + signal: controller.signal, + }); + const json = await response.json(); + if (json.error) return { ok: false, error: json.error.message || JSON.stringify(json.error) }; + return { ok: true, result: json.result }; + } catch (error) { + return { ok: false, error: error.message }; + } finally { + clearTimeout(timeout); + } +} + +function bigintFromHex(hex) { + if (!hex || hex === "0x") return 0n; + return BigInt(hex); +} + +async function erc20Allowance(token, owner, spender) { + if (!spender) return { ok: false, raw: "0", units: "0", error: "missing_spender" }; + const selector = "0xdd62ed3e"; + const data = `${selector}${padAddress(owner)}${padAddress(spender)}`; + const result = await rpcCall(ethereumRpc, "eth_call", [{ to: token, data }, "latest"]); + const raw = result.ok ? bigintFromHex(result.result) : 0n; + return { + ok: result.ok, + raw: raw.toString(), + units: decimalUnits(raw, sourceDecimals), + error: result.ok ? null : result.error, + }; +} + +function spendForShortfall(shortfallNative, quote) { + const shortfallRaw = parseUnitsDecimal(shortfallNative, 18); + const toAmountRaw = BigInt(quote.estimate?.toAmount || "0"); + const fromAmountRaw = BigInt(quote.estimate?.fromAmount || "0"); + if (toAmountRaw === 0n || fromAmountRaw === 0n) return maxSpendRaw; + const desiredOutRaw = (shortfallRaw * safetyMultiplierBps + 9_999n) / 10_000n; + const spend = (desiredOutRaw * fromAmountRaw + toAmountRaw - 1n) / toAmountRaw; + if (spend < minSpendRaw) return minSpendRaw; + if (spend > maxSpendRaw) return maxSpendRaw; + return spend; +} + +async function lifiQuote(toChain, fromAmountRaw) { + const url = new URL("https://li.quest/v1/quote"); + url.searchParams.set("fromChain", String(sourceChain)); + url.searchParams.set("toChain", String(toChain)); + url.searchParams.set("fromToken", sourceTokenAddress); + url.searchParams.set("toToken", nativeTokenOverrides[toChain] || nativeTokenAddress); + url.searchParams.set("fromAmount", String(fromAmountRaw)); + url.searchParams.set("fromAddress", deployer); + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 20_000); + try { + const response = await fetch(url, { signal: controller.signal }); + const text = await response.text(); + let data = null; + try { + data = JSON.parse(text); + } catch { + data = { raw: text }; + } + return { + ok: response.ok, + statusCode: response.status, + url: url.toString(), + data, + error: response.ok ? null : text.slice(0, 500), + }; + } catch (error) { + return { ok: false, statusCode: 0, url: url.toString(), data: null, error: error.message }; + } finally { + clearTimeout(timeout); + } +} + +const shortfalls = fundingPlan.chainGasBudgetRows.filter((row) => ( + targetChains.has(Number(row.chainId)) && row.status === "chain_gas_budget_shortfall" +)); + +const sourceInventory = fundingPlan.ethereumSourceInventory?.tokens?.find((token) => ( + token.symbol === sourceToken || String(token.address).toLowerCase() === String(sourceTokenAddress).toLowerCase() +)); +const sourceBalanceRaw = BigInt(sourceInventory?.balanceRaw || "0"); +const rows = []; + +for (const shortfall of shortfalls) { + const oneDollarQuote = await lifiQuote(shortfall.chainId, minSpendRaw); + let spendRaw = minSpendRaw; + let finalQuote = oneDollarQuote; + if (oneDollarQuote.ok) { + spendRaw = spendForShortfall(shortfall.shortfallNative, oneDollarQuote.data); + if (spendRaw !== minSpendRaw) finalQuote = await lifiQuote(shortfall.chainId, spendRaw); + } + const estimate = finalQuote.data?.estimate ?? {}; + const tx = finalQuote.data?.transactionRequest ?? null; + rows.push({ + chainId: shortfall.chainId, + symbols: shortfall.symbols, + nativeSymbol: shortfall.nativeSymbol, + shortfallNative: shortfall.shortfallNative, + spendRaw: spendRaw.toString(), + spend: decimalUnits(spendRaw, sourceDecimals), + spendUSDC: sourceToken === "USDC" ? decimalUnits(spendRaw, sourceDecimals) : null, + quoteOk: finalQuote.ok, + quoteStatusCode: finalQuote.statusCode, + tool: finalQuote.data?.tool ?? estimate.tool ?? null, + toAmountRaw: estimate.toAmount ?? null, + toAmountMinRaw: estimate.toAmountMin ?? null, + toAmountNative: estimate.toAmount ? decimalUnits(BigInt(estimate.toAmount), 18) : null, + fromAmountUSD: estimate.fromAmountUSD ?? null, + toAmountUSD: estimate.toAmountUSD ?? null, + mainnetGasCostRaw: estimate.gasCosts?.[0]?.amount ?? null, + mainnetGasCostETH: estimate.gasCosts?.[0]?.amount ? decimalUnits(BigInt(estimate.gasCosts[0].amount), 18) : null, + approvalAddress: estimate.approvalAddress ?? null, + transactionTo: tx?.to ?? null, + transactionValue: tx?.value ?? null, + transactionGasLimit: tx?.gasLimit ?? null, + transactionDataPresent: Boolean(tx?.data), + transactionRequest: tx ? { + chainId: tx.chainId, + to: tx.to, + value: tx.value, + gasLimit: tx.gasLimit, + gasPrice: tx.gasPrice, + data: tx.data, + } : null, + quoteUrl: finalQuote.url, + blocker: finalQuote.ok ? null : finalQuote.error, + }); +} + +const allowanceBySpender = {}; +for (const spender of [...new Set(rows.map((row) => row.approvalAddress).filter(Boolean))]) { + const allowance = await erc20Allowance(sourceTokenAddress, deployer, spender); + const requiredRaw = rows + .filter((row) => row.approvalAddress === spender) + .reduce((sum, row) => sum + BigInt(row.spendRaw || "0"), 0n); + allowanceBySpender[spender] = { + spender, + requiredRaw: requiredRaw.toString(), + required: decimalUnits(requiredRaw, sourceDecimals), + requiredUSDC: sourceToken === "USDC" ? decimalUnits(requiredRaw, sourceDecimals) : null, + allowanceRaw: allowance.raw, + allowance: allowance.units, + allowanceUSDC: sourceToken === "USDC" ? allowance.units : null, + sufficient: BigInt(allowance.raw || "0") >= requiredRaw, + error: allowance.error, + }; +} + +const totalSpendRaw = rows.reduce((sum, row) => sum + BigInt(row.spendRaw || "0"), 0n); +const totalMainnetGasRaw = rows.reduce((sum, row) => sum + BigInt(row.mainnetGasCostRaw || "0"), 0n); +const mainnetEth = fundingPlan.ethereumSourceInventory?.native?.balanceRaw ? BigInt(fundingPlan.ethereumSourceInventory.native.balanceRaw) : 0n; + +const payload = { + generatedAt: new Date().toISOString(), + mode: "read_only_no_broadcast", + deployer, + source: { + chainId: sourceChain, + token: sourceToken, + tokenAddress: sourceTokenAddress, + decimals: sourceDecimals, + balanceRaw: sourceBalanceRaw.toString(), + balance: decimalUnits(sourceBalanceRaw, sourceDecimals), + balanceUSDC: sourceToken === "USDC" ? decimalUnits(sourceBalanceRaw, sourceDecimals) : null, + }, + policy: { + safetyMultiplierBps: Number(safetyMultiplierBps), + minSpend: decimalUnits(minSpendRaw, sourceDecimals), + maxSpend: decimalUnits(maxSpendRaw, sourceDecimals), + unit: sourceToken, + minSpendUSDC: sourceToken === "USDC" ? decimalUnits(minSpendRaw, sourceDecimals) : null, + maxSpendUSDC: sourceToken === "USDC" ? decimalUnits(maxSpendRaw, sourceDecimals) : null, + }, + totals: { + spendRaw: totalSpendRaw.toString(), + spend: decimalUnits(totalSpendRaw, sourceDecimals), + spendUSDC: sourceToken === "USDC" ? decimalUnits(totalSpendRaw, sourceDecimals) : null, + sourceBalanceAfterRaw: sourceBalanceRaw > totalSpendRaw ? (sourceBalanceRaw - totalSpendRaw).toString() : "0", + sourceBalanceAfter: decimalUnits(sourceBalanceRaw > totalSpendRaw ? sourceBalanceRaw - totalSpendRaw : 0n, sourceDecimals), + sourceBalanceAfterUSDC: sourceToken === "USDC" ? decimalUnits(sourceBalanceRaw > totalSpendRaw ? sourceBalanceRaw - totalSpendRaw : 0n, sourceDecimals) : null, + mainnetGasCostRaw: totalMainnetGasRaw.toString(), + mainnetGasCostETH: decimalUnits(totalMainnetGasRaw, 18), + mainnetEthBalanceRaw: mainnetEth.toString(), + mainnetEthBalance: decimalUnits(mainnetEth, 18), + mainnetEthAfterBridgeGasRaw: mainnetEth > totalMainnetGasRaw ? (mainnetEth - totalMainnetGasRaw).toString() : "0", + mainnetEthAfterBridgeGas: decimalUnits(mainnetEth > totalMainnetGasRaw ? mainnetEth - totalMainnetGasRaw : 0n, 18), + }, + readiness: { + sourceTokenSufficient: sourceBalanceRaw >= totalSpendRaw, + sourceUsdcSufficient: sourceToken === "USDC" ? sourceBalanceRaw >= totalSpendRaw : null, + mainnetEthGasSufficientForQuotedBridgeTxs: mainnetEth >= totalMainnetGasRaw, + allQuotesOk: rows.every((row) => row.quoteOk), + sourceAllowancesSufficient: Object.values(allowanceBySpender).every((row) => row.sufficient), + usdcAllowancesSufficient: sourceToken === "USDC" ? Object.values(allowanceBySpender).every((row) => row.sufficient) : null, + broadcastReady: false, + broadcastBoundary: "Quotes include transaction data, but this planner intentionally does not sign, approve, or broadcast.", + }, + allowances: Object.values(allowanceBySpender), + rows, +}; + +function table(headers, tableRows) { + return [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...tableRows.map((row) => `| ${row.map((cell) => String(cell ?? "").replace(/\|/g, "\\|")).join(" | ")} |`), + ].join("\n"); +} + +const md = [ + "# Coffee-Money Gas Top-Up Plan", + "", + `- Generated: \`${payload.generatedAt}\``, + `- Mode: \`${payload.mode}\``, + `- Deployer: \`${deployer}\``, + `- Source: \`${payload.source.balance} ${sourceToken}\` on Ethereum Mainnet`, + `- Planned spend: \`${payload.totals.spend} ${sourceToken}\``, + `- Mainnet bridge gas estimate: \`${payload.totals.mainnetGasCostETH} ETH\``, + `- Mainnet ETH after quoted bridge gas: \`${payload.totals.mainnetEthAfterBridgeGas} ETH\``, + "", + table( + ["Check", "Value"], + Object.entries(payload.readiness).map(([key, value]) => [key, value]), + ), + "", + `## ${sourceToken} Allowances`, + "", + table( + ["Spender", "Required", "Allowance", "Sufficient"], + payload.allowances.map((row) => [row.spender, `${row.required} ${sourceToken}`, `${row.allowance} ${sourceToken}`, row.sufficient]), + ), + "", + "## Top-Up Quotes", + "", + table( + ["Chain", "Symbols", "Need", "Spend", "Tool", "Out", "Mainnet gas", "Tx data"], + rows.map((row) => [ + row.chainId, + row.symbols, + `${row.shortfallNative} ${row.nativeSymbol}`, + `${row.spend} ${sourceToken}`, + row.tool, + row.toAmountNative ? `${row.toAmountNative} ${row.nativeSymbol}` : "quote_failed", + row.mainnetGasCostETH ? `${row.mainnetGasCostETH} ETH` : "", + row.transactionDataPresent, + ]), + ), + "", + "## Execution Boundary", + "", + "This artifact proves route availability and bounded spend only. Before broadcast, each row still needs allowance/approval handling, final quote refresh, private-key signing, and tx submission.", +].join("\n"); + +mkdirSync(resolve(repoRoot, "reports/status"), { recursive: true }); +writeFileSync(jsonOut, `${JSON.stringify(payload, null, 2)}\n`); +writeFileSync(mdOut, `${md}\n`); +console.log(jsonOut); diff --git a/scripts/deployment/probe-dev-vm-ssh.sh b/scripts/deployment/probe-dev-vm-ssh.sh new file mode 100755 index 00000000..cd94b431 --- /dev/null +++ b/scripts/deployment/probe-dev-vm-ssh.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# Probe Dev VM SSH: LAN IP vs Cloudflare FQDN (tunnel + Access). +# See: docs/04-configuration/DEV_VM_SSH_REMOTE_ACCESS.md +# +# Usage: +# ./scripts/deployment/probe-dev-vm-ssh.sh +# DEV_VM_USER=dev1 DEV_VM_FQDN=ssh.dev.d-bis.org ./scripts/deployment/probe-dev-vm-ssh.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +# shellcheck source=/dev/null +source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true + +USER_NAME="${DEV_VM_USER:-dev1}" +IP="${IP_DEV_VM:-192.168.11.59}" +FQDN="${DEV_VM_FQDN:-ssh.dev.d-bis.org}" + +echo "=== Dev VM SSH probes (user=$USER_NAME) ===" +echo "" + +echo "1) LAN: BatchMode SSH to $IP" +if ssh -o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new "${USER_NAME}@${IP}" true 2>/dev/null; then + echo " OK ${USER_NAME}@${IP}" +else + echo " FAIL ${USER_NAME}@${IP} (no route, firewall, or key not accepted)" +fi +echo "" + +echo "2) DNS: $FQDN" +if command -v dig >/dev/null 2>&1; then + dig +short "$FQDN" A 2>/dev/null | head -3 | sed 's/^/ A: /' || true + dig +short "$FQDN" AAAA 2>/dev/null | head -2 | sed 's/^/ AAAA: /' || true +else + echo " (dig not installed; skip)" +fi +echo "" + +echo "3) Plain SSH to $FQDN:22 (usually FAILS behind Cloudflare — tunnel expects cloudflared client)" +set +e +out=$(ssh -4 -o BatchMode=yes -o ConnectTimeout=12 -o StrictHostKeyChecking=accept-new "${USER_NAME}@${FQDN}" true 2>&1) +code=$? +set -e +if [[ "$code" -eq 0 ]]; then + echo " OK (unexpected for CF tunnel host — you may be using port-forward / direct)" +else + echo " FAIL (expected for tunnel hostname): $out" +fi +echo "" + +echo "4) FQDN via cloudflared access ssh (needs cloudflared on PATH + Access policy / service token)" +PATH="$HOME/bin:$PATH" +if command -v cloudflared >/dev/null 2>&1; then + set +e + out=$(ssh -o BatchMode=yes -o ConnectTimeout=25 \ + -o ProxyCommand="cloudflared access ssh --hostname %h" \ + -o StrictHostKeyChecking=accept-new \ + "${USER_NAME}@${FQDN}" true 2>&1) + code=$? + set -e + if [[ "$code" -eq 0 ]]; then + echo " OK ProxyCommand → ${USER_NAME}@${FQDN}" + else + echo " FAIL: $out" + fi +else + echo " SKIP: cloudflared not in PATH" + echo " Install: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/" + echo " Then set CF_ACCESS_CLIENT_ID / CF_ACCESS_CLIENT_SECRET if using service tokens (see DEV_VM_SSH_REMOTE_ACCESS.md)." +fi +echo "" +echo "Done." diff --git a/scripts/deployment/repair-mainnet-cwusdc-usdc-univ2-canary.sh b/scripts/deployment/repair-mainnet-cwusdc-usdc-univ2-canary.sh index fb6ef617..b1b30214 100755 --- a/scripts/deployment/repair-mainnet-cwusdc-usdc-univ2-canary.sh +++ b/scripts/deployment/repair-mainnet-cwusdc-usdc-univ2-canary.sh @@ -6,6 +6,8 @@ PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" # shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/mev-protection.sh +source "${PROJECT_ROOT}/scripts/lib/mev-protection.sh" : "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}" : "${PRIVATE_KEY:?PRIVATE_KEY is required}" @@ -131,24 +133,21 @@ EOF exit 0 fi +mev_require_private_for_action "mainnet-cwusdc-usdc-univ2-canary-repair" + DEADLINE="$(( $(date +%s) + 1800 ))" -cast send "${USDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${QUOTE_IN_RAW}" \ - --private-key "${PRIVATE_KEY}" --rpc-url "${ETHEREUM_MAINNET_RPC}" +mev_cast_send "${USDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${QUOTE_IN_RAW}" -cast send "${ROUTER}" 'swapExactTokensForTokens(uint256,uint256,address[],address,uint256)' \ +mev_cast_send "${ROUTER}" 'swapExactTokensForTokens(uint256,uint256,address[],address,uint256)' \ "${QUOTE_IN_RAW}" "${MIN_BASE_OUT_RAW}" "[${USDC},${CWUSDC}]" "${SIGNER}" "${DEADLINE}" \ - --private-key "${PRIVATE_KEY}" --rpc-url "${ETHEREUM_MAINNET_RPC}" if [[ "${BALANCED_ADD_RAW}" != "0" ]]; then - cast send "${CWUSDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${BALANCED_ADD_RAW}" \ - --private-key "${PRIVATE_KEY}" --rpc-url "${ETHEREUM_MAINNET_RPC}" - cast send "${USDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${BALANCED_ADD_RAW}" \ - --private-key "${PRIVATE_KEY}" --rpc-url "${ETHEREUM_MAINNET_RPC}" - cast send "${ROUTER}" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \ + mev_cast_send "${CWUSDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${BALANCED_ADD_RAW}" + mev_cast_send "${USDC}" 'approve(address,uint256)(bool)' "${ROUTER}" "${BALANCED_ADD_RAW}" + mev_cast_send "${ROUTER}" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \ "${CWUSDC}" "${USDC}" "${BALANCED_ADD_RAW}" "${BALANCED_ADD_RAW}" \ "${MIN_BALANCED_ADD_RAW}" "${MIN_BALANCED_ADD_RAW}" "${SIGNER}" "${DEADLINE}" \ - --private-key "${PRIVATE_KEY}" --rpc-url "${ETHEREUM_MAINNET_RPC}" fi bash "${PROJECT_ROOT}/scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.sh" diff --git a/scripts/deployment/run-ei-matrix-cwusdc-targeted-chunked.sh b/scripts/deployment/run-ei-matrix-cwusdc-targeted-chunked.sh new file mode 100755 index 00000000..3cc90392 --- /dev/null +++ b/scripts/deployment/run-ei-matrix-cwusdc-targeted-chunked.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +# Chunked continuation of send-cwusdc-ei-matrix-targeted.sh using the full topup TSV. +# Uses ei-matrix-cwusdc-targeted-last-idx.txt: next index is last+1 (TSV line last+2). +# Chooses chunk size from current ETH and gas price (never exceeds --max-chunk). +# Stops when TSV exhausted, chunk size < 1, or the targeted script exits non-zero. +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +MAX_CHUNK="${EI_MATRIX_TARGETED_MAX_CHUNK:-500}" +TSV="${EI_MATRIX_TARGETED_TSV:-${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-topup-amounts.tsv}" +LAST_FILE="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-targeted-last-idx.txt" +LOG="${EI_MATRIX_TARGETED_CHUNK_LOG:-${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-targeted-chunked.log}" + +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" + +[[ -f "$TSV" ]] || { echo "Missing TSV: $TSV" >&2; exit 1; } +[[ -f "$LAST_FILE" ]] || { echo "Missing progress file: $LAST_FILE" >&2; exit 1; } + +command -v cast &>/dev/null || { echo "cast required" >&2; exit 1; } + +RPC="${ETHEREUM_MAINNET_RPC:-${RPC_URL_1:-}}" +[[ -n "$RPC" ]] || { echo "ETHEREUM_MAINNET_RPC or RPC_URL_1 required" >&2; exit 1; } +[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY required" >&2; exit 1; } + +D=$(cast wallet address --private-key "$PRIVATE_KEY") +TOTAL_LINES=$(wc -l <"$TSV" | tr -d ' ') + +exec >>"$LOG" 2>&1 +echo "======== $(date -Is) chunked targeted cWUSDC start signer=$D max_chunk=$MAX_CHUNK tsv=$TSV" + +while true; do + LAST=$(tr -d '[:space:]' <"$LAST_FILE" || echo "-1") + START=$((LAST + 2)) + REM=$((TOTAL_LINES - START + 1)) + if [[ "$REM" -le 0 ]]; then + echo "======== $(date -Is) COMPLETE: all indices done (last_idx=$LAST lines=$TOTAL_LINES)" + exit 0 + fi + + ETH_WEI=$(cast balance "$D" --rpc-url "$RPC" | awk '{print $1}') + GP=$(cast gas-price --rpc-url "$RPC" | awk '{print $1}' | head -1) + CHUNK=$(python3 -c " +eth = int('${ETH_WEI}') +gp = int('${GP}') +rem = int('${REM}') +mx = int('${MAX_CHUNK}') +# ~72k gas per ERC-20 transfer + 20% headroom on fee +cost = max(1, 72000 * gp * 12 // 10) +# spend at most 85% of ETH on this chunk +n = eth * 85 // 100 // cost +chunk = max(0, min(n, rem, mx)) +print(chunk) +") + + if [[ "$CHUNK" -lt 1 ]]; then + echo "======== $(date -Is) STOP: not enough ETH for one transfer (rem=$REM wei=$ETH_WEI gp=$GP). Top up and re-run." + exit 2 + fi + + echo "-------- $(date -Is) last=$LAST start_line=$START chunk=$CHUNK rem=$REM eth_wei=$ETH_WEI gp=$GP" + + # Avoid tail|head under pipefail (SIGPIPE → exit 141). + _end=$((START + CHUNK - 1)) + sed -n "${START},${_end}p" "$TSV" >"${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-chunk.tsv" + awk '{print $1}' "${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-chunk.tsv" >"${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-chunk.idx" + + EI_MATRIX_SKIP_GAS_CHECK=1 \ + "$SCRIPT_DIR/send-cwusdc-ei-matrix-targeted.sh" \ + --amounts-tsv "${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-chunk.tsv" \ + --indices-file "${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-chunk.idx" +done diff --git a/scripts/deployment/run-engine-x-univ2-public-indexed-loop.sh b/scripts/deployment/run-engine-x-univ2-public-indexed-loop.sh new file mode 100755 index 00000000..9e851bce --- /dev/null +++ b/scripts/deployment/run-engine-x-univ2-public-indexed-loop.sh @@ -0,0 +1,169 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/mev-protection.sh +source "${PROJECT_ROOT}/scripts/lib/mev-protection.sh" + +: "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}" + +CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}" +USDC="${USDC_MAINNET:-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48}" +PAIR="${MAINNET_CWUSDC_USDC_UNIV2_PAIR:-0xC28706F899266b36BC43cc072b3a921BDf2C48D9}" +ROUTER="${CHAIN_1_UNISWAP_V2_ROUTER:-0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D}" +TARGET_USDC_OUT_RAW="${TARGET_USDC_OUT_RAW:-10000}" +SLIPPAGE_BPS="${SLIPPAGE_BPS:-100}" +DEADLINE_SECONDS="${DEADLINE_SECONDS:-900}" +EXECUTE="${EXECUTE:-0}" +STAMP="${ENGINE_X_UNIV2_LOOP_STAMP:-$(date -u +%Y%m%dT%H%M%SZ)}" +OUT_JSON="${OUT_JSON:-reports/status/engine-x-univ2-public-indexed-loop-${STAMP}.json}" +LATEST_JSON="${LATEST_JSON:-reports/status/engine-x-univ2-public-indexed-loop-latest.json}" + +if [[ -n "${PRIVATE_KEY:-}" ]]; then + SIGNER="$(cast wallet address --private-key "${PRIVATE_KEY}")" +else + SIGNER="${DEPLOYER_ADDRESS:-}" +fi +if [[ -z "${SIGNER}" ]]; then + echo "Set PRIVATE_KEY or DEPLOYER_ADDRESS" >&2 + exit 1 +fi +if [[ "${EXECUTE}" == "1" && -z "${PRIVATE_KEY:-}" ]]; then + echo "PRIVATE_KEY is required when EXECUTE=1" >&2 + exit 1 +fi + +TOKEN0="$(cast call "${PAIR}" 'token0()(address)' --rpc-url "${ETHEREUM_MAINNET_RPC}" | grep -oE '0x[a-fA-F0-9]{40}' | head -1)" +TOKEN1="$(cast call "${PAIR}" 'token1()(address)' --rpc-url "${ETHEREUM_MAINNET_RPC}" | grep -oE '0x[a-fA-F0-9]{40}' | head -1)" +if [[ "${TOKEN0,,}" != "${CWUSDC,,}" || "${TOKEN1,,}" != "${USDC,,}" ]]; then + echo "Configured pair is not token0=cWUSDC/token1=USDC: ${PAIR}" >&2 + exit 1 +fi + +RESERVES_BEFORE="$(cast call "${PAIR}" 'getReserves()(uint112,uint112,uint32)' --rpc-url "${ETHEREUM_MAINNET_RPC}" | tr '\n' ' ')" +CW_BAL_BEFORE="$(cast call "${CWUSDC}" 'balanceOf(address)(uint256)' "${SIGNER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +USDC_BAL_BEFORE="$(cast call "${USDC}" 'balanceOf(address)(uint256)' "${SIGNER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +CW_ALLOW_BEFORE="$(cast call "${CWUSDC}" 'allowance(address,address)(uint256)' "${SIGNER}" "${ROUTER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +USDC_ALLOW_BEFORE="$(cast call "${USDC}" 'allowance(address,address)(uint256)' "${SIGNER}" "${ROUTER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +ETH_BEFORE="$(cast balance "${SIGNER}" --rpc-url "${ETHEREUM_MAINNET_RPC}")" +GAS_PRICE_WEI="$(cast gas-price --rpc-url "${ETHEREUM_MAINNET_RPC}")" +BLOCK_BEFORE="$(cast block-number --rpc-url "${ETHEREUM_MAINNET_RPC}")" + +CW_IN_RAW="$(cast call --json "${ROUTER}" 'getAmountsIn(uint256,address[])(uint256[])' "${TARGET_USDC_OUT_RAW}" "[${CWUSDC},${USDC}]" --rpc-url "${ETHEREUM_MAINNET_RPC}" | jq -r '.[0][0]')" +ROUNDTRIP_CW_OUT_RAW="$(cast call --json "${ROUTER}" 'getAmountsOut(uint256,address[])(uint256[])' "${TARGET_USDC_OUT_RAW}" "[${USDC},${CWUSDC}]" --rpc-url "${ETHEREUM_MAINNET_RPC}" | jq -r '.[0][-1]')" +MAX_CW_IN_RAW="$(( CW_IN_RAW * (10000 + SLIPPAGE_BPS) / 10000 + 1 ))" +MIN_CW_BACK_RAW="$(( ROUNDTRIP_CW_OUT_RAW * (10000 - SLIPPAGE_BPS) / 10000 ))" + +if (( CW_BAL_BEFORE < MAX_CW_IN_RAW )); then + echo "Insufficient cWUSDC: need ${MAX_CW_IN_RAW}, have ${CW_BAL_BEFORE}" >&2 + exit 1 +fi + +cat <"$LOCK_FILE" +if ! flock -n 9; then + echo "Another send-cwusdc-ei-matrix-multicall-batches.sh is running (lock: $LOCK_FILE)." >&2 + exit 1 +fi + +exec python3 "$PROJECT_ROOT/scripts/lib/ei_matrix_multicall3_cwusdc_batch.py" "$@" diff --git a/scripts/deployment/send-cwusdc-ei-matrix-targeted.sh b/scripts/deployment/send-cwusdc-ei-matrix-targeted.sh new file mode 100755 index 00000000..f70b56eb --- /dev/null +++ b/scripts/deployment/send-cwusdc-ei-matrix-targeted.sh @@ -0,0 +1,297 @@ +#!/usr/bin/env bash +# Targeted mainnet cWUSDC transfers to a subset of EI matrix wallets by linear index. +# Intended for triage: feed indices from run-ei-matrix-full-readiness-audit.sh gap files. +# +# Usage: +# ./scripts/deployment/send-cwusdc-ei-matrix-targeted.sh [--dry-run] --send-raw R \ +# [--indices-file PATH] [--amounts-tsv PATH] [--resume-next] [--quiet-dry-run] [--legacy] +# +# --indices-file Newline-separated linear indices (default: reports/status/ei-matrix-readiness-gaps-mainnet-indices.txt). +# Empty lines and # comments ignored. +# --send-raw R Amount (raw, 6 decimals) per wallet when not using --amounts-tsv. +# --amounts-tsv F Tab-separated: linearIndex amountRaw (must cover every index in indices file). +# --resume-next Continue from reports/status/ei-matrix-cwusdc-targeted-last-idx.txt + 1 +# (skips indices at or below last completed). +# +# Env: same as send-cwusdc-ei-matrix-wallets.sh (PRIVATE_KEY, ETHEREUM_MAINNET_RPC, CWUSDC_MAINNET, …) +# Lock: reports/status/ei-matrix-cwusdc-targeted-send.lock +# Progress: reports/status/ei-matrix-cwusdc-targeted-last-idx.txt +# Failures: reports/status/ei-matrix-cwusdc-targeted-failures.log +# +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +DRY_RUN=false +QUIET_DRY_RUN=false +CAST_LEGACY=false +RESUME_NEXT=false +INDICES_FILE="${EI_MATRIX_TARGETED_INDICES_FILE:-${PROJECT_ROOT}/reports/status/ei-matrix-readiness-gaps-mainnet-indices.txt}" +AMOUNTS_TSV="" +SEND_RAW="" +LAST_IDX_FILE="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-targeted-last-idx.txt" + +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=true; shift ;; + --quiet-dry-run) QUIET_DRY_RUN=true; shift ;; + --legacy) CAST_LEGACY=true; shift ;; + --resume-next) RESUME_NEXT=true; shift ;; + --indices-file) INDICES_FILE="${2:?}"; shift 2 ;; + --amounts-tsv) AMOUNTS_TSV="${2:?}"; shift 2 ;; + --send-raw) SEND_RAW="${2:?}"; shift 2 ;; + *) echo "Unknown arg: $1" >&2; exit 1 ;; + esac +done + +if [[ -z "$SEND_RAW" && -z "$AMOUNTS_TSV" ]]; then + echo "Set --send-raw R or --amounts-tsv PATH." >&2 + exit 1 +fi +if [[ -n "$SEND_RAW" && -n "$AMOUNTS_TSV" ]]; then + echo "Use only one of --send-raw or --amounts-tsv." >&2 + exit 1 +fi + +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" + +CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}" +PUBLIC_ETH_RPC="${ETHEREUM_MAINNET_PUBLIC_RPC:-https://ethereum-rpc.publicnode.com}" +RPC="${ETHEREUM_MAINNET_RPC:-${RPC_URL_1:-${ETH_MAINNET_RPC_URL:-$PUBLIC_ETH_RPC}}}" +BALANCE_RPC="${EI_MATRIX_BALANCE_RPC:-$RPC}" +GRID="$PROJECT_ROOT/config/pmm-soak-wallet-grid.json" + +[[ -f "$INDICES_FILE" ]] || { echo "Missing indices file: $INDICES_FILE" >&2; exit 1; } +[[ -f "$GRID" ]] || { echo "Missing $GRID" >&2; exit 1; } +command -v cast &>/dev/null || { echo "cast required" >&2; exit 1; } +command -v jq &>/dev/null || { echo "jq required" >&2; exit 1; } +[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set" >&2; exit 1; } + +LOCK_FILE="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-targeted-send.lock" +mkdir -p "${PROJECT_ROOT}/reports/status" +exec 200>"$LOCK_FILE" +if ! flock -n 200; then + echo "Another send-cwusdc-ei-matrix-targeted.sh is already running (lock: $LOCK_FILE)." >&2 + exit 1 +fi + +FROM_ADDR=$(cast wallet address --private-key "$PRIVATE_KEY") +CHAIN_ID=$(cast chain-id --rpc-url "$RPC" 2>/dev/null | tr -d '[:space:]' || true) +[[ -n "$CHAIN_ID" ]] || CHAIN_ID="1" +if [[ "$CHAIN_ID" != "1" ]]; then + echo "[WARN] chain-id=$CHAIN_ID (expected 1)." >&2 +fi + +pending_nonce() { + local resp hex + resp=$(curl -sS -X POST "$RPC" -H "Content-Type: application/json" \ + -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"${FROM_ADDR}\",\"pending\"],\"id\":1}" 2>/dev/null) || return 1 + hex=$(echo "$resp" | jq -r '.result // empty') + [[ -n "$hex" ]] || return 1 + cast to-dec "$hex" +} + +token_decimals() { + cast call "$CWUSDC" 'decimals()(uint8)' --rpc-url "$BALANCE_RPC" 2>/dev/null | awk '{print $1}' +} + +token_balance_raw() { + cast call "$CWUSDC" "balanceOf(address)(uint256)" "$FROM_ADDR" --rpc-url "$BALANCE_RPC" 2>/dev/null | awk '{print $1}' +} + +ERR_LOG="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-targeted-failures.log" + +# Sorted unique indices from file (one index per line; # comments; whitespace tolerated) +IND_TMP=$(mktemp) +grep -v '^[[:space:]]*$' "$INDICES_FILE" | sed 's/#.*//' \ + | awk '{ gsub(/[[:space:]]/, "", $0); if ($0 ~ /^[0-9]+$/) print $0 }' \ + | sort -n -u >"$IND_TMP" || true + +if [[ ! -s "$IND_TMP" ]]; then + echo "No numeric indices in $INDICES_FILE — nothing to do." + rm -f "$IND_TMP" + exit 0 +fi + +if $RESUME_NEXT; then + [[ -f "$LAST_IDX_FILE" ]] || { echo "Missing $LAST_IDX_FILE for --resume-next" >&2; rm -f "$IND_TMP"; exit 1; } + _last="$(tr -d '[:space:]' < "$LAST_IDX_FILE" || echo "")" + [[ -n "$_last" ]] || { echo "Empty $LAST_IDX_FILE" >&2; rm -f "$IND_TMP"; exit 1; } + _filtered=$(mktemp) + while read -r line; do + [[ "$line" =~ ^[0-9]+$ ]] || continue + if [[ "$line" -gt "$_last" ]]; then + echo "$line" + fi + done <"$IND_TMP" >"$_filtered" + mv "$_filtered" "$IND_TMP" + echo "Resume-next: last completed idx=$_last; remaining indices: $(wc -l <"$IND_TMP" | tr -d ' ')" +fi + +N_IND=$(wc -l <"$IND_TMP" | tr -d ' ') +if [[ "$N_IND" -eq 0 ]]; then + echo "No indices to process after filters." + rm -f "$IND_TMP" + exit 0 +fi + +PAIR_TMP=$(mktemp) +cleanup() { + [[ -f "$IND_TMP" ]] && rm -f "$IND_TMP" + [[ -f "$PAIR_TMP" ]] && rm -f "$PAIR_TMP" +} +trap cleanup EXIT + +if [[ -n "$AMOUNTS_TSV" ]]; then + [[ -f "$AMOUNTS_TSV" ]] || { echo "Missing amounts TSV: $AMOUNTS_TSV" >&2; exit 1; } + # Build map idx->amount in Python for validation + join + python3 - "$IND_TMP" "$AMOUNTS_TSV" "$PAIR_TMP" <<'PY' +import sys +from pathlib import Path + +ind_path = Path(sys.argv[1]) +amt_path = Path(sys.argv[2]) +out_path = Path(sys.argv[3]) + +wanted = [int(x) for x in ind_path.read_text().split() if x.strip().isdigit()] +wanted_set = set(wanted) +amap: dict[int, int] = {} +for line in amt_path.read_text().splitlines(): + line = line.split("#", 1)[0].strip() + if not line: + continue + parts = line.split("\t") + if len(parts) < 2: + parts = line.split() + if len(parts) < 2: + print(f"Bad amounts line: {line!r}", file=sys.stderr) + sys.exit(1) + idx = int(parts[0].strip()) + raw = int(parts[1].strip()) + amap[idx] = raw + +missing = sorted(wanted_set - set(amap)) +if missing: + print(f"Amounts TSV missing {len(missing)} indices (first 20): {missing[:20]}", file=sys.stderr) + sys.exit(1) + +lines = [] +for idx in sorted(wanted_set): + lines.append(f"{idx}\t{amap[idx]}") +out_path.write_text("\n".join(lines) + "\n", encoding="utf-8") +PY + # PAIR_TMP now: idx \t raw per line sorted by idx + BUDGET_RAW=$(awk '{s+=$2} END {print s}' "$PAIR_TMP") +else + while read -r idx; do + echo -e "${idx}\t${SEND_RAW}" + done <"$IND_TMP" | sort -n -t $'\t' -k1,1 >"$PAIR_TMP" + BUDGET_RAW=$(python3 -c "print(int('$SEND_RAW') * int('$N_IND'))") +fi + +ADDR_AMT_TMP=$(mktemp) +cleanup() { + [[ -f "$IND_TMP" ]] && rm -f "$IND_TMP" + [[ -f "$PAIR_TMP" ]] && rm -f "$PAIR_TMP" + [[ -f "$ADDR_AMT_TMP" ]] && rm -f "$ADDR_AMT_TMP" +} +trap cleanup EXIT + +while IFS=$'\t' read -r idx raw_amt; do + addr=$(jq -r --argjson i "$idx" '.wallets[$i].address // empty' "$GRID") + [[ -n "$addr" && "$addr" != null ]] || { echo "No address for index $idx in grid" >&2; exit 1; } + echo -e "$addr\t$raw_amt\t$idx" +done <"$PAIR_TMP" >"$ADDR_AMT_TMP" + +DECIMALS=$(token_decimals || echo "6") +GAS_EST="${EI_MATRIX_SEND_GAS_EST:-70000}" +HEADROOM_BPS="${EI_MATRIX_GAS_HEADROOM_BPS:-10500}" + +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "EI matrix cWUSDC targeted transfer (mainnet)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "RPC: $RPC" +echo "Token: $CWUSDC" +echo "Signer: $FROM_ADDR" +echo "Indices: $N_IND (from $INDICES_FILE)" +echo "Budget: $BUDGET_RAW raw total" +echo "Dry-run: $DRY_RUN" +echo "" + +ETH_WEI=$(cast balance "$FROM_ADDR" --rpc-url "$BALANCE_RPC" 2>/dev/null | awk '{print $1}' || echo "0") +TOKEN_BAL=$(token_balance_raw || echo "0") +echo "Signer ETH: $ETH_WEI wei" +echo "Signer cWUSDC (raw): $TOKEN_BAL" + +if ! $DRY_RUN && [[ "${EI_MATRIX_SKIP_BALANCE_CHECK:-}" != "1" ]]; then + if ! python3 -c "import sys; sys.exit(0 if int('$TOKEN_BAL') >= int('$BUDGET_RAW') else 1)"; then + echo "Insufficient cWUSDC for budget $BUDGET_RAW raw." >&2 + exit 1 + fi +fi + +if ! $DRY_RUN && [[ "${EI_MATRIX_SKIP_GAS_CHECK:-}" != "1" ]]; then + GAS_PRICE_WEI=$(cast gas-price --rpc-url "$RPC" 2>/dev/null | awk '{print $1}' | head -1) + [[ -n "$GAS_PRICE_WEI" ]] || GAS_PRICE_WEI=0 + MIN_WEI=$(python3 -c "c=int('$N_IND'); g=int('$GAS_EST'); p=int('$GAS_PRICE_WEI'); b=int('$HEADROOM_BPS'); print(c*g*p*b//10000)") + if ! python3 -c "import sys; sys.exit(0 if int('$ETH_WEI') >= int('$MIN_WEI') else 1)"; then + echo "Insufficient ETH for gas (need ≈ $MIN_WEI wei)." >&2 + exit 1 + fi +fi + +matrix_try_transfer() { + local addr="$1" raw_amt="$2" idx="$3" + local dec human out tx attempt=1 + dec="${DECIMALS:-6}" + [[ "$raw_amt" != "0" ]] || { echo "[skip] idx=$idx zero"; return 0; } + human=$(python3 -c "d=int('$dec'); a=int('$raw_amt'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$raw_amt") + if $DRY_RUN; then + if ! $QUIET_DRY_RUN; then + echo "[dry-run] idx=$idx $addr raw=$raw_amt (~$human)" + fi + return 0 + fi + local cast_extra=() + $CAST_LEGACY && cast_extra+=(--legacy) + while [[ "$attempt" -le 2 ]]; do + if out=$(cast send "$CWUSDC" "transfer(address,uint256)" "$addr" "$raw_amt" \ + --rpc-url "$RPC" --private-key "$PRIVATE_KEY" \ + --nonce "$NONCE" "${cast_extra[@]}" 2>&1); then + tx=$(echo "$out" | tail -n1) + echo "[ok] idx=$idx nonce=$NONCE $addr raw=$raw_amt tx=$tx" + sent=$((sent + 1)) + NONCE=$((NONCE + 1)) + echo "$idx" >"$LAST_IDX_FILE" + return 0 + fi + if [[ "$attempt" -eq 1 ]] && echo "$out" | grep -qi 'nonce too low'; then + NONCE=$(pending_nonce) || true + attempt=$((attempt + 1)) + continue + fi + echo "[fail] idx=$idx $out" | tee -a "$ERR_LOG" >&2 + failed=$((failed + 1)) + NONCE=$(pending_nonce) || true + return 0 + done +} + +sent=0 +failed=0 +NONCE=$(pending_nonce) || { echo "Could not read nonce" >&2; exit 1; } +echo "Starting nonce: $NONCE" +echo "" + +while IFS=$'\t' read -r addr raw_amt idx; do + matrix_try_transfer "$addr" "$raw_amt" "$idx" +done <"$ADDR_AMT_TMP" + +if $DRY_RUN; then + echo "Dry-run complete ($N_IND wallets)." +else + echo "Done. sent=$sent failed=$failed" +fi diff --git a/scripts/deployment/send-cwusdc-ei-matrix-wallets.sh b/scripts/deployment/send-cwusdc-ei-matrix-wallets.sh new file mode 100755 index 00000000..1be791e7 --- /dev/null +++ b/scripts/deployment/send-cwusdc-ei-matrix-wallets.sh @@ -0,0 +1,355 @@ +#!/usr/bin/env bash +# Transfer Ethereum mainnet cWUSDC from PRIVATE_KEY holder to each address in +# config/pmm-soak-wallet-grid.json (EI matrix slice). Uses ERC-20 transfer(address,uint256). +# +# Modes (exactly one): +# --send-raw R Same raw units sent to every wallet in the slice. +# --total-send-raw B Total sent across the slice, split with ±spread then renormalized to B. +# +# Usage: +# ./scripts/deployment/send-cwusdc-ei-matrix-wallets.sh [--dry-run] [--limit N] [--offset N|--resume-next] +# (--send-raw R | --total-send-raw B [--spread-pct S]) +# +# --quiet-dry-run With --dry-run, suppress per-wallet lines. +# --legacy Pass --legacy to cast send. +# +# Env: ETHEREUM_MAINNET_RPC, CWUSDC_MAINNET, PRIVATE_KEY, +# EI_MATRIX_SEND_GAS_EST (default 70000), EI_MATRIX_GAS_HEADROOM_BPS (default 10500), +# EI_MATRIX_SKIP_GAS_CHECK=1, EI_MATRIX_SKIP_BALANCE_CHECK=1 (operator risk). +# +# Progress: reports/status/ei-matrix-cwusdc-send-last-idx.txt +# Failures: reports/status/ei-matrix-cwusdc-send-failures.log +# Lock: reports/status/ei-matrix-cwusdc-send.lock +# +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +DRY_RUN=false +LIMIT="" +OFFSET="0" +OFFSET_EXPLICIT=false +RESUME_NEXT=false +SPREAD_PCT="${EI_MATRIX_SPREAD_PCT:-15}" +CAST_LEGACY=false +QUIET_DRY_RUN=false +SEND_RAW="" +TOTAL_SEND_RAW="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=true; shift ;; + --quiet-dry-run) QUIET_DRY_RUN=true; shift ;; + --limit) LIMIT="${2:?}"; shift 2 ;; + --resume-next) RESUME_NEXT=true; shift ;; + --offset) OFFSET="${2:?}"; OFFSET_EXPLICIT=true; shift 2 ;; + --spread-pct) SPREAD_PCT="${2:?}"; shift 2 ;; + --send-raw) SEND_RAW="${2:?}"; shift 2 ;; + --total-send-raw) TOTAL_SEND_RAW="${2:?}"; shift 2 ;; + --legacy) CAST_LEGACY=true; shift ;; + *) echo "Unknown arg: $1" >&2; exit 1 ;; + esac +done + +LAST_IDX_FILE="${EI_MATRIX_CWUSDC_SEND_LAST_IDX_FILE:-${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-send-last-idx.txt}" +if $RESUME_NEXT && $OFFSET_EXPLICIT; then + echo "Use only one of --offset or --resume-next." >&2 + exit 1 +fi +if $RESUME_NEXT; then + [[ -f "$LAST_IDX_FILE" ]] || { echo "Missing last-index file for --resume-next: $LAST_IDX_FILE" >&2; exit 1; } + _last="$(tr -d '[:space:]' < "$LAST_IDX_FILE" || echo "")" + [[ -n "$_last" ]] || { echo "Empty $LAST_IDX_FILE" >&2; exit 1; } + OFFSET=$((_last + 1)) + echo "Resume-next (send): last completed idx=$_last → offset=$OFFSET" +fi + +if [[ -n "$SEND_RAW" && -n "$TOTAL_SEND_RAW" ]]; then + echo "Use only one of --send-raw or --total-send-raw." >&2 + exit 1 +fi +if [[ -z "$SEND_RAW" && -z "$TOTAL_SEND_RAW" ]]; then + echo "Set --send-raw or --total-send-raw." >&2 + exit 1 +fi + +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" + +CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}" +PUBLIC_ETH_RPC="${ETHEREUM_MAINNET_PUBLIC_RPC:-https://ethereum-rpc.publicnode.com}" +RPC="${ETHEREUM_MAINNET_RPC:-${RPC_URL_1:-${ETH_MAINNET_RPC_URL:-$PUBLIC_ETH_RPC}}}" +BALANCE_RPC="${EI_MATRIX_BALANCE_RPC:-$RPC}" + +LOCK_FILE="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-send.lock" +MANIFEST_DIR="${PROJECT_ROOT}/reports/status" +mkdir -p "$MANIFEST_DIR" +exec 200>"$LOCK_FILE" +if ! flock -n 200; then + echo "Another send-cwusdc-ei-matrix-wallets.sh is already running (lock: $LOCK_FILE)." >&2 + exit 1 +fi + +GRID="$PROJECT_ROOT/config/pmm-soak-wallet-grid.json" + +[[ -f "$GRID" ]] || { echo "Missing $GRID" >&2; exit 1; } +command -v cast &>/dev/null || { echo "cast required" >&2; exit 1; } +command -v jq &>/dev/null || { echo "jq required" >&2; exit 1; } +[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY not set" >&2; exit 1; } + +FROM_ADDR=$(cast wallet address --private-key "$PRIVATE_KEY") +CHAIN_ID=$(cast chain-id --rpc-url "$RPC" 2>/dev/null | tr -d '[:space:]' || true) +[[ -n "$CHAIN_ID" ]] || CHAIN_ID="1" +if [[ "$CHAIN_ID" != "1" ]]; then + echo "[WARN] chain-id=$CHAIN_ID (expected 1)." >&2 +fi + +pending_nonce() { + local resp hex + resp=$(curl -sS -X POST "$RPC" -H "Content-Type: application/json" \ + -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"${FROM_ADDR}\",\"pending\"],\"id\":1}" 2>/dev/null) || return 1 + hex=$(echo "$resp" | jq -r '.result // empty') + [[ -n "$hex" ]] || return 1 + cast to-dec "$hex" +} + +token_decimals() { + cast call "$CWUSDC" 'decimals()(uint8)' --rpc-url "$BALANCE_RPC" 2>/dev/null | awk '{print $1}' +} + +token_balance_raw() { + cast call "$CWUSDC" "balanceOf(address)(uint256)" "$FROM_ADDR" --rpc-url "$BALANCE_RPC" 2>/dev/null | awk '{print $1}' +} + +generate_spread_amounts_raw() { + local count="$1" budget="$2" spread="$3" + python3 - "$count" "$budget" "$spread" <<'PY' +import random +import sys +n = int(sys.argv[1]) +budget = int(sys.argv[2]) +spread = float(sys.argv[3]) +if n <= 0: + sys.exit("count must be positive") +if budget < 0: + sys.exit("budget must be non-negative") +if spread < 0 or spread > 100: + sys.exit("spread-pct must be in [0, 100]") +base = 10000 +low_w = max(1, (100 * base - int(spread * base)) // 100) +high_w = (100 * base + int(spread * base)) // 100 +w = [random.randint(low_w, high_w) for _ in range(n)] +s = sum(w) +raw = [(budget * wi) // s for wi in w] +rem = budget - sum(raw) +for i in range(rem): + raw[i % n] += 1 +for x in raw: + print(x) +PY +} + +stream_addresses() { + if [[ -n "${LIMIT:-}" ]]; then + jq -r --argjson o "$OFFSET" --argjson l "$LIMIT" '.wallets[$o:$o+$l][] | .address' "$GRID" + else + jq -r --argjson o "$OFFSET" '.wallets[$o:][] | .address' "$GRID" + fi +} + +ERR_LOG="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-send-failures.log" +LAST_IDX="${PROJECT_ROOT}/reports/status/ei-matrix-cwusdc-send-last-idx.txt" + +matrix_try_transfer() { + local addr="$1" raw_amt="$2" idx="$3" + local dec human out tx attempt=1 + dec="${DECIMALS:-6}" + if [[ "$raw_amt" == "0" ]]; then + echo "[skip] idx=$idx $addr zero raw" + return 0 + fi + human=$(python3 -c "d=int('$dec'); a=int('$raw_amt'); print(f'{a / (10**d):.{min(d,8)}f}')" 2>/dev/null || echo "$raw_amt") + if $DRY_RUN; then + if ! $QUIET_DRY_RUN; then + echo "[dry-run] idx=$idx $addr raw=$raw_amt (~$human)" + fi + return 0 + fi + local cast_extra=() + $CAST_LEGACY && cast_extra+=(--legacy) + while [[ "$attempt" -le 2 ]]; do + if out=$(cast send "$CWUSDC" "transfer(address,uint256)" "$addr" "$raw_amt" \ + --rpc-url "$RPC" --private-key "$PRIVATE_KEY" \ + --nonce "$NONCE" "${cast_extra[@]}" 2>&1); then + tx=$(echo "$out" | tail -n1) + echo "[ok] idx=$idx nonce=$NONCE $addr raw=$raw_amt (~$human) tx=$tx" + sent=$((sent + 1)) + NONCE=$((NONCE + 1)) + echo "$idx" > "$LAST_IDX" + return 0 + fi + if [[ "$attempt" -eq 1 ]] && echo "$out" | grep -qi 'nonce too low'; then + NONCE=$(pending_nonce) || true + echo "[retry] idx=$idx nonce refreshed to $NONCE (nonce too low)" >&2 + attempt=$((attempt + 1)) + continue + fi + echo "[fail] idx=$idx nonce=$NONCE $addr $out" | tee -a "$ERR_LOG" >&2 + failed=$((failed + 1)) + NONCE=$(pending_nonce) || true + return 0 + done +} + +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "EI matrix cWUSDC transfer (mainnet)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "RPC: $RPC" +echo "Token: $CWUSDC" +echo "Signer: $FROM_ADDR" +echo "Grid: $GRID" +echo "Dry-run: $DRY_RUN Quiet: $QUIET_DRY_RUN" +echo "Offset: $OFFSET Limit: ${LIMIT:-all}" +if [[ -n "$SEND_RAW" ]]; then + echo "Mode: fixed --send-raw $SEND_RAW per wallet" +else + echo "Mode: --total-send-raw $TOTAL_SEND_RAW spread: ±${SPREAD_PCT}% normalized" +fi +echo "" + +DECIMALS=$(token_decimals || echo "6") + +ADDR_TMP=$(mktemp) +AMOUNTS_TMP=$(mktemp) +cleanup_tmp() { + [[ -f "$ADDR_TMP" ]] && rm -f "$ADDR_TMP" + [[ -f "$AMOUNTS_TMP" ]] && rm -f "$AMOUNTS_TMP" +} +trap cleanup_tmp EXIT + +stream_addresses > "$ADDR_TMP" +WALLET_COUNT=$(wc -l < "$ADDR_TMP" | tr -d '[:space:]') +if [[ -z "$WALLET_COUNT" || "$WALLET_COUNT" -eq 0 ]]; then + echo "No wallets in range (offset=$OFFSET limit=${LIMIT:-all})." >&2 + exit 1 +fi + +if [[ -n "$SEND_RAW" ]]; then + awk -v r="$SEND_RAW" '{print r}' "$ADDR_TMP" > "$AMOUNTS_TMP" + BUDGET_RAW=$((SEND_RAW * WALLET_COUNT)) +else + BUDGET_RAW="$TOTAL_SEND_RAW" + if [[ "$BUDGET_RAW" -le 0 ]]; then + echo "total-send-raw must be positive." >&2 + exit 1 + fi + generate_spread_amounts_raw "$WALLET_COUNT" "$BUDGET_RAW" "$SPREAD_PCT" > "$AMOUNTS_TMP" +fi + +SUM_CHECK=$(awk '{s+=$1} END {print s}' "$AMOUNTS_TMP") +if [[ "$SUM_CHECK" != "$BUDGET_RAW" ]]; then + echo "INTERNAL: amount sum $SUM_CHECK != budget $BUDGET_RAW" >&2 + exit 1 +fi + +AMOUNTS_SHA256=$(sha256sum "$AMOUNTS_TMP" | awk '{print $1}') +TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ") +MANIFEST="$MANIFEST_DIR/ei-matrix-cwusdc-send-manifest-${TS//:/-}.json" +cat >"$MANIFEST" </dev/null | awk '{print $1}' || echo "0") +ETH_HUMAN=$(python3 -c "print(f'{int(\"$ETH_WEI\") / 1e18:.6f}')" 2>/dev/null || echo "?") +echo "Signer ETH (gas): ${ETH_WEI} wei (~$ETH_HUMAN ETH)" + +TOKEN_BAL=$(token_balance_raw || echo "0") +echo "Signer cWUSDC balance (raw): $TOKEN_BAL (need >= $BUDGET_RAW for this slice)" + +if ! $DRY_RUN && [[ "${EI_MATRIX_SKIP_BALANCE_CHECK:-}" != "1" ]]; then + if python3 -c "import sys; sys.exit(0 if int('$TOKEN_BAL') >= int('$BUDGET_RAW') else 1)"; then + echo "Token preflight OK: balance covers budget $BUDGET_RAW raw." + else + echo "Insufficient cWUSDC: have $TOKEN_BAL raw, need $BUDGET_RAW raw." >&2 + echo "Set EI_MATRIX_SKIP_BALANCE_CHECK=1 to override (operator risk)." >&2 + exit 1 + fi +fi + +if ! $DRY_RUN && [[ "${EI_MATRIX_SKIP_GAS_CHECK:-}" != "1" ]]; then + GAS_PRICE_WEI=$(cast gas-price --rpc-url "$RPC" 2>/dev/null | awk '{print $1}' | head -1) + [[ -n "$GAS_PRICE_WEI" ]] || GAS_PRICE_WEI=0 + MIN_WEI=$(python3 -c "c=int('$WALLET_COUNT'); g=int('$GAS_EST'); p=int('$GAS_PRICE_WEI'); b=int('$HEADROOM_BPS'); print(c*g*p*b//10000)") + if python3 -c "import sys; sys.exit(0 if int('$ETH_WEI') >= int('$MIN_WEI') else 1)"; then + echo "Gas preflight OK: est ${GAS_EST} gas/tx × $WALLET_COUNT × gasPrice $GAS_PRICE_WEI × (${HEADROOM_BPS}/10000) ≈ $MIN_WEI wei." + else + echo "Insufficient ETH for gas preflight. Need ≈ $MIN_WEI wei." >&2 + echo "Set EI_MATRIX_SKIP_GAS_CHECK=1 to override (operator risk)." >&2 + exit 1 + fi +fi +echo "" + +echo "Sample transfers:" +if [[ "$WALLET_COUNT" -le 6 ]]; then + _s_idx=$OFFSET + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP") +else + _s_idx=$OFFSET + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP" | head -3) + _s_idx=$((OFFSET + WALLET_COUNT - 3)) + while IFS=$'\t' read -r s_addr s_raw; do + h=$(python3 -c "d=int('$DECIMALS'); a=int('$s_raw'); print(f'{a / (10**d):.6f}')" 2>/dev/null || echo "$s_raw") + echo " idx=$_s_idx $s_addr raw=$s_raw (~$h cWUSDC)" + _s_idx=$((_s_idx + 1)) + done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP" | tail -3) +fi +echo "" + +sent=0 +failed=0 +idx=$OFFSET +NONCE=$(pending_nonce) || { echo "Could not read pending nonce" >&2; exit 1; } +echo "Starting nonce (pending): $NONCE" +echo "" + +while IFS=$'\t' read -r addr raw_amt; do + matrix_try_transfer "$addr" "$raw_amt" "$idx" + idx=$((idx + 1)) +done < <(paste -d $'\t' "$ADDR_TMP" "$AMOUNTS_TMP") + +if $DRY_RUN; then + echo "Dry-run complete. Indices covered: $OFFSET..$((idx - 1))." +else + echo "Done. Transfer txs attempted: sent=$sent failed=$failed" +fi diff --git a/scripts/deployment/solana-transfer-native.py b/scripts/deployment/solana-transfer-native.py new file mode 100755 index 00000000..50a00676 --- /dev/null +++ b/scripts/deployment/solana-transfer-native.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +""" +Transfer native SOL (lamports) on Solana mainnet-beta (or any RPC you pass). + +Loads ``SOLANA_RPC_URL`` and ``SOLANA_KEYPAIR_PATH`` from the environment when +set (after ``source scripts/lib/load-project-env.sh``). Submits via +``solana_jsonrpc.send_transaction_wire`` (``scripts/lib/solana_jsonrpc.py``) so +RPCs that return only a signature string for ``sendTransaction`` do not hit +``solana-py``'s ``SendTransactionResp`` parser (which can panic on ``missing field 'data'``). + +Install (venv recommended):: + + pip install -r scripts/lib/requirements-solana-ops.txt +""" + +from __future__ import annotations + +import argparse +import base64 +import json +import os +import sys +from pathlib import Path + +# ``scripts/lib`` is not a Python package; load ``solana_jsonrpc`` by path. +_LIB = Path(__file__).resolve().parents[1] / "lib" +if str(_LIB) not in sys.path: + sys.path.insert(0, str(_LIB)) + +import solana_jsonrpc # noqa: E402 + + +def _load_keypair(path: Path): + with path.open() as f: + raw = json.load(f) + if not isinstance(raw, list) or len(raw) != 64: + raise SystemExit("keypair JSON must be a 64-element byte array (Solana CLI format)") + from solders.keypair import Keypair + + return Keypair.from_bytes(bytes(raw)) + + +def main() -> None: + p = argparse.ArgumentParser(description="Send native SOL via JSON-RPC (robust sendTransaction parsing).") + p.add_argument("--to", required=True, help="Destination base58 pubkey") + p.add_argument( + "--lamports", + type=int, + help="Amount to send (excludes fee; payer pays fee separately). Omit with --sweep-all", + ) + p.add_argument( + "--sweep-all", + action="store_true", + help="Send entire balance minus 5000 lamports legacy fee reserve", + ) + p.add_argument("--fee-lamports", type=int, default=5000, help="Reserved for fee when using --sweep-all") + p.add_argument("--rpc-url", default=os.environ.get("SOLANA_RPC_URL", "").strip()) + p.add_argument( + "--keypair", + type=Path, + default=Path(os.environ.get("SOLANA_KEYPAIR_PATH", "").strip() or "."), + help="Solana CLI JSON keypair path (default: SOLANA_KEYPAIR_PATH)", + ) + p.add_argument("--skip-preflight", action="store_true") + p.add_argument( + "--dry-run", + action="store_true", + help="Print base64 wire and exit without sending", + ) + p.add_argument( + "--no-wait", + action="store_true", + help="Do not poll getSignatureStatuses after send (default: wait up to 90s)", + ) + args = p.parse_args() + + try: + from solders.hash import Hash + from solders.pubkey import Pubkey + from solders.system_program import TransferParams, transfer + from solders.transaction import Transaction + except ImportError: + print( + "Missing dependency: install with\n" + " pip install -r scripts/lib/requirements-solana-ops.txt", + file=sys.stderr, + ) + raise SystemExit(2) from None + + if not args.rpc_url: + print("Set SOLANA_RPC_URL or pass --rpc-url", file=sys.stderr) + raise SystemExit(2) + if not args.keypair.is_file(): + print(f"Keypair not found: {args.keypair}", file=sys.stderr) + raise SystemExit(2) + + kp = _load_keypair(args.keypair) + dest = Pubkey.from_string(args.to) + src = kp.pubkey() + + if args.dry_run: + if args.sweep_all: + raise SystemExit("--dry-run requires explicit --lamports (no balance query)") + if args.lamports is None: + raise SystemExit("Pass --lamports N with --dry-run") + send_lamports = args.lamports + else: + bal = solana_jsonrpc.get_balance_lamports(args.rpc_url, str(src)) + if args.sweep_all: + send_lamports = bal - args.fee_lamports + if send_lamports <= 0: + raise SystemExit("Nothing to sweep after fee reserve") + elif args.lamports is not None: + send_lamports = args.lamports + if send_lamports <= 0: + raise SystemExit("--lamports must be positive") + if bal < send_lamports + args.fee_lamports: + raise SystemExit( + f"Insufficient balance: have {bal} lamports, need {send_lamports + args.fee_lamports}" + ) + else: + raise SystemExit("Pass --lamports N or --sweep-all") + + bh_str = solana_jsonrpc.get_latest_blockhash(args.rpc_url) + bh = Hash.from_string(bh_str) + ix = transfer(TransferParams(from_pubkey=src, to_pubkey=dest, lamports=send_lamports)) + tx = Transaction.new_signed_with_payer([ix], src, [kp], bh) + wire = bytes(tx) + + if args.dry_run: + print("blockhash", bh_str) + print("wire_b64", base64.b64encode(wire).decode("ascii")) + return + + sig = solana_jsonrpc.send_transaction_wire( + args.rpc_url, + wire, + skip_preflight=args.skip_preflight, + preflight_commitment="confirmed", + ) + print(sig) + if not args.no_wait: + st = solana_jsonrpc.wait_until_signature_confirmed(args.rpc_url, sig) + print("confirmationStatus", st.get("confirmationStatus"), "slot", st.get("slot"), file=sys.stderr) + + +if __name__ == "__main__": + main() diff --git a/scripts/deployment/sync-gov-portals-ct-7804-from-git.sh b/scripts/deployment/sync-gov-portals-ct-7804-from-git.sh new file mode 100755 index 00000000..70d3a8e0 --- /dev/null +++ b/scripts/deployment/sync-gov-portals-ct-7804-from-git.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash +# Sync Gov Portals monorepo from Gitea to CT 7804 (gov-portals-dev), install deps, +# build DBIS + ICCC (and OMNL/XOM when they define a "build" script), restart systemd units. +# +# CT 7804 typically runs on r630-04 (192.168.11.14); tarball deploys omit .git, so +# in-container "git pull" is not enough — this script refreshes a local clone then +# streams the tree into the container. +# +# Usage (from proxmox repo root): +# export GITEA_TOKEN=... # or ensure it is in .env (see .env.master.example) +# bash scripts/deployment/sync-gov-portals-ct-7804-from-git.sh +# +# Options: +# --skip-fetch Use GOV_PORTALS_SOURCE as-is (no git fetch; no token required) +# --dry-run Print steps only +# +# Env: +# GOV_PORTALS_SOURCE Default: /home/intlc/projects/gov-portals-monorepo +# GOV_PORTALS_REPO_URL Default: https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git +# GOV_PORTALS_REF Default: main +# PROXMOX_HOST / DBIS_PORTAL_PROXMOX_HOST / PROXMOX_HOST_GOV_PORTALS Default: 192.168.11.14 +# VMID_GOV_PORTALS Default: 7804 + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +# shellcheck disable=SC1090 +source "$PROJECT_ROOT/config/ip-addresses.conf" 2>/dev/null || true +# shellcheck disable=SC1090 +[ -f "$PROJECT_ROOT/.env" ] && set +u && source "$PROJECT_ROOT/.env" 2>/dev/null || true && set -u + +GOV_PORTALS_SOURCE="${GOV_PORTALS_SOURCE:-/home/intlc/projects/gov-portals-monorepo}" +GOV_PORTALS_REPO_URL="${GOV_PORTALS_REPO_URL:-https://gitea.d-bis.org/Gov_Web_Portals/gov-portals-monorepo.git}" +GOV_PORTALS_REF="${GOV_PORTALS_REF:-main}" +VMID_GOV_PORTALS="${VMID_GOV_PORTALS:-7804}" +PROXMOX_HOST="${DBIS_PORTAL_PROXMOX_HOST:-${PROXMOX_HOST_GOV_PORTALS:-192.168.11.14}}" + +SKIP_FETCH=false +DRY_RUN=false +for arg in "$@"; do + [[ "$arg" == "--skip-fetch" ]] && SKIP_FETCH=true + [[ "$arg" == "--dry-run" ]] && DRY_RUN=true +done + +die() { echo "ERROR: $*" >&2; exit 1; } +log() { echo "[$(date +%H:%M:%S)] $*"; } + +[[ -d "$GOV_PORTALS_SOURCE" ]] || die "GOV_PORTALS_SOURCE is not a directory: $GOV_PORTALS_SOURCE" + +git_auth_args=() +if [[ -n "${GITEA_TOKEN:-}" ]]; then + git_auth_args=(-c "http.extraHeader=Authorization: token ${GITEA_TOKEN}") +fi + +if [[ "$SKIP_FETCH" != "true" ]]; then + [[ -d "$GOV_PORTALS_SOURCE/.git" ]] || die "Not a git clone: $GOV_PORTALS_SOURCE (use --skip-fetch to rsync only)" + if [[ ${#git_auth_args[@]} -eq 0 ]]; then + die "GITEA_TOKEN is unset. Add it to $PROJECT_ROOT/.env or run: export GITEA_TOKEN=... (Or use --skip-fetch.)" + fi + if [[ "$DRY_RUN" == "true" ]]; then + log "DRY: would git fetch $GOV_PORTALS_REF and submodule update in $GOV_PORTALS_SOURCE" + else + log "Fetching $GOV_PORTALS_REF and updating submodules in $GOV_PORTALS_SOURCE" + git -C "$GOV_PORTALS_SOURCE" "${git_auth_args[@]}" fetch origin + git -C "$GOV_PORTALS_SOURCE" reset --hard "origin/$GOV_PORTALS_REF" + git -C "$GOV_PORTALS_SOURCE" "${git_auth_args[@]}" submodule update --init --recursive --force + log "Monorepo HEAD: $(git -C "$GOV_PORTALS_SOURCE" log -1 --oneline)" + if [[ -e "$GOV_PORTALS_SOURCE/DBIS/.git" ]]; then + log "DBIS HEAD: $(git -C "$GOV_PORTALS_SOURCE/DBIS" log -1 --oneline)" + fi + fi +else + log "Skipping git fetch (--skip-fetch)" +fi + +SYNC_ID="gov-portals-ct-${VMID_GOV_PORTALS}-$(date +%s)" +REMOTE_SYNC="/tmp/$SYNC_ID" + +if [[ "$DRY_RUN" == "true" ]]; then + log "DRY: would rsync to root@$PROXMOX_HOST:$REMOTE_SYNC/ and tar into CT $VMID_GOV_PORTALS" + exit 0 +fi + +log "Rsync to $PROXMOX_HOST:$REMOTE_SYNC/" +rsync -az --delete \ + --exclude 'node_modules' --exclude '.next' --exclude '.git' \ + --exclude '*/node_modules' --exclude '*/.next' --exclude '*/.git' \ + "$GOV_PORTALS_SOURCE/" "root@$PROXMOX_HOST:$REMOTE_SYNC/" + +run_pve() { + ssh -o ConnectTimeout=20 -o StrictHostKeyChecking=accept-new "root@$PROXMOX_HOST" "$@" +} + +VMID="$VMID_GOV_PORTALS" + +run_pve "pct exec $VMID -- mkdir -p /srv/gov-portals /tmp/gov-env-7804" +for portal in DBIS ICCC; do + for f in .env .env.local .env.production; do + run_pve "pct exec $VMID -- bash -c '[ -f /srv/gov-portals/${portal}/${f} ] && cp -a /srv/gov-portals/${portal}/${f} /tmp/gov-env-7804/${portal}_${f} || true'" + done +done + +run_pve "pct exec $VMID -- bash -c 'if [ -d /srv/gov-portals ]; then find /srv/gov-portals -mindepth 1 -maxdepth 1 -exec rm -rf {} +; else mkdir -p /srv/gov-portals; fi'" + +run_pve "bash -c 'cd $REMOTE_SYNC && tar cf - . | pct exec $VMID -- tar xf - -C /srv/gov-portals'" + +for portal in DBIS ICCC; do + for f in .env .env.local .env.production; do + run_pve "pct exec $VMID -- bash -c '[ -f /tmp/gov-env-7804/${portal}_${f} ] && [ ! -f /srv/gov-portals/${portal}/${f} ] && cp -a /tmp/gov-env-7804/${portal}_${f} /srv/gov-portals/${portal}/${f} || true'" + done +done + +run_pve "pct exec $VMID -- bash -lc 'export PATH=/usr/local/bin:/usr/bin:/bin:\$PATH; cd /srv/gov-portals && (pnpm install --frozen-lockfile || pnpm install)'" + +run_pve "pct exec $VMID -- bash -lc 'export PATH=/usr/local/bin:/usr/bin:/bin:\$PATH; cd /srv/gov-portals/DBIS && pnpm run build && systemctl restart gov-portal-DBIS'" + +run_pve "pct exec $VMID -- bash -lc 'export PATH=/usr/local/bin:/usr/bin:/bin:\$PATH; cd /srv/gov-portals/ICCC && pnpm run build && systemctl restart gov-portal-ICCC'" + +run_pve "pct exec $VMID -- bash -lc 'export PATH=/usr/local/bin:/usr/bin:/bin:\$PATH; for p in OMNL XOM; do d=/srv/gov-portals/\$p; if [ -f \"\$d/package.json\" ] && grep -qF \"\\\"build\\\"\" \"\$d/package.json\" 2>/dev/null; then (cd \"\$d\" && pnpm run build && systemctl restart gov-portal-\$p) || true; fi; done'" + +run_pve "pct exec $VMID -- bash -lc 'systemctl is-active gov-portal-DBIS gov-portal-ICCC gov-portal-OMNL gov-portal-XOM || true; printf DBIS:; curl -s -o /dev/null -w %{http_code} http://127.0.0.1:3001/; echo; printf ICCC:; curl -s -o /dev/null -w %{http_code} http://127.0.0.1:3002/; echo'" + +run_pve "rm -rf $REMOTE_SYNC" +log "Removed $PROXMOX_HOST:$REMOTE_SYNC" + +log "Done. CT $VMID_GOV_PORTALS on $PROXMOX_HOST updated." diff --git a/scripts/deployment/sync-local-projects-to-dev-vm.sh b/scripts/deployment/sync-local-projects-to-dev-vm.sh new file mode 100755 index 00000000..217b63be --- /dev/null +++ b/scripts/deployment/sync-local-projects-to-dev-vm.sh @@ -0,0 +1,154 @@ +#!/usr/bin/env bash +# One-way sync: local workstation project tree → Dev VM (5700) /srv/projects +# for coordinated development over SSH (Cursor Remote-SSH, shared tree). +# +# Prerequisites: +# - CT 5700 exists, ssh dev1@IP_DEV_VM works, /srv/projects is writable (see setup-dev-vm-users-and-gitea.sh). +# - Run from a machine that has your local clone (default: ~/projects). +# +# Usage: +# ./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run +# ./scripts/deployment/sync-local-projects-to-dev-vm.sh +# ./scripts/deployment/sync-local-projects-to-dev-vm.sh --delete-remote # mirror: remove remote files absent locally +# RSYNC_RSH='ssh -o ProxyCommand="cloudflared access ssh --hostname ssh.dev.d-bis.org"' \ +# DEV_VM_HOST=ssh.dev.d-bis.org ./scripts/deployment/sync-local-projects-to-dev-vm.sh +# +# Env: +# SOURCE — local directory (default: ~/projects) +# DEV_VM_USER — SSH user on dev VM (default: dev1) +# DEV_VM_HOST — override IP/hostname (default: IP_DEV_VM from config) +# DEV_VM_PROJECTS — remote path (default: /srv/projects) +# RSYNC_EXTRA_OPTS — extra rsync args (quoted string) +# RSYNC_RSH — passed to rsync as SSH transport (e.g. cloudflared ProxyCommand) +# +# If --delete-remote fails with rsync code 23 (Permission denied on delete), run: +# ./scripts/deployment/fix-dev-vm-srv-projects-ownership.sh +# See: docs/04-configuration/DEV_VM_WORKSTATION_MIGRATION_RUNBOOK.md + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +# shellcheck source=/dev/null +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" 2>/dev/null || true +# shellcheck source=/dev/null +source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true + +SOURCE="${SOURCE:-${HOME}/projects}" +DEV_VM_USER="${DEV_VM_USER:-dev1}" +DEV_VM_HOST="${DEV_VM_HOST:-${IP_DEV_VM:-192.168.11.59}}" +DEV_VM_PROJECTS="${DEV_VM_PROJECTS:-/srv/projects}" +RSYNC_EXTRA_OPTS="${RSYNC_EXTRA_OPTS:-}" + +DRY_RUN=() +DELETE_REMOTE=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=(-n); shift ;; + --delete-remote) DELETE_REMOTE=1; shift ;; + --help|-h) + sed -n '1,35p' "$0" | tail -n +2 + exit 0 + ;; + *) + echo "ERROR: unknown argument: $1 (try --help)" >&2 + exit 1 + ;; + esac +done + +if [[ ! -d "$SOURCE" ]]; then + echo "ERROR: SOURCE is not a directory: $SOURCE" >&2 + exit 1 +fi + +REMOTE="${DEV_VM_USER}@${DEV_VM_HOST}:${DEV_VM_PROJECTS}/" + +RSYNC_DELETE=() +if [[ "$DELETE_REMOTE" == "1" ]]; then + RSYNC_DELETE=(--delete-delay) + echo "WARNING: --delete-remote — files on Dev VM under DEST not present locally (after excludes) will be REMOVED." + echo "" +else + echo "Safe mode: no remote delete (omit files only on VM). Use --delete-remote to mirror (destructive)." + echo "" +fi + +echo "=== Sync local projects → Dev VM ===" +echo "SOURCE: $SOURCE" +echo "DEST: $REMOTE" +echo "Mode: ${DRY_RUN[*]:-live}" +if [[ -n "${RSYNC_RSH:-}" ]]; then + echo "RSYNC_RSH: set (custom SSH / cloudflared)" +fi +echo "" +echo "NOTE: Review secrets after sync — chmod 600 remote .env; share only with trusted dev users." +echo "" + +# Heavy / reproducible artifacts (keep .git; omit bulky caches) +RSYNC_EXCLUDES=( + --exclude=node_modules + --exclude=__pycache__ + --exclude=.pnpm-store + --exclude=.pnpm + --exclude=venv + --exclude=.venv + --exclude=.venv-* + --exclude=dist + --exclude=build + --exclude=.next + --exclude=out + --exclude=.turbo + --exclude=.cache + --exclude=.parcel-cache + --exclude=coverage + --exclude=.pytest_cache + --exclude=.mypy_cache + --exclude=.ruff_cache + --exclude=forge-cache + --exclude=artifacts + --exclude=broadcast + --exclude=tmp + --exclude=.tmp + --exclude=.codex-artifacts +) + +# Optional: skip known multi-GB trees (re-clone or sync later with --no-skip-large) +if [[ "${SKIP_LARGE_LOCAL_TREES:-1}" == "1" ]]; then + RSYNC_EXCLUDES+=( + --exclude=MEV_Bot + --exclude=the-order + ) + echo "SKIP_LARGE_LOCAL_TREES=1: excluding MEV_Bot, the-order (set SKIP_LARGE_LOCAL_TREES=0 to include)." + echo "" +fi + +if [[ -n "${RSYNC_RSH:-}" ]]; then + export RSYNC_RSH +else + unset RSYNC_RSH 2>/dev/null || true +fi + +set -x +# shellcheck disable=SC2086 +set +e +rsync -av "${DRY_RUN[@]}" "${RSYNC_DELETE[@]}" --omit-dir-times \ + "${RSYNC_EXCLUDES[@]}" \ + ${RSYNC_EXTRA_OPTS} \ + "${SOURCE}/" "${REMOTE}" +rsync_ec=$? +set -e +set +x + +if [[ "$rsync_ec" -ne 0 ]]; then + echo "" >&2 + echo "ERROR: rsync exited with code $rsync_ec." >&2 + if [[ "$rsync_ec" -eq 23 && "$DELETE_REMOTE" == "1" ]]; then + echo " Common cause: root-owned files on the VM block deletes. From repo root (Proxmox root SSH to the node that runs CT 5700):" >&2 + echo " ./scripts/deployment/fix-dev-vm-srv-projects-ownership.sh" >&2 + fi + exit "$rsync_ec" +fi + +echo "" +echo "Done. Next: SSH to dev VM, open /srv/projects/proxmox in Cursor (Remote-SSH), run pnpm/npm install where needed." diff --git a/scripts/dev-vm/act-runner-resource-snapshot.sh b/scripts/dev-vm/act-runner-resource-snapshot.sh new file mode 100755 index 00000000..1cc65b28 --- /dev/null +++ b/scripts/dev-vm/act-runner-resource-snapshot.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Quick RAM / Docker snapshot for act_runner CTs (5700 + 5701). Host loadavg inside LXCs +# tracks the Proxmox host — use docker stats for job CPU when containers are running. +# +# Usage: +# bash scripts/dev-vm/act-runner-resource-snapshot.sh +# +# Env: +# PROXMOX_HOST_R630_04 — default 192.168.11.14 + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +[[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" + +PVE="${PROXMOX_HOST_R630_04:-192.168.11.14}" + +print_ct() { + local vmid="$1" + echo "=== CT ${vmid} ===" + ssh -o BatchMode=yes -o ConnectTimeout=12 "root@${PVE}" "pct exec ${vmid} -- bash -lc 'hostname; nproc; free -h | head -2; echo loadavg: \$(cat /proc/loadavg); systemctl show act-runner -p MemoryCurrent -p CPUUsageNSec --no-pager 2>/dev/null || true; docker stats --no-stream 2>/dev/null | head -12 || echo \"(no docker stats / no containers)\"'" + echo "" +} + +print_ct 5700 +print_ct 5701 diff --git a/scripts/dev-vm/apply-act-runner-config.sh b/scripts/dev-vm/apply-act-runner-config.sh new file mode 100755 index 00000000..bb5ce28d --- /dev/null +++ b/scripts/dev-vm/apply-act-runner-config.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Copy repo-managed act_runner YAML to CT 5700 / 5701 and restart services. +# Requires SSH to the Proxmox node that hosts both CTs (default r630-04). +# +# Usage (repo root): +# bash scripts/dev-vm/apply-act-runner-config.sh +# +# Env: +# PROXMOX_HOST_R630_04 — override Proxmox host IP (default 192.168.11.14) + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +[[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" + +PVE="${PROXMOX_HOST_R630_04:-192.168.11.14}" +CFG_DIR="${PROJECT_ROOT}/config/gitea-act-runner" + +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PVE}" "pct exec 5700 -- mkdir -p /etc/act_runner" +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PVE}" "pct exec 5701 -- mkdir -p /etc/act_runner" + +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PVE}" "pct exec 5700 -- bash -c 'cat > /etc/act_runner/config.yaml'" < "${CFG_DIR}/config-5700-heavy.yaml" +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PVE}" "pct exec 5701 -- bash -c 'cat > /etc/act_runner/config.yaml'" < "${CFG_DIR}/config-5701-standard.yaml" + +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PVE}" \ + "pct exec 5700 -- systemctl restart act-runner && pct exec 5701 -- systemctl restart act-runner" + +echo "Applied templates and restarted act-runner on 5700 and 5701 (${PVE})." diff --git a/scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh b/scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh new file mode 100755 index 00000000..63e08062 --- /dev/null +++ b/scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Standard runner on CT 5701 (gitea-runner-1): ubuntu-latest / 22.04 / 20.04 for org-wide jobs. +# Gitea HTTP is on dev-vm — use LAN URL from inside 5701. +# +# Usage (repo root with GITEA_TOKEN in .env): +# bash scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +[[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" + +IP_DEV="${IP_DEV_VM:-192.168.11.59}" + +export DEV_VM_VMID="${DEV_VM_VMID:-5701}" +export GITEA_RUNNER_INSTANCE="${GITEA_RUNNER_INSTANCE:-http://${IP_DEV}:3000}" +export RUNNER_LABELS="${RUNNER_LABELS:-ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest,ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04,ubuntu-20.04:docker://docker.gitea.com/runner-images:ubuntu-20.04}" + +exec bash "${SCRIPT_DIR}/bootstrap-gitea-act-runner.sh" diff --git a/scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh b/scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh index 46df3661..91f3d90e 100755 --- a/scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh +++ b/scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh @@ -1,70 +1,14 @@ #!/usr/bin/env bash -# Site-wide Gitea Actions runner: use admin GITEA_TOKEN from root .env to fetch the -# instance registration token, then register act_runner on dev-vm (5700) with ubuntu-latest. -# -# Requires: SSH to Proxmox (BatchMode), CT 5700 running Gitea + act_runner under /opt/act_runner. -# Env (from .env via load-project-env): GITEA_TOKEN, optional GITEA_URL, RUNNER_LABELS, -# RUNNER_FORCE_REREGISTER=1 to drop .runner and re-register, DEV_VM_VMID (default 5700). -# -# Usage (repo root): -# bash scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh -# RUNNER_FORCE_REREGISTER=1 bash scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh +# Heavy runner on CT 5700 (dev-vm): registers ubuntu-latest-heavy for monorepo / validation workflows. +# See scripts/dev-vm/bootstrap-gitea-act-runner.sh set -euo pipefail - SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" -# Load only root .env + IPs (avoid full load-project-env if another dotenv exits non-zero under set -e). -[[ -f "${PROJECT_ROOT}/.env" ]] && set -a && source "${PROJECT_ROOT}/.env" && set +a [[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" -PROXMOX_HOST_R630_01="${PROXMOX_R630_01:-${PROXMOX_HOST_R630_01:-192.168.11.11}}" -PROXMOX_HOST_R630_02="${PROXMOX_R630_02:-${PROXMOX_HOST_R630_02:-192.168.11.12}}" -PROXMOX_HOST_ML110="${PROXMOX_ML110:-${PROXMOX_HOST_ML110:-192.168.11.10}}" -get_host_for_vmid() { - case "$1" in - 5000|5700|7810|2201|2303|2401|6200|6201|10234|10237|5800|5801) echo "${PROXMOX_HOST_R630_02}";; - 5400|5401|5402|5403|5410|5411|5412|5413|5414|5415|5416|5417|5418|5419|5420|5421|5422|5423|5424|5425|5440|5441|5442|5443|5444|5445|5446|5447|5448|5449|5450|5451|5452|5453|5454|5455|5470|5471|5472|5473|5474|5475|5476) echo "${PROXMOX_HOST_R630_02}";; - 2101|10130|10150|10151|106|107|108|10000|10001|10020|10100|10101|10120|10233|10235) echo "${PROXMOX_HOST_R630_01}";; - 2301|2400|1504|2503|2504|2505) echo "${PROXMOX_HOST_ML110}";; - *) echo "${PROXMOX_HOST_R630_01}";; - esac -} -GITEA_URL="${GITEA_URL:-https://gitea.d-bis.org}" -GITEA_URL="${GITEA_URL%/}" -VMID="${DEV_VM_VMID:-5700}" -RUNNER_LABELS="${RUNNER_LABELS:-ubuntu-latest}" +export DEV_VM_VMID="${DEV_VM_VMID:-5700}" +export GITEA_RUNNER_INSTANCE="${GITEA_RUNNER_INSTANCE:-http://127.0.0.1:3000}" +export RUNNER_LABELS="${RUNNER_LABELS:-ubuntu-latest-heavy:docker://docker.gitea.com/runner-images:ubuntu-latest}" -if [[ -z "${GITEA_TOKEN:-}" ]]; then - echo "ERROR: GITEA_TOKEN not set (root .env)." >&2 - exit 1 -fi - -REG_JSON="$(curl -sS -H "Authorization: token ${GITEA_TOKEN}" \ - "${GITEA_URL}/api/v1/admin/runners/registration-token")" -REG_TOKEN="$(printf '%s' "$REG_JSON" | sed -n 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')" -if [[ -z "$REG_TOKEN" || "$REG_TOKEN" == "null" ]]; then - echo "ERROR: Could not get admin registration token. Response:" >&2 - printf '%s\n' "$REG_JSON" >&2 - echo "Ensure GITEA_TOKEN is an admin token with access to GET /api/v1/admin/runners/registration-token" >&2 - exit 1 -fi - -PROXMOX_HOST="$(get_host_for_vmid "$VMID")" -echo "Using Proxmox host ${PROXMOX_HOST} for VMID ${VMID}." - -if [[ "${RUNNER_FORCE_REREGISTER:-0}" == "1" ]]; then - ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ - "pct exec ${VMID} -- bash -lc 'rm -f /opt/act_runner/.runner; systemctl stop act-runner 2>/dev/null || true'" -fi - -# Pass registration token into the container without embedding raw secret in ssh argv (still reversible from b64). -TB64="$(printf '%s' "$REG_TOKEN" | base64 | tr -d '\n')" -ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ - "pct exec ${VMID} -- bash -c 'export GITEA_RUNNER_REGISTRATION_TOKEN=\$(printf %s \"${TB64}\" | base64 -d); export RUNNER_LABELS=\"${RUNNER_LABELS}\"; bash -s'" \ - < "${SCRIPT_DIR}/setup-act-runner.sh" - -ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ - "pct exec ${VMID} -- bash -s" < "${SCRIPT_DIR}/install-act-runner-systemd.sh" - -echo "Done. Check Gitea Admin → Actions → Runners for an online runner with labels including: ${RUNNER_LABELS}" +exec bash "${SCRIPT_DIR}/bootstrap-gitea-act-runner.sh" diff --git a/scripts/dev-vm/bootstrap-gitea-act-runner.sh b/scripts/dev-vm/bootstrap-gitea-act-runner.sh new file mode 100755 index 00000000..0eb9c405 --- /dev/null +++ b/scripts/dev-vm/bootstrap-gitea-act-runner.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +# Register/re-register Gitea act_runner on a Proxmox LXC (5700 heavy pool or 5701 standard pool). +# +# Env (required unless noted): +# GITEA_TOKEN — admin token (root .env) +# DEV_VM_VMID — default 5700 +# GITEA_RUNNER_INSTANCE — URL passed to act_runner register --instance (5700: http://127.0.0.1:3000) +# RUNNER_LABELS — comma-separated labels (docker image refs); default set by wrappers +# Optional: +# GITEA_URL — default https://gitea.d-bis.org +# RUNNER_FORCE_REREGISTER=1 — remove .runner before register +# +# Usage: +# bash scripts/dev-vm/bootstrap-gitea-act-runner-site-wide.sh +# bash scripts/dev-vm/bootstrap-gitea-act-runner-secondary-lan.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +[[ -f "${PROJECT_ROOT}/.env" ]] && set -a && source "${PROJECT_ROOT}/.env" && set +a +[[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ]] && source "${PROJECT_ROOT}/config/ip-addresses.conf" + +PROXMOX_HOST_R630_04="${PROXMOX_HOST_R630_04:-192.168.11.14}" +PROXMOX_HOST_R630_01="${PROXMOX_R630_01:-${PROXMOX_HOST_R630_01:-192.168.11.11}}" +PROXMOX_HOST_R630_02="${PROXMOX_R630_02:-${PROXMOX_HOST_R630_02:-192.168.11.12}}" + +get_host_for_vmid() { + local vmid="$1" + case "$vmid" in + 5700|5701) echo "${PROXMOX_HOST_R630_04}";; + 5000|7810|2201|2303|2401|6200|6201|10234|10237|5800|5801) echo "${PROXMOX_HOST_R630_02}";; + *) echo "${PROXMOX_HOST_R630_01}";; + esac +} + +GITEA_URL="${GITEA_URL:-https://gitea.d-bis.org}" +GITEA_URL="${GITEA_URL%/}" +VMID="${DEV_VM_VMID:-5700}" +GITEA_RUNNER_INSTANCE="${GITEA_RUNNER_INSTANCE:-http://127.0.0.1:3000}" + +if [[ -z "${RUNNER_LABELS:-}" ]]; then + echo "ERROR: RUNNER_LABELS must be set (use a wrapper script or export explicitly)." >&2 + exit 1 +fi + +if [[ -z "${GITEA_TOKEN:-}" ]]; then + echo "ERROR: GITEA_TOKEN not set (root .env)." >&2 + exit 1 +fi + +REG_JSON="$(curl -sS -H "Authorization: token ${GITEA_TOKEN}" \ + "${GITEA_URL}/api/v1/admin/runners/registration-token")" +REG_TOKEN="$(printf '%s' "$REG_JSON" | sed -n 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')" +if [[ -z "$REG_TOKEN" || "$REG_TOKEN" == "null" ]]; then + echo "ERROR: Could not get admin registration token. Response:" >&2 + printf '%s\n' "$REG_JSON" >&2 + exit 1 +fi + +PROXMOX_HOST="$(get_host_for_vmid "$VMID")" +echo "Using Proxmox host ${PROXMOX_HOST} for VMID ${VMID}." + +TB64="$(printf '%s' "$REG_TOKEN" | base64 | tr -d '\n')" +LB64="$(printf '%s' "$RUNNER_LABELS" | base64 | tr -d '\n')" +IB64="$(printf '%s' "$GITEA_RUNNER_INSTANCE" | base64 | tr -d '\n')" + +if [[ "${RUNNER_FORCE_REREGISTER:-0}" == "1" ]]; then + ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ + "pct exec ${VMID} -- bash -lc 'rm -f /opt/act_runner/.runner; systemctl stop act-runner 2>/dev/null || true'" +fi + +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ + "pct exec ${VMID} -- bash -c 'export GITEA_RUNNER_REGISTRATION_TOKEN=\$(printf %s \"${TB64}\" | base64 -d); export RUNNER_LABELS=\$(printf %s \"${LB64}\" | base64 -d); export INSTANCE=\$(printf %s \"${IB64}\" | base64 -d); bash -s'" \ + < "${SCRIPT_DIR}/setup-act-runner.sh" + +ACT_RUNNER_CONFIG="${ACT_RUNNER_CONFIG:-/etc/act_runner/config.yaml}" +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new "root@${PROXMOX_HOST}" \ + "pct exec ${VMID} -- env ACT_RUNNER_CONFIG=${ACT_RUNNER_CONFIG} GITEA_ACTION_URL=${GITEA_RUNNER_INSTANCE} bash -s" \ + < "${SCRIPT_DIR}/install-act-runner-systemd.sh" + +echo "Done. VMID ${VMID} — labels: ${RUNNER_LABELS}" diff --git a/scripts/dev-vm/delete-offline-gitea-actions-runners.sh b/scripts/dev-vm/delete-offline-gitea-actions-runners.sh new file mode 100755 index 00000000..2cb6b428 --- /dev/null +++ b/scripts/dev-vm/delete-offline-gitea-actions-runners.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# Delete Gitea Actions runners that are **offline** (stale rows after re-register). +# Uses Admin API — requires GITEA_TOKEN (admin) in repo root .env. +# +# Usage (repo root): +# bash scripts/dev-vm/delete-offline-gitea-actions-runners.sh --dry-run +# bash scripts/dev-vm/delete-offline-gitea-actions-runners.sh --apply +# +# Over SSH (from a host with this repo and .env): +# ssh user@workstation 'cd /path/to/proxmox && bash scripts/dev-vm/delete-offline-gitea-actions-runners.sh --apply' + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +[[ -f "${PROJECT_ROOT}/.env" ]] && set -a && source "${PROJECT_ROOT}/.env" && set +a + +GITEA_URL="${GITEA_URL:-https://gitea.d-bis.org}" +GITEA_URL="${GITEA_URL%/}" +MODE="${1:-}" + +if [[ -z "${GITEA_TOKEN:-}" ]]; then + echo "ERROR: GITEA_TOKEN not set (root .env)." >&2 + exit 1 +fi + +if [[ "$MODE" != "--dry-run" && "$MODE" != "--apply" ]]; then + echo "Usage: $0 --dry-run | --apply" >&2 + exit 1 +fi + +export GITEA_URL GITEA_TOKEN +export DELETE_MODE="$MODE" + +python3 <<'PY' +import json, os, sys, urllib.request + +base = os.environ["GITEA_URL"].rstrip("/") +token = os.environ["GITEA_TOKEN"] +mode = os.environ["DELETE_MODE"] + +req = urllib.request.Request( + f"{base}/api/v1/admin/actions/runners?limit=100", + headers={"Authorization": f"token {token}"}, +) +with urllib.request.urlopen(req, timeout=60) as resp: + data = json.loads(resp.read().decode()) + +runners = data.get("runners") or [] +offline = [r for r in runners if r.get("status") == "offline"] + +if not offline: + print("No offline runners.") + sys.exit(0) + +for r in offline: + print(f"offline id={r.get('id')} name={r.get('name')!r}") + +if mode == "--dry-run": + print("--dry-run: no DELETE issued.") + sys.exit(0) + +for r in offline: + rid = r["id"] + dreq = urllib.request.Request( + f"{base}/api/v1/admin/actions/runners/{rid}", + method="DELETE", + headers={"Authorization": f"token {token}"}, + ) + with urllib.request.urlopen(dreq, timeout=60) as resp: + print(f"DELETE runner id={rid} -> HTTP {resp.status}") +PY diff --git a/scripts/dev-vm/install-act-runner-systemd.sh b/scripts/dev-vm/install-act-runner-systemd.sh index e3b68158..5842d983 100755 --- a/scripts/dev-vm/install-act-runner-systemd.sh +++ b/scripts/dev-vm/install-act-runner-systemd.sh @@ -10,6 +10,8 @@ set -euo pipefail WORK_DIR="${WORK_DIR:-/opt/act_runner}" GITEA_ACTION_URL="${GITEA_ACTION_URL:-http://127.0.0.1:3000}" +ACT_RUNNER_CONFIG="${ACT_RUNNER_CONFIG:-/etc/act_runner/config.yaml}" +mkdir -p "$(dirname "${ACT_RUNNER_CONFIG}")" if [ ! -x "${WORK_DIR}/act_runner" ]; then echo "Missing ${WORK_DIR}/act_runner — run setup-act-runner.sh with GITEA_RUNNER_REGISTRATION_TOKEN first." @@ -30,7 +32,7 @@ After=network.target Type=simple User=root WorkingDirectory=${WORK_DIR} -ExecStart=${WORK_DIR}/act_runner daemon +ExecStart=${WORK_DIR}/act_runner daemon -c ${ACT_RUNNER_CONFIG} Restart=on-failure RestartSec=10 Environment=GITEA_ACTION_URL=${GITEA_ACTION_URL} diff --git a/scripts/dev-vm/setup-act-runner.sh b/scripts/dev-vm/setup-act-runner.sh index 34a0b20a..4c8b3599 100644 --- a/scripts/dev-vm/setup-act-runner.sh +++ b/scripts/dev-vm/setup-act-runner.sh @@ -7,10 +7,10 @@ set -euo pipefail ACT_RUNNER_VERSION="${ACT_RUNNER_VERSION:-0.2.13}" # Gitea root URL as seen from this host (same LXC as Gitea → 127.0.0.1) -INSTANCE="${INSTANCE:-http://127.0.0.1:3000}" +INSTANCE="${INSTANCE:-${GITEA_RUNNER_INSTANCE:-http://127.0.0.1:3000}}" WORK_DIR="${WORK_DIR:-/opt/act_runner}" TOKEN="${GITEA_RUNNER_REGISTRATION_TOKEN:-}" -# Workflows commonly use runs-on: ubuntu-latest; labels must match. +# Labels must match workflow runs-on (e.g. ubuntu-latest or ubuntu-latest-heavy); comma-separated. RUNNER_LABELS="${RUNNER_LABELS:-ubuntu-latest}" if [ -z "$TOKEN" ]; then diff --git a/scripts/fix-blockscout-forge-verification.sh b/scripts/fix-blockscout-forge-verification.sh index 5aea7f79..d5e801c5 100755 --- a/scripts/fix-blockscout-forge-verification.sh +++ b/scripts/fix-blockscout-forge-verification.sh @@ -44,6 +44,6 @@ ENDSSH echo "" echo "Verifier URL: http://${IP}/api/" echo "If forge still fails with 'module and action required', use manual verification:" -echo " https://explorer.d-bis.org/address/#verify-contract" +echo " https://explorer.d-bis.org/addresses/#verify-contract" echo "" echo "Test: source smom-dbis-138/.env && ./scripts/verify-contracts-blockscout.sh" diff --git a/scripts/health/check-rpc-vms-health.sh b/scripts/health/check-rpc-vms-health.sh old mode 100644 new mode 100755 diff --git a/scripts/lib/ei_matrix_multicall3_cwusdc_batch.py b/scripts/lib/ei_matrix_multicall3_cwusdc_batch.py new file mode 100644 index 00000000..240088fc --- /dev/null +++ b/scripts/lib/ei_matrix_multicall3_cwusdc_batch.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 +""" +Batch mainnet cWUSDC to EI matrix wallets via canonical Multicall3 aggregate3. + +Each inner call is transferFrom(deployer, recipient, amount) on the token, so +msg.sender is Multicall3. Requires a prior approve(deployer -> Multicall3) for +at least the sum of amounts in this run (one tx before batches). + +Default Multicall3 (Ethereum): 0xcA11bde05977b3631167028862bE2a173976CA11 + +Examples: + python3 scripts/lib/ei_matrix_multicall3_cwusdc_batch.py --dry-run \\ + --tsv reports/status/ei-matrix-cwusdc-topup-amounts.tsv + + python3 scripts/lib/ei_matrix_multicall3_cwusdc_batch.py --execute \\ + --tsv reports/status/ei-matrix-cwusdc-topup-amounts.tsv + +Env: PRIVATE_KEY (or DEPLOYER_ADDRESS for dry-run calldata only), ETHEREUM_MAINNET_RPC, + CWUSDC_MAINNET (optional), MULTICALL3_MAINNET (optional), EI_MATRIX_MC_CHUNK (default 200). +""" +from __future__ import annotations + +import argparse +import json +import os +import subprocess +import sys +import time +from pathlib import Path + +MULTICALL3_MAINNET = "0xcA11bde05977b3631167028862bE2a173976CA11" +DEFAULT_CWUSDC = "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" + + +def _sh(cmd: list[str]) -> str: + r = subprocess.run(cmd, capture_output=True, text=True, check=False) + if r.returncode != 0: + raise RuntimeError(f"command failed: {' '.join(cmd)}\n{(r.stderr or r.stdout).strip()}") + return (r.stdout or "").strip() + + +def _deployer(pk: str | None) -> str: + if pk: + return _sh(["cast", "wallet", "address", "--private-key", pk]) + env = (os.environ.get("DEPLOYER_ADDRESS") or os.environ.get("DEPLOYER") or "").strip() + if env: + return env + raise SystemExit("Set PRIVATE_KEY or DEPLOYER_ADDRESS for transferFrom(from=...)") + + +def _cast_calldata_transfer_from(from_addr: str, to_addr: str, amount: int) -> str: + out = _sh(["cast", "calldata", "transferFrom(address,address,uint256)", from_addr, to_addr, str(amount)]) + return out if out.startswith("0x") else "0x" + out + + +def _cast_calldata_aggregate3(calls_tuple_str: str) -> str: + out = _sh(["cast", "calldata", "aggregate3((address,bool,bytes)[])", calls_tuple_str]) + return out if out.startswith("0x") else "0x" + out + + +def _estimate_gas(from_addr: str, multicall: str, data: str, rpc_url: str) -> int: + payload = json.dumps({"from": from_addr, "to": multicall, "data": data}) + raw = _sh(["cast", "rpc", "eth_estimateGas", payload, "--rpc-url", rpc_url]) + return int(raw, 16) + + +def _allowance(token: str, owner: str, spender: str, rpc_url: str) -> int: + out = _sh(["cast", "call", token, "allowance(address,address)(uint256)", owner, spender, "--rpc-url", rpc_url]) + return int(out.split()[0], 0) + + +def _send_cast_send(to: str, sig: str, args: list[str], rpc_url: str, pk: str, gas_limit: str | None) -> None: + cmd = ["cast", "send", to, sig, *args, "--rpc-url", rpc_url, "--private-key", pk] + if gas_limit: + cmd.extend(["--gas-limit", gas_limit]) + print("→", " ".join(cmd[:8]), "…", file=sys.stderr) + r = subprocess.run(cmd, env={**os.environ}) + if r.returncode != 0: + sys.exit(r.returncode) + + +def _send_raw_calldata(to: str, data: str, rpc_url: str, pk: str, gas_limit: str) -> None: + cmd = ["cast", "send", to, data, "--rpc-url", rpc_url, "--private-key", pk, "--gas-limit", gas_limit] + print("→ cast send", to[:10] + "…", "--gas-limit", gas_limit, file=sys.stderr) + r = subprocess.run(cmd, env={**os.environ}) + if r.returncode != 0: + sys.exit(r.returncode) + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--tsv", required=True, help="linearIndex TAB amountRaw") + ap.add_argument("--grid", default="config/pmm-soak-wallet-grid.json") + ap.add_argument("--chunk-size", type=int, default=int(os.environ.get("EI_MATRIX_MC_CHUNK", "200"))) + ap.add_argument("--multicall", default=os.environ.get("MULTICALL3_MAINNET", MULTICALL3_MAINNET)) + ap.add_argument("--token", default=os.environ.get("CWUSDC_MAINNET", DEFAULT_CWUSDC)) + ap.add_argument("--rpc-url", default=os.environ.get("ETHEREUM_MAINNET_RPC") or os.environ.get("RPC_URL_1") or "") + ap.add_argument("--dry-run", action="store_true") + ap.add_argument("--execute", action="store_true") + ap.add_argument("--gas-headroom-bps", type=int, default=13000) + ap.add_argument("--min-gas-per-batch", type=int, default=500_000) + ap.add_argument("--start-batch", type=int, default=0) + ap.add_argument("--max-batches", type=int, default=0, help="0 = all remaining") + ap.add_argument("--progress-file", default="reports/status/ei-matrix-multicall3-batch-progress.txt") + args = ap.parse_args() + + if not args.rpc_url: + print("Need --rpc-url or ETHEREUM_MAINNET_RPC / RPC_URL_1", file=sys.stderr) + return 2 + if args.dry_run == args.execute: + print("Specify exactly one of --dry-run or --execute", file=sys.stderr) + return 2 + + repo = Path(__file__).resolve().parents[2] + grid_path = repo / args.grid if not os.path.isabs(args.grid) else Path(args.grid) + tsv_path = repo / args.tsv if not os.path.isabs(args.tsv) else Path(args.tsv) + + wallets = json.loads(grid_path.read_text(encoding="utf-8"))["wallets"] + rows: list[tuple[str, int]] = [] + for line in tsv_path.read_text(encoding="utf-8").splitlines(): + line = line.split("#", 1)[0].strip() + if not line: + continue + parts = line.split("\t") + if len(parts) < 2: + parts = line.split() + if len(parts) < 2: + continue + idx = int(parts[0]) + amt = int(parts[1]) + if amt <= 0: + continue + addr = wallets[idx]["address"] + rows.append((addr, amt)) + + if not rows: + print("No positive-amount rows in TSV.", file=sys.stderr) + return 0 + + pk = os.environ.get("PRIVATE_KEY", "").strip() or None + if args.execute and not pk: + print("PRIVATE_KEY required for --execute", file=sys.stderr) + return 2 + + deployer = _deployer(pk) + + mc = args.multicall + token = args.token + + all_chunks: list[list[tuple[str, int]]] = [] + for i in range(0, len(rows), args.chunk_size): + all_chunks.append(rows[i : i + args.chunk_size]) + + start_b = max(0, args.start_batch) + if args.max_batches > 0: + end_b = min(len(all_chunks), start_b + args.max_batches) + else: + end_b = len(all_chunks) + chunks = all_chunks[start_b:end_b] + budget_raw = sum(amt for c in chunks for _, amt in c) + + if not chunks: + print("No batches in range.", file=sys.stderr) + return 0 + + print( + f"batches {start_b}..{end_b - 1} of {len(all_chunks)} transfers={sum(len(c) for c in chunks)} " + f"budget_raw={budget_raw}", + file=sys.stderr, + ) + + if args.dry_run: + try: + allow = _allowance(token, deployer, mc, args.rpc_url) + except Exception: + allow = 0 + print(f"# allowance Multicall3: {allow} budget_this_run: {budget_raw}", file=sys.stderr) + if allow < budget_raw: + print( + f"cast send {token} \"approve(address,uint256)\" {mc} {budget_raw} \\\n" + f" --rpc-url \"$ETHEREUM_MAINNET_RPC\" --private-key \"$PRIVATE_KEY\" --gas-limit 120000", + file=sys.stderr, + ) + chunk = chunks[0] + parts = [] + for addr, amt in chunk: + data = _cast_calldata_transfer_from(deployer, addr, amt) + parts.append(f"({token},false,{data})") + tuple_str = "[" + ",".join(parts) + "]" + calldata = _cast_calldata_aggregate3(tuple_str) + gl = args.min_gas_per_batch + 65_000 * len(chunk) + sample_hex = repo / "reports/status/ei-matrix-multicall3-dryrun-sample-batch.hex" + sample_hex.write_text(calldata + "\n", encoding="utf-8") + rel = os.path.relpath(str(sample_hex), str(repo)) + print(f"\n# sample batch 0 n={len(chunk)} gas_limit~{gl}", file=sys.stderr) + print(f"# calldata written: {rel}", file=sys.stderr) + print( + f"cast send {mc} $(cat {rel}) --rpc-url \"$ETHEREUM_MAINNET_RPC\" \\\n" + f" --private-key \"$PRIVATE_KEY\" --gas-limit {gl}" + ) + print(f"\n# … {len(chunks)} batches total (chunk_size={args.chunk_size})", file=sys.stderr) + return 0 + + assert pk is not None + allow = _allowance(token, deployer, mc, args.rpc_url) + if allow < budget_raw: + print(f"Approving Multicall3 for {budget_raw} raw (was {allow})", file=sys.stderr) + _send_cast_send(token, "approve(address,uint256)", [mc, str(budget_raw)], args.rpc_url, pk, "120000") + time.sleep(2) + allow2 = _allowance(token, deployer, mc, args.rpc_url) + if allow2 < budget_raw: + print(f"Allowance insufficient: {allow2} < {budget_raw}", file=sys.stderr) + return 1 + + progress_path = repo / args.progress_file + progress_path.parent.mkdir(parents=True, exist_ok=True) + + for bi, chunk in enumerate(chunks): + global_batch_idx = start_b + bi + parts = [] + for addr, amt in chunk: + data = _cast_calldata_transfer_from(deployer, addr, amt) + parts.append(f"({token},false,{data})") + tuple_str = "[" + ",".join(parts) + "]" + calldata = _cast_calldata_aggregate3(tuple_str) + + gas_est = args.min_gas_per_batch + try: + gas_est = _estimate_gas(deployer, mc, calldata, args.rpc_url) + except Exception as e: + print(f"[warn] estimateGas failed, fallback: {e}", file=sys.stderr) + gas_est = 70_000 * len(chunk) + 400_000 + + gas_with_headroom = max(args.min_gas_per_batch, (gas_est * args.gas_headroom_bps + 9999) // 10000) + print(f"Batch {global_batch_idx}: n={len(chunk)} estimate={gas_est} limit={gas_with_headroom}", file=sys.stderr) + + _send_raw_calldata(mc, calldata, args.rpc_url, pk, str(gas_with_headroom)) + progress_path.write_text(f"{global_batch_idx}\n", encoding="utf-8") + time.sleep(1) + + print("Done.", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/lib/ei_matrix_onchain_readiness_audit.py b/scripts/lib/ei_matrix_onchain_readiness_audit.py new file mode 100644 index 00000000..0c397573 --- /dev/null +++ b/scripts/lib/ei_matrix_onchain_readiness_audit.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python3 +""" +On-chain readiness audit for EI matrix wallets (config/pmm-soak-wallet-grid.json). + +Queries ERC-20 balanceOf for each address on one or both chains: + - Ethereum mainnet cWUSDC (default from env CWUSDC_MAINNET) + - Chain 138 cUSDC (default canonical CompliantUSDC) + +Use for strength profiling: segment by class/lpbca via --report-by-class, find gaps vs thresholds. + +Environment (optional defaults for thresholds): + EI_MATRIX_AUDIT_MIN_MAINNET_RAW, EI_MATRIX_AUDIT_MIN_138_RAW, EI_MATRIX_AUDIT_WORKERS + +Examples: + python3 scripts/lib/ei_matrix_onchain_readiness_audit.py --mainnet-only --min-mainnet-raw 1 + python3 scripts/lib/ei_matrix_onchain_readiness_audit.py --both \\ + --shard-size 400 --min-mainnet-raw 12000000 --min-138-raw 0 --workers 3 \\ + --report-by-class --json-out reports/status/ei-matrix-readiness-audit-latest.json +""" +from __future__ import annotations + +import argparse +import json +import os +import sys +import urllib.error +import urllib.request +from concurrent.futures import ThreadPoolExecutor, as_completed +from pathlib import Path + +# balanceOf(address) selector +BALANCE_OF = bytes.fromhex("70a08231") +ADDR_PAD = 12 * b"\x00" + + +def encode_balance_of_call(addr: str) -> str: + a = addr.lower().removeprefix("0x") + if len(a) != 40: + raise ValueError(f"bad address {addr}") + data = BALANCE_OF + ADDR_PAD + bytes.fromhex(a) + return "0x" + data.hex() + + +def rpc_eth_call(to: str, data: str, rpc_url: str, timeout: float = 30.0) -> str: + body = json.dumps( + { + "jsonrpc": "2.0", + "id": 1, + "method": "eth_call", + "params": [{"to": to, "data": data}, "latest"], + } + ).encode() + req = urllib.request.Request(rpc_url, data=body, headers={"Content-Type": "application/json"}, method="POST") + with urllib.request.urlopen(req, timeout=timeout) as r: + j = json.loads(r.read().decode()) + if "error" in j: + raise RuntimeError(str(j["error"])) + return j.get("result") or "0x0" + + +def hex_to_int(h: str) -> int: + h = h.strip() + if not h or h == "0x": + return 0 + return int(h, 16) + + +def collect_rows_for_slice( + slice_items: list[tuple[int, dict]], + *, + do_main: bool, + do_138: bool, + mainnet_rpc: str, + chain138_rpc: str, + mainnet_token: str, + chain138_cusdc: str, + workers: int, +) -> list[dict]: + def fetch_one(item: tuple[int, dict]) -> tuple[int, dict, int, int]: + idx, w = item + addr = w["address"] + mbal, bbal = 0, 0 + if do_main: + calldata = encode_balance_of_call(addr) + res = rpc_eth_call(mainnet_token.lower(), calldata, mainnet_rpc) + mbal = hex_to_int(res) + if do_138: + calldata = encode_balance_of_call(addr) + res = rpc_eth_call(chain138_cusdc.lower(), calldata, chain138_rpc) + bbal = hex_to_int(res) + return idx, w, mbal, bbal + + rows: list[dict] = [] + with ThreadPoolExecutor(max_workers=max(1, workers)) as ex: + futs = [ex.submit(fetch_one, it) for it in slice_items] + for fut in as_completed(futs): + idx, w, mbal, bbal = fut.result() + cls = int(w.get("class", 0)) + row = { + "linearIndex": idx, + "address": w["address"], + "cellId": w.get("cellId"), + "class": cls, + "mainnetCwusdcRaw": mbal if do_main else None, + "chain138CusdcRaw": bbal if do_138 else None, + } + rows.append(row) + return rows + + +def write_indices(path: Path, indices: list[int]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("\n".join(str(i) for i in indices) + ("\n" if indices else ""), encoding="utf-8") + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--grid", default="config/pmm-soak-wallet-grid.json") + ap.add_argument("--offset", type=int, default=0) + ap.add_argument("--limit", type=int, default=0, help="0 = all from offset to grid end") + ap.add_argument( + "--shard-size", + type=int, + default=int(os.environ.get("EI_MATRIX_AUDIT_SHARD_SIZE", "0")), + help="If >0, query in sequential shards of this size (eases RPC load). 0 = single batch.", + ) + ap.add_argument("--workers", type=int, default=int(os.environ.get("EI_MATRIX_AUDIT_WORKERS", "4"))) + ap.add_argument("--mainnet-only", action="store_true") + ap.add_argument("--chain138-only", action="store_true") + ap.add_argument("--both", action="store_true") + ap.add_argument("--mainnet-rpc", default=os.environ.get("ETHEREUM_MAINNET_RPC") or os.environ.get("RPC_URL_1") or "") + ap.add_argument("--chain138-rpc", default=os.environ.get("RPC_URL_138") or os.environ.get("CHAIN138_PUBLIC_RPC_URL") or "") + ap.add_argument("--mainnet-token", default=os.environ.get("CWUSDC_MAINNET", "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a")) + ap.add_argument( + "--chain138-cusdc", + default=os.environ.get("CUSDC_CHAIN138", "0xf22258f57794CC8E06237084b353Ab30fFfa640b"), + ) + ap.add_argument( + "--min-mainnet-raw", + type=int, + default=int(os.environ.get("EI_MATRIX_AUDIT_MIN_MAINNET_RAW", "0")), + help="fail wallets strictly below this (mainnet); env EI_MATRIX_AUDIT_MIN_MAINNET_RAW", + ) + ap.add_argument( + "--min-138-raw", + type=int, + default=int(os.environ.get("EI_MATRIX_AUDIT_MIN_138_RAW", "0")), + help="fail wallets strictly below this (138); env EI_MATRIX_AUDIT_MIN_138_RAW", + ) + ap.add_argument("--report-by-class", action="store_true", help="aggregate counts by matrix class 0..5") + ap.add_argument("--json-out", default="", help="write full per-wallet rows + summary") + ap.add_argument( + "--gaps-mainnet-out", + default="", + help="write newline-separated linear indices below mainnet minimum (only if mainnet queried)", + ) + ap.add_argument( + "--gaps-138-out", + default="", + help="write newline-separated linear indices below 138 minimum (only if 138 queried)", + ) + ap.add_argument("--max-list", type=int, default=200, help="max gap indices to print on stderr") + args = ap.parse_args() + + repo = Path(__file__).resolve().parents[2] + grid_path = repo / args.grid if not os.path.isabs(args.grid) else Path(args.grid) + data = json.loads(grid_path.read_text(encoding="utf-8")) + wallets: list[dict] = data["wallets"] + n = len(wallets) + scan_end = n if args.limit <= 0 else min(n, args.offset + args.limit) + scan_start = args.offset + if scan_start < 0 or scan_start > n: + print("Invalid --offset", file=sys.stderr) + return 2 + if scan_end < scan_start: + print("Invalid --limit / range", file=sys.stderr) + return 2 + + do_main = args.mainnet_only or args.both + do_138 = args.chain138_only or args.both + if not do_main and not do_138: + print("Specify --mainnet-only, --chain138-only, or --both", file=sys.stderr) + return 2 + if do_main and not args.mainnet_rpc: + print("Need --mainnet-rpc or ETHEREUM_MAINNET_RPC / RPC_URL_1", file=sys.stderr) + return 2 + if do_138 and not args.chain138_rpc: + print("Need --chain138-rpc or RPC_URL_138", file=sys.stderr) + return 2 + + shard = max(0, args.shard_size) + rows: list[dict] = [] + if shard <= 0: + slice_items = list(enumerate(wallets[scan_start:scan_end], start=scan_start)) + rows = collect_rows_for_slice( + slice_items, + do_main=do_main, + do_138=do_138, + mainnet_rpc=args.mainnet_rpc, + chain138_rpc=args.chain138_rpc, + mainnet_token=args.mainnet_token, + chain138_cusdc=args.chain138_cusdc, + workers=args.workers, + ) + else: + for start in range(scan_start, scan_end, shard): + chunk_end = min(scan_end, start + shard) + slice_items = list(enumerate(wallets[start:chunk_end], start=start)) + print(f"Shard {start}..{chunk_end} ({len(slice_items)} wallets)", file=sys.stderr) + rows.extend( + collect_rows_for_slice( + slice_items, + do_main=do_main, + do_138=do_138, + mainnet_rpc=args.mainnet_rpc, + chain138_rpc=args.chain138_rpc, + mainnet_token=args.mainnet_token, + chain138_cusdc=args.chain138_cusdc, + workers=args.workers, + ) + ) + + rows.sort(key=lambda r: r["linearIndex"]) + + by_class: dict[int, dict] = {i: {"n": 0, "mainnet_below": 0, "138_below": 0} for i in range(6)} + if args.report_by_class: + for r in rows: + cls = int(r.get("class", 0)) + if cls not in by_class: + continue + by_class[cls]["n"] += 1 + if do_main and r["mainnetCwusdcRaw"] < args.min_mainnet_raw: + by_class[cls]["mainnet_below"] += 1 + if do_138 and r["chain138CusdcRaw"] < args.min_138_raw: + by_class[cls]["138_below"] += 1 + + gaps_main: list[int] = [] + gaps_138: list[int] = [] + for r in rows: + if do_main and r["mainnetCwusdcRaw"] < args.min_mainnet_raw: + gaps_main.append(r["linearIndex"]) + if do_138 and r["chain138CusdcRaw"] < args.min_138_raw: + gaps_138.append(r["linearIndex"]) + + summary = { + "gridPath": str(grid_path), + "slice": {"offset": scan_start, "endExclusive": scan_end, "count": len(rows)}, + "shardSize": shard if shard > 0 else None, + "mainnet": { + "token": args.mainnet_token if do_main else None, + "rpc": args.mainnet_rpc[:48] + "…" if do_main and len(args.mainnet_rpc) > 48 else args.mainnet_rpc, + "minRaw": args.min_mainnet_raw, + "belowMin": len(gaps_main), + }, + "chain138": { + "token": args.chain138_cusdc if do_138 else None, + "minRaw": args.min_138_raw, + "belowMin": len(gaps_138), + }, + "byClass": by_class if args.report_by_class else None, + } + + print(json.dumps(summary, indent=2)) + if gaps_main: + print( + f"\nMainnet cWUSDC below min ({args.min_mainnet_raw}) — {len(gaps_main)} wallets " + f"(first {args.max_list} indices):", + file=sys.stderr, + ) + print(", ".join(str(x) for x in gaps_main[: args.max_list]), file=sys.stderr) + if gaps_138: + print( + f"\nChain 138 cUSDC below min ({args.min_138_raw}) — {len(gaps_138)} wallets " + f"(first {args.max_list} indices):", + file=sys.stderr, + ) + print(", ".join(str(x) for x in gaps_138[: args.max_list]), file=sys.stderr) + + if args.json_out: + outp = repo / args.json_out if not os.path.isabs(args.json_out) else Path(args.json_out) + outp.parent.mkdir(parents=True, exist_ok=True) + outp.write_text(json.dumps({"summary": summary, "rows": rows}, indent=2), encoding="utf-8") + print(f"\nWrote {outp}", file=sys.stderr) + + if do_main and args.gaps_mainnet_out: + gp = repo / args.gaps_mainnet_out if not os.path.isabs(args.gaps_mainnet_out) else Path(args.gaps_mainnet_out) + write_indices(gp, gaps_main) + print(f"Wrote mainnet gap indices ({len(gaps_main)}): {gp}", file=sys.stderr) + if do_138 and args.gaps_138_out: + gp = repo / args.gaps_138_out if not os.path.isabs(args.gaps_138_out) else Path(args.gaps_138_out) + write_indices(gp, gaps_138) + print(f"Wrote 138 gap indices ({len(gaps_138)}): {gp}", file=sys.stderr) + + fail = bool(gaps_main or gaps_138) + return 1 if fail else 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/lib/find-repo-files.sh b/scripts/lib/find-repo-files.sh new file mode 100755 index 00000000..8eaacf9d --- /dev/null +++ b/scripts/lib/find-repo-files.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# List files under the repo root without descending into node_modules or .git +# (avoids hanging on huge dependency trees). +# +# Usage: +# scripts/lib/find-repo-files.sh +# scripts/lib/find-repo-files.sh -name '*.md' +# scripts/lib/find-repo-files.sh \( -name '*.ts' -o -name '*.tsx' \) +# +# Example — search text without scanning node_modules (prefer narrowing extensions; +# piping every file to grep can still be slow on very large trees): +# scripts/lib/find-repo-files.sh -name '*.md' | xargs grep -l 'pattern' 2>/dev/null +# scripts/lib/find-repo-files.sh \( -name '*.md' -o -name '*.sh' -o -name '*.ts' -o -name '*.json' \) \\ +# | xargs grep -l 'pattern' 2>/dev/null + +set -euo pipefail +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" + +# shellcheck disable=SC2086 +exec find "$ROOT" \ + \( -name node_modules -o -name .git \) -prune -o \ + -type f ${1+"$@"} -print diff --git a/scripts/lib/load-project-env.sh b/scripts/lib/load-project-env.sh index 9c6ed25a..430eb73f 100644 --- a/scripts/lib/load-project-env.sh +++ b/scripts/lib/load-project-env.sh @@ -172,12 +172,13 @@ export DBIS_CORE_DIR="${DBIS_CORE_DIR:-${PROJECT_ROOT}/dbis_core}" get_host_for_vmid() { local vmid="$1" case "$vmid" in - 7800|7801|7802|7803|7804|7805|7806) echo "${PROXMOX_HOST_R630_01}";; + 7800|7801|7802|7803|7805|7806) echo "${PROXMOX_HOST_R630_01}";; + 7804) echo "${PROXMOX_HOST_R630_04:-192.168.11.14}";; 10130|10150|10151|106|107|108|10000|10001|10020|10100|10101|10120|10203|10233|10235) echo "${PROXMOX_HOST_R630_01}";; 1000|1001|1002|1500|1501|1502|2101|2103) echo "${PROXMOX_HOST_R630_01}";; 1003|1004|1503|1504|1505|1506|1507|1509|1510|2102|2301|2304|2400|2402|2403) echo "${PROXMOX_HOST_R630_03}";; 1508) echo "${PROXMOX_HOST_R630_04}";; - 5700) echo "${PROXMOX_HOST_R630_04}";; + 5700|5701) echo "${PROXMOX_HOST_R630_04:-192.168.11.14}";; 5000|7810|2201|2303|2305|2306|2307|2308|2401|6200|6201|6202|6203|6204|6205|10234|10237|5800|5801) echo "${PROXMOX_HOST_R630_02}";; 2420|2430|2440|2460|2470|2480) echo "${PROXMOX_HOST_R630_01}";; 5400|5401|5402|5403|5410|5411|5412|5413|5414|5415|5416|5417|5418|5419|5420|5421|5422|5423|5424|5425|5440|5441|5442|5443|5444|5445|5446|5447|5448|5449|5450|5451|5452|5453|5454|5455|5470|5471|5472|5473|5474|5475|5476) echo "${PROXMOX_HOST_R630_02}";; diff --git a/scripts/lib/mev-protection.sh b/scripts/lib/mev-protection.sh new file mode 100755 index 00000000..b3e78bff --- /dev/null +++ b/scripts/lib/mev-protection.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +# Shared protected-broadcast helpers for Engine X Mainnet actions. +# +# Source after scripts/lib/load-project-env.sh. Reads use the normal public RPC; +# sensitive writes should go through mev_cast_send so operators cannot +# accidentally broadcast quote-defense swaps through the public mempool. + +mev_private_rpc_key() { + local key value + for key in ENGINE_X_PRIVATE_TX_RPC MEV_BLOCKER_RPC_URL FLASHBOTS_RPC_URL BLOXROUTE_RPC_URL BLINK_RPC_URL; do + value="${!key-}" + if [[ -n "${value}" ]]; then + printf '%s\n' "${key}" + return 0 + fi + done + return 1 +} + +mev_has_private_rpc() { + mev_private_rpc_key >/dev/null 2>&1 +} + +mev_write_rpc_label() { + local key + if key="$(mev_private_rpc_key)"; then + case "${key}" in + ENGINE_X_PRIVATE_TX_RPC) printf '%s\n' "${ENGINE_X_PRIVATE_TX_RPC_LABEL:-engine-x-private-tx-rpc}" ;; + MEV_BLOCKER_RPC_URL) printf '%s\n' "mev-blocker" ;; + FLASHBOTS_RPC_URL) printf '%s\n' "flashbots" ;; + BLOXROUTE_RPC_URL) printf '%s\n' "bloxroute" ;; + BLINK_RPC_URL) printf '%s\n' "blink" ;; + *) printf '%s\n' "${key}" ;; + esac + return 0 + fi + printf '%s\n' "public-mainnet-rpc" +} + +mev_write_rpc_url() { + local key + if key="$(mev_private_rpc_key)"; then + printf '%s\n' "${!key}" + return 0 + fi + + if [[ "${ENGINE_X_MEV_PROTECTION:-1}" == "1" && "${ENGINE_X_ALLOW_PUBLIC_BROADCAST:-0}" != "1" ]]; then + return 1 + fi + + if [[ -z "${ETHEREUM_MAINNET_RPC:-}" ]]; then + return 1 + fi + printf '%s\n' "${ETHEREUM_MAINNET_RPC}" +} + +mev_require_private_for_action() { + local action="${1:-engine-x-sensitive-action}" + if [[ "${ENGINE_X_MEV_PROTECTION:-1}" != "1" ]]; then + echo "WARN: MEV protection disabled for ${action} (ENGINE_X_MEV_PROTECTION=0)." >&2 + return 0 + fi + if mev_has_private_rpc; then + return 0 + fi + if [[ "${ENGINE_X_ALLOW_PUBLIC_BROADCAST:-0}" == "1" ]]; then + echo "WARN: public broadcast explicitly allowed for ${action} (ENGINE_X_ALLOW_PUBLIC_BROADCAST=1)." >&2 + return 0 + fi + + cat >&2 <&2 + return 1 + fi + cast send "${target}" "$@" --private-key "${PRIVATE_KEY:?PRIVATE_KEY is required}" --rpc-url "${rpc}" +} diff --git a/scripts/lib/require-proxmox-ssh-for-pct.sh b/scripts/lib/require-proxmox-ssh-for-pct.sh new file mode 100644 index 00000000..f562cb2b --- /dev/null +++ b/scripts/lib/require-proxmox-ssh-for-pct.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# Resolve PROXMOX_HOST for pct-over-SSH so operator workstations do not run pct by mistake. +# +# Usage (after VMID is set): +# PROXMOX_MONOREPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" # proxmox repo root +# source "${PROXMOX_MONOREPO_ROOT}/scripts/lib/require-proxmox-ssh-for-pct.sh" +# require_proxmox_ssh_for_pct +# +# Env: +# PROXMOX_HOST If set, use this host (ssh root@$PROXMOX_HOST … pct …). +# VMID Used with get_host_for_vmid when PROXMOX_HOST is unset. +# PROXMOX_MONOREPO_ROOT Proxmox monorepo root (directory containing scripts/lib/load-project-env.sh). +# PROJECT_ROOT Alternative to PROXMOX_MONOREPO_ROOT when sourcing load-project-env. +# DEPLOY_PCT_ON_LOCAL_PVE Set to 1 only on a real Proxmox node (/etc/pve/.members) to run local pct +# without SSH (hypervisor shell only). + +require_proxmox_ssh_for_pct() { + local vmid="${VMID:-}" + + if [[ "${DEPLOY_PCT_ON_LOCAL_PVE:-0}" == "1" ]]; then + if [[ -r /etc/pve/.members ]]; then + export PROXMOX_HOST="" + echo "NOTE: DEPLOY_PCT_ON_LOCAL_PVE=1 — using pct on this Proxmox node (no SSH)." >&2 + return 0 + fi + echo "ERROR: DEPLOY_PCT_ON_LOCAL_PVE=1 but this host is not a Proxmox cluster member (/etc/pve/.members missing)." >&2 + return 1 + fi + + if [[ -n "${PROXMOX_HOST:-}" ]]; then + echo "Using Proxmox target: ssh root@${PROXMOX_HOST} (VMID ${vmid:-n/a})" >&2 + return 0 + fi + + if [[ -z "$vmid" ]]; then + echo "ERROR: PROXMOX_HOST is unset and VMID is empty — cannot choose a Proxmox host." >&2 + echo " Set PROXMOX_HOST (e.g. 192.168.11.12) or VMID, or run on a PVE node with DEPLOY_PCT_ON_LOCAL_PVE=1." >&2 + return 1 + fi + + local root="${PROXMOX_MONOREPO_ROOT:-${PROJECT_ROOT:-}}" + if [[ -z "$root" || ! -f "$root/scripts/lib/load-project-env.sh" ]]; then + echo "ERROR: Proxmox monorepo root not found (expected scripts/lib/load-project-env.sh under PROXMOX_MONOREPO_ROOT or PROJECT_ROOT)." >&2 + return 1 + fi + + # shellcheck disable=SC1090 + PROJECT_ROOT="$root" source "$root/scripts/lib/load-project-env.sh" + + local chosen + chosen="$(get_host_for_vmid "$vmid")" + if [[ -z "$chosen" ]]; then + echo "ERROR: get_host_for_vmid returned empty for VMID=$vmid" >&2 + return 1 + fi + export PROXMOX_HOST="$chosen" + echo "Auto-selected Proxmox host from VMID ${vmid}: ssh root@${PROXMOX_HOST}" >&2 + return 0 +} diff --git a/scripts/lib/requirements-solana-ops.txt b/scripts/lib/requirements-solana-ops.txt new file mode 100644 index 00000000..d4e99374 --- /dev/null +++ b/scripts/lib/requirements-solana-ops.txt @@ -0,0 +1,3 @@ +# Used by scripts/deployment/solana-transfer-native.py (sign + serialize only). +# RPC calls use stdlib in scripts/lib/solana_jsonrpc.py (avoids solana-py sendTransaction parse panics on some hosts). +solders>=0.21.0,<0.26 diff --git a/scripts/lib/solana_jsonrpc.py b/scripts/lib/solana_jsonrpc.py new file mode 100644 index 00000000..a2fd4106 --- /dev/null +++ b/scripts/lib/solana_jsonrpc.py @@ -0,0 +1,188 @@ +""" +Minimal Solana JSON-RPC over HTTP (stdlib only). + +Some public RPCs return a bare string for ``sendTransaction`` ``result`` without +extra fields that ``solana-py``'s ``SendTransactionResp`` expects, which makes +``Client.send_raw_transaction`` panic while deserializing (missing JSON field +``data``). Use :func:`send_transaction_wire` for submission; keep ``solders`` +(or ``solana-py``) only for signing and local serialization. +""" + +from __future__ import annotations + +import base64 +import json +import time +import urllib.error +import urllib.request +from typing import Any + + +DEFAULT_USER_AGENT = "proxmox-scripts/solana-jsonrpc/1.0" + + +class SolanaJsonRpcError(RuntimeError): + """JSON-RPC error object or unexpected HTTP / parse failure.""" + + def __init__(self, message: str, *, payload: dict[str, Any] | None = None) -> None: + super().__init__(message) + self.payload = payload + + +def post_json_rpc( + rpc_url: str, + method: str, + params: list[Any], + *, + request_id: int = 1, + timeout_s: float = 90.0, + user_agent: str = DEFAULT_USER_AGENT, +) -> dict[str, Any]: + body = json.dumps( + {"jsonrpc": "2.0", "id": request_id, "method": method, "params": params} + ).encode("utf-8") + req = urllib.request.Request( + rpc_url, + data=body, + headers={"Content-Type": "application/json", "User-Agent": user_agent}, + method="POST", + ) + try: + with urllib.request.urlopen(req, timeout=timeout_s) as resp: + raw = resp.read().decode("utf-8") + except urllib.error.HTTPError as e: + try: + detail = e.read().decode("utf-8", errors="replace") + except Exception: + detail = str(e) + raise SolanaJsonRpcError(f"HTTP {e.code}: {detail}") from e + + try: + out: dict[str, Any] = json.loads(raw) + except json.JSONDecodeError as e: + raise SolanaJsonRpcError(f"invalid JSON from RPC: {raw[:500]!r}") from e + + err = out.get("error") + if err: + raise SolanaJsonRpcError(f"RPC error: {err}", payload=out) + return out + + +def get_latest_blockhash( + rpc_url: str, *, commitment: str = "confirmed", timeout_s: float = 30.0 +) -> str: + out = post_json_rpc( + rpc_url, + "getLatestBlockhash", + [{"commitment": commitment}], + timeout_s=timeout_s, + ) + try: + return str(out["result"]["value"]["blockhash"]) + except (KeyError, TypeError) as e: + raise SolanaJsonRpcError(f"unexpected getLatestBlockhash shape: {out!r}") from e + + +def get_balance_lamports( + rpc_url: str, pubkey_b58: str, *, commitment: str = "confirmed" +) -> int: + out = post_json_rpc( + rpc_url, + "getBalance", + [pubkey_b58, {"commitment": commitment}], + ) + try: + return int(out["result"]["value"]) + except (KeyError, TypeError, ValueError) as e: + raise SolanaJsonRpcError(f"unexpected getBalance shape: {out!r}") from e + + +def send_transaction_wire( + rpc_url: str, + signed_wire: bytes, + *, + skip_preflight: bool = False, + preflight_commitment: str = "confirmed", + max_retries: int | None = None, + timeout_s: float = 90.0, +) -> str: + """ + Submit a fully signed legacy or versioned transaction (wire bytes). + + Returns base58 transaction signature string from ``result``. + """ + opts: dict[str, Any] = { + "encoding": "base64", + "skipPreflight": skip_preflight, + "preflightCommitment": preflight_commitment, + } + if max_retries is not None: + opts["maxRetries"] = max_retries + + params: list[Any] = [base64.b64encode(signed_wire).decode("ascii"), opts] + out = post_json_rpc(rpc_url, "sendTransaction", params, timeout_s=timeout_s) + result = out.get("result") + if not isinstance(result, str): + raise SolanaJsonRpcError(f"unexpected sendTransaction result: {out!r}") + return result + + +def get_signature_statuses( + rpc_url: str, + signatures: list[str], + *, + search_transaction_history: bool = False, +) -> list[dict[str, Any] | None]: + """Return one status object (or null) per signature, same order as input.""" + if search_transaction_history: + params: list[Any] = [signatures, {"searchTransactionHistory": True}] + else: + params = [signatures] + out = post_json_rpc(rpc_url, "getSignatureStatuses", params) + try: + val = out["result"]["value"] + except (KeyError, TypeError) as e: + raise SolanaJsonRpcError(f"unexpected getSignatureStatuses shape: {out!r}") from e + if not isinstance(val, list): + raise SolanaJsonRpcError(f"unexpected getSignatureStatuses value: {val!r}") + out_list: list[dict[str, Any] | None] = [] + for item in val: + if item is None: + out_list.append(None) + elif isinstance(item, dict): + out_list.append(item) + else: + raise SolanaJsonRpcError(f"unexpected status entry: {item!r}") + return out_list + + +def wait_until_signature_confirmed( + rpc_url: str, + signature: str, + *, + timeout_s: float = 90.0, + poll_interval_s: float = 1.0, +) -> dict[str, Any]: + """ + Poll ``getSignatureStatuses`` until the signature has a terminal ``err`` or + reaches ``confirmationStatus`` of ``confirmed`` / ``finalized``. + """ + deadline = time.monotonic() + timeout_s + last: dict[str, Any] | None = None + while time.monotonic() < deadline: + statuses = get_signature_statuses(rpc_url, [signature]) + st = statuses[0] if statuses else None + last = st + if st is None: + time.sleep(poll_interval_s) + continue + err = st.get("err") + if err: + raise SolanaJsonRpcError(f"transaction failed: err={err!r}", payload=st) + conf = st.get("confirmationStatus") + if conf in ("confirmed", "finalized"): + return st + time.sleep(poll_interval_s) + raise SolanaJsonRpcError( + f"timeout waiting for confirmation of {signature!r}; last={last!r}" + ) diff --git a/scripts/maintenance/npmplus-cluster-placement-status.sh b/scripts/maintenance/npmplus-cluster-placement-status.sh new file mode 100755 index 00000000..1cba57ec --- /dev/null +++ b/scripts/maintenance/npmplus-cluster-placement-status.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# Show which Proxmox node hosts NPMplus CTs 10233–10236 (live SSH). +# Usage: bash scripts/maintenance/npmplus-cluster-placement-status.sh +# Requires: SSH BatchMode to cluster nodes (root@192.168.11.11, .12); extend HOSTS if needed. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +# shellcheck source=/dev/null +[[ -f "$PROJECT_ROOT/config/ip-addresses.conf" ]] && source "$PROJECT_ROOT/config/ip-addresses.conf" 2>/dev/null || true + +SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=12 -o StrictHostKeyChecking=no) + +HOSTS=( + "${PROXMOX_HOST_R630_01:-192.168.11.11}:r630-01" + "${PROXMOX_HOST_R630_02:-192.168.11.12}:r630-02" + "${PROXMOX_HOST_R630_03:-192.168.11.13}:r630-03" + "${PROXMOX_HOST_R630_04:-192.168.11.14}:r630-04" +) + +echo "=== NPMplus CT placement (VMIDs 10233–10236) ===" +echo "" + +for entry in "${HOSTS[@]}"; do + ip="${entry%%:*}" + label="${entry##*:}" + echo "--- $label ($ip) ---" + if ssh "${SSH_OPTS[@]}" "root@$ip" "pct list | grep -E '^10233|^10234|^10235|^10236' || true" 2>/dev/null; then + : + else + echo "(SSH skipped or failed — check key access to $ip)" + fi + echo "" +done + +echo "=== Quick HTTP :81 (LAN, optional) ===" +for ip in 167 168 169 170; do + code=$(curl -sS -m 4 -o /dev/null -w "%{http_code}" "http://192.168.11.$ip:81/" 2>/dev/null || echo "fail") + echo "192.168.11.$ip:81 -> $code" +done + +echo "" +echo "Target distribution: docs/04-configuration/NPMPLUS_MISSION_CRITICAL_DISTRIBUTION_AND_HA_PLAN.md" diff --git a/scripts/maintenance/stop-local-repo-dev-servers.sh b/scripts/maintenance/stop-local-repo-dev-servers.sh new file mode 100755 index 00000000..94c8a2b9 --- /dev/null +++ b/scripts/maintenance/stop-local-repo-dev-servers.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Stop dev helpers started from this repo (not IDE/Cursor, not system DNS). +# Safe to run before leaving a workstation; does not touch Besu/RPC/NPM on LAN. +# +# Usage: bash scripts/maintenance/stop-local-repo-dev-servers.sh + +set -euo pipefail + +_stopped=0 +for sig in TERM KILL; do + if pgrep -f 'forge-verification-proxy/server\.js' >/dev/null 2>&1; then + pkill -"$sig" -f 'forge-verification-proxy/server\.js' 2>/dev/null || true + _stopped=1 + fi + if pgrep -f 'serve_explorer_spa\.py' >/dev/null 2>&1; then + pkill -"$sig" -f 'serve_explorer_spa\.py' 2>/dev/null || true + _stopped=1 + fi +done + +if [[ "$_stopped" == 1 ]]; then + echo "Stopped forge-verification-proxy and/or serve_explorer_spa.py (if running)." +else + echo "No forge-verification-proxy or serve_explorer_spa.py processes found." +fi diff --git a/scripts/run-wave0-from-lan.sh b/scripts/run-wave0-from-lan.sh old mode 100644 new mode 100755 diff --git a/scripts/verify-contracts-blockscout.sh b/scripts/verify-contracts-blockscout.sh index de1e4466..41162f1a 100755 --- a/scripts/verify-contracts-blockscout.sh +++ b/scripts/verify-contracts-blockscout.sh @@ -222,6 +222,25 @@ if [[ -n "$ADDR_TX_MIRROR" ]] && should_verify TransactionMirror; then verify_one_explicit "$ADDR_TX_MIRROR" "contracts/mirror/TransactionMirror.sol:TransactionMirror" "TransactionMirror" "${enc:-}" fi +# Optional: alternate CCIPWETH9Bridge deployment (must run after verify_one_explicit is defined). +# Constructor args read from chain. Enable: VERIFY_ALTERNATE_CCIPWETH9_BRIDGE=1 ./scripts/verify/run-contract-verification-with-proxy.sh +ADDR_CCIPWETH9_ALT="${VERIFY_CCIPWETH9_ALT_ADDRESS:-0x9cba0D04Ae5f6f16e3C599025aB97a05c4A593d5}" +if [[ "${VERIFY_ALTERNATE_CCIPWETH9_BRIDGE:-0}" == "1" ]] && should_verify CCIPWETH9BridgeAlt; then + if has_contract_bytecode "$ADDR_CCIPWETH9_ALT"; then + r=$(cast call "$ADDR_CCIPWETH9_ALT" "ccipRouter()(address)" --rpc-url "$RPC" 2>/dev/null | tr -d '\n\r \t') || r="" + w=$(cast call "$ADDR_CCIPWETH9_ALT" "weth9()(address)" --rpc-url "$RPC" 2>/dev/null | tr -d '\n\r \t') || w="" + f=$(cast call "$ADDR_CCIPWETH9_ALT" "feeToken()(address)" --rpc-url "$RPC" 2>/dev/null | tr -d '\n\r \t') || f="" + if [[ -n "$r" && -n "$w" && -n "$f" ]]; then + enc=$(cast abi-encode 'constructor(address,address,address)' "$r" "$w" "$f" 2>/dev/null | tr -d '\n\r \t') || enc="" + verify_one_explicit "$ADDR_CCIPWETH9_ALT" "contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" "CCIPWETH9Bridge (alternate $ADDR_CCIPWETH9_ALT)" "${enc:-}" + else + echo "CCIPWETH9Bridge (alternate): skip — could not read immutables from $ADDR_CCIPWETH9_ALT" + fi + else + echo "CCIPWETH9Bridge (alternate): skip — no bytecode at $ADDR_CCIPWETH9_ALT" + fi +fi + # CompliantFiatToken: one deployment per currency with distinct constructor args — verify per token in the Blockscout UI or add scripted entries when addresses are enumerated in env. echo "" diff --git a/scripts/verify/README.md b/scripts/verify/README.md index d2122a9c..4dd4a608 100644 --- a/scripts/verify/README.md +++ b/scripts/verify/README.md @@ -27,6 +27,10 @@ One-line install (Debian/Ubuntu): `sudo apt install -y sshpass rsync dnsutils ip ## Scripts +- `run-cwusdc-provider-nonmanual-checks.sh` - Run all public/read-only cWUSDC provider checks and write `reports/status/cwusdc-provider-handoff-latest.{json,md}`. Does not submit forms, approve tokens, add liquidity, swap, bridge, or broadcast transactions. +- `check-cwusdc-provider-readiness-ci.sh` - CI-safe cWUSDC provider gate: fails only when repo-controlled URL prerequisites fail; reports external provider blockers as advisory. +- `build-cwusdc-provider-handoff-report.py` - Build a concise cWUSDC provider handoff report from latest JSON probe outputs. +- `check-cwusdc-etherscan-prereq-urls.sh` - Refresh public URL prerequisite evidence for Etherscan profile submission; supports `--json-out`, `--md-out`, `--timeout`, and `--retries` (or env `CWUSDC_PROVIDER_URL_TIMEOUT` / `CWUSDC_PROVIDER_URL_RETRIES`). - `backup-npmplus.sh` - Full NPMplus backup (database, API exports, certificates) - `check-contracts-on-chain-138.sh` - Check that Chain 138 deployed contracts have bytecode on-chain (`cast code` for 31 addresses; requires `cast` and RPC access). Use `[RPC_URL]` or env `RPC_URL_138`; `--dry-run` lists addresses only (no RPC calls); `SKIP_EXIT=1` to exit 0 when RPC unreachable. - `check-non-evm-network-health.sh` - Read-only live check for the public Solana, Tron, and XRPL endpoints used in repo docs. Prints a concise status table and can also write `reports/status/non-evm-network-health-latest.json`. diff --git a/scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py b/scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py new file mode 100755 index 00000000..5f8a3989 --- /dev/null +++ b/scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py @@ -0,0 +1,310 @@ +#!/usr/bin/env python3 +"""Audit Chain 138 cUSDC and Ethereum cWUSDC explorer feeds. + +This produces an evidence packet for Etherscan/listing submissions. It does not +ask Etherscan to merge Chain 138 traffic into the Ethereum token tracker; rather, +it documents that Ethereum Mainnet cWUSDC is the wrapped public-network transport +representation of canonical Chain 138 cUSDC and summarizes both API feeds. +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import os +import sys +import urllib.parse +import urllib.request +from pathlib import Path +from typing import Any + + +CHAIN138_CUSDC = "0xf22258f57794CC8E06237084b353Ab30fFfa640b" +MAINNET_CWUSDC = "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" +CHAIN138_EXPLORER_API = "https://explorer.d-bis.org/api/v2" +ETHERSCAN_V2_API = "https://api.etherscan.io/v2/api" +REPORT_BASE = Path("reports/status/cusdc-cwusdc-etherscan-feed-audit-latest") + + +def fetch_json(url: str, timeout: int = 30) -> Any: + req = urllib.request.Request(url, headers={"User-Agent": "dbis-cusdc-cwusdc-feed-audit/1.0"}) + with urllib.request.urlopen(req, timeout=timeout) as response: + payload = response.read().decode("utf-8") + return json.loads(payload) + + +def human_units(raw: int, decimals: int) -> str: + sign = "-" if raw < 0 else "" + raw = abs(raw) + whole = raw // (10**decimals) + frac = str(raw % (10**decimals)).rjust(decimals, "0").rstrip("0") + return f"{sign}{whole:,}" + (f".{frac}" if frac else "") + + +def addresses_from_transfer(item: dict[str, Any], style: str) -> set[str]: + if style == "blockscout": + values = [ + item.get("from", {}).get("hash"), + item.get("to", {}).get("hash"), + ] + else: + values = [item.get("from"), item.get("to")] + return {str(v).lower() for v in values if v} + + +def summarize_blockscout_transfers(items: list[dict[str, Any]], decimals: int) -> dict[str, Any]: + total_raw = 0 + addresses: set[str] = set() + methods: dict[str, int] = {} + latest = items[0] if items else None + for item in items: + value = item.get("total", {}).get("value", "0") + try: + total_raw += int(value) + except (TypeError, ValueError): + pass + addresses.update(addresses_from_transfer(item, "blockscout")) + method = item.get("method") or "unknown" + methods[method] = methods.get(method, 0) + 1 + return { + "sample_count": len(items), + "sample_volume_raw": str(total_raw), + "sample_volume_units": human_units(total_raw, decimals), + "unique_addresses_in_sample": len(addresses), + "method_counts": methods, + "latest_transfer": { + "hash": latest.get("transaction_hash"), + "timestamp": latest.get("timestamp"), + "from": latest.get("from", {}).get("hash"), + "to": latest.get("to", {}).get("hash"), + "value_raw": latest.get("total", {}).get("value"), + "value_units": human_units(int(latest.get("total", {}).get("value", "0")), decimals), + "method": latest.get("method"), + } + if latest + else None, + "addresses": sorted(addresses), + } + + +def summarize_etherscan_transfers(items: list[dict[str, Any]], decimals: int) -> dict[str, Any]: + total_raw = 0 + addresses: set[str] = set() + methods: dict[str, int] = {} + latest = items[0] if items else None + for item in items: + try: + total_raw += int(item.get("value", "0")) + except (TypeError, ValueError): + pass + addresses.update(addresses_from_transfer(item, "etherscan")) + method = item.get("methodId") or item.get("functionName") or "unknown" + methods[method] = methods.get(method, 0) + 1 + return { + "sample_count": len(items), + "sample_volume_raw": str(total_raw), + "sample_volume_units": human_units(total_raw, decimals), + "unique_addresses_in_sample": len(addresses), + "method_counts": methods, + "latest_transfer": { + "hash": latest.get("hash"), + "blockNumber": latest.get("blockNumber"), + "timeStamp": latest.get("timeStamp"), + "from": latest.get("from"), + "to": latest.get("to"), + "value_raw": latest.get("value"), + "value_units": human_units(int(latest.get("value", "0")), decimals), + "methodId": latest.get("methodId"), + "functionName": latest.get("functionName"), + } + if latest + else None, + "addresses": sorted(addresses), + } + + +def blockscout_token_metadata(address: str) -> dict[str, Any]: + return fetch_json(f"{CHAIN138_EXPLORER_API}/tokens/{address}") + + +def blockscout_transfers(address: str, pages: int) -> list[dict[str, Any]]: + items: list[dict[str, Any]] = [] + params: dict[str, Any] | None = None + for _ in range(pages): + url = f"{CHAIN138_EXPLORER_API}/tokens/{address}/transfers" + if params: + url += "?" + urllib.parse.urlencode(params) + payload = fetch_json(url) + items.extend(payload.get("items", [])) + params = payload.get("next_page_params") + if not params: + break + return items + + +def etherscan_call(params: dict[str, str], api_key: str) -> Any: + query = {"chainid": "1", **params, "apikey": api_key} + payload = fetch_json(f"{ETHERSCAN_V2_API}?{urllib.parse.urlencode(query)}") + if payload.get("status") == "0" and "No transactions found" not in str(payload.get("message")): + raise RuntimeError(f"Etherscan API error: {payload.get('message')} {payload.get('result')}") + return payload.get("result", []) + + +def build_report(args: argparse.Namespace) -> dict[str, Any]: + api_key = args.etherscan_api_key or os.environ.get("ETHERSCAN_API_KEY", "") + if not api_key: + raise SystemExit("ETHERSCAN_API_KEY is required for Ethereum cWUSDC Etherscan API checks") + + c138_meta = blockscout_token_metadata(args.chain138_cusdc) + c138_decimals = int(c138_meta.get("decimals") or 6) + c138_transfers = blockscout_transfers(args.chain138_cusdc, args.chain138_pages) + + cw_supply_raw = etherscan_call( + { + "module": "stats", + "action": "tokensupply", + "contractaddress": args.mainnet_cwusdc, + }, + api_key, + ) + cw_transfers = etherscan_call( + { + "module": "account", + "action": "tokentx", + "contractaddress": args.mainnet_cwusdc, + "page": "1", + "offset": str(args.etherscan_offset), + "sort": "desc", + }, + api_key, + ) + if not isinstance(cw_transfers, list): + cw_transfers = [] + + c138_summary = summarize_blockscout_transfers(c138_transfers, c138_decimals) + cw_summary = summarize_etherscan_transfers(cw_transfers, 6) + common_addresses = sorted(set(c138_summary["addresses"]) & set(cw_summary["addresses"])) + + c138_summary_public = {k: v for k, v in c138_summary.items() if k != "addresses"} + cw_summary_public = {k: v for k, v in cw_summary.items() if k != "addresses"} + + return { + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "purpose": "Evidence packet for Etherscan/listing feeds: Chain 138 cUSDC is the canonical source asset; Ethereum cWUSDC is the wrapped transport representation.", + "canonicalRelationship": { + "sourceChainId": 138, + "sourceToken": { + "symbol": "cUSDC", + "name": "USD Coin (Compliant)", + "address": args.chain138_cusdc, + "explorer": f"https://explorer.d-bis.org/token/{args.chain138_cusdc}", + "api": f"{CHAIN138_EXPLORER_API}/tokens/{args.chain138_cusdc}", + }, + "wrappedChainId": 1, + "wrappedToken": { + "symbol": "cWUSDC", + "name": "Wrapped cUSDC", + "address": args.mainnet_cwusdc, + "explorer": f"https://etherscan.io/token/{args.mainnet_cwusdc}", + "api": ETHERSCAN_V2_API, + }, + "mappingSource": "config/token-mapping-multichain.json: 138 cUSDC -> Ethereum Mainnet cWUSDC", + "trackerLanguage": "cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of canonical Chain 138 cUSDC. It is not Circle-issued USDC.", + }, + "chain138Cusdc": { + "metadata": { + "name": c138_meta.get("name"), + "symbol": c138_meta.get("symbol"), + "decimals": c138_meta.get("decimals"), + "holders": c138_meta.get("holders"), + "totalSupplyRaw": c138_meta.get("total_supply"), + "totalSupplyUnits": human_units(int(c138_meta.get("total_supply") or 0), c138_decimals), + }, + "transferFeed": c138_summary_public, + }, + "mainnetCwusdc": { + "metadata": { + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "decimals": "6", + "totalSupplyRaw": str(cw_supply_raw), + "totalSupplyUnits": human_units(int(cw_supply_raw or 0), 6), + }, + "transferFeed": cw_summary_public, + }, + "crossFeedSignals": { + "commonAddressesInRecentSamples": common_addresses, + "commonAddressCount": len(common_addresses), + "interpretation": "Common addresses are supporting evidence only. Canonical linkage is established by the token mapping, metadata registry, and bridge/listing documentation; Etherscan itself will only index Ethereum Mainnet cWUSDC traffic for the token page.", + }, + "etherscanSubmissionNote": "Ask Etherscan to list the Ethereum token as Wrapped cUSDC (cWUSDC), with Chain 138 cUSDC identified as the canonical source asset in the description/supporting links. Do not ask Etherscan to add Chain 138 transfer counts to the Ethereum token tracker totals.", + } + + +def write_markdown(report: dict[str, Any], path: Path) -> None: + rel = report["canonicalRelationship"] + c138 = report["chain138Cusdc"] + cw = report["mainnetCwusdc"] + signals = report["crossFeedSignals"] + lines = [ + "# cUSDC / cWUSDC Etherscan Feed Audit", + "", + f"Generated: `{report['generatedAt']}`", + "", + "## Relationship", + "", + f"- Source asset: Chain 138 `cUSDC` at `{rel['sourceToken']['address']}`", + f"- Wrapped transport asset: Ethereum Mainnet `cWUSDC` at `{rel['wrappedToken']['address']}`", + f"- Mapping source: `{rel['mappingSource']}`", + f"- Tracker language: {rel['trackerLanguage']}", + "", + "## API Feed Summary", + "", + "| Feed | Supply | Recent sample transfers | Recent sample volume | Unique addresses in sample |", + "|---|---:|---:|---:|---:|", + f"| Chain 138 cUSDC Blockscout | {c138['metadata']['totalSupplyUnits']} | {c138['transferFeed']['sample_count']} | {c138['transferFeed']['sample_volume_units']} | {c138['transferFeed']['unique_addresses_in_sample']} |", + f"| Ethereum cWUSDC Etherscan | {cw['metadata']['totalSupplyUnits']} | {cw['transferFeed']['sample_count']} | {cw['transferFeed']['sample_volume_units']} | {cw['transferFeed']['unique_addresses_in_sample']} |", + "", + "## Latest Transfers", + "", + f"- Chain 138 cUSDC latest: `{(c138['transferFeed']['latest_transfer'] or {}).get('hash')}`", + f"- Ethereum cWUSDC latest: `{(cw['transferFeed']['latest_transfer'] or {}).get('hash')}`", + "", + "## Cross-Feed Signal", + "", + f"- Common addresses in recent API samples: `{signals['commonAddressCount']}`", + f"- Interpretation: {signals['interpretation']}", + "", + "## Etherscan Submission Note", + "", + report["etherscanSubmissionNote"], + "", + ] + path.write_text("\n".join(lines), encoding="utf-8") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--chain138-cusdc", default=CHAIN138_CUSDC) + parser.add_argument("--mainnet-cwusdc", default=MAINNET_CWUSDC) + parser.add_argument("--etherscan-api-key", default="") + parser.add_argument("--chain138-pages", type=int, default=3) + parser.add_argument("--etherscan-offset", type=int, default=150) + parser.add_argument("--json-out", default=f"{REPORT_BASE}.json") + parser.add_argument("--md-out", default=f"{REPORT_BASE}.md") + args = parser.parse_args() + + report = build_report(args) + json_path = Path(args.json_out) + md_path = Path(args.md_out) + json_path.parent.mkdir(parents=True, exist_ok=True) + json_path.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8") + write_markdown(report, md_path) + print(f"Wrote {json_path}") + print(f"Wrote {md_path}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/verify/audit-cwusdc-mainnet-roles.py b/scripts/verify/audit-cwusdc-mainnet-roles.py new file mode 100644 index 00000000..17420b12 --- /dev/null +++ b/scripts/verify/audit-cwusdc-mainnet-roles.py @@ -0,0 +1,245 @@ +#!/usr/bin/env python3 +"""Read-only role/control audit for Ethereum Mainnet cWUSDC.""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import os +import subprocess +import urllib.parse +import urllib.request +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-mainnet-role-audit-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-mainnet-role-audit-latest.md" +CWUSDC = "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" +DEPLOYER = "0x4A666F96fC8764181194447A7dFdb7d471b301C8" +CW_BRIDGE_MAINNET_FALLBACK = "0x2bF74583206A49Be07E0E8A94197C12987AbD7B5" +ETHERSCAN_V2_API = "https://api.etherscan.io/v2/api" + + +def load_dotenv(path: Path) -> None: + if not path.exists(): + return + for line in path.read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + key, value = line.split("=", 1) + key = key.strip() + value = value.strip().strip('"').strip("'") + if key and key not in os.environ: + os.environ[key] = value + + +def cast_call(contract: str, signature: str, *args: str, rpc_url: str) -> str: + command = ["cast", "call", contract, signature, *args, "--rpc-url", rpc_url] + proc = subprocess.run(command, cwd=ROOT, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=False) + if proc.returncode != 0: + raise RuntimeError(proc.stderr.strip() or proc.stdout.strip()) + return proc.stdout.strip() + + +def cast_keccak(signature: str) -> str: + proc = subprocess.run(["cast", "keccak", signature], cwd=ROOT, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=False) + if proc.returncode != 0: + raise RuntimeError(proc.stderr.strip() or proc.stdout.strip()) + return proc.stdout.strip() + + +def fetch_json(url: str) -> Any: + req = urllib.request.Request(url, headers={"User-Agent": "dbis-cwusdc-role-audit/1.0"}) + with urllib.request.urlopen(req, timeout=30) as response: + return json.loads(response.read().decode("utf-8")) + + +def etherscan_logs(api_key: str, address: str, topic0: str) -> list[dict[str, Any]]: + if not api_key: + return [] + query = { + "chainid": "1", + "module": "logs", + "action": "getLogs", + "fromBlock": "0", + "toBlock": "latest", + "address": address, + "topic0": topic0, + "apikey": api_key, + } + payload = fetch_json(f"{ETHERSCAN_V2_API}?{urllib.parse.urlencode(query)}") + result = payload.get("result") if isinstance(payload, dict) else None + return result if isinstance(result, list) else [] + + +def topic_to_address(topic: str) -> str: + return "0x" + topic[-40:] + + +def bool_from_cast(value: str) -> bool: + return value.strip().lower() in {"true", "1"} + + +def candidate_addresses() -> dict[str, str]: + candidates = { + "deployer": os.environ.get("DEPLOYER_ADDRESS") or DEPLOYER, + "cwBridgeMainnet": os.environ.get("CW_BRIDGE_MAINNET", "") or CW_BRIDGE_MAINNET_FALLBACK, + "ccipRelayBridgeMainnet": os.environ.get("CCIP_RELAY_BRIDGE_MAINNET", ""), + "mainnetCcipWeth9Bridge": os.environ.get("MAINNET_CCIP_WETH9_BRIDGE", ""), + "mainnetCcipWeth10Bridge": os.environ.get("MAINNET_CCIP_WETH10_BRIDGE", ""), + "ccipEthRouter": os.environ.get("CCIP_ETH_ROUTER", ""), + "uniswapV3CwusdcUsdcPool": "0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3", + "uniswapV2CwusdcUsdcPair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", + "engineXVirtualBatchVault": "0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1", + } + return {label: address for label, address in candidates.items() if address and address.startswith("0x") and len(address) == 42} + + +def build(args: argparse.Namespace) -> dict[str, Any]: + load_dotenv(ROOT / ".env") + load_dotenv(ROOT / "smom-dbis-138" / ".env") + rpc_url = args.rpc_url or os.environ.get("ETHEREUM_MAINNET_RPC") or os.environ.get("MAINNET_RPC_URL") + if not rpc_url: + raise SystemExit("ETHEREUM_MAINNET_RPC or --rpc-url is required") + + roles = { + "DEFAULT_ADMIN_ROLE": cast_call(args.token, "DEFAULT_ADMIN_ROLE()(bytes32)", rpc_url=rpc_url), + "MINTER_ROLE": cast_call(args.token, "MINTER_ROLE()(bytes32)", rpc_url=rpc_url), + "BURNER_ROLE": cast_call(args.token, "BURNER_ROLE()(bytes32)", rpc_url=rpc_url), + } + role_admins = { + role_name: cast_call(args.token, "getRoleAdmin(bytes32)(bytes32)", role_id, rpc_url=rpc_url) + for role_name, role_id in roles.items() + } + + candidates = candidate_addresses() + checks: dict[str, Any] = {} + for label, address in candidates.items(): + checks[label] = {"address": address, "roles": {}} + for role_name, role_id in roles.items(): + checks[label]["roles"][role_name] = bool_from_cast( + cast_call(args.token, "hasRole(bytes32,address)(bool)", role_id, address, rpc_url=rpc_url) + ) + + privileged = [ + { + "label": label, + "address": data["address"], + "roles": [role for role, has_role in data["roles"].items() if has_role], + } + for label, data in checks.items() + if any(data["roles"].values()) + ] + + api_key = os.environ.get("ETHERSCAN_API_KEY", "") + event_topics = { + "RoleGranted": cast_keccak("RoleGranted(bytes32,address,address)"), + "RoleRevoked": cast_keccak("RoleRevoked(bytes32,address,address)"), + } + events: list[dict[str, Any]] = [] + if api_key: + for event_name, topic0 in event_topics.items(): + for item in etherscan_logs(api_key, args.token, topic0): + topics = item.get("topics") or [] + if len(topics) < 4: + continue + role_id = topics[1] + account = topic_to_address(topics[2]) + sender = topic_to_address(topics[3]) + role_name = next((name for name, value in roles.items() if value.lower() == role_id.lower()), role_id) + events.append( + { + "event": event_name, + "role": role_name, + "roleId": role_id, + "account": account, + "sender": sender, + "blockNumber": int(str(item.get("blockNumber", "0")), 16) if str(item.get("blockNumber", "")).startswith("0x") else item.get("blockNumber"), + "transactionHash": item.get("transactionHash"), + "logIndex": item.get("logIndex"), + } + ) + effective_from_events: dict[str, set[str]] = {role: set() for role in roles} + for item in sorted(events, key=lambda row: (int(row.get("blockNumber") or 0), int(str(row.get("logIndex") or "0x0"), 16) if str(row.get("logIndex", "")).startswith("0x") else 0)): + role = item["role"] + if role not in effective_from_events: + continue + if item["event"] == "RoleGranted": + effective_from_events[role].add(item["account"]) + elif item["event"] == "RoleRevoked": + effective_from_events[role].discard(item["account"]) + + return { + "schema": "cwusdc-mainnet-role-audit/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "network": {"chainId": 1, "name": "Ethereum Mainnet"}, + "token": {"address": args.token, "symbol": "cWUSDC", "name": "Wrapped cUSDC"}, + "roles": roles, + "roleAdmins": role_admins, + "candidateChecks": checks, + "privilegedCandidates": privileged, + "eventLogReview": { + "checked": bool(api_key), + "topics": event_topics, + "eventCount": len(events), + "events": events, + "effectiveMembersFromEvents": {role: sorted(values) for role, values in effective_from_events.items()}, + }, + "limitations": [ + "This audit checks known candidate addresses only.", + "Event-log reconstruction is included when ETHERSCAN_API_KEY is available, but provider log limits or pruned responses can still require manual verification.", + "This is a read-only control snapshot, not a formal third-party audit.", + ], + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cWUSDC Mainnet Role Audit", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Token: `{payload['token']['address']}`", + "", + "## Role IDs", + "", + "| Role | ID | Admin role ID |", + "|---|---|---|", + ] + for role, role_id in payload["roles"].items(): + lines.append(f"| `{role}` | `{role_id}` | `{payload['roleAdmins'][role]}` |") + lines.extend(["", "## Candidate Role Checks", "", "| Label | Address | Admin | Minter | Burner |", "|---|---|---:|---:|---:|"]) + for label, data in payload["candidateChecks"].items(): + roles = data["roles"] + lines.append( + f"| `{label}` | `{data['address']}` | `{roles['DEFAULT_ADMIN_ROLE']}` | `{roles['MINTER_ROLE']}` | `{roles['BURNER_ROLE']}` |" + ) + lines.extend(["", "## Event-Log Role Reconstruction", "", f"- Checked: `{payload['eventLogReview']['checked']}`", f"- Event count: `{payload['eventLogReview']['eventCount']}`", "", "| Role | Effective members from events |", "|---|---|"]) + for role, members in payload["eventLogReview"]["effectiveMembersFromEvents"].items(): + lines.append(f"| `{role}` | `{', '.join(members) if members else 'none observed'}` |") + lines.extend(["", "## Limitations", ""]) + lines.extend(f"- {item}" for item in payload["limitations"]) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--token", default=CWUSDC) + parser.add_argument("--rpc-url", default="") + parser.add_argument("--json-out", type=Path, default=REPORT_JSON) + parser.add_argument("--md-out", type=Path, default=REPORT_MD) + args = parser.parse_args() + payload = build(args) + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/audit-ei-matrix-onchain-readiness.sh b/scripts/verify/audit-ei-matrix-onchain-readiness.sh new file mode 100755 index 00000000..03a8f12a --- /dev/null +++ b/scripts/verify/audit-ei-matrix-onchain-readiness.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# On-chain readiness audit: EI matrix vs mainnet cWUSDC and/or Chain 138 cUSDC. +# Loads scripts/lib/load-project-env.sh for RPCs and token defaults. +# +# Usage: +# ./scripts/verify/audit-ei-matrix-onchain-readiness.sh --mainnet-only --min-mainnet-raw 12000000 +# ./scripts/verify/audit-ei-matrix-onchain-readiness.sh --both --min-mainnet-raw 1 --min-138-raw 1 --workers 6 --report-by-class +# Optional leading "--" is stripped (for shells that pass it through). +# Exit 1 if any wallet is below configured minima (CI gate). Use min 0 to only report. +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" +[[ "${1:-}" == "--" ]] && shift +exec python3 "$PROJECT_ROOT/scripts/lib/ei_matrix_onchain_readiness_audit.py" "$@" diff --git a/scripts/verify/build-cmc-top10-ecosystem-coverage.py b/scripts/verify/build-cmc-top10-ecosystem-coverage.py new file mode 100755 index 00000000..db834f6d --- /dev/null +++ b/scripts/verify/build-cmc-top10-ecosystem-coverage.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +"""Build a repo-side CMC top-10 ecosystem coverage matrix.""" + +from __future__ import annotations + +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +OUT_JSON = ROOT / "reports/status/cmc-top10-ecosystem-coverage-latest.json" +OUT_MD = ROOT / "docs/04-configuration/CMC_TOP10_ECOSYSTEM_ACCESSIBILITY_MATRIX.md" + +SOURCE = { + "name": "CoinMarketCap coins page", + "url": "https://coinmarketcap.com/coins/", + "observedAt": "2026-05-11", + "note": "Ranks are volatile; rerun or update this snapshot before external outreach.", +} + +TOKENS: list[dict[str, Any]] = [ + { + "rank": 1, + "symbol": "BTC", + "name": "Bitcoin", + "accessibility": "non_evm_wrapped_lane_required", + "dbisTouchpoint": "cWBTC / BTC reserve-or-wrapper evidence lane", + "timeframe": "1-2 weeks repo evidence after wallet/venue binding", + "repoDoableNext": [ + "Bind canonical BTC custody/address evidence fields.", + "Add BTC venue and wrapped-asset evidence placeholders.", + "Keep claims as provenance-only until custody and liquidity are independently evidenced.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 2, + "symbol": "ETH", + "name": "Ethereum", + "accessibility": "native_evm_core_surface", + "dbisTouchpoint": "WETH/cWETH, Ethereum Mainnet cWUSDC, gas/quote evidence", + "timeframe": "1-3 days repo hardening", + "repoDoableNext": [ + "Refresh Ethereum pool and quote-side evidence.", + "Add CMC/Dex/Gecko sanity checks for ETH-paired surfaces.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 3, + "symbol": "USDT", + "name": "Tether USDt", + "accessibility": "evm_quote_asset_and_wrapped_transport", + "dbisTouchpoint": "cUSDT / cWUSDT", + "timeframe": "1-3 days repo-side; provider acceptance external", + "repoDoableNext": [ + "Refresh cUSDT/cWUSDT provider packet fields.", + "Validate official USDT quote addresses per chain.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 4, + "symbol": "XRP", + "name": "XRP", + "accessibility": "xrpl_lane_required", + "dbisTouchpoint": "XRPLAdapter / wXRP / MintBurnController", + "timeframe": "1-2 weeks after wallet/trustline binding", + "repoDoableNext": [ + "Bind XRPL account and destination tag policy placeholders.", + "Document XRP reserve, trustline, and issuer requirements.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 5, + "symbol": "BNB", + "name": "BNB", + "accessibility": "evm_compatible_bsc_lane", + "dbisTouchpoint": "BSC cW* routing and gas surface", + "timeframe": "2-5 days repo-side", + "repoDoableNext": [ + "Refresh BSC cW* pool and official quote evidence.", + "Check BNB gas budget and CMC report values.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 6, + "symbol": "USDC", + "name": "USD Coin", + "accessibility": "primary_focus_ready_for_submission", + "dbisTouchpoint": "cUSDC / cWUSDC", + "timeframe": "submission-ready now; price/listing acceptance external", + "repoDoableNext": [ + "Keep Etherscan/CoinGecko/CMC/DexScreener packets current.", + "Maintain exact CAIP-19 discipline for Mainnet cWUSDC.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 7, + "symbol": "SOL", + "name": "Solana", + "accessibility": "solana_spl_lane_required", + "dbisTouchpoint": "SolanaAdapter and config/solana-gru-bridge-lineup.json", + "timeframe": "3-7 days repo-side if mints are bound", + "repoDoableNext": [ + "Bind SPL mint placeholders and minimum rent/gas targets.", + "Separate confirmed Chain 138 adapter evidence from native Solana liquidity claims.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 8, + "symbol": "TRX", + "name": "TRON", + "accessibility": "tron_wallet_and_energy_lane_required", + "dbisTouchpoint": "TronAdapter and derived/canonical Tron wallet evidence", + "timeframe": "3-7 days after address confirmation", + "repoDoableNext": [ + "Bind canonical Tron address policy placeholder.", + "Document TRX energy/bandwidth and TRC-20 inventory requirements.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 9, + "symbol": "DOGE", + "name": "Dogecoin", + "accessibility": "new_non_evm_adapter_or_custody_lane", + "dbisTouchpoint": "future DOGE wrapper/custody evidence lane", + "timeframe": "1-3 weeks for serious repo evidence", + "repoDoableNext": [ + "Create DOGE custody and bridge evidence stub.", + "Keep DOGE out of provider claims until wallet, reserve, and venue evidence exist.", + ], + "requiresExternalHuman": False, + }, + { + "rank": 10, + "symbol": "HYPE", + "name": "Hyperliquid", + "accessibility": "new_chain_or_venue_research_required", + "dbisTouchpoint": "future Hyperliquid venue/asset touchpoint", + "timeframe": "1-3 weeks for discovery/evidence", + "repoDoableNext": [ + "Open a research stub for chain/asset identifiers and supported custody paths.", + "Do not include HYPE in liquidity or settlement claims until identifiers are bound.", + ], + "requiresExternalHuman": False, + }, +] + + +def table(headers: list[str], rows: list[list[Any]]) -> str: + def cell(value: Any) -> str: + if isinstance(value, list): + value = "
      ".join(str(item) for item in value) + return str(value).replace("|", "\\|").replace("\n", "
      ") + + return "\n".join( + [ + f"| {' | '.join(cell(header) for header in headers)} |", + f"| {' | '.join('---' for _ in headers)} |", + *[f"| {' | '.join(cell(value) for value in row)} |" for row in rows], + ] + ) + + +def main() -> int: + payload = { + "schema": "cmc-top10-ecosystem-coverage/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "source": SOURCE, + "summary": { + "tokenCount": len(TOKENS), + "repoDoableWithoutOutsideHumanCount": sum(1 for token in TOKENS if not token["requiresExternalHuman"]), + "externalAcceptanceStillRequired": [ + "CMC/CoinGecko/DexScreener/Etherscan listing and price acceptance", + "Any custody, bank, exchange, or provider-side manual review", + ], + }, + "tokens": TOKENS, + } + OUT_JSON.parent.mkdir(parents=True, exist_ok=True) + OUT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + + lines = [ + "# CMC Top 10 Ecosystem Accessibility Matrix", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Source: [{SOURCE['name']}]({SOURCE['url']})", + f"- Observed: `{SOURCE['observedAt']}`", + f"- Boundary: {SOURCE['note']}", + "", + table( + ["Rank", "Token", "Accessibility", "DBIS touchpoint", "Repo-side timeframe", "Repo-doable next work"], + [ + [ + token["rank"], + f"{token['symbol']} ({token['name']})", + token["accessibility"], + token["dbisTouchpoint"], + token["timeframe"], + token["repoDoableNext"], + ] + for token in TOKENS + ], + ), + "", + "## Operating Rule", + "", + "This matrix is a repo-side planning artifact. It improves DBIS coverage discipline, but it does not imply that any external tracker, wallet, exchange, custodian, or market-data provider has accepted a token.", + ] + OUT_MD.parent.mkdir(parents=True, exist_ok=True) + OUT_MD.write_text("\n".join(lines) + "\n") + print(f"Wrote {OUT_JSON.relative_to(ROOT)}") + print(f"Wrote {OUT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-cwusdc-etherscan-value-dossier.py b/scripts/verify/build-cwusdc-etherscan-value-dossier.py new file mode 100755 index 00000000..8529d203 --- /dev/null +++ b/scripts/verify/build-cwusdc-etherscan-value-dossier.py @@ -0,0 +1,528 @@ +#!/usr/bin/env python3 +"""Build a submission-ready cWUSDC Etherscan Value dossier. + +The dossier intentionally separates Ethereum Mainnet cWUSDC evidence from +global cUSDC/cWUSDC family context. It is read-only: it runs monitors and proof +generators, then summarizes what can be submitted and what remains externally +blocked. +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import os +import subprocess +import urllib.parse +import urllib.request +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-etherscan-value-dossier-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-etherscan-value-dossier-latest.md" + +CWUSDC = "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" +ETHERSCAN_CHAINLIST_URL = "https://api.etherscan.io/v2/chainlist" +ETHERSCAN_V2_API = "https://api.etherscan.io/v2/api" +DEPLOYER_FALLBACK = "0x4A666F96fC8764181194447A7dFdb7d471b301C8" +L2_DEPOSIT_CHAINS = { + "10": "OP Mainnet", + "42161": "Arbitrum One Mainnet", +} +ARTIFACTS = { + "mainnetSupply": ROOT / "reports" / "status" / "cwusdc-supply-circulating-attestation-latest.json", + "globalFamilySupply": ROOT / "reports" / "status" / "global-cusdc-cwusdc-family-supply-proof-latest.json", + "feedAudit": ROOT / "reports" / "status" / "cusdc-cwusdc-etherscan-feed-audit-latest.json", + "propagation": ROOT / "reports" / "status" / "cwusdc-etherscan-value-propagation-latest.json", +} +DOCS = { + "executionPlan": ROOT / "docs" / "04-configuration" / "etherscan" / "CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md", + "bridgeLayerMap": ROOT / "docs" / "04-configuration" / "etherscan" / "CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md", + "profilePacket": ROOT / "docs" / "04-configuration" / "etherscan" / "CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md", + "e2eRecommendations": ROOT / "docs" / "04-configuration" / "etherscan" / "CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md", + "trackerPacket": ROOT / "docs" / "04-configuration" / "coingecko" / "CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", +} + + +def load_dotenv(path: Path, env: dict[str, str]) -> dict[str, str]: + if not path.exists(): + return env + merged = dict(env) + for line in path.read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + key, value = line.split("=", 1) + key = key.strip() + value = value.strip().strip('"').strip("'") + if key and key not in merged: + merged[key] = value + return merged + + +def run_command(command: list[str], env: dict[str, str]) -> dict[str, Any]: + proc = subprocess.run( + command, + cwd=ROOT, + env=env, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + check=False, + ) + return { + "command": command, + "returncode": proc.returncode, + "stdout": proc.stdout.strip(), + "stderr": proc.stderr.strip(), + "ok": proc.returncode == 0, + } + + +def read_json(path: Path) -> Any | None: + if not path.exists(): + return None + return json.loads(path.read_text()) + + +def fetch_json_url(url: str, timeout: int = 30) -> Any: + req = urllib.request.Request(url, headers={"User-Agent": "dbis-cwusdc-etherscan-dossier/1.0"}) + with urllib.request.urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + + +def load_etherscan_chainlist() -> dict[str, Any]: + try: + payload = fetch_json_url(ETHERSCAN_CHAINLIST_URL) + except Exception as exc: # noqa: BLE001 - dossier should capture diagnostics instead of crashing + return { + "url": ETHERSCAN_CHAINLIST_URL, + "available": False, + "error": str(exc), + "totalcount": None, + "supportedChainIds": [], + "statusByChainId": {}, + } + + result = payload.get("result") if isinstance(payload, dict) else None + chains = result if isinstance(result, list) else [] + status_by_chain_id = { + str(item.get("chainid")): { + "chainname": item.get("chainname"), + "blockexplorer": item.get("blockexplorer"), + "apiurl": item.get("apiurl"), + "status": item.get("status"), + "comment": item.get("comment"), + } + for item in chains + if isinstance(item, dict) and item.get("chainid") is not None + } + return { + "url": ETHERSCAN_CHAINLIST_URL, + "available": True, + "comments": payload.get("comments") if isinstance(payload, dict) else None, + "totalcount": payload.get("totalcount") if isinstance(payload, dict) else len(chains), + "supportedChainIds": sorted(status_by_chain_id, key=lambda value: int(value) if value.isdigit() else value), + "statusByChainId": status_by_chain_id, + } + + +def human_token_value(raw: Any, token_address: str | None) -> str | None: + try: + raw_int = int(str(raw)) + except (TypeError, ValueError): + return None + decimals = 18 if token_address == "ETH" else 6 if token_address and token_address.lower() == CWUSDC.lower() else 18 + whole = raw_int // (10**decimals) + frac = str(raw_int % (10**decimals)).rjust(decimals, "0").rstrip("0") + return f"{whole}" + (f".{frac}" if frac else "") + + +def human_wei(raw: Any) -> str | None: + try: + raw_int = int(str(raw)) + except (TypeError, ValueError): + return None + whole = raw_int // (10**18) + frac = str(raw_int % (10**18)).rjust(18, "0").rstrip("0") + return f"{whole}" + (f".{frac}" if frac else "") + + +def normalize_deposit_row(row: dict[str, Any]) -> dict[str, Any]: + token_address = row.get("tokenAddress") + return { + "hash": row.get("hash"), + "l1TransactionHash": row.get("L1transactionhash"), + "timeStamp": row.get("timeStamp"), + "from": row.get("from"), + "to": row.get("to"), + "valueRaw": row.get("value"), + "valueEth": human_wei(row.get("value")), + "tokenAddress": token_address, + "tokenValueRaw": row.get("tokenValue"), + "tokenValueUnits": human_token_value(row.get("tokenValue"), token_address), + "txreceiptStatus": row.get("txreceipt_status"), + "isError": row.get("isError"), + } + + +def etherscan_v2_call(params: dict[str, str], api_key: str) -> dict[str, Any]: + query = {**params, "apikey": api_key} + url = f"{ETHERSCAN_V2_API}?{urllib.parse.urlencode(query)}" + redacted_query = {**params, "apikey": "REDACTED"} + redacted_url = f"{ETHERSCAN_V2_API}?{urllib.parse.urlencode(redacted_query)}" + try: + payload = fetch_json_url(url) + except Exception as exc: # noqa: BLE001 - capture diagnostics instead of crashing the dossier + return {"url": redacted_url, "ok": False, "error": str(exc), "status": None, "message": None, "result": None} + status = str(payload.get("status")) if isinstance(payload, dict) else None + message = payload.get("message") if isinstance(payload, dict) else None + result = payload.get("result") if isinstance(payload, dict) else None + no_rows = isinstance(result, str) and "No transactions found" in result + return { + "url": redacted_url, + "ok": status == "1" or no_rows, + "status": status, + "message": message, + "result": [] if no_rows else result, + "error": None, + } + + +def load_l2_deposit_evidence(api_key: str, chainlist: dict[str, Any], address: str) -> dict[str, Any]: + if not api_key: + return { + "checked": False, + "reason": "ETHERSCAN_API_KEY is not set.", + "address": address, + "chains": {}, + } + + supported = set(chainlist.get("statusByChainId", {})) + chains: dict[str, Any] = {} + for chain_id, chain_name in L2_DEPOSIT_CHAINS.items(): + if chain_id not in supported: + chains[chain_id] = { + "chainName": chain_name, + "checked": False, + "reason": "chain is not present in Etherscan V2 chainlist", + } + continue + response = etherscan_v2_call( + { + "chainid": chain_id, + "module": "account", + "action": "getdeposittxs", + "address": address, + "page": "1", + "offset": "10", + "sort": "desc", + }, + api_key, + ) + result = response.get("result") + rows = result if isinstance(result, list) else [] + chains[chain_id] = { + "chainName": chain_name, + "checked": True, + "ok": response.get("ok"), + "status": response.get("status"), + "message": response.get("message"), + "sampleCount": len(rows), + "latest": normalize_deposit_row(rows[0]) if rows else None, + "url": response.get("url"), + "error": response.get("error"), + } + + return { + "checked": True, + "address": address, + "scope": "Etherscan-indexed L2 deposits by address. This is bridge provenance only and does not set Mainnet cWUSDC USD Value.", + "rawUnitNote": "tokenValue is returned as raw token units. ETH uses 18 decimals; ERC-20 rows must be normalized with that token contract's decimals.", + "chains": chains, + } + + +def load_contract_source_verification(api_key: str, address: str) -> dict[str, Any]: + if not api_key: + return { + "checked": False, + "reason": "ETHERSCAN_API_KEY is not set.", + "address": address, + "verified": False, + } + response = etherscan_v2_call( + { + "chainid": "1", + "module": "contract", + "action": "getsourcecode", + "address": address, + }, + api_key, + ) + result = response.get("result") + entry = result[0] if isinstance(result, list) and result and isinstance(result[0], dict) else {} + source_code = str(entry.get("SourceCode") or "") + abi = str(entry.get("ABI") or "") + contract_name = str(entry.get("ContractName") or "") + return { + "checked": True, + "address": address, + "ok": response.get("ok"), + "status": response.get("status"), + "message": response.get("message"), + "verified": bool(source_code and contract_name and abi and abi != "Contract source code not verified"), + "contractName": contract_name or None, + "compilerVersion": entry.get("CompilerVersion") or None, + "optimizationUsed": entry.get("OptimizationUsed") or None, + "runs": entry.get("Runs") or None, + "constructorArgumentsPresent": bool(entry.get("ConstructorArguments")), + "evmVersion": entry.get("EVMVersion") or None, + "licenseType": entry.get("LicenseType") or None, + "proxy": entry.get("Proxy") or None, + "implementation": entry.get("Implementation") or None, + "sourceCodeBytes": len(source_code), + "abiAvailable": bool(abi and abi != "Contract source code not verified"), + "url": response.get("url"), + "error": response.get("error"), + } + + +def rel(path: Path) -> str: + return str(path.relative_to(ROOT)) + + +def build(args: argparse.Namespace) -> dict[str, Any]: + env = load_dotenv(ROOT / ".env", dict(os.environ)) + etherscan_api_key = env.get("ETHERSCAN_API_KEY", "") + l2_deposit_address = args.l2_deposit_address or env.get("DEPLOYER_ADDRESS") or DEPLOYER_FALLBACK + commands: list[dict[str, Any]] = [] + if args.refresh: + commands = [ + run_command(["python3", "scripts/verify/generate-cwusdc-supply-circulating-attestation.py"], env), + run_command(["python3", "scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py"], env), + run_command(["python3", "scripts/verify/audit-cusdc-cwusdc-etherscan-feeds.py"], env), + run_command(["python3", "scripts/verify/monitor-cwusdc-etherscan-value-propagation.py"], env), + run_command(["bash", "scripts/verify/check-cwusdc-etherscan-prereq-urls.sh"], env), + ] + + artifacts = {key: read_json(path) for key, path in ARTIFACTS.items()} + propagation = artifacts["propagation"] or {} + supply = artifacts["mainnetSupply"] or {} + global_family = artifacts["globalFamilySupply"] or {} + feed_audit = artifacts["feedAudit"] or {} + chainlist = load_etherscan_chainlist() + l2_deposits = load_l2_deposit_evidence(etherscan_api_key, chainlist, l2_deposit_address) + contract_source = load_contract_source_verification(etherscan_api_key, CWUSDC) + family_chain_ids = sorted( + {str(item.get("chainId")) for item in global_family.get("entries", []) if isinstance(item, dict) and item.get("chainId") is not None}, + key=lambda value: int(value) if value.isdigit() else value, + ) + supported_family_chain_ids = [chain_id for chain_id in family_chain_ids if chain_id in chainlist.get("statusByChainId", {})] + unsupported_family_chain_ids = [chain_id for chain_id in family_chain_ids if chain_id not in chainlist.get("statusByChainId", {})] + + blockers = list(((propagation.get("summary") or {}).get("blockers") or [])) + command_failures = [item for item in commands if not item["ok"]] + for item in command_failures: + blockers.append("Command failed: " + " ".join(item["command"])) + + ready_evidence = { + "mainnetSupplyAttestation": bool(supply.get("supply")), + "globalFamilySupplyContext": bool(global_family.get("summary")), + "chain138MainnetFeedAudit": bool(feed_audit.get("canonicalRelationship")), + "mainnetContractSourceVerified": bool(contract_source.get("verified")), + "propagationMonitor": bool(propagation.get("checks")), + "publicPrereqUrls": not any( + item["command"] == ["bash", "scripts/verify/check-cwusdc-etherscan-prereq-urls.sh"] and not item["ok"] + for item in commands + ) + if commands + else None, + "documentationPacket": {key: path.exists() for key, path in DOCS.items()}, + } + + next_actions = [] + if blockers: + next_actions.extend( + [ + "Submit/update Etherscan token profile for the exact Ethereum Mainnet cWUSDC contract.", + "Submit/update CoinGecko and CoinMarketCap listings with Mainnet supply proof, DEX evidence, and bridge-family context.", + "Use the global family supply proof only as context; use the Ethereum Mainnet cWUSDC attestation as the token-page supply basis.", + "Re-run this dossier after each external approval or tracker response.", + ] + ) + else: + next_actions.append("No blockers detected by local monitors; capture Etherscan screenshots and continue propagation monitoring.") + + return { + "schema": "cwusdc-etherscan-value-dossier/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "purpose": "Single submission and monitoring packet for making Etherscan show USD value for Ethereum Mainnet cWUSDC.", + "target": { + "network": "Ethereum Mainnet", + "chainId": 1, + "contract": CWUSDC, + "caip19": f"eip155:1/erc20:{CWUSDC}", + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "decimals": 6, + }, + "readiness": { + "readyForExternalSubmission": ready_evidence["mainnetSupplyAttestation"] + and ready_evidence["chain138MainnetFeedAudit"] + and ready_evidence["mainnetContractSourceVerified"] + and ready_evidence["propagationMonitor"], + "etherscanValueReady": (propagation.get("summary") or {}).get("etherscanValueReady"), + "coinGeckoPriceReady": (propagation.get("summary") or {}).get("coingeckoPriceReady"), + "blockers": blockers, + }, + "evidence": { + "artifacts": {key: rel(path) for key, path in ARTIFACTS.items()}, + "docs": {key: rel(path) for key, path in DOCS.items()}, + "readyEvidence": ready_evidence, + "mainnetContractSourceVerification": contract_source, + "mainnetSupply": supply.get("supply"), + "globalFamilyWarning": (global_family.get("caveats") or ["Global family supply is context only; do not use it as Ethereum Etherscan token-page supply."])[0], + "globalFamilySummary": global_family.get("summary"), + "feedRelationship": feed_audit.get("canonicalRelationship"), + "etherscanChainlist": { + **chainlist, + "familyChainIds": family_chain_ids, + "etherscanSupportedFamilyChainIds": supported_family_chain_ids, + "notEtherscanSupportedFamilyChainIds": unsupported_family_chain_ids, + "chain138SupportedByEtherscanV2": "138" in chainlist.get("statusByChainId", {}), + "interpretation": "Only chains present in Etherscan V2 chainlist should be described as first-class Etherscan-family API evidence. Chain 138 remains provenance/context evidence unless Etherscan adds chainid 138.", + }, + "l2DepositTransactions": l2_deposits, + }, + "commands": commands, + "nextActions": next_actions, + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + readiness = payload["readiness"] + evidence = payload["evidence"] + target = payload["target"] + lines = [ + "# cWUSDC Etherscan Value Dossier", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Target: `{target['contract']}`", + f"- CAIP-19: `{target['caip19']}`", + f"- Ready for external submission: `{readiness['readyForExternalSubmission']}`", + f"- Etherscan value ready: `{readiness['etherscanValueReady']}`", + f"- CoinGecko price ready: `{readiness['coinGeckoPriceReady']}`", + "", + "## Blockers", + "", + ] + if readiness["blockers"]: + lines.extend(f"- {item}" for item in readiness["blockers"]) + else: + lines.append("- None detected by this dossier.") + + lines.extend( + [ + "", + "## Evidence Artifacts", + "", + "| Artifact | Path |", + "|---|---|", + ] + ) + for key, value in evidence["artifacts"].items(): + lines.append(f"| `{key}` | `{value}` |") + + lines.extend(["", "## Documentation Packet", "", "| Document | Path |", "|---|---|"]) + for key, value in evidence["docs"].items(): + lines.append(f"| `{key}` | `{value}` |") + + lines.extend( + [ + "", + "## Mainnet Contract Verification", + "", + f"- Checked: `{(evidence['mainnetContractSourceVerification'] or {}).get('checked')}`", + f"- Verified: `{(evidence['mainnetContractSourceVerification'] or {}).get('verified')}`", + f"- Contract name: `{(evidence['mainnetContractSourceVerification'] or {}).get('contractName')}`", + f"- Compiler: `{(evidence['mainnetContractSourceVerification'] or {}).get('compilerVersion')}`", + f"- License: `{(evidence['mainnetContractSourceVerification'] or {}).get('licenseType')}`", + f"- Proxy: `{(evidence['mainnetContractSourceVerification'] or {}).get('proxy')}`", + "", + "## Supply Boundary", + "", + f"- Ethereum Mainnet cWUSDC supply basis: `{(evidence['mainnetSupply'] or {}).get('totalSupplyUnits')}`", + f"- Circulating supply basis: `{(evidence['mainnetSupply'] or {}).get('circulatingSupplyUnits')}`", + f"- Global family warning: {evidence['globalFamilyWarning']}", + "", + "## Etherscan Chainlist Boundary", + "", + f"- Etherscan V2 chainlist total: `{(evidence['etherscanChainlist'] or {}).get('totalcount')}`", + f"- Family chain IDs: `{', '.join((evidence['etherscanChainlist'] or {}).get('familyChainIds') or [])}`", + f"- Etherscan-supported family chain IDs: `{', '.join((evidence['etherscanChainlist'] or {}).get('etherscanSupportedFamilyChainIds') or [])}`", + f"- Not Etherscan-supported family chain IDs: `{', '.join((evidence['etherscanChainlist'] or {}).get('notEtherscanSupportedFamilyChainIds') or [])}`", + f"- Chain 138 supported by Etherscan V2: `{(evidence['etherscanChainlist'] or {}).get('chain138SupportedByEtherscanV2')}`", + "", + "## L2 Deposit Transaction Boundary", + "", + f"- Address checked: `{(evidence['l2DepositTransactions'] or {}).get('address')}`", + f"- Checked: `{(evidence['l2DepositTransactions'] or {}).get('checked')}`", + "- Scope: Etherscan-indexed OP/Arbitrum deposit provenance only; it does not set Mainnet cWUSDC USD Value.", + "- Unit note: `value` is raw wei; `tokenValue` is raw token units. `1195403000000000` in `value` is `0.001195403 ETH`; `598200000000000` with `tokenAddress=ETH` is `0.0005982 ETH`.", + "", + "| Chain | Checked | Sample deposits | Latest tx | Native value | Token value |", + "|---|---:|---:|---|---:|---:|", + ] + ) + for chain_id, item in (evidence["l2DepositTransactions"].get("chains") or {}).items(): + latest = item.get("latest") or {} + lines.append( + f"| `{chain_id}` {item.get('chainName')} | `{item.get('checked')}` | `{item.get('sampleCount', 0)}` | `{latest.get('hash')}` | `{latest.get('valueEth')}` ETH | `{latest.get('tokenValueUnits')}` {latest.get('tokenAddress') or ''} |" + ) + lines.extend( + [ + "", + "## Next Actions", + "", + ] + ) + lines.extend(f"- {item}" for item in payload["nextActions"]) + + if payload["commands"]: + lines.extend(["", "## Command Results", "", "| Command | Exit |", "|---|---:|"]) + for item in payload["commands"]: + lines.append(f"| `{' '.join(item['command'])}` | `{item['returncode']}` |") + + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--no-refresh", action="store_true", help="Only aggregate existing reports; do not rerun checks.") + parser.add_argument("--json-out", type=Path, default=REPORT_JSON) + parser.add_argument("--md-out", type=Path, default=REPORT_MD) + parser.add_argument("--l2-deposit-address", default="", help="Address to check with Etherscan getdeposittxs.") + parser.add_argument("--strict", action="store_true") + args = parser.parse_args() + args.refresh = not args.no_refresh + + payload = build(args) + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + print(f"readyForExternalSubmission={payload['readiness']['readyForExternalSubmission']}") + if payload["readiness"]["blockers"]: + print("Blockers: " + "; ".join(payload["readiness"]["blockers"])) + if args.strict and payload["readiness"]["blockers"]: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-cwusdc-institutional-evidence-bundle.sh b/scripts/verify/build-cwusdc-institutional-evidence-bundle.sh new file mode 100755 index 00000000..b79024ef --- /dev/null +++ b/scripts/verify/build-cwusdc-institutional-evidence-bundle.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$PROJECT_ROOT" + +DATE_TAG="${CWUSDC_EVIDENCE_BUNDLE_DATE:-$(date -u +%Y%m%d)}" +OUT_DIR="reports/status" +BUNDLE="${OUT_DIR}/cwusdc-institutional-evidence-bundle-${DATE_TAG}.tar.gz" +CHECKSUM="${OUT_DIR}/cwusdc-institutional-evidence-bundle-${DATE_TAG}.sha256" + +FILES=( + "docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md" + "docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md" + "docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md" + "docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md" + "docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md" + "docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md" + "docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md" + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md" + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md" + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md" + "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md" + "docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md" + "docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md" + "reports/status/cwusdc-etherscan-value-dossier-latest.md" + "reports/status/cwusdc-etherscan-value-dossier-latest.json" + "reports/status/cwusdc-supply-circulating-attestation-latest.md" + "reports/status/cwusdc-supply-circulating-attestation-latest.json" + "reports/status/global-cusdc-cwusdc-family-supply-proof-latest.md" + "reports/status/global-cusdc-cwusdc-family-supply-proof-latest.json" + "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.md" + "reports/status/cusdc-cwusdc-etherscan-feed-audit-latest.json" + "reports/status/cwusdc-mainnet-role-audit-latest.md" + "reports/status/cwusdc-mainnet-role-audit-latest.json" + "reports/status/cwusdc-role-deployment-appendix-latest.md" + "reports/status/cwusdc-role-deployment-appendix-latest.json" + "reports/status/cwusdc-institutional-doc-link-check-latest.md" + "reports/status/cwusdc-institutional-doc-link-check-latest.json" + "reports/status/cwusdc-provider-submission-prefill-latest.md" + "reports/status/cwusdc-provider-submission-prefill-latest.json" + "reports/status/cwusdc-provider-handoff-latest.md" + "reports/status/cwusdc-provider-handoff-latest.json" + "reports/status/cwusdc-external-trackers-live-latest.md" + "reports/status/cwusdc-external-trackers-live-latest.json" + "reports/status/cwusdc-institutional-readiness-review-20260511.md" + "reports/status/cwusdc-institutional-hardening-completion-20260511.md" +) + +OPTIONAL_FILES=( + "reports/status/cwusdc-provider-monitoring-snapshot-latest.md" + "reports/status/cwusdc-provider-monitoring-snapshot-latest.json" + "reports/status/screenshots/cwusdc-etherscan-token-page.png" + "reports/status/screenshots/cwusdc-dbis-token-directory.png" + "reports/status/screenshots/cwusdc-logo-url.png" + "reports/status/screenshots/cwusdc-geckoterminal-univ3-pool.png" +) + +missing=() +present=() +for file in "${FILES[@]}"; do + if [[ -f "$file" ]]; then + present+=("$file") + else + missing+=("$file") + fi +done +for file in "${OPTIONAL_FILES[@]}"; do + if [[ -f "$file" ]]; then + present+=("$file") + fi +done + +if ((${#missing[@]} > 0)); then + printf 'Missing required evidence files:\n' >&2 + printf ' - %s\n' "${missing[@]}" >&2 + exit 1 +fi + +mkdir -p "$OUT_DIR" +tar -czf "$BUNDLE" "${present[@]}" +sha256sum "$BUNDLE" > "$CHECKSUM" + +printf 'Wrote %s\n' "$BUNDLE" +printf 'Wrote %s\n' "$CHECKSUM" +cat "$CHECKSUM" diff --git a/scripts/verify/build-cwusdc-provider-handoff-report.py b/scripts/verify/build-cwusdc-provider-handoff-report.py new file mode 100755 index 00000000..38dfdbf7 --- /dev/null +++ b/scripts/verify/build-cwusdc-provider-handoff-report.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python3 +"""Build a concise cWUSDC provider handoff report from latest probe JSON.""" +from __future__ import annotations + +import argparse +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +DEFAULT_PREREQ_JSON = ROOT / "reports/status/cwusdc-etherscan-prereq-urls-latest.json" +DEFAULT_TRACKERS_JSON = ROOT / "reports/status/cwusdc-external-trackers-live-latest.json" +DEFAULT_LIQUIDITY_JSON = ROOT / "reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json" +DEFAULT_CMC_SANITY_JSON = ROOT / "reports/status/cmc-provider-report-sanity-latest.json" +DEFAULT_MD = ROOT / "reports/status/cwusdc-provider-handoff-latest.md" +DEFAULT_JSON = ROOT / "reports/status/cwusdc-provider-handoff-latest.json" + + +def read_json(path: Path) -> Any | None: + if not path.exists(): + return None + return json.loads(path.read_text()) + + +def rel(path: Path) -> str: + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + +def first(obj: dict[str, Any] | None, path: list[str], default: Any = None) -> Any: + cur: Any = obj + for part in path: + if not isinstance(cur, dict): + return default + cur = cur.get(part) + return cur if cur is not None else default + + +def table(headers: list[str], rows: list[list[Any]]) -> str: + def cell(value: Any) -> str: + if isinstance(value, (dict, list)): + value = json.dumps(value, sort_keys=True) + text = str(value) + return text.replace("|", "\\|").replace("\n", "
      ") + + return "\n".join([ + f"| {' | '.join(cell(header) for header in headers)} |", + f"| {' | '.join('---' for _ in headers)} |", + *[f"| {' | '.join(cell(value) for value in row)} |" for row in rows], + ]) + + +def build_payload( + prereq: Any, + trackers: Any, + liquidity: Any, + cmc_sanity: Any, + prereq_path: Path, + trackers_path: Path, + liquidity_path: Path, + cmc_sanity_path: Path, +) -> dict[str, Any]: + tracker_summary = first(trackers, ["summary"], {}) + failed_required = tracker_summary.get("failedRequiredIds") if isinstance(tracker_summary, dict) else [] + liquidity_summary = first(liquidity, ["summary"], {}) + blockers = [] + + if prereq is None: + blockers.append({ + "id": "missing_prereq_url_evidence", + "type": "repo_controlled", + "status": "blocked", + "nextAction": "Run check-cwusdc-etherscan-prereq-urls.sh with JSON output.", + }) + if trackers is None: + blockers.append({ + "id": "missing_external_tracker_evidence", + "type": "repo_controlled", + "status": "blocked", + "nextAction": "Run check-cwusdc-external-trackers-live.sh with JSON output.", + }) + if liquidity is None: + blockers.append({ + "id": "missing_liquidity_planner_evidence", + "type": "repo_controlled", + "status": "blocked", + "nextAction": "Run plan-token-aggregation-liquidity-gap-funding.mjs.", + }) + if cmc_sanity is None: + blockers.append({ + "id": "missing_cmc_report_sanity_evidence", + "type": "repo_controlled", + "status": "blocked", + "nextAction": "Run check-cmc-provider-report-sanity.py.", + }) + + if prereq is not None and not first(prereq, ["summary", "allPassed"], False): + blockers.append({ + "id": "repo_public_urls", + "type": "repo_controlled", + "status": "blocked", + "nextAction": "Fix failing d-bis.org prerequisite URLs before external profile submission.", + }) + + for failed in failed_required or []: + blockers.append({ + "id": failed, + "type": "external_provider", + "status": "blocked", + "nextAction": "Submit/update provider packet or wait for provider indexing, then rerun tracker probe.", + }) + + if first(liquidity, ["summary", "nonEvmFundingRequirementRows"], 0): + blockers.append({ + "id": "non_evm_funding_requirements", + "type": "operator_bound", + "status": "open", + "nextAction": "Bind non-EVM wallets, asset IDs, and minimum funding targets before making non-EVM liquidity claims.", + }) + if first(cmc_sanity, ["summary", "warningCount"], 0): + blockers.append({ + "id": "cmc_report_sanity_warnings", + "type": "repo_advisory", + "status": "open", + "nextAction": "Review CMC-shaped report warnings before using CMC fields as listing-quality liquidity or quote-asset evidence.", + }) + + repo_ready = bool(first(prereq, ["summary", "allPassed"], False)) + ready_for_etherscan_value = bool(first(trackers, ["summary", "readyForEtherscanUsdValue"], False)) + + return { + "schema": "cwusdc-provider-handoff/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "inputs": { + "prereq": rel(prereq_path), + "trackers": rel(trackers_path), + "liquidity": rel(liquidity_path), + "cmcSanity": rel(cmc_sanity_path), + }, + "summary": { + "repoControlledPrereqsPassed": repo_ready, + "externalTrackersAllLive": bool(first(trackers, ["summary", "allTrackersLive"], False)), + "readyForEtherscanUsdValue": ready_for_etherscan_value, + "externalRequiredPassed": first(trackers, ["summary", "requiredPassedCount"], None), + "externalRequiredCount": first(trackers, ["summary", "requiredCount"], None), + "liquidityRows": first(liquidity, ["summary", "rows"], None), + "nonEvmFundingRequirementRows": first(liquidity, ["summary", "nonEvmFundingRequirementRows"], None), + "cmcSanityWarningCount": first(cmc_sanity, ["summary", "warningCount"], None), + "cmcPromotedTokenCount": first(cmc_sanity, ["summary", "promotedTokenCount"], None), + "blockerCount": len(blockers), + }, + "blockers": blockers, + } + + +def write_markdown(payload: dict[str, Any], prereq: Any, trackers: Any, liquidity: Any, cmc_sanity: Any, path: Path) -> None: + prereq_checks = first(prereq, ["checks"], []) or [] + tracker_checks = first(trackers, ["checks"], []) or [] + liquidity_summary = first(liquidity, ["summary"], {}) or {} + cmc_summary = first(cmc_sanity, ["summary"], {}) or {} + cmc_warnings = first(cmc_sanity, ["warnings"], []) or [] + + lines = [ + "# cWUSDC Provider Handoff Report", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Repo-controlled prerequisites passed: `{payload['summary']['repoControlledPrereqsPassed']}`", + f"- External trackers all live: `{payload['summary']['externalTrackersAllLive']}`", + f"- Ready for Etherscan USD Value path: `{payload['summary']['readyForEtherscanUsdValue']}`", + "", + "## Inputs", + "", + table(["Input", "Path"], [[key, value] for key, value in payload["inputs"].items()]), + "", + "## Repo-Controlled URL Prerequisites", + "", + table( + ["URL", "Passed", "HTTP", "Attempts", "curl status"], + [[ + c.get("url"), + f"`{c.get('passed')}`", + f"`{c.get('status')}`", + f"`{c.get('attempts', '-')}`", + f"`{c.get('curlStatus', '-')}`", + ] for c in prereq_checks], + ) if prereq_checks else "No prerequisite URL JSON found.", + "", + "## External Tracker State", + "", + table( + ["Surface", "Passed", "HTTP", "Details"], + [[ + c.get("id"), + f"`{c.get('passed')}`", + f"`{c.get('status')}`", + "; ".join(c.get("details") or []) or c.get("error") or "-", + ] for c in tracker_checks], + ) if tracker_checks else "No external tracker JSON found.", + "", + "## Liquidity Planner Summary", + "", + table(["Metric", "Value"], [[key, value] for key, value in liquidity_summary.items()]), + "", + "## CMC Report Sanity", + "", + table(["Metric", "Value"], [[key, value] for key, value in cmc_summary.items()]) if cmc_summary else "No CMC sanity JSON found.", + "", + table( + ["ID", "Symbol", "Severity", "Message"], + [[w.get("id"), w.get("symbol", "-"), w.get("severity"), w.get("message")] for w in cmc_warnings], + ) if cmc_warnings else "No CMC sanity warnings.", + "", + "## Blockers", + "", + table( + ["ID", "Type", "Status", "Next action"], + [[b["id"], b["type"], b["status"], b["nextAction"]] for b in payload["blockers"]], + ) if payload["blockers"] else "No current blockers detected.", + "", + "## Submission Boundary", + "", + "This report is generated from public/read-only repo checks. It does not submit forms, approve tokens, add liquidity, swap, bridge, or broadcast transactions.", + ] + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--prereq-json", type=Path, default=DEFAULT_PREREQ_JSON) + parser.add_argument("--trackers-json", type=Path, default=DEFAULT_TRACKERS_JSON) + parser.add_argument("--liquidity-json", type=Path, default=DEFAULT_LIQUIDITY_JSON) + parser.add_argument("--cmc-sanity-json", type=Path, default=DEFAULT_CMC_SANITY_JSON) + parser.add_argument("--json-out", type=Path, default=DEFAULT_JSON) + parser.add_argument("--md-out", type=Path, default=DEFAULT_MD) + args = parser.parse_args() + + prereq = read_json(args.prereq_json) + trackers = read_json(args.trackers_json) + liquidity = read_json(args.liquidity_json) + cmc_sanity = read_json(args.cmc_sanity_json) + payload = build_payload( + prereq, + trackers, + liquidity, + cmc_sanity, + args.prereq_json, + args.trackers_json, + args.liquidity_json, + args.cmc_sanity_json, + ) + + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_markdown(payload, prereq, trackers, liquidity, cmc_sanity, args.md_out) + print(f"Wrote {rel(args.json_out)}") + print(f"Wrote {rel(args.md_out)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-cwusdc-provider-submission-prefill.py b/scripts/verify/build-cwusdc-provider-submission-prefill.py new file mode 100644 index 00000000..2f2f85ce --- /dev/null +++ b/scripts/verify/build-cwusdc-provider-submission-prefill.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +"""Generate prefilled provider submission packets and screenshot checklist for cWUSDC.""" + +from __future__ import annotations + +import datetime as dt +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-provider-submission-prefill-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-provider-submission-prefill-latest.md" + +ASSET = { + "network": "Ethereum Mainnet", + "chainId": 1, + "caip19": "eip155:1/erc20:0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "contract": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a", + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "decimals": 6, + "website": "https://d-bis.org/", + "tokenDirectory": "https://d-bis.org/gru/tokens", + "logo": "https://d-bis.org/tokens/cwusdc.svg", + "contactEmail": "submissions@d-bis.org", + "supportEmail": "support@d-bis.org", + "securityUrl": "https://d-bis.org/security", + "nonAffiliation": "cWUSDC is not Circle-issued USDC and should not be represented as an official Circle asset.", +} + +DESCRIPTION = ( + "cWUSDC is the Ethereum Mainnet compliant wrapped transport representation of Chain 138 cUSDC " + "in the DBIS GRU asset family. It is used for public-network mirrored settlement, proof, and " + "interoperability workflows. cWUSDC is a DBIS/GRU transport asset and is not Circle-issued USDC." +) + +PROVIDERS = { + "etherscan": { + "objective": "Token profile/logo/value evidence submission", + "fields": { + "contract": ASSET["contract"], + "website": ASSET["website"], + "email": ASSET["contactEmail"], + "logo": ASSET["logo"], + "description": DESCRIPTION, + }, + "attachment": "docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md", + }, + "coingecko": { + "objective": "Token listing/update with supply and liquidity caveats", + "fields": { + "chain": ASSET["network"], + "contract": ASSET["contract"], + "symbol": ASSET["symbol"], + "website": ASSET["website"], + "logo": ASSET["logo"], + "description": DESCRIPTION, + }, + "attachment": "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + }, + "coinmarketcap": { + "objective": "Token listing/update with DEX discoverability and supply proof", + "fields": { + "chain": ASSET["network"], + "contract": ASSET["contract"], + "symbol": ASSET["symbol"], + "website": ASSET["website"], + "logo": ASSET["logo"], + "description": DESCRIPTION, + }, + "attachment": "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + }, + "dexscreener": { + "objective": "Token profile/indexing support packet", + "fields": { + "chain": "ethereum", + "tokenAddress": ASSET["contract"], + "website": ASSET["website"], + "logo": ASSET["logo"], + "description": DESCRIPTION, + }, + "attachment": "docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md", + }, + "metamask": { + "objective": "Wallet metadata/price-provider support evidence", + "fields": { + "assetId": ASSET["caip19"], + "chainId": ASSET["chainId"], + "address": ASSET["contract"], + "symbol": ASSET["symbol"], + "logoURI": ASSET["logo"], + "description": DESCRIPTION, + }, + "attachment": "docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md", + }, +} + +SCREENSHOTS = [ + { + "id": "etherscan-token-page", + "url": f"https://etherscan.io/token/{ASSET['contract']}", + "target": "reports/status/screenshots/cwusdc-etherscan-token-page.png", + "reason": "Shows verified Mainnet token page and current value/market-cap state.", + }, + { + "id": "dbis-token-directory", + "url": ASSET["tokenDirectory"], + "target": "reports/status/screenshots/cwusdc-dbis-token-directory.png", + "reason": "Shows official website token context.", + }, + { + "id": "dbis-logo-url", + "url": ASSET["logo"], + "target": "reports/status/screenshots/cwusdc-logo-url.png", + "reason": "Shows hosted token logo asset.", + }, + { + "id": "geckoterminal-univ3-pool", + "url": "https://www.geckoterminal.com/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "target": "reports/status/screenshots/cwusdc-geckoterminal-univ3-pool.png", + "reason": "Shows indexed public cWUSDC/USDC pool evidence.", + }, +] + + +def load_optional(path: str) -> Any: + full = ROOT / path + if not full.exists(): + return None + if full.suffix == ".json": + return json.loads(full.read_text()) + return full.read_text() + + +def build() -> dict[str, Any]: + screenshots = [] + for item in SCREENSHOTS: + entry = dict(item) + target = ROOT / entry["target"] + entry["captured"] = target.exists() + entry["sizeBytes"] = target.stat().st_size if target.exists() else 0 + screenshots.append(entry) + return { + "schema": "cwusdc-provider-submission-prefill/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "asset": ASSET, + "description": DESCRIPTION, + "providers": PROVIDERS, + "screenshotChecklist": screenshots, + "currentReadiness": { + "dossier": load_optional("reports/status/cwusdc-etherscan-value-dossier-latest.json"), + "providerCi": load_optional("reports/status/cwusdc-provider-readiness-ci-latest.json"), + "supply": load_optional("reports/status/cwusdc-supply-circulating-attestation-latest.json"), + }, + "submissionBoundary": [ + "This packet is prefilled evidence only; it does not prove provider acceptance.", + "Screenshots should be captured immediately before submission and after any provider response.", + "Do not remove the non-Circle disclosure from provider forms.", + ], + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cWUSDC Provider Submission Prefill", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Contract: `{ASSET['contract']}`", + f"- CAIP-19: `{ASSET['caip19']}`", + "", + "## Description", + "", + DESCRIPTION, + "", + "## Provider Prefill", + "", + ] + for provider, data in payload["providers"].items(): + lines.extend([f"### {provider}", "", f"- Objective: {data['objective']}", f"- Attachment: `{data['attachment']}`", "", "| Field | Value |", "|---|---|"]) + for key, value in data["fields"].items(): + lines.append(f"| `{key}` | `{value}` |") + lines.append("") + lines.extend(["## Screenshot Checklist", "", "| ID | URL | Target | Captured | Reason |", "|---|---|---|---:|---|"]) + for item in payload["screenshotChecklist"]: + lines.append(f"| `{item['id']}` | {item['url']} | `{item['target']}` | `{item['captured']}` | {item['reason']} |") + lines.extend(["", "## Screenshot Capture Commands", "", "```bash"]) + for item in payload["screenshotChecklist"]: + lines.append(f"pnpm exec playwright screenshot --timeout=60000 {item['url']} {item['target']}") + lines.extend(["```", "", "## Boundaries", ""]) + lines.extend(f"- {item}" for item in payload["submissionBoundary"]) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + payload = build() + REPORT_JSON.parent.mkdir(parents=True, exist_ok=True) + REPORT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, REPORT_MD) + print(f"Wrote {REPORT_JSON.relative_to(ROOT)}") + print(f"Wrote {REPORT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-cwusdc-role-deployment-appendix.py b/scripts/verify/build-cwusdc-role-deployment-appendix.py new file mode 100644 index 00000000..f05415fe --- /dev/null +++ b/scripts/verify/build-cwusdc-role-deployment-appendix.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +"""Build a formal role-event/deployment-record appendix for Mainnet cWUSDC.""" + +from __future__ import annotations + +import datetime as dt +import json +import re +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +ROLE_AUDIT = ROOT / "reports" / "status" / "cwusdc-mainnet-role-audit-latest.json" +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-role-deployment-appendix-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-role-deployment-appendix-latest.md" + +SEARCH_ROOTS = [ + ROOT / "docs", + ROOT / "reports" / "status", + ROOT / "config", + ROOT / "scripts", +] + + +def load_role_audit() -> dict[str, Any]: + if not ROLE_AUDIT.exists(): + raise SystemExit(f"Missing role audit: {ROLE_AUDIT.relative_to(ROOT)}") + return json.loads(ROLE_AUDIT.read_text()) + + +def read_text(path: Path) -> str: + try: + return path.read_text(errors="ignore") + except Exception: + return "" + + +def candidate_files() -> list[Path]: + files: list[Path] = [] + for root in SEARCH_ROOTS: + if not root.exists(): + continue + for path in root.rglob("*"): + if path.is_file() and path.suffix.lower() in {".md", ".json", ".jsonl", ".sh", ".py", ".env", ".txt"}: + files.append(path) + return files + + +def find_mentions(needles: list[str]) -> list[dict[str, Any]]: + lowered = [(needle, needle.lower()) for needle in needles if needle] + findings: list[dict[str, Any]] = [] + for path in candidate_files(): + rel = str(path.relative_to(ROOT)) + if rel.endswith("cwusdc-role-deployment-appendix-latest.json"): + continue + text = read_text(path) + if not text: + continue + text_lower = text.lower() + matches = [needle for needle, low in lowered if low in text_lower] + if not matches: + continue + lines = [] + for index, line in enumerate(text.splitlines(), start=1): + low_line = line.lower() + if any(low in low_line for _, low in lowered): + lines.append({"line": index, "text": line[:240]}) + if len(lines) >= 8: + break + findings.append({"path": rel, "matches": sorted(set(matches)), "sampleLines": lines}) + return sorted(findings, key=lambda item: item["path"]) + + +def tx_url(tx_hash: str | None) -> str: + return f"https://etherscan.io/tx/{tx_hash}" if tx_hash else "" + + +def build() -> dict[str, Any]: + role_audit = load_role_audit() + events = role_audit.get("eventLogReview", {}).get("events", []) + tx_hashes = sorted({event.get("transactionHash") for event in events if event.get("transactionHash")}) + addresses = sorted( + { + role_audit.get("token", {}).get("address", ""), + *[candidate.get("address", "") for candidate in role_audit.get("candidateChecks", {}).values()], + *[event.get("account", "") for event in events], + *[event.get("sender", "") for event in events], + } + ) + addresses = [address for address in addresses if re.fullmatch(r"0x[a-fA-F0-9]{40}", address or "")] + needles = [role_audit.get("token", {}).get("address", ""), *tx_hashes, *addresses] + mentions = find_mentions(needles) + deployment_record_candidates = [ + item + for item in mentions + if any(token in item["path"].lower() for token in ["deploy", "tracker", "technical", "completion", "readiness", "runbook", "bridge"]) + ] + return { + "schema": "cwusdc-role-deployment-appendix/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "roleAudit": str(ROLE_AUDIT.relative_to(ROOT)), + "token": role_audit.get("token", {}), + "eventCount": len(events), + "transactionHashes": tx_hashes, + "effectiveMembersFromEvents": role_audit.get("eventLogReview", {}).get("effectiveMembersFromEvents", {}), + "privilegedCandidates": role_audit.get("privilegedCandidates", []), + "deploymentRecordCandidates": deployment_record_candidates, + "allMentions": mentions, + "limitations": [ + "This appendix reconciles on-chain role events with repository records discoverable by local text search.", + "It is not a substitute for a signed third-party audit or a provider-side ownership verification flow.", + "Operator notebooks, private emails, and provider form submissions are outside this local repository scan unless committed as evidence reports.", + ], + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cWUSDC Role Deployment Appendix", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Token: `{payload['token'].get('address')}`", + f"- Source role audit: `{payload['roleAudit']}`", + f"- On-chain role event count: `{payload['eventCount']}`", + "", + "## Effective Members From Events", + "", + "| Role | Members |", + "|---|---|", + ] + for role, members in payload["effectiveMembersFromEvents"].items(): + lines.append(f"| `{role}` | `{', '.join(members) if members else 'none observed'}` |") + lines.extend(["", "## Privileged Candidates", "", "| Label | Address | Roles |", "|---|---|---|"]) + for item in payload["privilegedCandidates"]: + lines.append(f"| `{item['label']}` | `{item['address']}` | `{', '.join(item['roles'])}` |") + lines.extend(["", "## Role Event Transactions", "", "| Transaction | Etherscan |", "|---|---|"]) + for tx_hash in payload["transactionHashes"]: + lines.append(f"| `{tx_hash}` | {tx_url(tx_hash)} |") + lines.extend(["", "## Deployment Record Candidates", "", "| Path | Matches | Sample |", "|---|---|---|"]) + for item in payload["deploymentRecordCandidates"]: + sample = "; ".join(f"L{line['line']}: {line['text']}" for line in item["sampleLines"][:3]) + lines.append(f"| `{item['path']}` | `{', '.join(item['matches'][:4])}` | {sample} |") + lines.extend(["", "## Limitations", ""]) + lines.extend(f"- {item}" for item in payload["limitations"]) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + payload = build() + REPORT_JSON.parent.mkdir(parents=True, exist_ok=True) + REPORT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, REPORT_MD) + print(f"Wrote {REPORT_JSON.relative_to(ROOT)}") + print(f"Wrote {REPORT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh b/scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh new file mode 100755 index 00000000..d0889b95 --- /dev/null +++ b/scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Build ei-matrix-cwusdc-topup-indices.txt + ei-matrix-cwusdc-topup-amounts.tsv from +# reports/status/ei-matrix-readiness-audit-latest.json (rows with mainnetCwusdcRaw < TARGET). +# +# Usage (repo root): +# EI_MATRIX_TOPUP_TARGET_RAW=12000000 ./scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh +# ./scripts/verify/build-ei-matrix-cwusdc-topup-tsv-from-audit-json.sh /path/to/audit.json +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +JSON="${1:-$PROJECT_ROOT/reports/status/ei-matrix-readiness-audit-latest.json}" +TARGET="${EI_MATRIX_TOPUP_TARGET_RAW:-12000000}" +OUT_IDX="$PROJECT_ROOT/reports/status/ei-matrix-cwusdc-topup-indices.txt" +OUT_TSV="$PROJECT_ROOT/reports/status/ei-matrix-cwusdc-topup-amounts.tsv" +[[ -f "$JSON" ]] || { echo "Missing $JSON" >&2; exit 1; } +python3 - "$JSON" "$TARGET" "$OUT_IDX" "$OUT_TSV" <<'PY' +import json +import sys +from pathlib import Path + +p, target, out_idx, out_tsv = Path(sys.argv[1]), int(sys.argv[2]), Path(sys.argv[3]), Path(sys.argv[4]) +data = json.loads(p.read_text(encoding="utf-8")) +rows = data["rows"] +gaps = [] +total = 0 +for r in rows: + cur = int(r.get("mainnetCwusdcRaw") or 0) + if cur < target: + need = target - cur + idx = int(r["linearIndex"]) + gaps.append((idx, need)) + total += need +out_idx.parent.mkdir(parents=True, exist_ok=True) +out_idx.write_text("\n".join(str(i) for i, _ in gaps) + "\n", encoding="utf-8") +out_tsv.write_text("\n".join(f"{i}\t{n}" for i, n in gaps) + "\n", encoding="utf-8") +print(f"wrote {out_idx} + {out_tsv} gap_wallets={len(gaps)} total_topup_raw={total}") +PY diff --git a/scripts/verify/build-external-submission-packet-index.py b/scripts/verify/build-external-submission-packet-index.py new file mode 100755 index 00000000..39f6c3f8 --- /dev/null +++ b/scripts/verify/build-external-submission-packet-index.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""Build an index of external submission packets and current probe artifacts.""" + +from __future__ import annotations + +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +OUT_JSON = ROOT / "reports/status/external-submission-packet-index-latest.json" +OUT_MD = ROOT / "docs/04-configuration/EXTERNAL_SUBMISSION_PACKET_INDEX.md" + +PACKETS: list[dict[str, Any]] = [ + { + "provider": "Etherscan", + "status": "repo_ready_external_acceptance_pending", + "primaryPacket": "docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md", + "supporting": [ + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md", + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md", + "reports/status/cwusdc-etherscan-value-dossier-latest.json", + ], + "nextRepoAction": "Refresh dossier and capture post-submit response evidence.", + }, + { + "provider": "CoinGecko", + "status": "repo_ready_external_price_entry_missing", + "primaryPacket": "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + "supporting": [ + "docs/04-configuration/coingecko/CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md", + "docs/04-configuration/coingecko/submissions/cwusdc-coingecko-listing-request-20260509.json", + "reports/status/cwusdc-external-trackers-live-latest.json", + ], + "nextRepoAction": "Keep token-price API blocker visible and attach current supply/liquidity caveats.", + }, + { + "provider": "CoinMarketCap", + "status": "dex_page_visible_full_value_acceptance_pending", + "primaryPacket": "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + "supporting": [ + "reports/status/token-aggregation-cmc-report-chain1-latest.json", + "reports/status/cmc-provider-report-sanity-latest.json", + "reports/status/cmc-top10-ecosystem-coverage-latest.json", + ], + "nextRepoAction": "Use CMC sanity report to avoid overclaiming liquidity or quote-asset identity.", + }, + { + "provider": "DexScreener", + "status": "api_not_indexing_pairs", + "primaryPacket": "docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md", + "supporting": [ + "reports/status/cwusdc-external-trackers-live-latest.json", + "reports/status/cwusdc-provider-handoff-latest.md", + ], + "nextRepoAction": "Keep pair/profile request evidence updated after fresh public swap/liquidity events.", + }, + { + "provider": "GeckoTerminal", + "status": "pool_api_visible_low_reserve", + "primaryPacket": "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + "supporting": [ + "reports/status/cwusdc-external-trackers-live-latest.json", + "reports/status/cmc-provider-report-sanity-latest.json", + ], + "nextRepoAction": "Track reserve USD and 24h volume separately from listing acceptance.", + }, + { + "provider": "MetaMask", + "status": "metadata_path_ready_price_provider_external", + "primaryPacket": "docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md", + "supporting": [ + "docs/04-configuration/metamask/METAMASK_EIP747_CONTRACT_METADATA_REFERENCE_PACKET.md", + "docs/04-configuration/metamask/METAMASK_CWUSDC_API_FEED_SPIDER_WEB_RESEARCH.md", + "reports/status/cwusdc-provider-readiness-ci-latest.json", + ], + "nextRepoAction": "Keep CAIP-19, EIP-747, logo URL, and external price-provider blockers aligned.", + }, +] + + +def exists(path: str) -> bool: + return (ROOT / path).exists() + + +def table(headers: list[str], rows: list[list[Any]]) -> str: + def cell(value: Any) -> str: + if isinstance(value, list): + value = "
      ".join(str(item) for item in value) + return str(value).replace("|", "\\|").replace("\n", "
      ") + + return "\n".join( + [ + f"| {' | '.join(cell(header) for header in headers)} |", + f"| {' | '.join('---' for _ in headers)} |", + *[f"| {' | '.join(cell(value) for value in row)} |" for row in rows], + ] + ) + + +def main() -> int: + generated_at = datetime.now(timezone.utc).isoformat() + packets = [] + for packet in PACKETS: + row = dict(packet) + row["primaryExists"] = exists(row["primaryPacket"]) + row["supportingExists"] = [{"path": path, "exists": exists(path)} for path in row["supporting"]] + row["allArtifactsPresent"] = row["primaryExists"] and all(item["exists"] for item in row["supportingExists"]) + packets.append(row) + payload = { + "schema": "external-submission-packet-index/v1", + "generatedAt": generated_at, + "summary": { + "providerCount": len(packets), + "allArtifactsPresent": all(row["allArtifactsPresent"] for row in packets), + "missingArtifactCount": sum(1 for row in packets if not row["allArtifactsPresent"]), + }, + "packets": packets, + } + OUT_JSON.parent.mkdir(parents=True, exist_ok=True) + OUT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + + lines = [ + "# External Submission Packet Index", + "", + f"- Generated: `{generated_at}`", + f"- All artifacts present: `{payload['summary']['allArtifactsPresent']}`", + "", + table( + ["Provider", "Status", "Primary packet", "Supporting artifacts", "Next repo action"], + [ + [ + row["provider"], + row["status"], + f"`{row['primaryPacket']}` ({row['primaryExists']})", + [f"`{item['path']}` ({item['exists']})" for item in row["supportingExists"]], + row["nextRepoAction"], + ] + for row in packets + ], + ), + "", + "## Boundary", + "", + "This index tracks repo-side evidence availability only. Provider submission, review, acceptance, and price propagation remain external states.", + ] + OUT_MD.parent.mkdir(parents=True, exist_ok=True) + OUT_MD.write_text("\n".join(lines) + "\n") + print(f"Wrote {OUT_JSON.relative_to(ROOT)}") + print(f"Wrote {OUT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/build-non-evm-requirement-stubs.py b/scripts/verify/build-non-evm-requirement-stubs.py new file mode 100755 index 00000000..612649de --- /dev/null +++ b/scripts/verify/build-non-evm-requirement-stubs.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +"""Write repo-side non-EVM funding and identity requirement stubs.""" + +from __future__ import annotations + +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +CONFIG_OUT = ROOT / "config/non-evm-lane-requirements.json" +REPORT_JSON = ROOT / "reports/status/non-evm-lane-requirements-latest.json" +REPORT_MD = ROOT / "reports/status/non-evm-lane-requirements-latest.md" + +LANES: list[dict[str, Any]] = [ + { + "network": "solana", + "nativeAsset": "SOL", + "walletStatus": "bound_from_SOLANA_KEYPAIR_PATH_public_key", + "canonicalWallet": "9b4ebHVimuhMqbiCh6tUMMY2S48VyEHpqg5nxMMFe5Pf", + "requiredBindings": ["splMintAddresses", "rentReserveTarget", "venueMinimumLiquidity"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim native Solana liquidity until SPL mints, rent/gas, and venue inventory are bound.", + }, + { + "network": "tron", + "nativeAsset": "TRX", + "walletStatus": "derived_wallet_needs_canonical_confirmation", + "canonicalWallet": "TGkbidE5LfVJZ3QGj6DaPqzCTcTe9tJDxm", + "requiredBindings": ["canonicalWalletApproval", "energyBandwidthTarget", "trc20Inventory"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim native Tron liquidity until the canonical wallet and TRC-20 inventory are confirmed.", + }, + { + "network": "xrpl", + "nativeAsset": "XRP", + "walletStatus": "missing", + "canonicalWallet": None, + "requiredBindings": ["xrplAccount", "destinationTagPolicy", "trustlineIssuerPolicy", "xrpReserveTarget"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Do not claim XRPL corridor readiness until account reserve, tags, trustlines, and wXRP controller evidence are closed.", + }, + { + "network": "bitcoin", + "nativeAsset": "BTC", + "walletStatus": "missing", + "canonicalWallet": None, + "requiredBindings": ["btcCustodyAddress", "proofOfReservesPolicy", "wrappedAssetMapping", "venueTarget"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use BTC as a planning lane only until custody/reserve evidence and wrapping policy are bound.", + }, + { + "network": "dogecoin", + "nativeAsset": "DOGE", + "walletStatus": "missing", + "canonicalWallet": None, + "requiredBindings": ["dogeCustodyAddress", "bridgeOrCustodyModel", "venueTarget"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use DOGE as a planning lane only until native custody and bridge model are bound.", + }, + { + "network": "hyperliquid", + "nativeAsset": "HYPE", + "walletStatus": "research_required", + "canonicalWallet": None, + "requiredBindings": ["chainIdentifier", "assetIdentifier", "custodyPath", "venueOrApiEvidence"], + "minimumFundingTarget": "TBD", + "claimBoundary": "Use HYPE only as a market-cap watch item until identifiers and custody path are verified.", + }, +] + + +def table(headers: list[str], rows: list[list[Any]]) -> str: + def cell(value: Any) -> str: + if isinstance(value, list): + value = "
      ".join(str(item) for item in value) + if value is None: + value = "TBD" + return str(value).replace("|", "\\|").replace("\n", "
      ") + + return "\n".join( + [ + f"| {' | '.join(cell(header) for header in headers)} |", + f"| {' | '.join('---' for _ in headers)} |", + *[f"| {' | '.join(cell(value) for value in row)} |" for row in rows], + ] + ) + + +def main() -> int: + generated_at = datetime.now(timezone.utc).isoformat() + payload = { + "schema": "non-evm-lane-requirements/v1", + "generatedAt": generated_at, + "status": "stubs_bound_repo_side", + "lanes": LANES, + "validationRule": "A lane is claimable only after canonicalWallet, asset IDs, native gas/reserve target, venue target, and evidence source are non-TBD.", + } + for path in (CONFIG_OUT, REPORT_JSON): + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2) + "\n") + + lines = [ + "# Non-EVM Lane Requirement Stubs", + "", + f"- Generated: `{generated_at}`", + f"- Config source: `{CONFIG_OUT.relative_to(ROOT)}`", + "", + table( + ["Network", "Native", "Wallet status", "Canonical wallet", "Required bindings", "Minimum target", "Claim boundary"], + [ + [ + lane["network"], + lane["nativeAsset"], + lane["walletStatus"], + lane["canonicalWallet"], + lane["requiredBindings"], + lane["minimumFundingTarget"], + lane["claimBoundary"], + ] + for lane in LANES + ], + ), + ] + REPORT_MD.parent.mkdir(parents=True, exist_ok=True) + REPORT_MD.write_text("\n".join(lines) + "\n") + print(f"Wrote {CONFIG_OUT.relative_to(ROOT)}") + print(f"Wrote {REPORT_JSON.relative_to(ROOT)}") + print(f"Wrote {REPORT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-cmc-provider-report-sanity.py b/scripts/verify/check-cmc-provider-report-sanity.py new file mode 100755 index 00000000..b347373f --- /dev/null +++ b/scripts/verify/check-cmc-provider-report-sanity.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +"""Advisory sanity checks for the repo CMC-shaped Mainnet report.""" + +from __future__ import annotations + +import json +from datetime import datetime, timezone +from decimal import Decimal, InvalidOperation +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +CMC_REPORT = ROOT / "reports/status/token-aggregation-cmc-report-chain1-latest.json" +TRACKERS = ROOT / "reports/status/cwusdc-external-trackers-live-latest.json" +OUT_JSON = ROOT / "reports/status/cmc-provider-report-sanity-latest.json" +OUT_MD = ROOT / "reports/status/cmc-provider-report-sanity-latest.md" + +OFFICIAL_QUOTES = { + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "USDC", + "0xdac17f958d2ee523a2206206994597c13d831ec7": "USDT", +} +PROMOTED = {"cWUSDC", "cWUSDT", "cWXAUC", "cWXAUT", "cWBTC", "cWETH"} + + +def load(path: Path) -> dict[str, Any]: + return json.loads(path.read_text()) if path.exists() else {} + + +def dec(value: Any) -> Decimal: + try: + return Decimal(str(value or "0")) + except (InvalidOperation, ValueError): + return Decimal(0) + + +def table(headers: list[str], rows: list[list[Any]]) -> str: + def cell(value: Any) -> str: + if isinstance(value, list): + value = "
      ".join(str(item) for item in value) + return str(value).replace("|", "\\|").replace("\n", "
      ") + + return "\n".join( + [ + f"| {' | '.join(cell(header) for header in headers)} |", + f"| {' | '.join('---' for _ in headers)} |", + *[f"| {' | '.join(cell(value) for value in row)} |" for row in rows], + ] + ) + + +def main() -> int: + cmc = load(CMC_REPORT) + trackers = load(TRACKERS) + tokens = cmc.get("tokens", []) + warnings: list[dict[str, Any]] = [] + promoted_rows = [] + + for token in tokens: + symbol = token.get("symbol") + address = str(token.get("contract_address", "")).lower() + liquidity = dec(token.get("liquidity_usd")) + volume = dec(token.get("volume_24h")) + pairs = token.get("pairs", []) + if address in OFFICIAL_QUOTES and symbol != OFFICIAL_QUOTES[address]: + warnings.append( + { + "id": "official_quote_symbol_alias", + "symbol": symbol, + "address": address, + "severity": "warning", + "message": f"Official {OFFICIAL_QUOTES[address]} address is presented with symbol {symbol}; keep provider packets explicit about official quote vs DBIS wrapped/compliant symbols.", + } + ) + if symbol in PROMOTED: + promoted_rows.append( + { + "symbol": symbol, + "address": address, + "liquidityUsd": str(liquidity), + "volume24hUsd": str(volume), + "pairCount": len(pairs), + } + ) + if liquidity <= 0: + warnings.append( + { + "id": "zero_reported_liquidity", + "symbol": symbol, + "address": address, + "severity": "warning", + "message": "CMC-shaped report shows zero liquidity_usd; do not use it as listing-quality liquidity evidence.", + } + ) + + gecko_reserves = [] + for check in trackers.get("checks", []): + if not str(check.get("id", "")).startswith("geckoterminal"): + continue + attrs = (((check.get("jsonPreview") or {}).get("data") or {}).get("attributes") or {}) + gecko_reserves.append( + { + "id": check.get("id"), + "pool": attrs.get("address"), + "name": attrs.get("name"), + "reserveUsd": attrs.get("reserve_in_usd"), + "volume24hUsd": (attrs.get("volume_usd") or {}).get("h24"), + } + ) + + payload = { + "schema": "cmc-provider-report-sanity/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "inputs": { + "cmcReport": str(CMC_REPORT.relative_to(ROOT)), + "trackerReport": str(TRACKERS.relative_to(ROOT)) if TRACKERS.exists() else None, + }, + "summary": { + "tokenCount": len(tokens), + "promotedTokenCount": len(promoted_rows), + "warningCount": len(warnings), + "geckoReserveEvidenceCount": len(gecko_reserves), + }, + "promotedTokens": promoted_rows, + "geckoReserveEvidence": gecko_reserves, + "warnings": warnings, + } + OUT_JSON.parent.mkdir(parents=True, exist_ok=True) + OUT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + + lines = [ + "# CMC Provider Report Sanity", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Warnings: `{len(warnings)}`", + "", + "## Promoted Mainnet Rows", + "", + table( + ["Symbol", "Address", "Liquidity USD", "24h volume USD", "Pairs"], + [[row["symbol"], row["address"], row["liquidityUsd"], row["volume24hUsd"], row["pairCount"]] for row in promoted_rows], + ), + "", + "## GeckoTerminal Reserve Cross-Check", + "", + table( + ["Check", "Pool", "Name", "Reserve USD", "24h volume USD"], + [[row["id"], row["pool"], row["name"], row["reserveUsd"], row["volume24hUsd"]] for row in gecko_reserves], + ) if gecko_reserves else "No GeckoTerminal tracker reserve evidence found.", + "", + "## Advisory Warnings", + "", + table( + ["ID", "Symbol", "Address", "Severity", "Message"], + [[w["id"], w.get("symbol", "-"), w.get("address", "-"), w["severity"], w["message"]] for w in warnings], + ) if warnings else "No warnings.", + ] + OUT_MD.write_text("\n".join(lines) + "\n") + print(f"Wrote {OUT_JSON.relative_to(ROOT)}") + print(f"Wrote {OUT_MD.relative_to(ROOT)}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-contracts-on-chain-138.sh b/scripts/verify/check-contracts-on-chain-138.sh index 9ca2a4bb..6609bd85 100755 --- a/scripts/verify/check-contracts-on-chain-138.sh +++ b/scripts/verify/check-contracts-on-chain-138.sh @@ -157,7 +157,7 @@ for addr in "${ADDRESSES[@]}"; do done echo "" -echo "Total: $OK present, $MISS missing/empty (${#ADDRESSES[@]} addresses). Explorer: https://explorer.d-bis.org/address/" +echo "Total: $OK present, $MISS missing/empty (${#ADDRESSES[@]} addresses). Explorer: https://explorer.d-bis.org/addresses/" if [[ $MISS -gt 0 && -z "$rpc_reachable" ]]; then echo " → RPC was unreachable from this host; see WARN above. Run from LAN/VPN or pass a reachable RPC URL." >&2 fi diff --git a/scripts/verify/check-cw-full-operational-readiness.py b/scripts/verify/check-cw-full-operational-readiness.py new file mode 100755 index 00000000..ef971bce --- /dev/null +++ b/scripts/verify/check-cw-full-operational-readiness.py @@ -0,0 +1,536 @@ +#!/usr/bin/env python3 +"""Build a read-only cW mesh operational readiness report. + +This checker intentionally does not call RPC. It validates the source-of-truth +files that the deployment, bridge, liquidity, token aggregation, and tracker +runbooks consume, then records the remaining live/operator and external gates. +""" +from __future__ import annotations + +import argparse +import json +import re +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] + +DEPLOYMENT_STATUS = ROOT / "cross-chain-pmm-lps" / "config" / "deployment-status.json" +MESH_MATRIX = ROOT / "reports" / "status" / "cw-mesh-deployment-matrix-latest.json" +TOKEN_MAPPING = ROOT / "config" / "token-mapping-multichain.json" +CANONICAL_TOKENS = ROOT / "smom-dbis-138" / "services" / "token-aggregation" / "src" / "config" / "canonical-tokens.ts" +ENGINE_X_READINESS = ROOT / "reports" / "status" / "engine-x-public-indexed-readiness-latest.json" +ETHERSCAN_PACKET = ROOT / "docs" / "04-configuration" / "etherscan" / "CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md" +COINGECKO_CHECKLIST = ROOT / "docs" / "04-configuration" / "coingecko" / "CWUSDC_MAINNET_EXTERNAL_SUBMISSION_CHECKLIST.md" +CW_L1_CONTRACT = ROOT / "smom-dbis-138" / "contracts" / "bridge" / "CWMultiTokenBridgeL1.sol" +CW_L2_CONTRACT = ROOT / "smom-dbis-138" / "contracts" / "bridge" / "CWMultiTokenBridgeL2.sol" +CW_L1_DEPLOY = ROOT / "smom-dbis-138" / "script" / "DeployCWMultiTokenBridgeL1.s.sol" +CW_L2_DEPLOY = ROOT / "smom-dbis-138" / "script" / "DeployCWMultiTokenBridgeL2.s.sol" +CW_ROUTE_BOOTSTRAP = ROOT / "smom-dbis-138" / "scripts" / "deployment" / "cw-l1-bootstrap-gru-v2-ccip-routes.sh" + +BRIDGE_EVIDENCE_CANDIDATES = [ + ROOT / "reports" / "status" / "cw-multitoken-bridge-e2e-latest.json", + ROOT / "reports" / "status" / "cw-bridge-live-e2e-latest.json", +] +TRACKER_EVIDENCE_CANDIDATES = [ + ROOT / "reports" / "status" / "cwusdc-tracker-profile-approval-latest.json", + ROOT / "reports" / "status" / "cwusdc-external-trackers-live-latest.json", +] + +ACTIVE_CHAIN_IDS = [1, 10, 56, 100, 137, 8453, 42161, 42220, 43114] +PLANNED_OR_NON_CW_CHAIN_IDS = [1111, 651940] + +REQUIRED_CW_SYMBOLS = [ + "cWUSDT", + "cWUSDC", + "cWEURC", + "cWEURT", + "cWGBPC", + "cWGBPT", + "cWAUDC", + "cWJPYC", + "cWCHFC", + "cWCADC", + "cWXAUC", + "cWXAUT", +] + +OPTIONAL_ADDON_SYMBOLS = ["cWBTC"] + +TOKEN_MAPPING_KEYS = { + "cWUSDT": "Compliant_USDT_cW", + "cWUSDC": "Compliant_USDC_cW", + "cWEURC": "Compliant_EURC_cW", + "cWEURT": "Compliant_EURT_cW", + "cWGBPC": "Compliant_GBPC_cW", + "cWGBPT": "Compliant_GBPT_cW", + "cWAUDC": "Compliant_AUDC_cW", + "cWJPYC": "Compliant_JPYC_cW", + "cWCHFC": "Compliant_CHFC_cW", + "cWCADC": "Compliant_CADC_cW", + "cWXAUC": "Compliant_XAUC_cW", + "cWXAUT": "Compliant_XAUT_cW", +} + + +def load_json(path: Path, default: Any = None) -> Any: + if not path.exists(): + return default + return json.loads(path.read_text()) + + +def rel(path: Path) -> str: + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + +def is_zero_address(value: str | None) -> bool: + if not value: + return True + return value.lower() == "0x0000000000000000000000000000000000000000" + + +def ok_gate(gate_id: str, title: str, details: list[str] | None = None, evidence: list[str] | None = None) -> dict[str, Any]: + return { + "id": gate_id, + "title": title, + "status": "pass", + "details": details or [], + "evidence": evidence or [], + } + + +def warn_gate(gate_id: str, title: str, details: list[str], evidence: list[str] | None = None) -> dict[str, Any]: + return { + "id": gate_id, + "title": title, + "status": "warn", + "details": details, + "evidence": evidence or [], + } + + +def fail_gate(gate_id: str, title: str, details: list[str], evidence: list[str] | None = None) -> dict[str, Any]: + return { + "id": gate_id, + "title": title, + "status": "blocked", + "details": details, + "evidence": evidence or [], + } + + +def check_source_of_truth(dep: dict[str, Any]) -> dict[str, Any]: + issues: list[str] = [] + if dep.get("homeChainId") != 138: + issues.append(f"deployment-status homeChainId is `{dep.get('homeChainId')}`, expected `138`.") + if "138" not in (dep.get("chains") or {}): + issues.append("deployment-status is missing Chain 138.") + for chain_id in ACTIVE_CHAIN_IDS: + if str(chain_id) not in (dep.get("chains") or {}): + issues.append(f"deployment-status is missing active chain `{chain_id}`.") + + evidence = [rel(DEPLOYMENT_STATUS)] + if issues: + return fail_gate("source_of_truth_chain_138", "Chain 138 source of truth", issues, evidence) + return ok_gate( + "source_of_truth_chain_138", + "Chain 138 source of truth", + ["Chain 138 is the home chain and all active public mesh chains are represented."], + evidence, + ) + + +def check_deployment_coverage(dep: dict[str, Any]) -> dict[str, Any]: + chains = dep.get("chains") or {} + issues: list[str] = [] + optional_missing: list[str] = [] + + for chain_id in ACTIVE_CHAIN_IDS: + info = chains.get(str(chain_id)) or {} + cw_tokens = info.get("cwTokens") or {} + for symbol in REQUIRED_CW_SYMBOLS: + if is_zero_address(cw_tokens.get(symbol)): + issues.append(f"chain `{chain_id}` missing `{symbol}` in deployment-status cwTokens.") + for symbol in OPTIONAL_ADDON_SYMBOLS: + if is_zero_address(cw_tokens.get(symbol)): + optional_missing.append(f"chain `{chain_id}` missing optional add-on `{symbol}`.") + + evidence = [rel(DEPLOYMENT_STATUS)] + if issues: + return fail_gate("active_cw_token_coverage", "Active cW token coverage", issues, evidence) + if optional_missing: + return warn_gate( + "active_cw_token_coverage", + "Active cW token coverage", + ["All required cW fiat/commodity symbols are present.", *optional_missing], + evidence, + ) + return ok_gate( + "active_cw_token_coverage", + "Active cW token coverage", + ["All required cW fiat/commodity symbols and optional cWBTC add-on are present on active mesh chains."], + evidence, + ) + + +def check_token_mapping(dep: dict[str, Any], mapping: dict[str, Any]) -> dict[str, Any]: + chains = dep.get("chains") or {} + pairs = mapping.get("pairs") or [] + pair_by_to = {int(p.get("toChainId")): p for p in pairs if p.get("fromChainId") == 138 and p.get("toChainId") is not None} + issues: list[str] = [] + + for chain_id in ACTIVE_CHAIN_IDS: + pair = pair_by_to.get(chain_id) + if not pair: + issues.append(f"token-mapping missing 138 -> `{chain_id}` pair.") + continue + tokens = {t.get("key"): t.get("addressTo") for t in pair.get("tokens") or []} + cw_tokens = (chains.get(str(chain_id)) or {}).get("cwTokens") or {} + for symbol, key in TOKEN_MAPPING_KEYS.items(): + mapped = tokens.get(key) + expected = cw_tokens.get(symbol) + if is_zero_address(mapped): + issues.append(f"138 -> `{chain_id}` token-mapping has empty `{key}`.") + elif expected and mapped.lower() != expected.lower(): + issues.append(f"138 -> `{chain_id}` `{key}` is `{mapped}`, deployment-status has `{expected}`.") + + evidence = [rel(TOKEN_MAPPING), rel(DEPLOYMENT_STATUS)] + if issues: + return fail_gate("token_mapping_mesh", "138 to public-chain token mapping", issues, evidence) + return ok_gate( + "token_mapping_mesh", + "138 to public-chain token mapping", + ["All required cW mapping entries are non-zero and match deployment-status for active mesh chains."], + evidence, + ) + + +def parse_gru_chain_ids(text: str) -> list[int]: + match = re.search(r"const\s+GRU_CW_CHAIN_IDS\s*=\s*\[([^\]]+)\]", text) + if not match: + return [] + return [int(x) for x in re.findall(r"\d+", match.group(1))] + + +def fallback_symbol_has_chain(text: str, symbol: str, chain_id: int) -> bool: + match = re.search(rf"\n\s+{re.escape(symbol)}:\s*\{{(?P.*?)\n\s+\}},", text, flags=re.S) + if not match: + return False + body = match.group("body") + return re.search(rf"\[\s*{chain_id}\s*\]\s*:\s*['\"]0x[a-fA-F0-9]{{40}}['\"]", body) is not None + + +def check_token_aggregation() -> dict[str, Any]: + if not CANONICAL_TOKENS.exists(): + return fail_gate("token_aggregation_registry", "Token aggregation canonical registry", ["canonical-tokens.ts is missing."], [rel(CANONICAL_TOKENS)]) + + text = CANONICAL_TOKENS.read_text() + issues: list[str] = [] + chain_ids = parse_gru_chain_ids(text) + for chain_id in ACTIVE_CHAIN_IDS: + if chain_id not in chain_ids: + issues.append(f"GRU_CW_CHAIN_IDS missing active chain `{chain_id}`.") + for symbol in REQUIRED_CW_SYMBOLS: + if f"symbol: '{symbol}'" not in text and f'symbol: "{symbol}"' not in text: + issues.append(f"CANONICAL_TOKENS missing first-class `{symbol}` entry.") + for chain_id in ACTIVE_CHAIN_IDS: + if not fallback_symbol_has_chain(text, symbol, chain_id): + issues.append(f"FALLBACK_ADDRESSES `{symbol}` missing chain `{chain_id}`.") + + evidence = [rel(CANONICAL_TOKENS), "smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.test.ts"] + if issues: + return fail_gate("token_aggregation_registry", "Token aggregation canonical registry", issues, evidence) + return ok_gate( + "token_aggregation_registry", + "Token aggregation canonical registry", + ["Canonical token aggregation includes the active nine-chain promoted cW mesh and the full required wrapped family."], + evidence, + ) + + +def check_liquidity_and_indexing(matrix: dict[str, Any], dep: dict[str, Any]) -> dict[str, Any]: + rows = {int(r.get("chainId")): r for r in matrix.get("rows") or []} + chains = dep.get("chains") or {} + issues: list[str] = [] + missing_rails: list[str] = [] + unseeded_by_chain: dict[int, int] = {} + unseeded_examples: dict[int, list[str]] = {} + + for chain_id in ACTIVE_CHAIN_IDS: + row = rows.get(chain_id) + if not row: + issues.append(f"mesh matrix missing chain `{chain_id}`.") + continue + if row.get("uniswapV2CWUSDTvsCWUSDCLive") is not True: + issues.append(f"chain `{chain_id}` cWUSDT/cWUSDC UniV2 pair is not live in latest matrix.") + if row.get("uniswapV2CWUSDTvsCWUSDCHealthy") is not True: + issues.append(f"chain `{chain_id}` cWUSDT/cWUSDC UniV2 pair is not healthy in latest matrix.") + rails = set(row.get("pmmSettlementRails") or []) + if not any(x in rails for x in ("cWUSDC/USDC", "cWUSDC/USDT")): + missing_rails.append(f"chain `{chain_id}` lacks cWUSDC stable settlement PMM rail") + if not any(x in rails for x in ("cWUSDT/USDT", "cWUSDT/USDC")): + missing_rails.append(f"chain `{chain_id}` lacks cWUSDT stable settlement PMM rail") + + for pool in (chains.get(str(chain_id)) or {}).get("pmmPools") or []: + notes = pool.get("notes") or [] + if any("unseeded_pending" in str(note) for note in notes): + unseeded_by_chain[chain_id] = unseeded_by_chain.get(chain_id, 0) + 1 + unseeded_examples.setdefault(chain_id, []) + if len(unseeded_examples[chain_id]) < 3: + unseeded_examples[chain_id].append(f"{pool.get('base')}/{pool.get('quote')} {pool.get('poolAddress')}") + + evidence = [rel(MESH_MATRIX), rel(DEPLOYMENT_STATUS)] + warnings: list[str] = [] + if missing_rails: + warnings.append( + "Stable settlement PMM rail gaps: " + + "; ".join(missing_rails) + + ". Core cWUSDT/cWUSDC pair indexing remains healthy." + ) + if unseeded_by_chain: + summary = ", ".join(f"{chain_id}: {count}" for chain_id, count in sorted(unseeded_by_chain.items())) + warnings.append(f"Unseeded pending PMM pools by chain: {summary}.") + for chain_id in sorted(unseeded_examples): + warnings.append(f"chain `{chain_id}` examples: " + "; ".join(unseeded_examples[chain_id])) + if issues: + return fail_gate("liquidity_and_indexing", "LP indexing and settlement rails", issues + warnings, evidence) + if warnings: + return warn_gate( + "liquidity_and_indexing", + "LP indexing and settlement rails", + ["Core cWUSDT/cWUSDC pair indexing is present and healthy.", *warnings], + evidence, + ) + return ok_gate( + "liquidity_and_indexing", + "LP indexing and settlement rails", + ["Core cWUSDT/cWUSDC pair indexing and stable settlement rails are present with no unseeded PMM warnings."], + evidence, + ) + + +def check_bridge_implementation() -> dict[str, Any]: + required = [CW_L1_CONTRACT, CW_L2_CONTRACT, CW_L1_DEPLOY, CW_L2_DEPLOY, CW_ROUTE_BOOTSTRAP] + missing = [rel(path) for path in required if not path.exists()] + evidence = [rel(path) for path in required] + if missing: + return fail_gate("cw_mint_burn_bridge_implementation", "cW mint/burn bridge implementation", [f"missing `{path}`" for path in missing], evidence) + return ok_gate( + "cw_mint_burn_bridge_implementation", + "cW mint/burn bridge implementation", + ["CWMultiTokenBridgeL1/L2 contracts and deployment/bootstrap scripts are present."], + evidence, + ) + + +def evidence_file_status(paths: list[Path], success_keys: list[str]) -> tuple[bool, str | None, list[str]]: + for path in paths: + if not path.exists(): + continue + data = load_json(path, {}) + if not isinstance(data, dict): + continue + for key in success_keys: + value: Any = data + for part in key.split("."): + value = value.get(part) if isinstance(value, dict) else None + if value is True: + return True, rel(path), [] + details = [f"`{rel(path)}` exists but does not expose a true success key: {', '.join(success_keys)}."] + summary = data.get("summary") if isinstance(data, dict) else None + if isinstance(summary, dict): + for key in ("failedChainIds", "failedRequiredIds", "blockedGateIds"): + values = summary.get(key) + if values: + details.append(f"{key}: {', '.join(str(x) for x in values)}.") + for key in ("passedChainCount", "activeChainCount", "requiredPassedCount", "requiredCount"): + if key in summary: + details.append(f"{key}: {summary[key]}.") + return False, rel(path), details + return False, None, [f"No evidence file found. Expected one of: {', '.join(rel(p) for p in paths)}."] + + +def check_bridge_live_e2e() -> dict[str, Any]: + ok, evidence, details = evidence_file_status( + BRIDGE_EVIDENCE_CANDIDATES, + ["summary.allActiveChainsPassed", "summary.readyForProduction", "allActiveChainsPassed"], + ) + ev = [evidence] if evidence else [rel(path) for path in BRIDGE_EVIDENCE_CANDIDATES] + if ok: + return ok_gate("cw_mint_burn_bridge_live_e2e", "cW mint/burn bridge live E2E", ["Live E2E evidence reports all active chains passed."], ev) + return fail_gate( + "cw_mint_burn_bridge_live_e2e", + "cW mint/burn bridge live E2E", + [ + "Dedicated cW mint/burn bridge code is implemented, but live receiver deployment, role wiring, route bootstrap, and E2E bridge proof evidence are still required.", + *details, + ], + ev, + ) + + +def check_engine_x_readiness() -> dict[str, Any]: + data = load_json(ENGINE_X_READINESS, {}) + ready = (((data or {}).get("summary") or {}).get("readyForPublicIndexedProof") is True) + blockers = (((data or {}).get("summary") or {}).get("blockers") or []) + if ready and not blockers: + return ok_gate("engine_x_public_indexed_readiness", "Engine X cWUSDC public indexed readiness", ["Engine X readiness report is green."], [rel(ENGINE_X_READINESS)]) + return fail_gate( + "engine_x_public_indexed_readiness", + "Engine X cWUSDC public indexed readiness", + ["Engine X readiness report is not green.", *[str(x) for x in blockers]], + [rel(ENGINE_X_READINESS)], + ) + + +def check_external_tracker_packet() -> dict[str, Any]: + missing = [rel(path) for path in [ETHERSCAN_PACKET, COINGECKO_CHECKLIST] if not path.exists()] + if missing: + return fail_gate("external_tracker_submission_packet", "External tracker submission packet", [f"missing `{path}`" for path in missing], [rel(ETHERSCAN_PACKET), rel(COINGECKO_CHECKLIST)]) + return ok_gate( + "external_tracker_submission_packet", + "External tracker submission packet", + ["Etherscan profile packet and CoinGecko/external tracker checklist are present."], + [rel(ETHERSCAN_PACKET), rel(COINGECKO_CHECKLIST)], + ) + + +def check_external_tracker_live() -> dict[str, Any]: + ok, evidence, details = evidence_file_status( + TRACKER_EVIDENCE_CANDIDATES, + ["summary.allTrackersLive", "summary.readyForEtherscanUsdValue", "allTrackersLive"], + ) + ev = [evidence] if evidence else [rel(path) for path in TRACKER_EVIDENCE_CANDIDATES] + if ok: + return ok_gate("external_trackers_live", "External trackers live", ["External tracker evidence reports live indexing/profile approval."], ev) + return fail_gate( + "external_trackers_live", + "External trackers live", + [ + "Explorer/tracker packet is prepared, but Etherscan/CoinGecko/CMC/DexScreener approval or live tracker evidence is external and still pending.", + *details, + ], + ev, + ) + + +def check_planned_chains(dep: dict[str, Any]) -> dict[str, Any]: + chains = dep.get("chains") or {} + details: list[str] = [] + for chain_id in PLANNED_OR_NON_CW_CHAIN_IDS: + info = chains.get(str(chain_id)) or {} + state = info.get("activationState") or "not_active_cw_mesh" + details.append(f"chain `{chain_id}` `{info.get('name', '')}` is `{state}` and is not counted as active cW mesh coverage.") + return warn_gate("planned_or_non_cw_chains", "Planned or non-cW chain scope", details, [rel(DEPLOYMENT_STATUS)]) + + +def build_report() -> dict[str, Any]: + dep = load_json(DEPLOYMENT_STATUS, {}) + matrix = load_json(MESH_MATRIX, {"rows": []}) + mapping = load_json(TOKEN_MAPPING, {}) + + gates = [ + check_source_of_truth(dep), + check_deployment_coverage(dep), + check_token_mapping(dep, mapping), + check_token_aggregation(), + check_liquidity_and_indexing(matrix, dep), + check_bridge_implementation(), + check_bridge_live_e2e(), + check_engine_x_readiness(), + check_external_tracker_packet(), + check_external_tracker_live(), + check_planned_chains(dep), + ] + blocked = [g for g in gates if g["status"] == "blocked"] + warnings = [g for g in gates if g["status"] == "warn"] + in_repo_blockers = [ + g for g in blocked + if g["id"] not in {"cw_mint_burn_bridge_live_e2e", "external_trackers_live"} + ] + + return { + "schema": "cw-full-operational-readiness/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "activeChainIds": ACTIVE_CHAIN_IDS, + "requiredCwSymbols": REQUIRED_CW_SYMBOLS, + "summary": { + "inRepoSourceOfTruthConfigured": len(in_repo_blockers) == 0, + "fullyOperationalAndLive": len(blocked) == 0, + "blockedGateCount": len(blocked), + "warningGateCount": len(warnings), + "blockedGateIds": [g["id"] for g in blocked], + "warningGateIds": [g["id"] for g in warnings], + }, + "gates": gates, + "nextActions": [ + "Deploy and configure CWMultiTokenBridgeL1 on Chain 138 and CWMultiTokenBridgeL2 on each active public mesh chain.", + "Grant MINTER_ROLE and BURNER_ROLE for each cW* token to the active CWMultiTokenBridgeL2 receiver on its chain.", + "Run cW route bootstrap/configuration and capture live E2E evidence to reports/status/cw-multitoken-bridge-e2e-latest.json.", + "Submit/confirm Etherscan, CoinGecko, CMC, DexScreener tracker approvals and capture live evidence.", + "Seed any PMM pools still marked unseeded_pending in deployment-status, prioritizing stable quote rails with tracker-visible volume.", + ], + } + + +def write_markdown(report: dict[str, Any], path: Path) -> None: + lines: list[str] = [] + summary = report["summary"] + lines.append("# cW Full Operational Readiness") + lines.append("") + lines.append(f"- Generated: `{report['generatedAt']}`") + lines.append(f"- Active chains: `{', '.join(str(x) for x in report['activeChainIds'])}`") + lines.append(f"- In-repo source of truth configured: `{summary['inRepoSourceOfTruthConfigured']}`") + lines.append(f"- Fully operational and live: `{summary['fullyOperationalAndLive']}`") + lines.append(f"- Blocked gates: `{summary['blockedGateCount']}`") + lines.append(f"- Warning gates: `{summary['warningGateCount']}`") + lines.append("") + lines.append("## Gates") + lines.append("") + lines.append("| Gate | Status | Details | Evidence |") + lines.append("|---|---:|---|---|") + for gate in report["gates"]: + details = "
      ".join(gate["details"]) if gate["details"] else "-" + evidence = "
      ".join(f"`{x}`" for x in gate["evidence"]) if gate["evidence"] else "-" + lines.append(f"| {gate['title']} | `{gate['status']}` | {details} | {evidence} |") + lines.append("") + lines.append("## Next Actions") + lines.append("") + for action in report["nextActions"]: + lines.append(f"- {action}") + lines.append("") + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--json-out", type=Path, default=ROOT / "reports" / "status" / "cw-full-operational-readiness-latest.json") + parser.add_argument("--md-out", type=Path, default=ROOT / "reports" / "status" / "cw-full-operational-readiness-latest.md") + parser.add_argument("--strict", action="store_true", help="Exit non-zero if any gate is blocked.") + args = parser.parse_args() + + report = build_report() + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(report, indent=2) + "\n") + write_markdown(report, args.md_out) + + print(f"Wrote {rel(args.json_out)}") + print(f"Wrote {rel(args.md_out)}") + print(f"In-repo configured: {report['summary']['inRepoSourceOfTruthConfigured']}") + print(f"Fully operational/live: {report['summary']['fullyOperationalAndLive']}") + if report["summary"]["blockedGateIds"]: + print("Blocked gates: " + ", ".join(report["summary"]["blockedGateIds"])) + + if args.strict and report["summary"]["blockedGateCount"]: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-cw-full-operational-readiness.sh b/scripts/verify/check-cw-full-operational-readiness.sh new file mode 100755 index 00000000..f3c35fde --- /dev/null +++ b/scripts/verify/check-cw-full-operational-readiness.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Read-only readiness gate for cW source-of-truth, liquidity/indexing, bridge, and tracker status. +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT" + +exec python3 scripts/verify/check-cw-full-operational-readiness.py "$@" diff --git a/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.py b/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.py new file mode 100755 index 00000000..59db2ce2 --- /dev/null +++ b/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.py @@ -0,0 +1,364 @@ +#!/usr/bin/env python3 +"""Read-only CWMultiToken bridge readiness evidence. + +The script checks deployed bridge contracts, configured routes, canonical-to- +mirrored token mappings, and cW token MINTER/BURNER roles. It does not send +transactions or trigger bridge transfers. +""" +from __future__ import annotations + +import argparse +import json +import os +import subprocess +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +TOKEN_MAPPING = ROOT / "config" / "token-mapping-multichain.json" +DEFAULT_JSON = ROOT / "reports" / "status" / "cw-multitoken-bridge-e2e-latest.json" +DEFAULT_MD = ROOT / "reports" / "status" / "cw-multitoken-bridge-e2e-latest.md" + +ACTIVE_CHAINS = [ + (1, "Ethereum Mainnet", "MAINNET", "5009297550715157269"), + (10, "Optimism", "OPTIMISM", "3734403246176062136"), + (25, "Cronos", "CRONOS", "1456215246176062136"), + (56, "BSC", "BSC", "11344663589394136015"), + (100, "Gnosis", "GNOSIS", "465200170687744372"), + (137, "Polygon", "POLYGON", "4051577828743386545"), + (8453, "Base", "BASE", "15971525489660198786"), + (42161, "Arbitrum", "ARBITRUM", "4949039107694359620"), + (42220, "Celo", "CELO", "1346049177634351622"), + (43114, "Avalanche", "AVALANCHE", "6433500567565415381"), +] + +RPC_CANDIDATES = { + 1: ["ETHEREUM_MAINNET_RPC", "ETH_MAINNET_RPC_URL", "MAINNET_RPC_URL", "RPC_URL_MAINNET"], + 10: ["OPTIMISM_RPC_URL", "OPTIMISM_MAINNET_RPC"], + 25: ["CRONOS_RPC_URL", "CRONOS_MAINNET_RPC", "CRONOS_RPC"], + 56: ["BSC_RPC_URL", "BSC_MAINNET_RPC"], + 100: ["GNOSIS_RPC_URL", "GNOSIS_MAINNET_RPC", "GNOSIS_RPC"], + 137: ["POLYGON_RPC_URL", "POLYGON_MAINNET_RPC"], + 8453: ["BASE_RPC_URL", "BASE_MAINNET_RPC"], + 42161: ["ARBITRUM_RPC_URL", "ARBITRUM_MAINNET_RPC"], + 42220: ["CELO_RPC_URL", "CELO_MAINNET_RPC", "CELO_RPC"], + 43114: ["AVALANCHE_RPC_URL", "AVALANCHE_MAINNET_RPC", "AVALANCHE_RPC"], +} + +CORE_KEYS = {"Compliant_USDT_cW", "Compliant_USDC_cW"} + + +def rel(path: Path) -> str: + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + +def env_first(keys: list[str]) -> str: + for key in keys: + value = os.environ.get(key, "").strip() + if value: + return value + return "" + + +def is_address(value: str) -> bool: + return value.startswith("0x") and len(value) == 42 + + +def run_cast(args: list[str], timeout: int = 18) -> tuple[bool, str]: + try: + proc = subprocess.run(["cast", *args], cwd=ROOT, text=True, capture_output=True, timeout=timeout, check=False) + except Exception as exc: # noqa: BLE001 - evidence should capture any runner failure + return False, str(exc) + out = (proc.stdout or proc.stderr or "").strip() + return proc.returncode == 0, out + + +def cast_call(address: str, signature: str, params: list[str], rpc: str) -> tuple[bool, str]: + return run_cast(["call", address, signature, *params, "--rpc-url", rpc]) + + +def cast_code(address: str, rpc: str) -> tuple[bool, str]: + return run_cast(["code", address, "--rpc-url", rpc]) + + +def cast_keccak(value: str) -> str: + ok, out = run_cast(["keccak", value], timeout=5) + if not ok: + raise RuntimeError(f"cast keccak failed for {value}: {out}") + return out.split()[0] + + +def bool_from_cast(value: str) -> bool: + return value.strip().lower().splitlines()[-1:] == ["true"] + + +def address_in_cast(value: str, expected: str) -> bool: + return expected.lower() in value.lower() + + +def load_token_rows(full_family: bool) -> dict[int, list[dict[str, str]]]: + data = json.loads(TOKEN_MAPPING.read_text()) + out: dict[int, list[dict[str, str]]] = {} + for pair in data.get("pairs") or []: + if pair.get("fromChainId") != 138: + continue + chain_id = int(pair.get("toChainId")) + rows: list[dict[str, str]] = [] + for token in pair.get("tokens") or []: + key = token.get("key", "") + if not key.endswith("_cW") and key not in CORE_KEYS: + continue + if not full_family and key not in CORE_KEYS: + continue + address_from = token.get("addressFrom", "") + address_to = token.get("addressTo", "") + if is_address(address_from) and is_address(address_to) and int(address_to, 16) != 0: + rows.append( + { + "key": key, + "name": token.get("name", key), + "canonical": address_from, + "mirrored": address_to, + } + ) + if rows: + out[chain_id] = rows + return out + + +def check_l1(l1_bridge: str, rpc: str, token_rows: dict[int, list[dict[str, str]]]) -> dict[str, Any]: + result: dict[str, Any] = { + "address": l1_bridge, + "rpcConfigured": bool(rpc), + "hasCode": False, + "sendRouterReadable": False, + "receiveRouterReadable": False, + "destinationChecks": [], + "passed": False, + "errors": [], + } + if not is_address(l1_bridge): + result["errors"].append("CW_L1_BRIDGE_CHAIN138 is unset or invalid.") + return result + if not rpc: + result["errors"].append("RPC_URL_138/CHAIN138_RPC is unset.") + return result + + ok, code = cast_code(l1_bridge, rpc) + result["hasCode"] = ok and code not in ("", "0x") + for field in ["sendRouter", "receiveRouter"]: + ok, out = cast_call(l1_bridge, f"{field}()(address)", [], rpc) + result[f"{field}Readable"] = ok and is_address(out.splitlines()[-1].strip()) + result[f"{field}"] = out.splitlines()[-1].strip() if ok and out else "" + + for chain_id, _, _, selector in ACTIVE_CHAINS: + rows = token_rows.get(chain_id) or [] + for token in rows: + ok, out = cast_call( + l1_bridge, + "destinations(address,uint64)((address,bool))", + [token["canonical"], selector], + rpc, + ) + result["destinationChecks"].append( + { + "chainId": chain_id, + "selector": selector, + "token": token["key"], + "canonical": token["canonical"], + "raw": out, + "configured": ok and "true" in out.lower(), + } + ) + + result["passed"] = ( + result["hasCode"] + and result["sendRouterReadable"] + and result["receiveRouterReadable"] + and all(x["configured"] for x in result["destinationChecks"]) + ) + return result + + +def check_chain( + chain_id: int, + name: str, + suffix: str, + selector: str, + token_rows: list[dict[str, str]], + minter_role: str, + burner_role: str, +) -> dict[str, Any]: + rpc = env_first(RPC_CANDIDATES[chain_id]) + bridge = os.environ.get(f"CW_BRIDGE_{suffix}", "").strip() + result: dict[str, Any] = { + "chainId": chain_id, + "network": name, + "selector": selector, + "bridge": bridge, + "rpcConfigured": bool(rpc), + "hasCode": False, + "sendRouterReadable": False, + "receiveRouterReadable": False, + "feeTokenReadable": False, + "tokenPairChecks": [], + "roleChecks": [], + "destination138": {}, + "passed": False, + "errors": [], + } + if not rpc: + result["errors"].append("RPC unset.") + return result + if not is_address(bridge): + result["errors"].append(f"CW_BRIDGE_{suffix} is unset or invalid.") + return result + + ok, code = cast_code(bridge, rpc) + result["hasCode"] = ok and code not in ("", "0x") + for field in ["sendRouter", "receiveRouter", "feeToken"]: + ok, out = cast_call(bridge, f"{field}()(address)", [], rpc) + result[f"{field}Readable"] = ok and is_address(out.splitlines()[-1].strip()) + result[field] = out.splitlines()[-1].strip() if ok and out else "" + + ok, out = cast_call(bridge, "destinations(uint64)((address,bool))", ["138"], rpc) + result["destination138"] = {"raw": out, "configured": ok and "true" in out.lower()} + + for token in token_rows: + ok, out = cast_call(bridge, "canonicalToMirrored(address)(address)", [token["canonical"]], rpc) + mapped = ok and address_in_cast(out, token["mirrored"]) + result["tokenPairChecks"].append( + { + "token": token["key"], + "canonical": token["canonical"], + "expectedMirrored": token["mirrored"], + "raw": out, + "configured": mapped, + } + ) + for role_name, role in [("MINTER_ROLE", minter_role), ("BURNER_ROLE", burner_role)]: + ok_role, out_role = cast_call( + token["mirrored"], + "hasRole(bytes32,address)(bool)", + [role, bridge], + rpc, + ) + result["roleChecks"].append( + { + "token": token["key"], + "mirrored": token["mirrored"], + "role": role_name, + "holder": bridge, + "granted": ok_role and bool_from_cast(out_role), + "raw": out_role, + } + ) + + result["passed"] = ( + result["hasCode"] + and result["sendRouterReadable"] + and result["receiveRouterReadable"] + and result["destination138"]["configured"] + and all(x["configured"] for x in result["tokenPairChecks"]) + and all(x["granted"] for x in result["roleChecks"]) + ) + return result + + +def write_markdown(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cW MultiToken Bridge E2E Readiness", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Scope: `{payload['scope']}`", + f"- All active chains passed: `{payload['summary']['allActiveChainsPassed']}`", + f"- L1 passed: `{payload['summary']['l1Passed']}`", + f"- Chain pass count: `{payload['summary']['passedChainCount']} / {payload['summary']['activeChainCount']}`", + "", + "## Chain Status", + "", + "| Chain | Network | Passed | Bridge | Notes |", + "|---:|---|---:|---|---|", + ] + for row in payload["chains"]: + notes = [] + if row["errors"]: + notes.extend(row["errors"]) + failed_pairs = [x["token"] for x in row["tokenPairChecks"] if not x["configured"]] + failed_roles = [f"{x['token']} {x['role']}" for x in row["roleChecks"] if not x["granted"]] + if failed_pairs: + notes.append("missing token pairs: " + ", ".join(failed_pairs[:6])) + if failed_roles: + notes.append("missing roles: " + ", ".join(failed_roles[:6])) + if not row["destination138"].get("configured"): + notes.append("destination 138 not configured") + lines.append( + f"| {row['chainId']} | {row['network']} | `{row['passed']}` | `{row['bridge'] or ''}` | {'; '.join(notes) or 'ok'} |" + ) + lines.extend(["", "## L1", ""]) + l1 = payload["l1"] + lines.append(f"- Bridge: `{l1['address']}`") + lines.append(f"- Passed: `{l1['passed']}`") + if l1["errors"]: + lines.append(f"- Errors: `{'; '.join(l1['errors'])}`") + missing = [f"{x['chainId']} {x['token']}" for x in l1["destinationChecks"] if not x["configured"]] + lines.append(f"- Missing destination checks: `{', '.join(missing[:30]) if missing else 'none'}`") + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--full-family", action="store_true", help="Check every cW mapping, not only cWUSDT/cWUSDC canary routes.") + parser.add_argument("--json-out", type=Path, default=DEFAULT_JSON) + parser.add_argument("--md-out", type=Path, default=DEFAULT_MD) + parser.add_argument("--strict", action="store_true") + args = parser.parse_args() + + token_rows = load_token_rows(args.full_family) + minter_role = cast_keccak("MINTER_ROLE") + burner_role = cast_keccak("BURNER_ROLE") + l1_bridge = os.environ.get("CW_L1_BRIDGE_CHAIN138", "").strip() + rpc_138 = env_first(["RPC_URL_138", "CHAIN138_RPC", "CHAIN138_RPC_URL", "RPC_URL"]) + l1 = check_l1(l1_bridge, rpc_138, token_rows) + chains = [ + check_chain(chain_id, name, suffix, selector, token_rows.get(chain_id) or [], minter_role, burner_role) + for chain_id, name, suffix, selector in ACTIVE_CHAINS + ] + passed = [row for row in chains if row["passed"]] + payload = { + "schema": "cw-multitoken-bridge-e2e-readiness/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "scope": "full-family" if args.full_family else "core-cwusdt-cwusdc", + "summary": { + "readyForProduction": l1["passed"] and len(passed) == len(chains), + "allActiveChainsPassed": l1["passed"] and len(passed) == len(chains), + "l1Passed": l1["passed"], + "activeChainCount": len(chains), + "passedChainCount": len(passed), + "failedChainIds": [row["chainId"] for row in chains if not row["passed"]], + }, + "roles": {"MINTER_ROLE": minter_role, "BURNER_ROLE": burner_role}, + "l1": l1, + "chains": chains, + } + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_markdown(payload, args.md_out) + print(f"Wrote {rel(args.json_out)}") + print(f"Wrote {rel(args.md_out)}") + print(f"All active chains passed: {payload['summary']['allActiveChainsPassed']}") + if payload["summary"]["failedChainIds"]: + print("Failed chains: " + ", ".join(str(x) for x in payload["summary"]["failedChainIds"])) + if args.strict and not payload["summary"]["allActiveChainsPassed"]: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.sh b/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.sh new file mode 100755 index 00000000..7c594e4b --- /dev/null +++ b/scripts/verify/check-cw-multitoken-bridge-e2e-readiness.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# Read-only evidence producer for CWMultiTokenBridgeL1/L2 route, role, and config readiness. +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT" + +# shellcheck disable=SC1091 +source scripts/lib/load-project-env.sh >/dev/null 2>&1 || true + +exec python3 scripts/verify/check-cw-multitoken-bridge-e2e-readiness.py "$@" diff --git a/scripts/verify/check-cwusdc-etherscan-prereq-urls.sh b/scripts/verify/check-cwusdc-etherscan-prereq-urls.sh new file mode 100755 index 00000000..96d07da1 --- /dev/null +++ b/scripts/verify/check-cwusdc-etherscan-prereq-urls.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash +# Public URL prereq checks for cWUSDC Etherscan token profile (d-bis.org surfaces). +# See: docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md +# Usage: bash scripts/verify/check-cwusdc-etherscan-prereq-urls.sh [--json-out PATH] [--md-out PATH] [--timeout SEC] [--retries N] +# Exit: 0 if every URL returns HTTP 200; 1 otherwise. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +JSON_OUT="" +MD_OUT="" +TIMEOUT="${CWUSDC_PROVIDER_URL_TIMEOUT:-15}" +RETRIES="${CWUSDC_PROVIDER_URL_RETRIES:-1}" +while [[ $# -gt 0 ]]; do + case "$1" in + --json-out) + [[ $# -ge 2 ]] || { echo "Missing value for --json-out" >&2; exit 1; } + JSON_OUT="$2" + shift 2 + ;; + --md-out) + [[ $# -ge 2 ]] || { echo "Missing value for --md-out" >&2; exit 1; } + MD_OUT="$2" + shift 2 + ;; + --timeout) + [[ $# -ge 2 ]] || { echo "Missing value for --timeout" >&2; exit 1; } + TIMEOUT="$2" + shift 2 + ;; + --retries) + [[ $# -ge 2 ]] || { echo "Missing value for --retries" >&2; exit 1; } + RETRIES="$2" + shift 2 + ;; + -h|--help) + sed -n '1,5p' "$0" + exit 0 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac +done + +TMP_TSV="$(mktemp)" +trap 'rm -f "$TMP_TSV"' EXIT + +FAIL=0 +while IFS= read -r url; do + [[ -z "$url" || "$url" =~ ^# ]] && continue + code="000" + curl_status=0 + attempts=0 + max_attempts=$((RETRIES + 1)) + while [[ "$attempts" -lt "$max_attempts" ]]; do + attempts=$((attempts + 1)) + curl_status=0 + code=$(curl -L --max-time "$TIMEOUT" -o /dev/null -s -w "%{http_code}" "$url") || curl_status=$? + [[ -n "$code" ]] || code="000" + [[ "$code" == "200" ]] && break + [[ "$attempts" -lt "$max_attempts" ]] && sleep 1 + done + if [[ "$code" != "200" ]]; then + echo "FAIL $code $url (attempts=$attempts curl_status=$curl_status)" >&2 + FAIL=1 + printf '%s\t%s\t%s\t%s\t%s\n' "$url" "$code" "false" "$attempts" "$curl_status" >> "$TMP_TSV" + else + echo "OK 200 $url (attempts=$attempts)" + printf '%s\t%s\t%s\t%s\t%s\n' "$url" "$code" "true" "$attempts" "$curl_status" >> "$TMP_TSV" + fi +done <<'URLS' +https://d-bis.org/ +https://d-bis.org/contact +https://d-bis.org/leadership +https://d-bis.org/gru/tokens +https://d-bis.org/security +https://d-bis.org/.well-known/trust.json +https://d-bis.org/brand-assets +https://d-bis.org/tokens/cwusdc.svg +URLS + +if [[ -n "$JSON_OUT" || -n "$MD_OUT" ]]; then + python3 - "$TMP_TSV" "$JSON_OUT" "$MD_OUT" <<'PY' +import json +import sys +from datetime import datetime, timezone +from pathlib import Path + +tsv = Path(sys.argv[1]) +json_out = Path(sys.argv[2]) if sys.argv[2] else None +md_out = Path(sys.argv[3]) if sys.argv[3] else None + +checks = [] +for line in tsv.read_text().splitlines(): + url, status, passed, attempts, curl_status = line.split("\t") + checks.append({ + "url": url, + "status": int(status) if status.isdigit() else status, + "passed": passed == "true", + "attempts": int(attempts), + "curlStatus": int(curl_status), + }) + +payload = { + "schema": "cwusdc-etherscan-prereq-urls/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "summary": { + "allPassed": all(check["passed"] for check in checks), + "requiredCount": len(checks), + "passedCount": sum(1 for check in checks if check["passed"]), + "failedUrls": [check["url"] for check in checks if not check["passed"]], + }, + "checks": checks, +} + +if json_out: + json_out.parent.mkdir(parents=True, exist_ok=True) + json_out.write_text(json.dumps(payload, indent=2) + "\n") + print(f"Wrote {json_out}") + +if md_out: + md_out.parent.mkdir(parents=True, exist_ok=True) + lines = [ + "# cWUSDC Etherscan Prerequisite URL Evidence", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- All passed: `{payload['summary']['allPassed']}`", + f"- Passed: `{payload['summary']['passedCount']} / {payload['summary']['requiredCount']}`", + "", + "| URL | Passed | HTTP | Attempts | curl status |", + "|---|---:|---:|---:|---:|", + ] + for check in checks: + lines.append(f"| {check['url']} | `{check['passed']}` | `{check['status']}` | `{check['attempts']}` | `{check['curlStatus']}` |") + md_out.write_text("\n".join(lines) + "\n") + print(f"Wrote {md_out}") +PY +fi + +exit "$FAIL" diff --git a/scripts/verify/check-cwusdc-external-trackers-live.py b/scripts/verify/check-cwusdc-external-trackers-live.py new file mode 100755 index 00000000..015e504f --- /dev/null +++ b/scripts/verify/check-cwusdc-external-trackers-live.py @@ -0,0 +1,265 @@ +#!/usr/bin/env python3 +"""Probe cWUSDC public tracker/indexing surfaces and write evidence JSON.""" +from __future__ import annotations + +import argparse +import json +import re +import time +import urllib.error +import urllib.request +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +DEFAULT_JSON = ROOT / "reports" / "status" / "cwusdc-external-trackers-live-latest.json" +DEFAULT_MD = ROOT / "reports" / "status" / "cwusdc-external-trackers-live-latest.md" + +CWUSDC = "0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a" +POOLS = [ + "0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "0xc28706f899266b36bc43cc072b3a921bdf2c48d9", +] + +URLS = [ + { + "id": "etherscan_token_page", + "kind": "explorer", + "url": f"https://etherscan.io/token/{CWUSDC}", + "required": True, + "mustContain": ["cWUSDC", "Contract"], + }, + { + "id": "coingecko_token_price_api", + "kind": "listing_api", + "url": f"https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses={CWUSDC}&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true", + "required": True, + "jsonTokenKey": CWUSDC, + }, + { + "id": "coinmarketcap_dex_token", + "kind": "dex_index", + "url": f"https://dex.coinmarketcap.com/token/ethereum/{CWUSDC}/", + "required": True, + "mustContain": ["cWUSDC", "ethereum"], + }, + { + "id": "dexscreener_token_pairs_v1", + "kind": "dex_index", + "url": f"https://api.dexscreener.com/token-pairs/v1/ethereum/{CWUSDC}", + "required": True, + "jsonRootMinLength": 1, + }, + { + "id": "dexscreener_tokens_v1", + "kind": "dex_index", + "url": f"https://api.dexscreener.com/tokens/v1/ethereum/{CWUSDC}", + "required": True, + "jsonRootMinLength": 1, + }, + { + "id": "dexscreener_v3_pair_api_legacy", + "kind": "dex_index", + "url": f"https://api.dexscreener.com/latest/dex/pairs/ethereum/{POOLS[0]}", + "required": False, + "jsonPathPresent": ["pairs"], + }, + { + "id": "dexscreener_v2_pair_api_legacy", + "kind": "dex_index", + "url": f"https://api.dexscreener.com/latest/dex/pairs/ethereum/{POOLS[1]}", + "required": False, + "jsonPathPresent": ["pairs"], + }, + { + "id": "dexscreener_orders_profile", + "kind": "dex_profile", + "url": f"https://api.dexscreener.com/orders/v1/ethereum/{CWUSDC}", + "required": False, + "jsonPathPresent": ["orders"], + }, + { + "id": "geckoterminal_v3_pool", + "kind": "dex_index", + "url": f"https://api.geckoterminal.com/api/v2/networks/eth/pools/{POOLS[0]}", + "required": True, + "jsonPathPresent": ["data"], + }, + { + "id": "geckoterminal_v2_pool", + "kind": "dex_index", + "url": f"https://api.geckoterminal.com/api/v2/networks/eth/pools/{POOLS[1]}", + "required": True, + "jsonPathPresent": ["data"], + }, +] + + +def rel(path: Path) -> str: + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + +def fetch(url: str, timeout: int) -> dict[str, Any]: + req = urllib.request.Request( + url, + headers={ + "User-Agent": "Mozilla/5.0 DBIS-readiness-check/1.0", + "Accept": "application/json,text/html;q=0.9,*/*;q=0.8", + }, + ) + started = time.time() + try: + with urllib.request.urlopen(req, timeout=timeout) as resp: + body = resp.read(512_000) + text = body.decode("utf-8", errors="replace") + return { + "ok": 200 <= resp.status < 300, + "status": resp.status, + "elapsedMs": int((time.time() - started) * 1000), + "contentType": resp.headers.get("content-type", ""), + "text": text, + "error": "", + } + except urllib.error.HTTPError as exc: + text = exc.read(64_000).decode("utf-8", errors="replace") if exc.fp else "" + return { + "ok": False, + "status": exc.code, + "elapsedMs": int((time.time() - started) * 1000), + "contentType": exc.headers.get("content-type", "") if exc.headers else "", + "text": text, + "error": str(exc), + } + except Exception as exc: # noqa: BLE001 - evidence should capture network errors + return { + "ok": False, + "status": None, + "elapsedMs": int((time.time() - started) * 1000), + "contentType": "", + "text": "", + "error": str(exc), + } + + +def json_path_present(data: Any, path: list[str]) -> bool: + cur = data + for part in path: + if isinstance(cur, dict): + cur = cur.get(part) + else: + return False + if isinstance(cur, list): + return len(cur) > 0 + return cur is not None + + +def evaluate(spec: dict[str, Any], timeout: int) -> dict[str, Any]: + raw = fetch(spec["url"], timeout) + text = raw.pop("text") + evidence: dict[str, Any] = { + "id": spec["id"], + "kind": spec["kind"], + "url": spec["url"], + "required": spec["required"], + "httpOk": raw["ok"], + "status": raw["status"], + "elapsedMs": raw["elapsedMs"], + "contentType": raw["contentType"], + "passed": False, + "error": raw["error"], + "details": [], + } + data: Any = None + if "json" in raw["contentType"] or text.strip().startswith(("{", "[")): + try: + data = json.loads(text) + evidence["jsonPreview"] = data if len(text) < 5000 else "json-too-large" + except json.JSONDecodeError as exc: + evidence["details"].append(f"JSON parse failed: {exc}") + + passed = raw["ok"] + for needle in spec.get("mustContain") or []: + found = re.search(re.escape(needle), text, flags=re.I) is not None + evidence["details"].append(f"contains `{needle}`: {found}") + passed = passed and found + if spec.get("jsonTokenKey"): + token_key = spec["jsonTokenKey"].lower() + found = isinstance(data, dict) and token_key in {str(k).lower(): v for k, v in data.items()} + evidence["details"].append(f"json token key `{token_key}` present: {found}") + passed = passed and found + for path in spec.get("jsonPathPresent") or []: + present = json_path_present(data, path if isinstance(path, list) else [path]) + evidence["details"].append(f"json path `{'.'.join(path) if isinstance(path, list) else path}` present: {present}") + passed = passed and present + if spec.get("jsonRootMinLength") is not None: + min_len = int(spec["jsonRootMinLength"]) + found = isinstance(data, list) and len(data) >= min_len + evidence["details"].append(f"json root array length >= {min_len}: {found}") + passed = passed and found + + evidence["passed"] = bool(passed) + return evidence + + +def write_markdown(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cWUSDC External Trackers Live Evidence", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- All trackers live: `{payload['summary']['allTrackersLive']}`", + f"- Required passed: `{payload['summary']['requiredPassedCount']} / {payload['summary']['requiredCount']}`", + "", + "| Surface | Passed | HTTP | URL | Details |", + "|---|---:|---:|---|---|", + ] + for check in payload["checks"]: + details = "; ".join(check["details"]) or check["error"] or "-" + lines.append(f"| {check['id']} | `{check['passed']}` | `{check['status']}` | {check['url']} | {details} |") + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--json-out", type=Path, default=DEFAULT_JSON) + parser.add_argument("--md-out", type=Path, default=DEFAULT_MD) + parser.add_argument("--timeout", type=int, default=20) + parser.add_argument("--strict", action="store_true") + args = parser.parse_args() + + checks = [evaluate(spec, args.timeout) for spec in URLS] + required = [c for c in checks if c["required"]] + required_passed = [c for c in required if c["passed"]] + payload = { + "schema": "cwusdc-external-trackers-live/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "token": {"chainId": 1, "network": "ethereum", "address": CWUSDC, "symbol": "cWUSDC"}, + "summary": { + "allTrackersLive": len(required_passed) == len(required), + "readyForEtherscanUsdValue": len(required_passed) == len(required), + "requiredCount": len(required), + "requiredPassedCount": len(required_passed), + "failedRequiredIds": [c["id"] for c in required if not c["passed"]], + }, + "checks": checks, + } + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_markdown(payload, args.md_out) + print(f"Wrote {rel(args.json_out)}") + print(f"Wrote {rel(args.md_out)}") + print(f"All trackers live: {payload['summary']['allTrackersLive']}") + if payload["summary"]["failedRequiredIds"]: + print("Failed required trackers: " + ", ".join(payload["summary"]["failedRequiredIds"])) + if args.strict and not payload["summary"]["allTrackersLive"]: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-cwusdc-external-trackers-live.sh b/scripts/verify/check-cwusdc-external-trackers-live.sh new file mode 100755 index 00000000..6ffac2b7 --- /dev/null +++ b/scripts/verify/check-cwusdc-external-trackers-live.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Probe public cWUSDC tracker/indexing surfaces and write readiness evidence. +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT" + +exec python3 scripts/verify/check-cwusdc-external-trackers-live.py "$@" diff --git a/scripts/verify/check-cwusdc-institutional-doc-links.py b/scripts/verify/check-cwusdc-institutional-doc-links.py new file mode 100644 index 00000000..6f503d72 --- /dev/null +++ b/scripts/verify/check-cwusdc-institutional-doc-links.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +"""Lightweight link check for the cWUSDC institutional evidence packet.""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import re +import urllib.request +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-institutional-doc-link-check-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-institutional-doc-link-check-latest.md" + +DOCS = [ + "docs/04-configuration/CWUSDC_PROVIDER_SUBMISSION_PACKET.md", + "docs/04-configuration/etherscan/CWUSDC_EVIDENCE_BUNDLE_INDEX.md", + "docs/04-configuration/etherscan/CWUSDC_SUPPLY_AND_CIRCULATING_METHODOLOGY.md", + "docs/04-configuration/etherscan/CWUSDC_SECURITY_AND_AUDIT_DISCLOSURE.md", + "docs/04-configuration/etherscan/CWUSDC_PROVIDER_RESPONSE_TRACKER.md", + "docs/04-configuration/etherscan/CWUSDC_LIQUIDITY_READINESS_NO_BROADCAST_PLAN.md", + "docs/04-configuration/etherscan/CWUSDC_MAINNET_ETHERSCAN_PROFILE_PACKET.md", + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md", + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_VALUE_EXECUTION_PLAN.md", + "docs/04-configuration/etherscan/CWUSDC_ETHERSCAN_BRIDGE_CROSSCHAIN_LAYER_MAP.md", + "docs/04-configuration/coingecko/CWUSDC_MAINNET_TRACKER_SUBMISSION_PACKET.md", + "docs/04-configuration/dexscreener/CWUSDC_DEXSCREENER_INDEXING_AND_PROFILE_PACKET_20260509.md", + "docs/04-configuration/metamask/METAMASK_ASSET_PRICE_PROVIDER_SUBMISSION_MATRIX.md", +] + +LINK_RE = re.compile(r"(? str: + return target.split("#", 1)[0] + + +def is_skipped(target: str) -> bool: + return ( + not target + or target.startswith("#") + or target.startswith("mailto:") + or target.startswith("app://") + or target.startswith("plugin://") + ) + + +def resolve_local(source: Path, target: str) -> Path: + target = urllib.request.url2pathname(strip_fragment(target)) + if target.startswith("/"): + return ROOT / target.lstrip("/") + candidate = (source.parent / target).resolve() + try: + candidate.relative_to(ROOT) + except ValueError: + return ROOT / target + return candidate + + +def http_status(url: str, timeout: int = 15) -> dict[str, Any]: + req = urllib.request.Request(url, method="GET", headers={"User-Agent": "dbis-cwusdc-link-check/1.0"}) + try: + with urllib.request.urlopen(req, timeout=timeout) as response: + return {"ok": 200 <= response.status < 400, "status": response.status} + except Exception as exc: # noqa: BLE001 - report exact probe failure. + return {"ok": False, "error": str(exc)} + + +def collect_links(path: Path) -> list[str]: + text = path.read_text() + links = [match.group(1).strip() for match in LINK_RE.finditer(text)] + links.extend(match.group(0).strip(".,") for match in BARE_URL_RE.finditer(text)) + return sorted(set(links)) + + +def build(args: argparse.Namespace) -> dict[str, Any]: + records: list[dict[str, Any]] = [] + for doc in DOCS: + source = ROOT / doc + if not source.exists(): + records.append({"source": doc, "target": doc, "type": "source", "ok": False, "error": "source missing"}) + continue + for target in collect_links(source): + if is_skipped(target): + continue + if target.startswith("http://") or target.startswith("https://"): + result = {"source": doc, "target": target, "type": "http", "ok": True, "checked": False} + if args.check_http: + result.update(http_status(target, timeout=args.timeout)) + result["checked"] = True + records.append(result) + else: + resolved = resolve_local(source, target) + records.append( + { + "source": doc, + "target": target, + "type": "local", + "resolved": str(resolved.relative_to(ROOT)) if resolved.exists() else str(resolved), + "ok": resolved.exists(), + } + ) + failures = [record for record in records if not record.get("ok")] + return { + "schema": "cwusdc-institutional-doc-link-check/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "checkedHttp": args.check_http, + "sourceCount": len(DOCS), + "linkCount": len(records), + "failureCount": len(failures), + "status": "pass" if not failures else "fail", + "failures": failures, + "records": records, + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + lines = [ + "# cWUSDC Institutional Doc Link Check", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Status: `{payload['status']}`", + f"- Sources: `{payload['sourceCount']}`", + f"- Links checked: `{payload['linkCount']}`", + f"- HTTP checked: `{payload['checkedHttp']}`", + f"- Failures: `{payload['failureCount']}`", + "", + ] + if payload["failures"]: + lines.extend(["## Failures", "", "| Source | Target | Error |", "|---|---|---|"]) + for failure in payload["failures"]: + lines.append( + f"| `{failure.get('source')}` | `{failure.get('target')}` | `{failure.get('error', failure.get('resolved', 'missing'))}` |" + ) + else: + lines.append("No broken institutional packet links were found.") + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--check-http", action="store_true", help="Probe public HTTP(S) links too.") + parser.add_argument("--timeout", type=int, default=15) + parser.add_argument("--json-out", type=Path, default=REPORT_JSON) + parser.add_argument("--md-out", type=Path, default=REPORT_MD) + args = parser.parse_args() + payload = build(args) + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + return 0 if payload["status"] == "pass" else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/check-cwusdc-provider-readiness-ci.sh b/scripts/verify/check-cwusdc-provider-readiness-ci.sh new file mode 100755 index 00000000..3e956221 --- /dev/null +++ b/scripts/verify/check-cwusdc-provider-readiness-ci.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +# CI-safe cWUSDC provider readiness gate. +# Fails only on repo-controlled prerequisites. External provider blockers are reported, not gated. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +JSON_OUT="reports/status/cwusdc-provider-readiness-ci-latest.json" +MD_OUT="reports/status/cwusdc-provider-readiness-ci-latest.md" +HANDOFF_JSON="reports/status/cwusdc-provider-handoff-latest.json" +DOC_LINK_JSON="reports/status/cwusdc-institutional-doc-link-check-latest.json" + +WRAPPER_STATUS=0 +bash "$SCRIPT_DIR/run-cwusdc-provider-nonmanual-checks.sh" --strict-repo || WRAPPER_STATUS=$? +python3 "$SCRIPT_DIR/check-cwusdc-institutional-doc-links.py" + +python3 - "$HANDOFF_JSON" "$DOC_LINK_JSON" "$JSON_OUT" "$MD_OUT" <<'PY' +import json +import sys +from datetime import datetime, timezone +from pathlib import Path + +handoff_path = Path(sys.argv[1]) +doc_link_path = Path(sys.argv[2]) +json_out = Path(sys.argv[3]) +md_out = Path(sys.argv[4]) +handoff = json.loads(handoff_path.read_text()) +doc_links = json.loads(doc_link_path.read_text()) +repo_ok = bool(handoff["summary"]["repoControlledPrereqsPassed"]) +doc_links_ok = doc_links.get("status") == "pass" +external_blockers = [b for b in handoff.get("blockers", []) if b.get("type") != "repo_controlled"] +payload = { + "schema": "cwusdc-provider-readiness-ci/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "status": "success" if repo_ok and doc_links_ok else "failed", + "repoControlledPrereqsPassed": repo_ok and doc_links_ok, + "baseRepoControlledPrereqsPassed": repo_ok, + "institutionalDocLinksPassed": doc_links_ok, + "institutionalDocLinksReport": str(doc_link_path), + "externalBlockersAdvisoryCount": len(external_blockers), + "externalBlockersAdvisory": external_blockers, + "handoffReport": str(handoff_path), +} +json_out.parent.mkdir(parents=True, exist_ok=True) +json_out.write_text(json.dumps(payload, indent=2) + "\n") +lines = [ + "# cWUSDC Provider Readiness CI", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Status: `{payload['status']}`", + f"- Repo-controlled prerequisites passed: `{payload['repoControlledPrereqsPassed']}`", + f"- Base provider prerequisites passed: `{repo_ok}`", + f"- Institutional doc links passed: `{doc_links_ok}`", + f"- External blockers advisory count: `{len(external_blockers)}`", + f"- Handoff report: `{handoff_path}`", + "", + "External provider blockers are advisory in this CI gate. They require provider acceptance or operator action and should not fail repo-controlled CI.", +] +md_out.write_text("\n".join(lines) + "\n") +print(f"Wrote {json_out}") +print(f"Wrote {md_out}") +if not repo_ok: + raise SystemExit(1) +if not doc_links_ok: + raise SystemExit(1) +PY + +exit "$WRAPPER_STATUS" diff --git a/scripts/verify/check-engine-x-mev-defense-readiness.sh b/scripts/verify/check-engine-x-mev-defense-readiness.sh new file mode 100755 index 00000000..1a4c7a40 --- /dev/null +++ b/scripts/verify/check-engine-x-mev-defense-readiness.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/mev-protection.sh +source "${PROJECT_ROOT}/scripts/lib/mev-protection.sh" + +POLICY_PATH="${POLICY_PATH:-config/extraction/mainnet-cwusdc-usdc-support-policy.json}" +OUT_JSON="${OUT_JSON:-reports/status/engine-x-mev-defense-readiness-latest.json}" +OUT_MD="${OUT_MD:-reports/status/engine-x-mev-defense-readiness-latest.md}" +mkdir -p "$(dirname "${OUT_JSON}")" + +RPC_LABEL="$(mev_write_rpc_label)" +PRIVATE_KEY_NAME="$(mev_private_rpc_key 2>/dev/null || true)" +HAS_PRIVATE_RPC=0 +[[ -n "${PRIVATE_KEY_NAME}" ]] && HAS_PRIVATE_RPC=1 +ALLOW_PUBLIC="${ENGINE_X_ALLOW_PUBLIC_BROADCAST:-0}" +MEV_ENABLED="${ENGINE_X_MEV_PROTECTION:-1}" +READY=0 +STATUS="blocked" +if [[ "${MEV_ENABLED}" != "1" ]]; then + STATUS="disabled_by_operator" +elif [[ "${HAS_PRIVATE_RPC}" == "1" ]]; then + READY=1 + STATUS="ready" +elif [[ "${ALLOW_PUBLIC}" == "1" ]]; then + STATUS="public_broadcast_override" +fi + +python3 - "${POLICY_PATH}" "${OUT_JSON}" "${OUT_MD}" "${READY}" "${STATUS}" "${RPC_LABEL}" "${PRIVATE_KEY_NAME:-}" "${MEV_ENABLED}" "${ALLOW_PUBLIC}" <<'PY' +import json +import sys +from datetime import datetime, timezone +from pathlib import Path + +policy_path, out_json, out_md, ready, status, rpc_label, private_key_name, mev_enabled, allow_public = sys.argv[1:] +policy = json.loads(Path(policy_path).read_text()) +mev_policy = policy.get("mevDefense", {}) +surfaces = policy.get("quoteDefenseSurfaces", []) +payload = { + "schema": "engine-x-mev-defense-readiness/v1", + "generatedAt": datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z"), + "ready": ready == "1", + "status": status, + "policyPath": policy_path, + "configuredWriteRpcLabel": rpc_label, + "configuredPrivateRpcEnvKey": private_key_name or None, + "mevProtectionEnabled": mev_enabled == "1", + "publicBroadcastOverride": allow_public == "1", + "sensitiveSurfaces": [ + { + "id": surface.get("id"), + "venue": surface.get("venue"), + "role": surface.get("role"), + "poolAddress": surface.get("poolAddress"), + "defenseMode": surface.get("defenseMode"), + } + for surface in surfaces + if "quote" in (surface.get("role") or "") or surface.get("venue") in {"uniswap_v2_pair", "uniswap_v3_pool", "dodo_pmm"} + ], + "policy": mev_policy, + "blockers": [], + "operatorEnvironment": { + "acceptedPrivateRpcEnvKeys": [ + "ENGINE_X_PRIVATE_TX_RPC", + "MEV_BLOCKER_RPC_URL", + "FLASHBOTS_RPC_URL", + "BLOXROUTE_RPC_URL", + "BLINK_RPC_URL", + ], + "publicOverrideEnvKey": "ENGINE_X_ALLOW_PUBLIC_BROADCAST", + "disableGuardEnvKey": "ENGINE_X_MEV_PROTECTION", + }, +} +if not payload["ready"]: + if payload["status"] == "blocked": + payload["blockers"].append("No private/protected transaction RPC is configured for sensitive Engine X broadcasts.") + elif payload["status"] == "disabled_by_operator": + payload["blockers"].append("MEV guard is disabled by operator environment.") + elif payload["status"] == "public_broadcast_override": + payload["blockers"].append("Public broadcast override is enabled; do not use for adversarially sensitive loops.") + +Path(out_json).write_text(json.dumps(payload, indent=2) + "\n") + +lines = [ + "# Engine X MEV Defense Readiness", + "", + f"- generatedAt: `{payload['generatedAt']}`", + f"- ready: `{str(payload['ready']).lower()}`", + f"- status: `{payload['status']}`", + f"- write RPC label: `{payload['configuredWriteRpcLabel']}`", + f"- private RPC env key: `{payload['configuredPrivateRpcEnvKey'] or 'none'}`", + f"- public override: `{str(payload['publicBroadcastOverride']).lower()}`", + "", + "## Sensitive Surfaces", +] +for surface in payload["sensitiveSurfaces"]: + lines.append(f"- `{surface['id']}` / `{surface['venue']}` / `{surface['role']}` / `{surface['poolAddress']}`") +lines.extend(["", "## Blockers"]) +if payload["blockers"]: + lines.extend(f"- {blocker}" for blocker in payload["blockers"]) +else: + lines.append("- none") +lines.extend([ + "", + "## Operator Rule", + "", + "Sensitive Engine X swaps, LP migrations, and quote-defense repairs must use `mev_cast_send`; scripts fail closed unless a protected RPC is configured or the operator explicitly enables the public broadcast override.", +]) +Path(out_md).write_text("\n".join(lines) + "\n") +print(json.dumps({"ready": payload["ready"], "status": payload["status"], "writeRpcLabel": payload["configuredWriteRpcLabel"]}, indent=2)) +PY diff --git a/scripts/verify/check-engine-x-public-indexed-readiness.sh b/scripts/verify/check-engine-x-public-indexed-readiness.sh index 99e2fa5d..c34404b5 100755 --- a/scripts/verify/check-engine-x-public-indexed-readiness.sh +++ b/scripts/verify/check-engine-x-public-indexed-readiness.sh @@ -90,7 +90,13 @@ from datetime import datetime, timezone def units(raw): return str(Decimal(int(raw or 0)) / Decimal(10**6)) -v2_nums = [int(x) for x in re.findall(r"\b\d+\b", v2_reserves or "")] +v2_nums = [] +for line in (v2_reserves or "").splitlines(): + match = re.search(r"\b\d+\b", line) + if match: + v2_nums.append(int(match.group(0))) +if len(v2_nums) < 2: + v2_nums = [int(x) for x in re.findall(r"\b\d+\b", v2_reserves or "")] blockers = [] if accounting_aware != "1": blockers.append("configured Engine X vault is not accounting-aware") diff --git a/scripts/verify/check-mainnet-cwusdc-usdc-support-health.py b/scripts/verify/check-mainnet-cwusdc-usdc-support-health.py index f2e84920..fc2b5dae 100755 --- a/scripts/verify/check-mainnet-cwusdc-usdc-support-health.py +++ b/scripts/verify/check-mainnet-cwusdc-usdc-support-health.py @@ -75,7 +75,13 @@ def parse_uint(value: str) -> int: def parse_uints(value: str, count: int) -> list[int]: - matches = [int(match) for match in UINT_RE.findall(value)] + matches: list[int] = [] + for line in value.splitlines(): + line_matches = UINT_RE.findall(line) + if line_matches: + matches.append(int(line_matches[0])) + if len(matches) < count: + matches = [int(match) for match in UINT_RE.findall(value)] if len(matches) < count: raise ValueError(f"expected at least {count} integers, got {matches!r}") return matches[:count] @@ -198,6 +204,71 @@ def query_dodo_health(rpc_url: str, defended_venue: dict) -> dict: } +def query_uniswap_v3_health(rpc_url: str, surface: dict) -> dict: + pool_address = surface["poolAddress"] + try: + token0 = parse_address(cast_call(rpc_url, pool_address, "token0()(address)")) + token1 = parse_address(cast_call(rpc_url, pool_address, "token1()(address)")) + fee = parse_uint(cast_call(rpc_url, pool_address, "fee()(uint24)")) + slot0 = cast_call(rpc_url, pool_address, "slot0()(uint160,int24,uint16,uint16,uint16,uint8,bool)") + slot_values = parse_uints(slot0, 2) + sqrt_price_x96 = slot_values[0] + # The tick may be signed; parse it directly from the second line before falling back. + slot_lines = [line.strip().split()[0] for line in slot0.splitlines() if line.strip()] + tick = int(slot_lines[1]) if len(slot_lines) > 1 else int(slot_values[1]) + liquidity = parse_uint(cast_call(rpc_url, pool_address, "liquidity()(uint128)")) + token0_balance = parse_uint(cast_call(rpc_url, token0, "balanceOf(address)(uint256)", pool_address)) + token1_balance = parse_uint(cast_call(rpc_url, token1, "balanceOf(address)(uint256)", pool_address)) + decimals0 = parse_uint(cast_call(rpc_url, token0, "decimals()(uint8)")) + decimals1 = parse_uint(cast_call(rpc_url, token1, "decimals()(uint8)")) + except Exception as exc: + return {"live": False, "poolAddress": pool_address, "error": str(exc)} + + preferred = surface.get("activeRange", {}) + lower_tick = int(preferred.get("preferredLowerTick", tick)) + upper_tick = int(preferred.get("preferredUpperTick", tick)) + target_tick = int(preferred.get("targetTick", 0)) + if tick < lower_tick: + range_status = "below_preferred_range" + elif tick > upper_tick: + range_status = "above_preferred_range" + else: + range_status = "inside_preferred_range" + + return { + "live": True, + "poolAddress": pool_address, + "token0": token0, + "token1": token1, + "fee": fee, + "sqrtPriceX96": str(sqrt_price_x96), + "tick": tick, + "targetTick": target_tick, + "preferredLowerTick": lower_tick, + "preferredUpperTick": upper_tick, + "rangeStatus": range_status, + "activeLiquidity": str(liquidity), + "token0BalanceRaw": str(token0_balance), + "token1BalanceRaw": str(token1_balance), + "token0BalanceUnits": str(normalize_units(token0_balance, decimals0)), + "token1BalanceUnits": str(normalize_units(token1_balance, decimals1)), + } + + +def query_quote_defense_surface(rpc_url: str, surface: dict, base_address: str, quote_address: str) -> dict: + venue = surface.get("venue") + if venue == "uniswap_v3_pool": + return query_uniswap_v3_health(rpc_url, surface) + if venue == "uniswap_v2_pair": + pair = dict(surface) + pair["baseAddress"] = base_address + pair["quoteAddress"] = quote_address + return query_uniswap_pair_health(rpc_url, pair) + if venue == "dodo_pmm": + return query_dodo_health(rpc_url, surface) + return {"live": False, "poolAddress": surface.get("poolAddress"), "error": f"unsupported venue {venue!r}"} + + def choose_flash_amount(policy: dict, deviation_bps: Decimal) -> int: for row in policy["managedCycle"]["quoteAmountByDeviationBps"]: if deviation_bps >= Decimal(row["minDeviationBps"]): @@ -282,6 +353,42 @@ def render_shell(result: dict) -> str: return "\n".join(lines) +def build_quote_defense_decision(surfaces: list[dict], health_by_id: dict[str, dict]) -> dict: + candidates: list[dict] = [] + blockers: list[str] = [] + for surface in surfaces: + surface_id = surface["id"] + health = health_by_id.get(surface_id, {}) + if not health.get("live"): + blockers.append(f"{surface_id}: unreadable") + continue + venue = surface.get("venue") + if venue == "uniswap_v3_pool": + if health.get("rangeStatus") == "inside_preferred_range" and int(health.get("activeLiquidity", "0")) > 0: + candidates.append({"surfaceId": surface_id, "action": "use_for_public_indexed_quote_defense"}) + else: + candidates.append({"surfaceId": surface_id, "action": "rebalance_tick_before_use"}) + elif venue == "uniswap_v2_pair": + quote_units = Decimal(health.get("quoteReserveUnits", "0")) + if quote_units > 0: + candidates.append({"surfaceId": surface_id, "action": "secondary_public_repair_or_activity_lane"}) + else: + blockers.append(f"{surface_id}: zero quote reserve") + elif venue == "dodo_pmm": + if health.get("live"): + candidates.append({"surfaceId": surface_id, "action": "managed_defended_lane_when_capital_and_quotes_pass"}) + + preferred = next( + (row for row in candidates if row["action"] == "use_for_public_indexed_quote_defense"), + next((row for row in candidates if row["action"] == "rebalance_tick_before_use"), None), + ) + return { + "preferredSurface": preferred, + "candidates": candidates, + "blockers": blockers, + } + + def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--shell", action="store_true", help="Emit shell-friendly KEY=VALUE lines.") @@ -293,13 +400,21 @@ def main() -> int: rpc_url = resolve_rpc_url(policy, env_values) chain = deployment_status["chains"][str(policy["network"]["chainId"])] + base_address = chain["cwTokens"]["cWUSDC"] + quote_address = chain["anchorAddresses"]["USDC"] public_pair = load_public_pair_from_policy(policy, deployment_status) - public_pair["baseAddress"] = chain["cwTokens"][public_pair["base"]] - public_pair["quoteAddress"] = chain["anchorAddresses"][public_pair["quote"]] + public_pair["baseAddress"] = base_address + public_pair["quoteAddress"] = quote_address defended_venue = dict(policy["defendedVenue"]) public_health = query_uniswap_pair_health(rpc_url, public_pair) defended_health = query_dodo_health(rpc_url, defended_venue) + quote_surfaces = policy.get("quoteDefenseSurfaces", []) + quote_surface_health = { + surface["id"]: query_quote_defense_surface(rpc_url, surface, base_address, quote_address) + for surface in quote_surfaces + } + quote_defense_decision = build_quote_defense_decision(quote_surfaces, quote_surface_health) decision = build_decision(policy, public_health, defended_health) if public_health.get("live"): decision["publicDeviationBps"] = public_health["deviationBps"] @@ -313,6 +428,9 @@ def main() -> int: "publicPairHealth": public_health, "defendedVenue": defended_venue, "defendedVenueHealth": defended_health, + "quoteDefenseSurfaces": quote_surfaces, + "quoteDefenseSurfaceHealth": quote_surface_health, + "quoteDefenseDecision": quote_defense_decision, "decision": decision, } diff --git a/scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh b/scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh new file mode 100755 index 00000000..e86abd25 --- /dev/null +++ b/scripts/verify/evaluate-mainnet-cwusdc-weth-liquidity-surfaces.sh @@ -0,0 +1,356 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" + +: "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}" + +OUT_JSON="${OUT_JSON:-reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json}" +OUT_MD="${OUT_MD:-reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.md}" +CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}" +USDC="${USDC_MAINNET:-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48}" +WETH="${WETH9_MAINNET:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}" +UNIV2_FACTORY="${CHAIN_1_UNISWAP_V2_FACTORY:-0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f}" +UNIV2_ROUTER="${CHAIN_1_UNISWAP_V2_ROUTER:-0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D}" +UNIV3_FACTORY="${CHAIN_1_UNISWAP_V3_FACTORY:-0x1F98431c8aD98523631AE4a59f267346ea31F984}" +DODO_INTEGRATION="${DODO_PMM_INTEGRATION_MAINNET:-${CHAIN_1_DODO_PMM_INTEGRATION:-}}" +DODO_VENDING_MACHINE="${MAINNET_DODO_VENDING_MACHINE_ADDRESS:-${ETHEREUM_DODO_VENDING_MACHINE_ADDRESS:-}}" +MAINNET_CCIP_WETH9_BRIDGE="${MAINNET_CCIP_WETH9_BRIDGE:-}" +GAS_RESERVE_WEI="${ENGINE_X_WETH_POOL_GAS_RESERVE_WEI:-5000000000000000}" +MAX_ETH_WRAP_WEI="${ENGINE_X_WETH_POOL_MAX_WRAP_WEI:-0}" +PEG_TEST_AMOUNTS_USD="${ENGINE_X_WETH_PEG_TEST_AMOUNTS_USD:-0.005,0.01,0.025}" + +if [[ -n "${PRIVATE_KEY:-}" ]]; then + DEPLOYER="$(cast wallet address --private-key "${PRIVATE_KEY}")" +else + DEPLOYER="${DEPLOYER_ADDRESS:-}" +fi +if [[ -z "${DEPLOYER}" ]]; then + echo "Set PRIVATE_KEY or DEPLOYER_ADDRESS" >&2 + exit 1 +fi + +BLOCK_NUMBER="$(cast block-number --rpc-url "${ETHEREUM_MAINNET_RPC}")" +GAS_PRICE_WEI="$(cast gas-price --rpc-url "${ETHEREUM_MAINNET_RPC}")" +ETH_WEI="$(cast balance "${DEPLOYER}" --rpc-url "${ETHEREUM_MAINNET_RPC}")" +CWUSDC_RAW="$(cast call "${CWUSDC}" 'balanceOf(address)(uint256)' "${DEPLOYER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +USDC_RAW="$(cast call "${USDC}" 'balanceOf(address)(uint256)' "${DEPLOYER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" +WETH_RAW="$(cast call "${WETH}" 'balanceOf(address)(uint256)' "${DEPLOYER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | awk '{print $1}')" + +UNIV2_PAIR="$(cast call "${UNIV2_FACTORY}" 'getPair(address,address)(address)' "${CWUSDC}" "${WETH}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | grep -oE '0x[a-fA-F0-9]{40}' | head -1)" +UNIV2_RESERVES="" +if [[ "${UNIV2_PAIR}" != "0x0000000000000000000000000000000000000000" ]]; then + UNIV2_RESERVES="$(cast call "${UNIV2_PAIR}" 'getReserves()(uint112,uint112,uint32)' --rpc-url "${ETHEREUM_MAINNET_RPC}" || true)" +fi + +TOKEN0="$(printf '%s\n%s\n' "${CWUSDC}" "${WETH}" | tr '[:upper:]' '[:lower:]' | sort | sed -n '1p')" +TOKEN1="$(printf '%s\n%s\n' "${CWUSDC}" "${WETH}" | tr '[:upper:]' '[:lower:]' | sort | sed -n '2p')" + +V3_POOLS_JSON="$( + for fee in 100 500 3000 10000; do + pool="$(cast call "${UNIV3_FACTORY}" 'getPool(address,address,uint24)(address)' "${TOKEN0}" "${TOKEN1}" "${fee}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | grep -oE '0x[a-fA-F0-9]{40}' | head -1)" + slot0="" + liquidity="0" + if [[ "${pool}" != "0x0000000000000000000000000000000000000000" ]]; then + slot0="$(cast call "${pool}" 'slot0()(uint160,int24,uint16,uint16,uint16,uint8,bool)' --rpc-url "${ETHEREUM_MAINNET_RPC}" 2>/dev/null || true)" + liquidity="$(cast call "${pool}" 'liquidity()(uint128)' --rpc-url "${ETHEREUM_MAINNET_RPC}" 2>/dev/null | awk '{print $1}' || echo 0)" + fi + python3 - "${fee}" "${pool}" "${liquidity}" "${slot0}" <<'PY' +import json, sys +fee, pool, liquidity, slot0 = sys.argv[1:] +print(json.dumps({"fee": int(fee), "pool": pool, "liquidity": liquidity, "slot0": slot0 or None})) +PY + done | python3 -c 'import json,sys; print(json.dumps([json.loads(line) for line in sys.stdin if line.strip()]))' +)" + +WETH_QUOTES_JSON="$( + for amt in 100000000000000 200000000000000 500000000000000 1000000000000000 2000000000000000 5000000000000000; do + raw="$(cast call "${UNIV2_ROUTER}" 'getAmountsOut(uint256,address[])(uint256[])' "${amt}" "[${WETH},${USDC}]" --rpc-url "${ETHEREUM_MAINNET_RPC}" 2>/dev/null || true)" + python3 - "${amt}" "${raw}" <<'PY' +import json, re, sys +amt = int(sys.argv[1]) +raw = sys.argv[2] +parts = raw.split(",", 1) +out = 0 +if len(parts) == 2: + match = re.search(r"(\d+)", parts[1]) + out = int(match.group(1)) if match else 0 +print(json.dumps({"wethInRaw": str(amt), "usdcOutRaw": str(out)})) +PY + done | python3 -c 'import json,sys; print(json.dumps([json.loads(line) for line in sys.stdin if line.strip()]))' +)" + +DODO_HAS_MANAGER="false" +DODO_CODE_LEN="0" +DODO_VENDING_CODE_LEN="0" +if [[ -n "${DODO_INTEGRATION}" ]]; then + DODO_CODE_LEN="$(cast code "${DODO_INTEGRATION}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | wc -c | tr -d ' ')" + POOL_MANAGER_ROLE="$(cast keccak "POOL_MANAGER_ROLE")" + DODO_HAS_MANAGER="$(cast call "${DODO_INTEGRATION}" 'hasRole(bytes32,address)(bool)' "${POOL_MANAGER_ROLE}" "${DEPLOYER}" --rpc-url "${ETHEREUM_MAINNET_RPC}" 2>/dev/null | tr -d '[:space:]' || echo false)" +fi +if [[ -n "${DODO_VENDING_MACHINE}" ]]; then + DODO_VENDING_CODE_LEN="$(cast code "${DODO_VENDING_MACHINE}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | wc -c | tr -d ' ')" +fi + +mkdir -p "$(dirname "${OUT_JSON}")" +python3 - "${OUT_JSON}" "${OUT_MD}" \ + "${BLOCK_NUMBER}" "${GAS_PRICE_WEI}" "${DEPLOYER}" "${CWUSDC}" "${WETH}" "${USDC}" "${MAINNET_CCIP_WETH9_BRIDGE}" \ + "${ETH_WEI}" "${CWUSDC_RAW}" "${USDC_RAW}" "${WETH_RAW}" "${GAS_RESERVE_WEI}" "${MAX_ETH_WRAP_WEI}" \ + "${UNIV2_PAIR}" "${UNIV2_RESERVES}" "${V3_POOLS_JSON}" "${WETH_QUOTES_JSON}" \ + "${DODO_INTEGRATION}" "${DODO_VENDING_MACHINE}" "${DODO_HAS_MANAGER}" "${DODO_CODE_LEN}" "${DODO_VENDING_CODE_LEN}" \ + "${PEG_TEST_AMOUNTS_USD}" <<'PY' +from decimal import Decimal, getcontext +from datetime import datetime, timezone +from pathlib import Path +import json +import re +import sys + +getcontext().prec = 80 +( + out_json, out_md, block_number, gas_price, deployer, cwusdc, weth, usdc, ccip_bridge, + eth_wei, cw_raw, usdc_raw, weth_raw, gas_reserve, max_wrap, univ2_pair, univ2_reserves, + v3_pools_json, weth_quotes_json, dodo_integration, dodo_vm, dodo_has_manager, dodo_code_len, dodo_vm_code_len, + peg_test_amounts_usd, +) = sys.argv[1:] + +eth_wei_i = int(eth_wei) +weth_raw_i = int(weth_raw) +cw_raw_i = int(cw_raw) +gas_reserve_i = int(gas_reserve) +max_wrap_i = int(max_wrap) +usable_eth_for_wrap = max(eth_wei_i - gas_reserve_i, 0) +if max_wrap_i: + usable_eth_for_wrap = min(usable_eth_for_wrap, max_wrap_i) +usable_weth_raw = weth_raw_i + usable_eth_for_wrap + +quotes = json.loads(weth_quotes_json) +price = Decimal(0) +for q in sorted(quotes, key=lambda x: int(x["wethInRaw"]), reverse=True): + if int(q["usdcOutRaw"]) > 0: + price = (Decimal(int(q["usdcOutRaw"])) / Decimal(10**6)) / (Decimal(int(q["wethInRaw"])) / Decimal(10**18)) + break + +cw_needed_for_wallet_weth_raw = int((Decimal(usable_weth_raw) / Decimal(10**18) * price * Decimal(10**6)).to_integral_value()) if price else 0 +usable_pair_cw_raw = min(cw_raw_i, cw_needed_for_wallet_weth_raw) +usable_pair_weth_raw = usable_weth_raw if cw_needed_for_wallet_weth_raw <= cw_raw_i else int((Decimal(cw_raw_i) / Decimal(10**6) / price * Decimal(10**18)).to_integral_value()) if price else 0 + +v3_pools = json.loads(v3_pools_json) +v3_existing = [p for p in v3_pools if p["pool"].lower() != "0x0000000000000000000000000000000000000000"] +v2_exists = univ2_pair.lower() != "0x0000000000000000000000000000000000000000" + +def fmt_decimal(value: Decimal, places: int = 18) -> str: + text = f"{value:.{places}f}" + return text.rstrip("0").rstrip(".") if "." in text else text + +def cp_out(amount_in: Decimal, reserve_in: Decimal, reserve_out: Decimal, fee_bps: Decimal = Decimal(30)) -> Decimal: + if amount_in <= 0 or reserve_in <= 0 or reserve_out <= 0: + return Decimal(0) + amount_in_after_fee = amount_in * (Decimal(10000) - fee_bps) / Decimal(10000) + return (amount_in_after_fee * reserve_out) / (reserve_in + amount_in_after_fee) + +fee_scenarios_bps = [ + ("uniswapV3_1bp", Decimal(1)), + ("uniswapV3_5bp", Decimal(5)), + ("uniswapV2_30bp", Decimal(30)), +] +peg_tests = [] +for raw_amount in [a.strip() for a in peg_test_amounts_usd.split(",") if a.strip()]: + amount_usd = Decimal(raw_amount) + cw_in = amount_usd + ideal_weth = (amount_usd / price) if price else Decimal(0) + fee_models = {} + for scenario_name, fee_bps in fee_scenarios_bps: + seeded_weth_out = cp_out( + cw_in, + Decimal(usable_pair_cw_raw) / Decimal(10**6), + Decimal(usable_pair_weth_raw) / Decimal(10**18), + fee_bps, + ) + effective_usd_out = seeded_weth_out * price if price else Decimal(0) + loss_pct = ((amount_usd - effective_usd_out) / amount_usd * Decimal(100)) if amount_usd > 0 and effective_usd_out else Decimal(0) + reverse_cw_out = cp_out( + ideal_weth, + Decimal(usable_pair_weth_raw) / Decimal(10**18), + Decimal(usable_pair_cw_raw) / Decimal(10**6), + fee_bps, + ) + reverse_loss_pct = ((amount_usd - reverse_cw_out) / amount_usd * Decimal(100)) if amount_usd > 0 and reverse_cw_out else Decimal(0) + fee_models[scenario_name] = { + "feeBps": str(fee_bps), + "cwusdcToWethOut": fmt_decimal(seeded_weth_out), + "cwusdcToWethUsdOut": fmt_decimal(effective_usd_out, 12), + "cwusdcToWethLossPct": fmt_decimal(loss_pct, 8), + "wethToCwusdcOut": fmt_decimal(reverse_cw_out, 12), + "wethToCwusdcLossPct": fmt_decimal(reverse_loss_pct, 8), + } + peg_tests.append({ + "usdAmount": str(amount_usd), + "cwusdcRaw": str(int((amount_usd * Decimal(10**6)).to_integral_value())), + "idealWethRaw": str(int((ideal_weth * Decimal(10**18)).to_integral_value())) if price else "0", + "idealWeth": fmt_decimal(ideal_weth), + "walletSeededModels": fee_models, + "lossAccounting": "For cWUSDC->WETH9 canaries, loss is paid by spending slightly more cWUSDC value for the same WETH/USD reference value. WETH/USDC inventory is protected by exact-output/min-out guards.", + }) + +native_boundary = "Native ETH execution wraps to WETH9; DODO and UniV3 require ERC-20 WETH9, while UniV2 addLiquidityETH still creates a WETH9 pair." +usd_support_model = ( + "cWUSDC/WETH9 pools support the USD peg as an indirect public price anchor through deep WETH/USD markets. " + "They do not replace direct cWUSDC/USDC quote liquidity for redemption-style proof, but they can provide indexable " + "on-chain evidence that 1 cWUSDC is priced near 1 USD when the implied cWUSDC/WETH price matches the live WETH/USD reference." +) +blockers = [] +if int(usdc_raw) == 0: + blockers.append("deployer has 0 USDC; this is fine for WETH pools but means no cWUSDC/USDC repair can accompany them") +if usable_weth_raw == 0: + blockers.append("no WETH or spare ETH available after gas reserve") +if not dodo_integration: + blockers.append("DODO_PMM_INTEGRATION_MAINNET is not configured") +elif dodo_has_manager != "true": + blockers.append("deployer lacks DODO POOL_MANAGER_ROLE on Mainnet integration") +if dodo_vm and int(dodo_vm_code_len) <= 3: + blockers.append("configured DODO vending machine has no code") + +dodo_single_sided = { + "requestedBaseToken": cwusdc, + "supportedAsEngineXInventory": cw_raw_i > 0, + "executableThroughCurrentIntegration": False, + "reason": "DODOPMMIntegration.addLiquidity requires both baseAmount > 0 and quoteAmount > 0; cWUSDC-only deposits are inventory/accounting support until a wrapper or quote-side seed is available.", + "currentCwusdcAvailable": str(Decimal(cw_raw_i) / Decimal(10**6)), + "recommendedMode": "record cWUSDC-only inventory inside Engine X first; promote to executable DODO PMM only after adding WETH9/USDC quote inventory or deploying a single-sided wrapper that controls solvency and min-out proofs", +} + +payload = { + "schema": "mainnet-cwusdc-weth-liquidity-surfaces/v1", + "generatedAt": datetime.now(timezone.utc).isoformat(), + "blockNumber": int(block_number), + "gasPriceWei": gas_price, + "addresses": { + "deployer": deployer, + "cWUSDC": cwusdc, + "WETH9": weth, + "USDC": usdc, + "mainnetCcipWeth9Bridge": ccip_bridge or None, + }, + "balances": { + "ethWei": eth_wei, + "eth": str(Decimal(int(eth_wei)) / Decimal(10**18)), + "wethRaw": weth_raw, + "weth": str(Decimal(weth_raw_i) / Decimal(10**18)), + "cwusdcRaw": cw_raw, + "cwusdc": str(Decimal(cw_raw_i) / Decimal(10**6)), + "usdcRaw": usdc_raw, + "usdc": str(Decimal(int(usdc_raw)) / Decimal(10**6)), + }, + "marketReference": { + "wethUsdcPriceFromUniV2": str(price), + "wethQuotes": quotes, + }, + "availableSeed": { + "gasReserveWei": str(gas_reserve_i), + "ethUsableForWrapWei": str(usable_eth_for_wrap), + "totalUsableWethRaw": str(usable_weth_raw), + "totalUsableWeth": str(Decimal(usable_weth_raw) / Decimal(10**18)), + "cwusdcNeededForAllUsableWethRaw": str(cw_needed_for_wallet_weth_raw), + "cwusdcNeededForAllUsableWeth": str(Decimal(cw_needed_for_wallet_weth_raw) / Decimal(10**6)), + "recommendedPairCwusdcRaw": str(usable_pair_cw_raw), + "recommendedPairCwusdc": str(Decimal(usable_pair_cw_raw) / Decimal(10**6)), + "recommendedPairWethRaw": str(usable_pair_weth_raw), + "recommendedPairWeth": str(Decimal(usable_pair_weth_raw) / Decimal(10**18)), + }, + "pegTestAmounts": peg_tests, + "surfaces": { + "uniswapV2": {"pair": univ2_pair, "exists": v2_exists, "reservesRawText": univ2_reserves or None}, + "uniswapV3": {"token0": min(cwusdc.lower(), weth.lower()), "token1": max(cwusdc.lower(), weth.lower()), "pools": v3_pools, "existingPools": v3_existing}, + "dodo": { + "integration": dodo_integration or None, + "vendingMachine": dodo_vm or None, + "integrationCodeLength": int(dodo_code_len), + "vendingMachineCodeLength": int(dodo_vm_code_len), + "deployerHasPoolManagerRole": dodo_has_manager == "true", + }, + }, + "singleSidedDodoCwusdc": dodo_single_sided, + "boundary": native_boundary, + "usdPegSupportModel": usd_support_model, + "blockers": blockers, + "recommendation": [ + "Treat cWUSDC/ETH and cWUSDC/WETH as the same WETH9-backed public market for indexers.", + "Use WETH-backed pools as an indirect USD peg support surface by comparing cWUSDC/WETH9 pool price against live WETH/USDC reference markets.", + "Create at most one canonical UniV3 cWUSDC/WETH9 pool first, using private/protected execution and a wider tick range than the cWUSDC/USDC attempt.", + "Use UniV2 addLiquidityETH only as a secondary indexable surface; it creates the same WETH9 pair.", + "Use DODO PMM only after confirming createPool against the configured vending machine and seeding with ERC-20 WETH9, not native ETH.", + ], +} +Path(out_json).write_text(json.dumps(payload, indent=2) + "\n") + +lines = [ + "# Mainnet cWUSDC/WETH9 Liquidity Surface Evaluation", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Block: `{payload['blockNumber']}`", + f"- cWUSDC: `{cwusdc}`", + f"- WETH9 Cc2: `{weth}`", + f"- Native ETH boundary: {native_boundary}", + f"- USD peg support model: {usd_support_model}", + "", + "## Live Balances", + "", + f"- ETH: `{payload['balances']['eth']}`", + f"- WETH9: `{payload['balances']['weth']}`", + f"- cWUSDC: `{payload['balances']['cwusdc']}`", + f"- USDC: `{payload['balances']['usdc']}`", + "", + "## Existing Pools", + "", + f"- UniV2 cWUSDC/WETH9: `{univ2_pair}`", +] +for pool in v3_pools: + lines.append(f"- UniV3 fee `{pool['fee']}`: `{pool['pool']}` liquidity `{pool['liquidity']}`") +lines.extend([ + f"- DODO integration: `{dodo_integration or 'not configured'}`", + f"- DODO deployer pool-manager role: `{dodo_has_manager == 'true'}`", + "", + "## Seed Capacity", + "", + f"- WETH/USDC reference price: `{price}`", + f"- Total usable WETH after gas reserve: `{payload['availableSeed']['totalUsableWeth']}`", + f"- cWUSDC needed to pair all usable WETH: `{payload['availableSeed']['cwusdcNeededForAllUsableWeth']}`", + f"- Recommended max seed from current wallet: `{payload['availableSeed']['recommendedPairCwusdc']} cWUSDC + {payload['availableSeed']['recommendedPairWeth']} WETH9`", + "", + "## Single-Sided DODO cWUSDC", + "", + f"- Supported as Engine X inventory: `{dodo_single_sided['supportedAsEngineXInventory']}`", + f"- Executable through current DODOPMMIntegration: `{dodo_single_sided['executableThroughCurrentIntegration']}`", + f"- Reason: {dodo_single_sided['reason']}", + f"- Recommended mode: {dodo_single_sided['recommendedMode']}", + "", + "## Peg Test Amounts", + "", + "| USD amount | cWUSDC in | Ideal WETH value | Modeled cWUSDC->WETH USD out | Modeled loss | Reverse WETH->cWUSDC out | Reverse loss |", + "|---:|---:|---:|---:|---:|---:|---:|", +]) +for test in peg_tests: + for scenario_name, model in test["walletSeededModels"].items(): + lines.append( + f"| `{test['usdAmount']} ({scenario_name})` | `{Decimal(test['cwusdcRaw']) / Decimal(10**6)}` | `{test['idealWeth']}` | " + f"`{model['cwusdcToWethUsdOut']}` | `{model['cwusdcToWethLossPct']}%` | " + f"`{model['wethToCwusdcOut']}` | `{model['wethToCwusdcLossPct']}%` |" + ) +lines.extend([ + "", + "Loss accounting: for cWUSDC->WETH9 canaries, loss is paid by spending slightly more cWUSDC value for the same WETH/USD reference value. Use exact-output or strict min-out guards so WETH, USDC, and lender inventory are not silently depleted.", + "", + "## Blockers", +]) +lines.extend([f"- {b}" for b in blockers] if blockers else ["- none for a tiny WETH-backed pool seed"]) +lines.extend(["", "## Recommendation"]) +lines.extend([f"- {r}" for r in payload["recommendation"]]) +Path(out_md).write_text("\n".join(lines) + "\n") +print(out_json) +print(out_md) +PY diff --git a/scripts/verify/generate-cwusdc-supply-circulating-attestation.py b/scripts/verify/generate-cwusdc-supply-circulating-attestation.py new file mode 100644 index 00000000..5714673b --- /dev/null +++ b/scripts/verify/generate-cwusdc-supply-circulating-attestation.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +"""Generate a current cWUSDC supply and circulating-supply attestation. + +The output is intentionally tracker-facing: it separates on-chain total supply +from proposed circulating-supply methodology and does not silently exclude +operator or protocol balances unless explicitly requested. +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import os +import re +import time +import urllib.parse +import urllib.request +from decimal import Decimal, getcontext +from pathlib import Path +from typing import Any + + +getcontext().prec = 80 + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-supply-circulating-attestation-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-supply-circulating-attestation-latest.md" +ETHERSCAN_API = "https://api.etherscan.io/v2/api" +ETHERSCAN_PAGE = "https://etherscan.io/token/{address}" +CWUSDC = "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a" +DECIMALS = 6 + +KNOWN_BALANCES = { + "operator": "0x4A666F96fC8764181194447A7dFdb7d471b301C8", + "engineXVirtualBatchVault": "0xf108586d1FC330EA1D4EA4ff8fd983cde94279B1", + "uniswapV3CwusdcUsdcPool": "0x1Cf2e685682C7F7beF508F0Af15Dfb5CDda01ee3", + "uniswapV2CwusdcUsdcPair": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9", +} + + +def load_dotenv(path: Path) -> None: + if not path.exists(): + return + for line in path.read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + key, value = line.split("=", 1) + key = key.strip() + value = value.strip().strip('"').strip("'") + if key and key not in os.environ: + os.environ[key] = value + + +def fetch_json(url: str, timeout: int = 30) -> Any: + req = urllib.request.Request(url, headers={"User-Agent": "dbis-cwusdc-supply-attestation/1.0"}) + with urllib.request.urlopen(req, timeout=timeout) as response: + return json.loads(response.read().decode("utf-8")) + + +def etherscan_call(params: dict[str, str], api_key: str) -> Any: + query = {"chainid": "1", **params, "apikey": api_key} + url = f"{ETHERSCAN_API}?{urllib.parse.urlencode(query)}" + last_payload: Any = None + for attempt in range(6): + payload = fetch_json(url) + last_payload = payload + message = str(payload.get("message", "")) + result = payload.get("result") + if str(payload.get("status")) != "0" or message.lower() == "no transactions found": + time.sleep(0.35) + return result + if isinstance(result, str) and result.startswith("0x"): + time.sleep(0.35) + return result + if "rate limit" in str(result).lower() or "rate limit" in message.lower(): + time.sleep(1.25 + attempt * 0.5) + continue + raise RuntimeError(f"Etherscan API error: {payload.get('message')} {payload.get('result')}") + raise RuntimeError(f"Etherscan API error after retries: {last_payload}") + + +def human(raw: int, decimals: int = DECIMALS) -> str: + scaled = Decimal(raw) / (Decimal(10) ** decimals) + return f"{scaled:f}" + + +def parse_int(value: Any) -> int: + if isinstance(value, str) and value.startswith("0x"): + return int(value, 16) + return int(str(value)) + + +def fetch_etherscan_page_stats(address: str) -> dict[str, Any]: + url = ETHERSCAN_PAGE.format(address=address) + req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0 DBIS-cwusdc-attestation/1.0"}) + with urllib.request.urlopen(req, timeout=30) as response: + html = response.read().decode("utf-8", errors="replace") + + holders_match = re.search(r"]*>\s*Holders\s*

      \s*]*>\s*
      \s*([0-9,]+)", html, re.I) + total_supply_match = re.search(r'id="ContentPlaceHolder1_hdnTotalSupply" value="([^"]+)"', html) + onchain_marketcap_missing = "id=\"ContentPlaceHolder1_tr_marketcap\"" in html and re.search( + r"id=\"ContentPlaceHolder1_tr_marketcap\".*?
      \s*-\s*
      ", html, re.I | re.S + ) + circulating_marketcap_missing = "id=\"ContentPlaceHolder1_tr_circulatingmarketcap\"" in html and re.search( + r"id=\"ContentPlaceHolder1_tr_circulatingmarketcap\".*?
      \s*-\s*
      ", html, re.I | re.S + ) + return { + "url": url, + "holdersText": holders_match.group(1) if holders_match else None, + "totalSupplyText": total_supply_match.group(1) if total_supply_match else None, + "onchainMarketCapMissing": bool(onchain_marketcap_missing), + "circulatingMarketCapMissing": bool(circulating_marketcap_missing), + } + + +def build(args: argparse.Namespace) -> dict[str, Any]: + load_dotenv(ROOT / ".env") + api_key = args.etherscan_api_key or os.environ.get("ETHERSCAN_API_KEY", "") + if not api_key: + raise SystemExit("ETHERSCAN_API_KEY is required") + + latest_block_raw = etherscan_call({"module": "proxy", "action": "eth_blockNumber"}, api_key) + latest_block = parse_int(latest_block_raw) + total_supply_raw = parse_int( + etherscan_call( + {"module": "stats", "action": "tokensupply", "contractaddress": args.token}, + api_key, + ) + ) + + known: dict[str, Any] = {} + excluded_raw = 0 + exclude_set = set(args.exclude_known or []) + for label, address in KNOWN_BALANCES.items(): + raw = parse_int( + etherscan_call( + { + "module": "account", + "action": "tokenbalance", + "contractaddress": args.token, + "address": address, + "tag": "latest", + }, + api_key, + ) + ) + excluded = label in exclude_set + if excluded: + excluded_raw += raw + known[label] = { + "address": address, + "balanceRaw": str(raw), + "balanceUnits": human(raw), + "excludedFromCirculatingSupply": excluded, + } + + circulating_raw = total_supply_raw - excluded_raw + page_stats = fetch_etherscan_page_stats(args.token) + + return { + "schema": "cwusdc-supply-circulating-attestation/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "purpose": "Tracker-facing supply and circulating-supply attestation for Etherscan Value propagation.", + "network": {"chainId": 1, "name": "Ethereum Mainnet", "referenceBlock": latest_block}, + "token": { + "address": args.token, + "caip19": f"eip155:1/erc20:{args.token}", + "name": "Wrapped cUSDC", + "symbol": "cWUSDC", + "decimals": DECIMALS, + "etherscan": ETHERSCAN_PAGE.format(address=args.token), + }, + "supply": { + "totalSupplyRaw": str(total_supply_raw), + "totalSupplyUnits": human(total_supply_raw), + "excludedProtocolControlledRaw": str(excluded_raw), + "excludedProtocolControlledUnits": human(excluded_raw), + "circulatingSupplyRaw": str(circulating_raw), + "circulatingSupplyUnits": human(circulating_raw), + "formula": "circulatingSupply = totalSupply - explicitlyExcludedProtocolControlledNonCirculatingBalances", + "defaultPolicy": "No known balance is excluded unless the operator passes --exclude-known for that label or a tracker requests a specific exclusion methodology.", + }, + "knownBalances": known, + "etherscanPageObservation": page_stats, + "submissionPosition": { + "readyForTrackerReview": True, + "requestedProviderAction": "Accept total/circulating supply for the exact Mainnet cWUSDC contract and use it with accepted USD price data to populate market cap/value surfaces.", + "caveats": [ + "This is an on-chain supply attestation, not third-party listing approval.", + "Chain 138 cUSDC source-asset activity must not be counted as Ethereum Mainnet cWUSDC transfer activity.", + "If a tracker requires treasury, bridge, operator, or pool exclusions, regenerate with explicit --exclude-known labels and attach the requested signed inventory.", + ], + }, + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + supply = payload["supply"] + lines = [ + "# cWUSDC Supply and Circulating-Supply Attestation", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Reference block: `{payload['network']['referenceBlock']}`", + f"- Token: `{payload['token']['address']}`", + f"- CAIP-19: `{payload['token']['caip19']}`", + "", + "## Supply", + "", + "| Field | Value |", + "|---|---:|", + f"| Total supply | `{supply['totalSupplyUnits']}` |", + f"| Explicitly excluded protocol-controlled balances | `{supply['excludedProtocolControlledUnits']}` |", + f"| Circulating supply | `{supply['circulatingSupplyUnits']}` |", + "", + f"Formula: `{supply['formula']}`", + "", + "## Known Balances", + "", + "| Label | Address | Balance | Excluded |", + "|---|---|---:|---:|", + ] + for label, item in payload["knownBalances"].items(): + lines.append( + f"| `{label}` | `{item['address']}` | `{item['balanceUnits']}` | `{item['excludedFromCirculatingSupply']}` |" + ) + page = payload["etherscanPageObservation"] + lines.extend( + [ + "", + "## Etherscan Observation", + "", + f"- URL: `{page['url']}`", + f"- Holders text: `{page['holdersText']}`", + f"- Total supply text: `{page['totalSupplyText']}`", + f"- Onchain market cap missing: `{page['onchainMarketCapMissing']}`", + f"- Circulating market cap missing: `{page['circulatingMarketCapMissing']}`", + "", + "## Caveats", + "", + ] + ) + for caveat in payload["submissionPosition"]["caveats"]: + lines.append(f"- {caveat}") + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--token", default=CWUSDC) + parser.add_argument("--etherscan-api-key", default="") + parser.add_argument("--exclude-known", action="append", choices=sorted(KNOWN_BALANCES), help="Known balance label to exclude from circulating supply. Repeatable.") + parser.add_argument("--json-out", type=Path, default=REPORT_JSON) + parser.add_argument("--md-out", type=Path, default=REPORT_MD) + args = parser.parse_args() + + payload = build(args) + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + print(f"circulatingSupply={payload['supply']['circulatingSupplyUnits']}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py b/scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py new file mode 100644 index 00000000..a0e14231 --- /dev/null +++ b/scripts/verify/generate-global-cusdc-cwusdc-family-supply-proof.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +"""Generate a global cUSDC/cWUSDC family supply proof from report APIs. + +This is deliberately NOT the Ethereum Mainnet cWUSDC Etherscan supply proof. +It is a cross-chain family inventory. Entries without supply proof are listed +but excluded from aggregate totals. +""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import urllib.request +from decimal import Decimal, getcontext +from pathlib import Path +from typing import Any + + +getcontext().prec = 80 + +ROOT = Path(__file__).resolve().parents[2] +DEFAULT_API = "https://explorer.d-bis.org/api/v1/report/all" +DEFAULT_JSON = ROOT / "reports" / "status" / "global-cusdc-cwusdc-family-supply-proof-latest.json" +DEFAULT_MD = ROOT / "reports" / "status" / "global-cusdc-cwusdc-family-supply-proof-latest.md" +ETH_MAINNET_CWUSDC = "0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a" + + +def fetch_json(url: str) -> Any: + req = urllib.request.Request(url, headers={"User-Agent": "dbis-global-cusdc-cwusdc-proof/1.0"}) + with urllib.request.urlopen(req, timeout=30) as response: + return json.loads(response.read().decode("utf-8")) + + +def decimal_or_none(value: Any) -> Decimal | None: + if value is None: + return None + try: + return Decimal(str(value)) + except Exception: # noqa: BLE001 - proof should keep malformed entries out of totals + return None + + +def fmt(value: Decimal) -> str: + return f"{value:f}" + + +def iter_family_tokens(report: dict[str, Any]) -> list[dict[str, Any]]: + tokens_by_chain = report.get("tokens") or {} + rows: list[dict[str, Any]] = [] + for chain_id, tokens in tokens_by_chain.items(): + if not isinstance(tokens, list): + continue + for token in tokens: + if token.get("symbol") not in {"cUSDC", "cWUSDC"}: + continue + total = decimal_or_none(token.get("totalSupply")) + circulating = decimal_or_none(token.get("circulatingSupply")) + provenance = token.get("supplyProofProvenance") or {} + proved = total is not None and str(provenance.get("status", "")).lower() != "proof_required" + address = str(token.get("address") or "").lower() + rows.append( + { + "chainId": int(token.get("chainId") or chain_id), + "address": address, + "symbol": token.get("symbol"), + "name": token.get("name"), + "type": token.get("type"), + "decimals": token.get("decimals"), + "totalSupply": str(total) if total is not None else None, + "circulatingSupply": str(circulating) if circulating is not None else None, + "provedForAggregate": proved, + "isEthereumMainnetCwusdc": int(token.get("chainId") or chain_id) == 1 and address == ETH_MAINNET_CWUSDC, + "supplyProofProvenance": provenance, + "trackerCaveats": token.get("trackerCaveats") or [], + } + ) + return sorted(rows, key=lambda item: (item["chainId"], item["symbol"], item["address"])) + + +def build(api_url: str) -> dict[str, Any]: + report = fetch_json(api_url) + rows = iter_family_tokens(report) + proved = [row for row in rows if row["provedForAggregate"]] + unproved = [row for row in rows if not row["provedForAggregate"]] + + totals: dict[str, Decimal] = { + "globalFamilyTotalSupply": Decimal(0), + "globalFamilyCirculatingSupply": Decimal(0), + "baseCusdcTotalSupply": Decimal(0), + "baseCusdcCirculatingSupply": Decimal(0), + "wrappedCwusdcTotalSupply": Decimal(0), + "wrappedCwusdcCirculatingSupply": Decimal(0), + } + for row in proved: + total = Decimal(row["totalSupply"]) + circulating = Decimal(row["circulatingSupply"] or row["totalSupply"]) + totals["globalFamilyTotalSupply"] += total + totals["globalFamilyCirculatingSupply"] += circulating + if row["symbol"] == "cUSDC": + totals["baseCusdcTotalSupply"] += total + totals["baseCusdcCirculatingSupply"] += circulating + elif row["symbol"] == "cWUSDC": + totals["wrappedCwusdcTotalSupply"] += total + totals["wrappedCwusdcCirculatingSupply"] += circulating + + eth_mainnet = next((row for row in rows if row["isEthereumMainnetCwusdc"]), None) + return { + "schema": "global-cusdc-cwusdc-family-supply-proof/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "source": { + "api": api_url, + "reportGeneratedAt": report.get("generatedAt"), + }, + "scope": { + "description": "Cross-chain cUSDC/cWUSDC family supply inventory across report API chains.", + "notForEtherscanEthereumTokenPage": True, + "etherscanEthereumOnlyToken": { + "chainId": 1, + "address": ETH_MAINNET_CWUSDC, + "note": "Use the Ethereum-only cWUSDC supply attestation for Etherscan Value submissions, not this global family total.", + "entry": eth_mainnet, + }, + }, + "summary": { + "familyEntryCount": len(rows), + "provedAggregateEntryCount": len(proved), + "proofRequiredEntryCount": len(unproved), + **{key: fmt(value) for key, value in totals.items()}, + }, + "entries": rows, + "proofRequiredEntries": unproved, + "caveats": [ + "This is a global cross-chain family inventory, not a circulating-supply claim for any single chain explorer.", + "Entries marked proof_required are excluded from aggregate totals.", + "Ethereum Etherscan Value for cWUSDC must use only the Ethereum Mainnet cWUSDC contract supply.", + "cUSDC source assets and cWUSDC wrapped assets may represent related economic rails; global totals should not be used as a market-cap input without a tracker-approved methodology that prevents double counting.", + ], + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + summary = payload["summary"] + lines = [ + "# Global cUSDC/cWUSDC Family Supply Proof", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Source API: `{payload['source']['api']}`", + f"- Source report generated: `{payload['source']['reportGeneratedAt']}`", + f"- Not for Ethereum Etherscan token page: `{payload['scope']['notForEtherscanEthereumTokenPage']}`", + "", + "## Aggregate Totals", + "", + "| Field | Value |", + "|---|---:|", + f"| Family entries | `{summary['familyEntryCount']}` |", + f"| Proved aggregate entries | `{summary['provedAggregateEntryCount']}` |", + f"| Proof-required entries | `{summary['proofRequiredEntryCount']}` |", + f"| Global family total supply, proved only | `{summary['globalFamilyTotalSupply']}` |", + f"| Global family circulating supply, proved only | `{summary['globalFamilyCirculatingSupply']}` |", + f"| Base cUSDC total supply, proved only | `{summary['baseCusdcTotalSupply']}` |", + f"| Wrapped cWUSDC total supply, proved only | `{summary['wrappedCwusdcTotalSupply']}` |", + "", + "## Ethereum Mainnet cWUSDC Reminder", + "", + "For Etherscan Value, use only:", + "", + f"`{payload['scope']['etherscanEthereumOnlyToken']['address']}`", + "", + "Do not use the global family total for the Ethereum token page.", + "", + "## Entries", + "", + "| Chain | Symbol | Type | Address | Total supply | Circulating supply | Proved |", + "|---:|---|---|---|---:|---:|---:|", + ] + for row in payload["entries"]: + lines.append( + f"| `{row['chainId']}` | `{row['symbol']}` | `{row['type']}` | `{row['address']}` | `{row['totalSupply']}` | `{row['circulatingSupply']}` | `{row['provedForAggregate']}` |" + ) + lines.extend(["", "## Caveats", ""]) + for caveat in payload["caveats"]: + lines.append(f"- {caveat}") + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--api-url", default=DEFAULT_API) + parser.add_argument("--json-out", type=Path, default=DEFAULT_JSON) + parser.add_argument("--md-out", type=Path, default=DEFAULT_MD) + args = parser.parse_args() + + payload = build(args.api_url) + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + print(f"globalFamilyTotalSupply={payload['summary']['globalFamilyTotalSupply']}") + print(f"proofRequiredEntryCount={payload['summary']['proofRequiredEntryCount']}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/monitor-cwusdc-etherscan-value-propagation.py b/scripts/verify/monitor-cwusdc-etherscan-value-propagation.py new file mode 100644 index 00000000..3d7c2cca --- /dev/null +++ b/scripts/verify/monitor-cwusdc-etherscan-value-propagation.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python3 +"""Monitor whether cWUSDC USD value has propagated to Etherscan and upstream feeds.""" + +from __future__ import annotations + +import argparse +import datetime as dt +import json +import os +import re +import time +import urllib.error +import urllib.parse +import urllib.request +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[2] +REPORT_JSON = ROOT / "reports" / "status" / "cwusdc-etherscan-value-propagation-latest.json" +REPORT_MD = ROOT / "reports" / "status" / "cwusdc-etherscan-value-propagation-latest.md" +CWUSDC = "0x2de5f116bfce3d0f922d9c8351e0c5fc24b9284a" +ETHERSCAN_API = "https://api.etherscan.io/v2/api" +ETHERSCAN_PAGE = f"https://etherscan.io/token/{CWUSDC}" +COINGECKO_PRICE = ( + "https://api.coingecko.com/api/v3/simple/token_price/ethereum?" + f"contract_addresses={CWUSDC}&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true&include_last_updated_at=true" +) +DEXSCREENER_TOKEN_PAIRS = f"https://api.dexscreener.com/token-pairs/v1/ethereum/{CWUSDC}" +GECKOTERMINAL_POOLS = [ + "https://api.geckoterminal.com/api/v2/networks/eth/pools/0x1cf2e685682c7f7bef508f0af15dfb5cdda01ee3", + "https://api.geckoterminal.com/api/v2/networks/eth/pools/0xc28706f899266b36bc43cc072b3a921bdf2c48d9", +] + + +def load_dotenv(path: Path) -> None: + if not path.exists(): + return + for line in path.read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + key, value = line.split("=", 1) + key = key.strip() + value = value.strip().strip('"').strip("'") + if key and key not in os.environ: + os.environ[key] = value + + +def fetch_text(url: str, timeout: int = 30) -> tuple[int | None, str, str]: + req = urllib.request.Request( + url, + headers={ + "User-Agent": "Mozilla/5.0 DBIS-cwusdc-value-monitor/1.0", + "Accept": "application/json,text/html;q=0.9,*/*;q=0.8", + }, + ) + try: + with urllib.request.urlopen(req, timeout=timeout) as response: + return response.status, response.headers.get("content-type", ""), response.read().decode("utf-8", errors="replace") + except urllib.error.HTTPError as exc: + body = exc.read().decode("utf-8", errors="replace") if exc.fp else "" + return exc.code, exc.headers.get("content-type", "") if exc.headers else "", body + except Exception as exc: # noqa: BLE001 - monitor evidence should capture transient failures + return None, "", str(exc) + + +def fetch_json(url: str, timeout: int = 30) -> tuple[int | None, str, Any, str]: + status, content_type, text = fetch_text(url, timeout) + try: + return status, content_type, json.loads(text), "" + except json.JSONDecodeError as exc: + return status, content_type, None, str(exc) + + +def fetch_etherscan_api(params: dict[str, str], api_key: str) -> tuple[int | None, str, Any, str]: + query = {"chainid": "1", **params, "apikey": api_key} + url = f"{ETHERSCAN_API}?{urllib.parse.urlencode(query)}" + last: tuple[int | None, str, Any, str] = (None, "", None, "") + for attempt in range(5): + status, content_type, data, error = fetch_json(url) + last = (status, content_type, data, error) + if error: + return last + if not isinstance(data, dict): + return last + message = str(data.get("message", "")) + result = data.get("result") + if str(data.get("status")) != "0": + time.sleep(0.25) + return last + if "rate limit" in message.lower() or "rate limit" in str(result).lower(): + time.sleep(1.25 + attempt * 0.5) + continue + return last + return last + + +def extract_div_missing(html: str, element_id: str) -> bool: + pattern = rf'id="{re.escape(element_id)}".*?
      \s*-\s*
      ' + return bool(re.search(pattern, html, flags=re.I | re.S)) + + +def parse_etherscan() -> dict[str, Any]: + status, content_type, html = fetch_text(ETHERSCAN_PAGE) + has_profile = "Wrapped cUSDC" in html and "cWUSDC" in html + total_supply_match = re.search(r'id="ContentPlaceHolder1_hdnTotalSupply" value="([^"]+)"', html) + holders_match = re.search(r"]*>\s*Holders\s*\s*]*>\s*
      \s*([0-9,]+)", html, re.I) + market_missing = extract_div_missing(html, "ContentPlaceHolder1_tr_marketcap") + circ_market_missing = extract_div_missing(html, "ContentPlaceHolder1_tr_circulatingmarketcap") + value_ready = bool(status and 200 <= status < 300 and has_profile and not market_missing and not circ_market_missing) + return { + "id": "etherscan_token_page", + "url": ETHERSCAN_PAGE, + "status": status, + "contentType": content_type, + "profileDetected": has_profile, + "holdersText": holders_match.group(1) if holders_match else None, + "totalSupplyText": total_supply_match.group(1) if total_supply_match else None, + "onchainMarketCapMissing": market_missing, + "circulatingMarketCapMissing": circ_market_missing, + "valueReady": value_ready, + } + + +def parse_etherscan_tokeninfo(api_key: str) -> dict[str, Any]: + if not api_key: + return { + "id": "etherscan_tokeninfo_api", + "url": ETHERSCAN_API, + "status": None, + "contentType": "", + "parseError": "", + "skipped": True, + "skipReason": "ETHERSCAN_API_KEY is not set.", + "metadataReady": False, + "priceReady": False, + } + + status, content_type, data, error = fetch_etherscan_api( + {"module": "token", "action": "tokeninfo", "contractaddress": CWUSDC}, + api_key, + ) + result = data.get("result") if isinstance(data, dict) else None + entry = result[0] if isinstance(result, list) and result and isinstance(result[0], dict) else None + token_price_raw = entry.get("tokenPriceUSD") if isinstance(entry, dict) else None + try: + token_price = float(token_price_raw) if token_price_raw not in (None, "") else 0.0 + except (TypeError, ValueError): + token_price = 0.0 + metadata_ready = bool( + isinstance(entry, dict) + and entry.get("contractAddress", "").lower() == CWUSDC + and entry.get("symbol") == "cWUSDC" + and entry.get("tokenName") + ) + profile_enriched = bool( + isinstance(entry, dict) + and (entry.get("image") or entry.get("website") or entry.get("description") or entry.get("twitter")) + ) + return { + "id": "etherscan_tokeninfo_api", + "url": ETHERSCAN_API, + "status": status, + "contentType": content_type, + "parseError": error, + "skipped": False, + "apiStatus": data.get("status") if isinstance(data, dict) else None, + "apiMessage": data.get("message") if isinstance(data, dict) else None, + "apiResultPreview": result, + "metadataReady": metadata_ready, + "profileEnriched": profile_enriched, + "priceReady": token_price > 0, + "tokenPriceUSD": token_price_raw, + "tokenName": entry.get("tokenName") if isinstance(entry, dict) else None, + "symbol": entry.get("symbol") if isinstance(entry, dict) else None, + "divisor": entry.get("divisor") if isinstance(entry, dict) else None, + "tokenType": entry.get("tokenType") if isinstance(entry, dict) else None, + "totalSupply": entry.get("totalSupply") if isinstance(entry, dict) else None, + "blueCheckmark": entry.get("blueCheckmark") if isinstance(entry, dict) else None, + "image": entry.get("image") if isinstance(entry, dict) else None, + "website": entry.get("website") if isinstance(entry, dict) else None, + "descriptionPresent": bool(entry.get("description")) if isinstance(entry, dict) else False, + } + + +def parse_coingecko() -> dict[str, Any]: + status, content_type, data, error = fetch_json(COINGECKO_PRICE) + entry = None + if isinstance(data, dict): + entry = data.get(CWUSDC) + usd = entry.get("usd") if isinstance(entry, dict) else None + return { + "id": "coingecko_token_price", + "url": COINGECKO_PRICE, + "status": status, + "contentType": content_type, + "parseError": error, + "listedByContract": isinstance(entry, dict), + "usd": usd, + "marketCapUsd": entry.get("usd_market_cap") if isinstance(entry, dict) else None, + "volume24hUsd": entry.get("usd_24h_vol") if isinstance(entry, dict) else None, + "lastUpdatedAt": entry.get("last_updated_at") if isinstance(entry, dict) else None, + "priceReady": isinstance(usd, (int, float)) and usd > 0, + "jsonPreview": data, + } + + +def parse_dexscreener() -> dict[str, Any]: + status, content_type, data, error = fetch_json(DEXSCREENER_TOKEN_PAIRS) + pair_count = len(data) if isinstance(data, list) else 0 + return { + "id": "dexscreener_token_pairs", + "url": DEXSCREENER_TOKEN_PAIRS, + "status": status, + "contentType": content_type, + "parseError": error, + "pairCount": pair_count, + "indexed": pair_count > 0, + "jsonPreview": data[:3] if isinstance(data, list) else data, + } + + +def parse_geckoterminal() -> list[dict[str, Any]]: + checks: list[dict[str, Any]] = [] + for url in GECKOTERMINAL_POOLS: + status, content_type, data, error = fetch_json(url) + attrs = ((data or {}).get("data") or {}).get("attributes") if isinstance(data, dict) else None + checks.append( + { + "id": "geckoterminal_pool", + "url": url, + "status": status, + "contentType": content_type, + "parseError": error, + "indexed": isinstance(attrs, dict), + "reserveUsd": attrs.get("reserve_in_usd") if isinstance(attrs, dict) else None, + "volume24hUsd": ((attrs.get("volume_usd") or {}).get("h24") if isinstance(attrs, dict) else None), + } + ) + return checks + + +def build() -> dict[str, Any]: + load_dotenv(ROOT / ".env") + etherscan_api_key = os.environ.get("ETHERSCAN_API_KEY", "") + etherscan = parse_etherscan() + etherscan_tokeninfo = parse_etherscan_tokeninfo(etherscan_api_key) + coingecko = parse_coingecko() + dexscreener = parse_dexscreener() + gecko = parse_geckoterminal() + blockers: list[str] = [] + if not etherscan["profileDetected"]: + blockers.append("Etherscan token profile text was not detected.") + if etherscan["onchainMarketCapMissing"]: + blockers.append("Etherscan Onchain Market Cap is still blank.") + if etherscan["circulatingMarketCapMissing"]: + blockers.append("Etherscan Circulating Supply Market Cap is still blank.") + tokeninfo_preview = str(etherscan_tokeninfo.get("apiResultPreview", "")) + if "API Pro endpoint" in tokeninfo_preview: + blockers.append("Etherscan tokeninfo API is an API Pro endpoint for the current key; tokeninfo propagation cannot be monitored with the current plan.") + elif not etherscan_tokeninfo["metadataReady"]: + blockers.append("Etherscan tokeninfo API does not return accepted token metadata for cWUSDC.") + if "API Pro endpoint" not in tokeninfo_preview and not etherscan_tokeninfo["priceReady"]: + blockers.append("Etherscan tokeninfo API does not return a positive USD token price.") + if not coingecko["priceReady"]: + blockers.append("CoinGecko contract price API does not return a positive USD price.") + if not dexscreener["indexed"]: + blockers.append("DexScreener token-pairs API still does not index cWUSDC pairs.") + + return { + "schema": "cwusdc-etherscan-value-propagation/v1", + "generatedAt": dt.datetime.now(dt.UTC).isoformat().replace("+00:00", "Z"), + "token": { + "chainId": 1, + "address": CWUSDC, + "caip19": f"eip155:1/erc20:{CWUSDC}", + "symbol": "cWUSDC", + }, + "summary": { + "etherscanValueReady": etherscan["valueReady"], + "etherscanTokenInfoMetadataReady": etherscan_tokeninfo["metadataReady"], + "etherscanTokenInfoPriceReady": etherscan_tokeninfo["priceReady"], + "coingeckoPriceReady": coingecko["priceReady"], + "readyForEtherscanValuePropagation": etherscan["valueReady"] or coingecko["priceReady"], + "blockers": blockers, + }, + "checks": { + "etherscan": etherscan, + "etherscanTokenInfo": etherscan_tokeninfo, + "coingecko": coingecko, + "dexscreener": dexscreener, + "geckoterminal": gecko, + }, + } + + +def write_md(payload: dict[str, Any], path: Path) -> None: + summary = payload["summary"] + checks = payload["checks"] + lines = [ + "# cWUSDC Etherscan Value Propagation Monitor", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Token: `{payload['token']['address']}`", + f"- CAIP-19: `{payload['token']['caip19']}`", + f"- Etherscan value ready: `{summary['etherscanValueReady']}`", + f"- Etherscan tokeninfo metadata ready: `{summary['etherscanTokenInfoMetadataReady']}`", + f"- Etherscan tokeninfo price ready: `{summary['etherscanTokenInfoPriceReady']}`", + f"- CoinGecko price ready: `{summary['coingeckoPriceReady']}`", + "", + "## Blockers", + "", + ] + if summary["blockers"]: + lines.extend(f"- {item}" for item in summary["blockers"]) + else: + lines.append("- None detected by this monitor.") + lines.extend( + [ + "", + "## Checks", + "", + "| Surface | Status | Ready / indexed | Key fields |", + "|---|---:|---:|---|", + f"| Etherscan | `{checks['etherscan']['status']}` | `{checks['etherscan']['valueReady']}` | marketCapMissing={checks['etherscan']['onchainMarketCapMissing']}; circulatingMarketCapMissing={checks['etherscan']['circulatingMarketCapMissing']}; holders={checks['etherscan']['holdersText']} |", + f"| Etherscan tokeninfo API | `{checks['etherscanTokenInfo']['status']}` | `{checks['etherscanTokenInfo']['metadataReady']}` / price `{checks['etherscanTokenInfo']['priceReady']}` | symbol={checks['etherscanTokenInfo']['symbol']}; price={checks['etherscanTokenInfo']['tokenPriceUSD']}; image={checks['etherscanTokenInfo']['image']}; website={checks['etherscanTokenInfo']['website']} |", + f"| CoinGecko contract price | `{checks['coingecko']['status']}` | `{checks['coingecko']['priceReady']}` | usd={checks['coingecko']['usd']}; marketCap={checks['coingecko']['marketCapUsd']}; lastUpdated={checks['coingecko']['lastUpdatedAt']} |", + f"| DexScreener token pairs | `{checks['dexscreener']['status']}` | `{checks['dexscreener']['indexed']}` | pairCount={checks['dexscreener']['pairCount']} |", + ] + ) + for item in checks["geckoterminal"]: + lines.append( + f"| GeckoTerminal pool | `{item['status']}` | `{item['indexed']}` | reserveUsd={item['reserveUsd']}; volume24hUsd={item['volume24hUsd']}; url={item['url']} |" + ) + path.write_text("\n".join(lines) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--json-out", type=Path, default=REPORT_JSON) + parser.add_argument("--md-out", type=Path, default=REPORT_MD) + parser.add_argument("--strict", action="store_true") + args = parser.parse_args() + + payload = build() + args.json_out.parent.mkdir(parents=True, exist_ok=True) + args.json_out.write_text(json.dumps(payload, indent=2) + "\n") + write_md(payload, args.md_out) + print(f"Wrote {args.json_out.relative_to(ROOT)}") + print(f"Wrote {args.md_out.relative_to(ROOT)}") + print(f"etherscanValueReady={payload['summary']['etherscanValueReady']}") + if payload["summary"]["blockers"]: + print("Blockers: " + "; ".join(payload["summary"]["blockers"])) + if args.strict and not payload["summary"]["etherscanValueReady"]: + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/plan-engine-x-automated-liquidity-advisor.py b/scripts/verify/plan-engine-x-automated-liquidity-advisor.py new file mode 100755 index 00000000..af2f7ff9 --- /dev/null +++ b/scripts/verify/plan-engine-x-automated-liquidity-advisor.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import json +import os +import subprocess +from datetime import datetime, timezone +from decimal import Decimal, ROUND_FLOOR, getcontext +from pathlib import Path +from typing import Any + +getcontext().prec = 80 + +ROOT = Path(__file__).resolve().parents[2] +POLICY_PATH = ROOT / "config/engine-x/automation-policy.json" +OUT_JSON = ROOT / "reports/status/engine-x-automated-liquidity-advisor-latest.json" +OUT_MD = ROOT / "reports/status/engine-x-automated-liquidity-advisor-latest.md" +XAUT_MAINNET = "0x68749665FF8D2d112Fa859AA293F07A622782F38" + + +def read_json(path: Path) -> dict[str, Any] | None: + try: + return json.loads(path.read_text()) + except FileNotFoundError: + return None + except json.JSONDecodeError as exc: + return {"_error": f"invalid json: {exc}"} + + +def env_decimal(name: str, default: str | None = None) -> Decimal | None: + value = os.environ.get(name, default) + if value is None or value == "": + return None + return Decimal(value) + + +def env_int(name: str, default: str | None = None) -> int | None: + value = os.environ.get(name, default) + if value is None or value == "": + return None + return int(Decimal(value)) + + +def decstr(value: Decimal, places: int = 6) -> str: + q = Decimal(10) ** -places + return f"{value.quantize(q)}" + + +def raw6(units: Decimal) -> int: + return int((units * Decimal(10**6)).to_integral_value(rounding=ROUND_FLOOR)) + + +def units_from_raw(raw: int, decimals: int) -> Decimal: + return Decimal(raw) / Decimal(10**decimals) + + +def get_path(payload: dict[str, Any] | None, *parts: str, default: Any = None) -> Any: + cur: Any = payload + for part in parts: + if not isinstance(cur, dict) or part not in cur: + return default + cur = cur[part] + return cur + + +def cast_call_raw(token: str, owner: str, rpc: str) -> int | None: + try: + result = subprocess.run( + ["cast", "call", token, "balanceOf(address)(uint256)", owner, "--rpc-url", rpc], + check=True, + capture_output=True, + text=True, + timeout=30, + ) + except (OSError, subprocess.CalledProcessError, subprocess.TimeoutExpired): + return None + first = result.stdout.strip().split()[0] if result.stdout.strip() else "" + return int(first) if first.isdigit() else None + + +def cast_decimals(token: str, rpc: str, fallback: int) -> int: + try: + result = subprocess.run( + ["cast", "call", token, "decimals()(uint8)", "--rpc-url", rpc], + check=True, + capture_output=True, + text=True, + timeout=30, + ) + except (OSError, subprocess.CalledProcessError, subprocess.TimeoutExpired): + return fallback + first = result.stdout.strip().split()[0] if result.stdout.strip() else "" + return int(first) if first.isdigit() else fallback + + +def main() -> int: + policy = read_json(POLICY_PATH) or {} + reports = { + "supportHealth": read_json(ROOT / "reports/status/mainnet-cwusdc-usdc-support-health-latest.json"), + "publicIndexedReadiness": read_json(ROOT / "reports/status/engine-x-public-indexed-readiness-latest.json"), + "mevDefenseReadiness": read_json(ROOT / "reports/status/engine-x-mev-defense-readiness-latest.json"), + "wethSupport": read_json(ROOT / "reports/status/mainnet-cwusdc-weth-liquidity-surfaces-latest.json"), + } + + requested_symbol = os.environ.get("ENGINE_X_REQUESTED_CW_SYMBOL", "cWUSDC") + requested_units = env_decimal("ENGINE_X_REQUESTED_OUTPUT_UNITS") + requested_raw = env_int("ENGINE_X_REQUESTED_OUTPUT_RAW") + if requested_raw is None and requested_units is not None: + requested_raw = raw6(requested_units) + if requested_units is None and requested_raw is not None: + requested_units = Decimal(requested_raw) / Decimal(10**6) + if requested_raw is None: + requested_raw = 10_000 + requested_units = Decimal("0.01") + + xaut_token = os.environ.get("XAUT_MAINNET", XAUT_MAINNET) + xaut_decimals = 6 + if os.environ.get("ETHEREUM_MAINNET_RPC"): + xaut_decimals = cast_decimals(xaut_token, os.environ["ETHEREUM_MAINNET_RPC"], xaut_decimals) + + xaut_available_raw = env_int("ENGINE_X_XAUT_AVAILABLE_RAW") + if xaut_available_raw is None: + xaut_units_env = env_decimal("ENGINE_X_XAUT_AVAILABLE_UNITS") + xaut_available_raw = int((xaut_units_env * Decimal(10**xaut_decimals)).to_integral_value(rounding=ROUND_FLOOR)) if xaut_units_env is not None else 0 + xaut_available_units = units_from_raw(xaut_available_raw, xaut_decimals) + + xaut_usd_price6 = Decimal(env_int("ENGINE_X_XAUT_USD_PRICE6", str(get_path(policy, "inputs", "collateral", "defaultUsdPrice6", default="3226640000")))) + xaut_usd_price = xaut_usd_price6 / Decimal(10**6) + ltv_bps = Decimal(env_int("ENGINE_X_BORROW_LTV_BPS", str(get_path(policy, "inputs", "risk", "defaultLtvBps", default=7500)))) + hf_bps = Decimal(env_int("ENGINE_X_BORROW_MIN_HEALTH_FACTOR_BPS", str(get_path(policy, "inputs", "risk", "defaultMinHealthFactorBps", default=11000)))) + max_round_trip_loss_bps = Decimal(env_int("ENGINE_X_MAX_ROUND_TRIP_LOSS_BPS", str(get_path(policy, "inputs", "risk", "defaultMaxRoundTripLossBps", default=100)))) + min_gas_reserve_wei = env_int("ENGINE_X_MIN_GAS_RESERVE_WEI", str(get_path(policy, "inputs", "risk", "defaultMinGasReserveWei", default="5000000000000000"))) + + deployer = get_path(reports["publicIndexedReadiness"], "deployer", default={}) or {} + deployer_address = str(deployer.get("address") or os.environ.get("DEPLOYER_ADDRESS") or "") + wallet_usdc = Decimal(str(deployer.get("usdc", "0"))) + wallet_cwusdc = Decimal(str(deployer.get("cwusdc", "0"))) + wallet_eth = Decimal(str(get_path(reports["wethSupport"], "balances", "eth", default="0"))) + + xaut_balance_source = "env" + if xaut_available_raw == 0 and deployer_address and os.environ.get("ETHEREUM_MAINNET_RPC"): + live_xaut = cast_call_raw( + xaut_token, + deployer_address, + os.environ["ETHEREUM_MAINNET_RPC"], + ) + if live_xaut is not None: + xaut_available_raw = live_xaut + xaut_available_units = units_from_raw(xaut_available_raw, xaut_decimals) + xaut_balance_source = "live_wallet_balance" + + collateral_usd = xaut_available_units * xaut_usd_price + ltv_borrow_capacity = collateral_usd * ltv_bps / Decimal(10_000) + # Conservative single-asset health-factor capacity: debt <= collateral_ltv_value / target_hf. + hf_borrow_capacity = ltv_borrow_capacity * Decimal(10_000) / hf_bps if hf_bps > 0 else Decimal(0) + borrow_capacity = min(ltv_borrow_capacity, hf_borrow_capacity) + + mev_ready = bool(get_path(reports["mevDefenseReadiness"], "ready", default=False)) + public_ready = bool(get_path(reports["publicIndexedReadiness"], "summary", "readyForPublicIndexedProof", default=False)) + support_preferred = get_path(reports["supportHealth"], "quoteDefenseDecision", "preferredSurface", default={}) or {} + support_blockers = get_path(reports["supportHealth"], "quoteDefenseDecision", "blockers", default=[]) or [] + v3_tick = get_path(reports["supportHealth"], "quoteDefenseSurfaceHealth", "mainnet-cwusdc-usdc-univ3-100", "tick") + v3_range_status = get_path(reports["supportHealth"], "quoteDefenseSurfaceHealth", "mainnet-cwusdc-usdc-univ3-100", "rangeStatus") + + requested_usd = requested_units or Decimal(0) + available_loop_usd = min(wallet_usdc + borrow_capacity, wallet_cwusdc, requested_usd) + can_satisfy_requested = available_loop_usd >= requested_usd and requested_usd > 0 + + blockers: list[str] = [] + warnings: list[str] = [] + if requested_symbol not in get_path(policy, "inputs", "requestedOutput", "supportedInitialSymbols", default=["cWUSDC"]): + blockers.append(f"requested output symbol is not yet supported by this advisor: {requested_symbol}") + if not public_ready: + blockers.append("public indexed readiness is not passing") + if not mev_ready: + blockers.append("MEV/protected broadcast readiness is not passing for live automation") + if support_preferred.get("action") not in {"ready_for_tiny_canary", "use_for_tiny_public_canary"}: + warnings.append(f"preferred quote-defense surface action is {support_preferred.get('action', 'unknown')}; rebalance or operator review may be needed") + if support_blockers: + blockers.extend(f"support health blocker: {item}" for item in support_blockers) + if wallet_eth * Decimal(10**18) < Decimal(min_gas_reserve_wei or 0): + blockers.append("wallet ETH is below configured gas reserve") + if not can_satisfy_requested: + blockers.append("requested output exceeds current wallet plus XAUt-backed conservative USDC capacity") + + live_execution_ready = not blockers and can_satisfy_requested + endpoint_publication_ready = live_execution_ready and public_ready + + phases = [] + for phase in get_path(policy, "automationPhases", default=[]): + status = "ready" + if phase["id"] == "phase_1_canary" and not live_execution_ready: + status = "blocked" + elif phase["id"] == "phase_2_liquidity_defense" and (not live_execution_ready or warnings): + status = "operator_review" + elif phase["id"] == "phase_3_endpoint_publication" and not endpoint_publication_ready: + status = "blocked" + elif phase["id"] == "phase_4_multi_asset_forex_crypto": + status = "design_required" + phases.append({**phase, "status": status}) + + payload = { + "schema": "engine-x-automated-liquidity-advisor/v1", + "generatedAt": datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z"), + "policyPath": str(POLICY_PATH.relative_to(ROOT)), + "request": { + "outputSymbol": requested_symbol, + "outputRaw": str(requested_raw), + "outputUnits": decstr(requested_units or Decimal(0), 6), + }, + "inputs": { + "wallet": { + "usdc": decstr(wallet_usdc, 6), + "cwusdc": decstr(wallet_cwusdc, 6), + "eth": str(wallet_eth), + }, + "xautCollateral": { + "availableRaw": str(xaut_available_raw), + "availableUnits": decstr(xaut_available_units, min(xaut_decimals, 8)), + "decimals": xaut_decimals, + "token": xaut_token, + "source": xaut_balance_source, + "usdPrice": decstr(xaut_usd_price, 6), + "collateralUsd": decstr(collateral_usd, 6), + }, + "risk": { + "ltvBps": str(ltv_bps), + "minHealthFactorBps": str(hf_bps), + "maxRoundTripLossBps": str(max_round_trip_loss_bps), + "minGasReserveWei": str(min_gas_reserve_wei), + }, + }, + "calculator": { + "ltvBorrowCapacityUsdc": decstr(ltv_borrow_capacity, 6), + "healthFactorBorrowCapacityUsdc": decstr(hf_borrow_capacity, 6), + "conservativeBorrowCapacityUsdc": decstr(borrow_capacity, 6), + "walletPlusBorrowUsdcCapacity": decstr(wallet_usdc + borrow_capacity, 6), + "maxCurrentRequestFillUnits": decstr(available_loop_usd, 6), + "canSatisfyRequestedOutput": can_satisfy_requested, + "debtNeutralLoopInvariant": "borrow USDC, swap cWUSDC->USDC to repay debt, then swap borrowed USDC->cWUSDC; ending USDC debt must be zero before XAUt withdrawal", + }, + "feedStatus": { + "publicIndexedReady": public_ready, + "mevDefenseReady": mev_ready, + "preferredQuoteDefenseSurface": support_preferred, + "uniV3Tick": v3_tick, + "uniV3RangeStatus": v3_range_status, + }, + "recommendedPhases": phases, + "endpointReporting": { + "ready": endpoint_publication_ready, + "targets": get_path(policy, "feeds", "externalPublicationTargets", default=[]), + "requiredEvidence": get_path(policy, "decisionGates", "publication", default=[]), + }, + "blockers": blockers, + "warnings": warnings, + "operatorCommands": { + "regenerateFeeds": get_path(policy, "feeds", "onChainReadinessCommands", default=[]), + "dryRunAdvisor": "pnpm engine-x:automation-advisor", + "liveExecution": "blocked unless this report has no blockers and operator-approved scripts are run with protected RPC", + }, + } + + OUT_JSON.parent.mkdir(parents=True, exist_ok=True) + OUT_JSON.write_text(json.dumps(payload, indent=2) + "\n") + + lines = [ + "# Engine X Automated Liquidity Advisor", + "", + f"- generatedAt: `{payload['generatedAt']}`", + f"- request: `{payload['request']['outputUnits']} {requested_symbol}`", + f"- max current request fill: `{payload['calculator']['maxCurrentRequestFillUnits']} {requested_symbol}`", + f"- conservative XAUt-backed USDC capacity: `{payload['calculator']['conservativeBorrowCapacityUsdc']} USDC`", + f"- public indexed ready: `{str(public_ready).lower()}`", + f"- MEV defense ready: `{str(mev_ready).lower()}`", + f"- endpoint publication ready: `{str(endpoint_publication_ready).lower()}`", + "", + "## Calculator", + "", + f"- wallet USDC: `{payload['inputs']['wallet']['usdc']}`", + f"- wallet cWUSDC: `{payload['inputs']['wallet']['cwusdc']}`", + f"- XAUt available: `{payload['inputs']['xautCollateral']['availableUnits']}`", + f"- XAUt collateral USD value: `{payload['inputs']['xautCollateral']['collateralUsd']}`", + f"- wallet plus conservative borrow capacity: `{payload['calculator']['walletPlusBorrowUsdcCapacity']} USDC`", + "", + "## Phases", + ] + for phase in phases: + lines.append(f"- `{phase['id']}`: `{phase['status']}` - {phase['name']}") + lines.extend(["", "## Blockers"]) + lines.extend([f"- {item}" for item in blockers] or ["- none"]) + lines.extend(["", "## Warnings"]) + lines.extend([f"- {item}" for item in warnings] or ["- none"]) + lines.extend(["", "## Reporting Targets"]) + lines.extend([f"- {item}" for item in payload["endpointReporting"]["targets"]]) + OUT_MD.write_text("\n".join(lines) + "\n") + + print(json.dumps({"ready": live_execution_ready, "blockers": blockers, "warnings": warnings}, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify/plan-engine-x-automated-liquidity-advisor.sh b/scripts/verify/plan-engine-x-automated-liquidity-advisor.sh new file mode 100755 index 00000000..5255341b --- /dev/null +++ b/scripts/verify/plan-engine-x-automated-liquidity-advisor.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh +source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" + +python3 "${PROJECT_ROOT}/scripts/verify/plan-engine-x-automated-liquidity-advisor.py" diff --git a/scripts/verify/plan-token-aggregation-liquidity-gap-funding.mjs b/scripts/verify/plan-token-aggregation-liquidity-gap-funding.mjs new file mode 100644 index 00000000..9e570eb8 --- /dev/null +++ b/scripts/verify/plan-token-aggregation-liquidity-gap-funding.mjs @@ -0,0 +1,932 @@ +#!/usr/bin/env node +/** + * Read-only funding planner for token-aggregation adoption-readiness liquidity gaps. + * + * It does not broadcast transactions. It checks the deployer wallet's native and ERC-20 balances + * for every current liquidityMissingDetails row and classifies each row as: + * - fundable_token_balance_present + * - gas_gated + * - token_balance_gated + * - pool_binding_gated + */ + +import { createHash } from "node:crypto"; +import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const repoRoot = resolve(new URL("../..", import.meta.url).pathname); +const readinessPath = resolve(repoRoot, "reports/status/token-aggregation-adoption-readiness-live-20260509.json"); +const nonEvmHealthPath = resolve(repoRoot, "reports/status/non-evm-network-health-latest.json"); +const nonEvmLaneStatusPath = resolve(repoRoot, "reports/status/non-evm-lane-status-latest.json"); +const jsonOut = resolve(repoRoot, "reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json"); +const mdOut = resolve(repoRoot, "reports/status/token-aggregation-liquidity-gap-funding-plan-latest.md"); +const deployer = (process.env.DEPLOYER_ADDRESS || process.env.DEPLOYER || "0x4A666F96fC8764181194447A7dFdb7d471b301C8").trim(); +const envFiles = [resolve(repoRoot, ".env"), resolve(repoRoot, "smom-dbis-138/.env")]; +const stabilityCycles = Number(process.env.TOKEN_AGGREGATION_STABILITY_CYCLES || "30"); +const gasSafetyBps = BigInt(process.env.TOKEN_AGGREGATION_GAS_SAFETY_BPS || "15000"); +const coffeeMoneyUsdAvailable = Number(process.env.DEPLOYER_COFFEE_MONEY_USD || "48"); +const coffeeMoneyLiquidityUsdPerRow = Number(process.env.COFFEE_MONEY_LIQUIDITY_USD_PER_ROW || "1"); +const bridgeCapableChains = new Set([1, 10, 25, 56, 100, 137, 42161, 42220, 43114, 8453]); +const protocolinkCandidateChains = new Set([1, 10, 56, 100, 137, 42161, 42220, 43114, 8453]); +const officialQuoteAssets = new Set([ + "1:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "1:0xdac17f958d2ee523a2206206994597c13d831ec7", + "10:0x0b2c639c533813f4aa9d7837caf62653d097ff85", + "10:0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", + "25:0xc21223249ca28397b4b6541dffaecc539bff0c59", + "25:0x66e428c3f67a68878562e79a0234c1f83c208770", + "56:0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + "56:0x55d398326f99059ff775485246999027b3197955", + "100:0xddafbb505ad214d7b80b1f830fccc89b60fb7a83", + "100:0x4ecaba5870353805a9f068101a40e0f32ed605c6", + "137:0x3c499c542cef5e3811e1192ce70d8cc03d5c3359", + "137:0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + "8453:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "42161:0xaf88d065e77c8cc2239327c5edb3a432268e5831", + "42161:0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", + "42220:0x765de816845861e75a25fca122bb6898b8b1282a", + "42220:0x48065fbbe25f71c9282ddf5e1cd6d6a887483d5e", + "43114:0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", + "43114:0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", +]); +const ethereumSourceTokens = [ + { symbol: "USDC", address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", decimals: 6, role: "official_quote_capital" }, + { symbol: "USDT", address: "0xdAC17F958D2ee523a2206206994597C13D831ec7", decimals: 6, role: "official_quote_capital" }, + { symbol: "LINK", address: "0x514910771AF9Ca656af840dff83E8264EcF986CA", decimals: 18, role: "route_quote_before_use" }, + { symbol: "WETH", address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", decimals: 18, role: "wrapped_native_gas_source" }, + { symbol: "XAUt", address: "0x68749665FF8D2d112Fa859AA293F07A622782F38", decimals: 6, role: "route_quote_before_use" }, + { symbol: "cWUSDC", address: "0x66a3c2fa3e467aa586e90912f977e648589cabaf", decimals: 6, role: "evidence_or_pair_side_not_native_gas" }, +]; + +const rpcByChain = { + 1: process.env.ETHEREUM_MAINNET_RPC || process.env.RPC_URL_1 || "https://ethereum.publicnode.com", + 10: process.env.OPTIMISM_MAINNET_RPC || process.env.OPTIMISM_RPC_URL || process.env.RPC_URL_10 || "https://optimism.publicnode.com", + 25: process.env.CRONOS_RPC_URL || process.env.CRONOS_MAINNET_RPC || process.env.RPC_URL_25 || "https://cronos-evm-rpc.publicnode.com", + 56: process.env.BSC_RPC_URL || process.env.BSC_MAINNET_RPC || process.env.RPC_URL_56 || "https://bsc-rpc.publicnode.com", + 100: process.env.GNOSIS_MAINNET_RPC || process.env.GNOSIS_RPC_URL || process.env.GNOSIS_RPC || process.env.RPC_URL_100 || "https://gnosis.publicnode.com", + 137: process.env.POLYGON_MAINNET_RPC || process.env.POLYGON_RPC_URL || process.env.RPC_URL_137 || "https://polygon-bor-rpc.publicnode.com", + 138: process.env.RPC_URL_138_PUBLIC || process.env.RPC_URL_138 || process.env.CHAIN138_RPC_URL || "http://192.168.11.221:8545", + 1111: process.env.WEMIX_MAINNET_RPC || process.env.WEMIX_RPC || process.env.RPC_URL_1111 || "https://api.wemix.com", + 8453: process.env.BASE_MAINNET_RPC || process.env.BASE_RPC_URL || process.env.RPC_URL_8453 || "https://base-rpc.publicnode.com", + 42161: process.env.ARBITRUM_MAINNET_RPC || process.env.ARBITRUM_RPC_URL || process.env.RPC_URL_42161 || "https://arbitrum-one-rpc.publicnode.com", + 42220: process.env.CELO_MAINNET_RPC || process.env.CELO_RPC_URL || process.env.CELO_RPC || process.env.RPC_URL_42220 || "https://celo-rpc.publicnode.com", + 43114: process.env.AVALANCHE_RPC_URL || process.env.AVALANCHE_MAINNET_RPC || process.env.RPC_URL_43114 || "https://avalanche-c-chain-rpc.publicnode.com", + 651940: process.env.CHAIN_651940_RPC_URL || process.env.ALL_MAINNET_RPC || "https://mainnet-rpc.alltra.global", +}; +const nativeSymbolsByChain = { + 1: "ETH", + 10: "ETH", + 25: "CRO", + 56: "BNB", + 100: "xDAI", + 137: "POL", + 138: "DBIS", + 1111: "WEMIX", + 8453: "ETH", + 42161: "ETH", + 42220: "CELO", + 43114: "AVAX", + 651940: "ALL", +}; +const gasPriceCache = new Map(); + +function padAddress(address) { + return String(address).replace(/^0x/i, "").padStart(64, "0"); +} + +async function rpcCall(rpcUrl, method, params) { + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 12_000); + try { + const response = await fetch(rpcUrl, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ jsonrpc: "2.0", method, params, id: 1 }), + signal: controller.signal, + }); + const json = await response.json(); + if (json.error) return { ok: false, error: json.error.message || JSON.stringify(json.error) }; + return { ok: true, result: json.result }; + } catch (error) { + return { ok: false, error: error.message }; + } finally { + clearTimeout(timeout); + } +} + +function bigintFromHex(hex) { + if (!hex || hex === "0x") return 0n; + return BigInt(hex); +} + +function decimalUnits(raw, decimals) { + const scale = 10n ** BigInt(decimals); + const whole = raw / scale; + const frac = raw % scale; + const fracText = frac.toString().padStart(decimals, "0").replace(/0+$/, ""); + return fracText ? `${whole}.${fracText}` : whole.toString(); +} + +async function erc20Balance(rpcUrl, token, holder) { + const [balance, decimals] = await Promise.all([ + rpcCall(rpcUrl, "eth_call", [{ to: token, data: `0x70a08231${padAddress(holder)}` }, "latest"]), + rpcCall(rpcUrl, "eth_call", [{ to: token, data: "0x313ce567" }, "latest"]), + ]); + const raw = balance.ok ? bigintFromHex(balance.result) : 0n; + const dec = decimals.ok ? Number(bigintFromHex(decimals.result)) : 18; + return { + ok: balance.ok, + raw: raw.toString(), + units: decimalUnits(raw, Number.isFinite(dec) ? dec : 18), + decimals: Number.isFinite(dec) ? dec : 18, + error: balance.ok ? undefined : balance.error, + }; +} + +async function nativeBalance(rpcUrl, holder) { + const balance = await rpcCall(rpcUrl, "eth_getBalance", [holder, "latest"]); + const raw = balance.ok ? bigintFromHex(balance.result) : 0n; + return { + ok: balance.ok, + raw: raw.toString(), + units: decimalUnits(raw, 18), + error: balance.ok ? undefined : balance.error, + }; +} + +async function buildEthereumSourceInventory() { + const rpcUrl = rpcByChain[1]; + const native = await nativeBalance(rpcUrl, deployer); + const tokens = await Promise.all(ethereumSourceTokens.map(async (token) => { + const balance = await erc20Balance(rpcUrl, token.address, deployer); + return { + ...token, + balance: balance.units, + balanceRaw: balance.raw, + balanceStatus: BigInt(balance.raw || "0") > 0n ? "present" : "zero", + error: balance.error, + }; + })); + return { + chainId: 1, + network: "Ethereum Mainnet", + deployer, + native: { + symbol: "ETH", + balance: native.units, + balanceRaw: native.raw, + role: "mainnet_transaction_gas_do_not_fully_drain", + }, + tokens, + interpretation: [ + "Ethereum portfolio value is not the same as immediately spendable cross-chain gas.", + "Keep enough ETH for Mainnet approvals, swaps, and liquidity/stability events.", + "Use USDC/USDT first as official quote capital; use LINK/XAUt only after a live route quote proves acceptable output.", + "Treat cWUSDC as pair-side/evidence inventory unless a real public route converts it into the exact official token needed.", + ], + }; +} + +async function gasPrice(rpcUrl, chainId) { + if (!rpcUrl) return { ok: false, raw: "0", units: "0", error: "missing_rpc" }; + if (gasPriceCache.has(chainId)) return gasPriceCache.get(chainId); + const result = await rpcCall(rpcUrl, "eth_gasPrice", []); + const raw = result.ok ? bigintFromHex(result.result) : 0n; + const payload = { + ok: result.ok, + raw: raw.toString(), + gwei: decimalUnits(raw, 9), + error: result.ok ? undefined : result.error, + }; + gasPriceCache.set(chainId, payload); + return payload; +} + +function table(headers, rows) { + return [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...rows.map((row) => `| ${row.map((cell) => String(cell ?? "").replace(/\|/g, "\\|")).join(" | ")} |`), + ].join("\n"); +} + +function readJsonIfExists(path, fallback = null) { + try { + return JSON.parse(readFileSync(path, "utf8")); + } catch { + return fallback; + } +} + +function readEnvValue(...keys) { + for (const key of keys) { + if (process.env[key]) return process.env[key].trim(); + } + for (const file of envFiles) { + let text = ""; + try { + text = readFileSync(file, "utf8"); + } catch { + continue; + } + for (const key of keys) { + const match = text.match(new RegExp(`^${key}=([^\\n#]*)`, "m")); + if (match?.[1]) return match[1].trim().replace(/^['"]|['"]$/g, ""); + } + } + return ""; +} + +const base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + +function base58Encode(bytes) { + let value = BigInt(`0x${Buffer.from(bytes).toString("hex") || "0"}`); + let output = ""; + while (value > 0n) { + const remainder = Number(value % 58n); + output = `${base58Alphabet[remainder]}${output}`; + value /= 58n; + } + let leadingZeroes = 0; + for (const byte of bytes) { + if (byte !== 0) break; + leadingZeroes += 1; + } + return `${"1".repeat(leadingZeroes)}${output || ""}`; +} + +function base58Decode(text) { + let value = 0n; + for (const char of text) { + const index = base58Alphabet.indexOf(char); + if (index < 0) throw new Error(`invalid_base58_char_${char}`); + value = value * 58n + BigInt(index); + } + let hex = value.toString(16); + if (hex.length % 2) hex = `0${hex}`; + const decoded = hex ? Buffer.from(hex, "hex") : Buffer.alloc(0); + const leading = [...text].findIndex((char) => char !== "1"); + const zeroCount = leading < 0 ? text.length : leading; + return Buffer.concat([Buffer.alloc(zeroCount), decoded]); +} + +function solanaWalletFromConfig() { + const explicit = readEnvValue("SOLANA_DEPLOYER_ADDRESS", "SOLANA_WALLET_ADDRESS", "SOLANA_PUBLIC_KEY"); + if (explicit) return { address: explicit, source: "env_public_key" }; + + const keypairPath = readEnvValue("SOLANA_KEYPAIR_PATH"); + if (keypairPath) { + try { + const keypair = JSON.parse(readFileSync(keypairPath, "utf8")); + if (Array.isArray(keypair) && keypair.length >= 64) { + return { address: base58Encode(Buffer.from(keypair.slice(32, 64))), source: "SOLANA_KEYPAIR_PATH_public_key" }; + } + } catch { + // Fall through to private-key decode if present. + } + } + + const privateKey = readEnvValue("PRIVATE_KEY_SOLANA_DEPLOYER", "SOLANA_PRIVATE_KEY"); + if (privateKey) { + try { + const decoded = base58Decode(privateKey); + if (decoded.length >= 64) return { address: base58Encode(decoded.subarray(32, 64)), source: "solana_private_key_public_half" }; + } catch { + // Keep address gated if the value is a seed-only key. + } + } + return { address: "", source: "missing" }; +} + +function tronWalletFromConfig() { + const explicit = readEnvValue("TRON_DEPLOYER_ADDRESS", "TRON_WALLET_ADDRESS", "TRON_PUBLIC_ADDRESS", "TRON_ACCOUNT_ADDRESS"); + if (explicit) return { address: explicit, source: "env_tron_address" }; + const ethAddress = deployer.replace(/^0x/i, ""); + if (/^[0-9a-fA-F]{40}$/.test(ethAddress)) { + const payload = Buffer.from(`41${ethAddress}`, "hex"); + const checksum = createHash("sha256").update(createHash("sha256").update(payload).digest()).digest().subarray(0, 4); + return { address: base58Encode(Buffer.concat([payload, checksum])), source: "derived_from_evm_deployer_address" }; + } + return { address: "", source: "missing" }; +} + +function xrplWalletFromConfig() { + const explicit = readEnvValue("XRPL_DEPLOYER_ADDRESS", "XRP_DEPLOYER_ADDRESS", "XRPL_WALLET_ADDRESS", "XRP_WALLET_ADDRESS", "XRPL_ACCOUNT"); + return explicit ? { address: explicit, source: "env_xrpl_address" } : { address: "", source: "missing" }; +} + +async function solanaNativeBalance(address) { + if (!address) return { ok: false, units: "address_required", raw: "0", error: "missing_solana_address" }; + const rpcUrl = readEnvValue("SOLANA_RPC_URL") || "https://solana-rpc.publicnode.com"; + const result = await rpcCall(rpcUrl, "getBalance", [address]); + const lamports = result.ok ? BigInt(result.result?.value ?? 0) : 0n; + return { + ok: result.ok, + raw: lamports.toString(), + units: decimalUnits(lamports, 9), + error: result.ok ? undefined : result.error, + }; +} + +async function tronNativeBalance(address) { + if (!address) return { ok: false, units: "address_required", raw: "0", error: "missing_tron_address" }; + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 12_000); + try { + const headers = { "content-type": "application/json" }; + const apiKey = readEnvValue("TRONGRID_API_KEY"); + if (apiKey) headers["TRON-PRO-API-KEY"] = apiKey; + const response = await fetch("https://api.trongrid.io/wallet/getaccount", { + method: "POST", + headers, + body: JSON.stringify({ address, visible: true }), + signal: controller.signal, + }); + const json = await response.json(); + const sun = BigInt(json.balance ?? 0); + return { ok: response.ok, raw: sun.toString(), units: decimalUnits(sun, 6), error: response.ok ? undefined : JSON.stringify(json) }; + } catch (error) { + return { ok: false, raw: "0", units: "0", error: error.message }; + } finally { + clearTimeout(timeout); + } +} + +async function xrplNativeBalance(address) { + if (!address) return { ok: false, units: "address_required", raw: "0", error: "missing_xrpl_address" }; + const result = await rpcCall(readEnvValue("XRPL_RPC_URL") || "https://xrplcluster.com", "account_info", [{ account: address, ledger_index: "validated" }]); + const drops = result.ok ? BigInt(result.result?.account_data?.Balance ?? 0) : 0n; + return { + ok: result.ok, + raw: drops.toString(), + units: decimalUnits(drops, 6), + error: result.ok ? undefined : result.error, + }; +} + +function networkHealth(health, network) { + return (health?.checks ?? []).find((row) => row.network === network) ?? null; +} + +function classifyFundingPath(detail, token, native) { + const chainId = Number(detail.chainId); + const addressKey = `${chainId}:${String(detail.address ?? "").toLowerCase()}`; + const hasToken = BigInt(token.raw || "0") > 0n; + const hasGas = BigInt(native.raw || "0") > 0n; + const isOfficialQuoteAsset = officialQuoteAssets.has(addressKey); + const canBridge = bridgeCapableChains.has(chainId); + const canProtocolink = protocolinkCandidateChains.has(chainId); + + if (hasToken && detail.category === "configured_or_indexed_pools_zero_tvl") { + return { + fundingPath: "seed_existing_visible_pool_from_deployer_balance", + fundingPathStatus: hasGas ? "executable_after_operator_approval" : "native_gas_topup_required", + assetClass: isOfficialQuoteAsset ? "official_quote_asset" : "repo_or_wrapped_asset", + protocolinkUse: "not_required_for_seed; optional for pre-seed rebalance quote", + }; + } + + if (hasToken && detail.category === "no_visible_pool_binding") { + return { + fundingPath: "create_or_bind_pool_then_seed_from_deployer_balance", + fundingPathStatus: hasGas ? "pool_binding_required_before_funding" : "native_gas_and_pool_binding_required", + assetClass: isOfficialQuoteAsset ? "official_quote_asset" : "repo_or_wrapped_asset", + protocolinkUse: "not_required_until pool exists; optional to rebalance paired side", + }; + } + + if (isOfficialQuoteAsset) { + return { + fundingPath: canProtocolink ? "protocolink_swap_candidate_for_non_mintable_quote_asset" : "external_quote_asset_required", + fundingPathStatus: canProtocolink ? "requires_live_route_quote_source_asset_and_min_out" : "external_funding_required", + assetClass: "official_quote_asset", + protocolinkUse: canProtocolink + ? "use only after live quote proves deployer-held source asset converts into this exact token" + : "unsupported_by_current_protocolink_candidate_set", + }; + } + + if (canBridge) { + return { + fundingPath: "bridge_or_destination_mint_repo_asset_then_seed", + fundingPathStatus: hasGas ? "bridge_or_mint_route_required" : "native_gas_topup_then_bridge_or_mint", + assetClass: "repo_or_wrapped_asset", + protocolinkUse: "optional only if a public swap route beats bridge/mint for the needed asset", + }; + } + + return { + fundingPath: "manual_asset_source_required", + fundingPathStatus: hasGas ? "asset_source_required" : "native_gas_and_asset_source_required", + assetClass: "unknown_or_unclassified_asset", + protocolinkUse: "route support not classified", + }; +} + +function gasUnitsForFundingPath(fundingPath) { + const policy = { + seed_existing_visible_pool_from_deployer_balance: { + oneTimeGasUnits: 650_000, + stabilityGasUnitsPerCycle: 260_000, + rationale: "approve plus add/sync/validation transaction budget for already visible pools", + }, + create_or_bind_pool_then_seed_from_deployer_balance: { + oneTimeGasUnits: 1_350_000, + stabilityGasUnitsPerCycle: 320_000, + rationale: "factory create/bind plus seed transaction budget", + }, + bridge_or_destination_mint_repo_asset_then_seed: { + oneTimeGasUnits: 1_150_000, + stabilityGasUnitsPerCycle: 300_000, + rationale: "bridge-or-mint plus destination seed transaction budget", + }, + protocolink_swap_candidate_for_non_mintable_quote_asset: { + oneTimeGasUnits: 900_000, + stabilityGasUnitsPerCycle: 360_000, + rationale: "Protocolink route execution plus seed/rebalance budget after live quote", + }, + external_quote_asset_required: { + oneTimeGasUnits: 450_000, + stabilityGasUnitsPerCycle: 260_000, + rationale: "post-funding seed/rebalance budget; asset funding is out of band", + }, + manual_asset_source_required: { + oneTimeGasUnits: 650_000, + stabilityGasUnitsPerCycle: 260_000, + rationale: "manual source then seed/rebalance budget", + }, + }; + return policy[fundingPath] ?? { + oneTimeGasUnits: 650_000, + stabilityGasUnitsPerCycle: 260_000, + rationale: "default seed/rebalance budget", + }; +} + +function buildGasPlan({ chainId, native, gas, fundingPath }) { + const units = gasUnitsForFundingPath(fundingPath); + const gasPriceWei = BigInt(gas.raw || "0"); + const oneTimeRaw = BigInt(units.oneTimeGasUnits) * gasPriceWei; + const stabilityRaw = BigInt(units.stabilityGasUnitsPerCycle) * BigInt(stabilityCycles) * gasPriceWei; + const subtotalRaw = oneTimeRaw + stabilityRaw; + const requiredRaw = (subtotalRaw * gasSafetyBps + 9_999n) / 10_000n; + const nativeRaw = BigInt(native.raw || "0"); + const shortfallRaw = requiredRaw > nativeRaw ? requiredRaw - nativeRaw : 0n; + const surplusRaw = nativeRaw > requiredRaw ? nativeRaw - requiredRaw : 0n; + return { + nativeSymbol: nativeSymbolsByChain[chainId] ?? "native", + gasPriceWei: gas.raw, + gasPriceGwei: gas.gwei, + oneTimeGasUnits: units.oneTimeGasUnits, + stabilityCycles, + stabilityGasUnitsPerCycle: units.stabilityGasUnitsPerCycle, + safetyBps: Number(gasSafetyBps), + requiredNativeRaw: requiredRaw.toString(), + requiredNative: decimalUnits(requiredRaw, 18), + oneTimeNative: decimalUnits(oneTimeRaw, 18), + stabilityNative: decimalUnits(stabilityRaw, 18), + nativeBalanceRaw: native.raw, + nativeBalance: native.units, + shortfallNativeRaw: shortfallRaw.toString(), + shortfallNative: decimalUnits(shortfallRaw, 18), + surplusNativeRaw: surplusRaw.toString(), + surplusNative: decimalUnits(surplusRaw, 18), + status: shortfallRaw === 0n ? "gas_budget_satisfied" : "gas_budget_shortfall", + rationale: units.rationale, + gasPriceError: gas.error, + }; +} + +async function buildNonEvmFundingRequirements() { + const health = readJsonIfExists(nonEvmHealthPath, null); + const laneStatus = readJsonIfExists(nonEvmLaneStatusPath, null); + const lanes = laneStatus?.lanes ?? {}; + const solanaWallet = solanaWalletFromConfig(); + const tronWallet = tronWalletFromConfig(); + const xrplWallet = xrplWalletFromConfig(); + const [solanaBalance, tronBalance, xrplBalance] = await Promise.all([ + solanaNativeBalance(solanaWallet.address), + tronNativeBalance(tronWallet.address), + xrplNativeBalance(xrplWallet.address), + ]); + return [ + { + network: "Solana", + target: "mainnet-beta", + includedInFundingScope: true, + walletAddress: solanaWallet.address || "missing", + walletSource: solanaWallet.source, + currentBalanceStatus: solanaBalance.ok ? `${solanaBalance.units} SOL` : solanaBalance.units, + currentBalanceRaw: solanaBalance.raw, + nativeGasAsset: "SOL", + bridgeOrWrappedAsset: lanes.solana?.destinationAsset?.symbol ?? "cWAUSDT", + requiredFunding: "TBD", + status: solanaWallet.address ? "spl_mint_inventory_and_minimum_funding_targets_required" : "wallet_and_spl_mint_inventory_required", + networkHealth: networkHealth(health, "Solana"), + requirements: [ + solanaWallet.address ? "Canonical Solana deployer public key is bound for native SOL checks." : "Bind canonical Solana custody wallet/public key for funding checks.", + "Populate SPL mint addresses in config/solana-gru-bridge-lineup.json.", + "Check SOL gas/rent balance and SPL token balances for each promoted cW* mint.", + "Set minimum pool/rent/execution funding targets per Solana venue before declaring positive liquidity.", + ], + }, + { + network: "Tron", + target: "mainnet", + includedInFundingScope: true, + walletAddress: tronWallet.address || "missing", + walletSource: tronWallet.source, + currentBalanceStatus: tronBalance.ok ? `${tronBalance.units} TRX` : tronBalance.units, + currentBalanceRaw: tronBalance.raw, + nativeGasAsset: "TRX", + bridgeOrWrappedAsset: "TronAdapter relay inventory", + requiredFunding: "TBD", + status: tronWallet.source === "derived_from_evm_deployer_address" ? "derived_tron_wallet_needs_operator_confirmation_and_asset_inventory" : "native_tron_wallet_and_asset_inventory_required", + networkHealth: networkHealth(health, "Tron"), + requirements: [ + tronWallet.source === "derived_from_evm_deployer_address" ? "Confirm whether the EVM deployer-derived Tron address is the canonical native Tron deployer." : "Bind canonical Tron custody wallet address.", + "Check TRX energy/bandwidth funding and any native TRC-20 inventory needed for relay settlement.", + "Promote or document native Tron-side contracts/assets before treating Tron as liquidity-ready.", + "Close Chain 138 TronAdapter source/publication evidence separately from native Tron funding.", + ], + }, + { + network: "XRPL", + target: "mainnet", + includedInFundingScope: true, + walletAddress: xrplWallet.address || "missing", + walletSource: xrplWallet.source, + currentBalanceStatus: xrplBalance.ok ? `${xrplBalance.units} XRP` : xrplBalance.units, + currentBalanceRaw: xrplBalance.raw, + nativeGasAsset: "XRP", + bridgeOrWrappedAsset: lanes.xrpl?.wrappedAsset?.address ? `wXRP ${lanes.xrpl.wrappedAsset.address}` : "wXRP", + requiredFunding: "TBD", + status: xrplWallet.address ? "xrpl_reserve_trustline_and_bridge_inventory_required" : "xrpl_wallet_reserve_and_bridge_inventory_required", + networkHealth: networkHealth(health, "XRPL"), + requirements: [ + xrplWallet.address ? "Canonical XRPL account is bound for native XRP checks." : "Bind canonical XRPL account and optional destination tag policy.", + "Check XRP reserve, transfer-fee cushion, and any trustline/issuer requirements.", + "Check Chain 138 wXRP inventory and MintBurnController authorization readiness.", + "Close Chain 138 XRPLAdapter/wXRP/MintBurnController source-publication evidence separately from XRPL funding.", + ], + }, + { + network: "Other non-EVM majors", + target: "BTC/SOL/XRP/ADA/XLM/HBAR/SUI/TON class expansion", + includedInFundingScope: true, + walletAddress: "per-network wallet not bound", + walletSource: "missing", + currentBalanceStatus: "not_supported_by_current_balance_planner", + nativeGasAsset: "varies", + bridgeOrWrappedAsset: "not bound", + requiredFunding: "TBD", + status: "adapter_wallet_asset_and_venue_requirements_not_yet_bound", + networkHealth: null, + requirements: [ + "Create per-network custody wallet and balance checker.", + "Bind asset IDs/mints/trustlines/program IDs in repo config.", + "Define minimum native gas/rent/reserve and liquidity targets per network.", + "Add lane evidence before including the network in tracker-facing liquidity claims.", + ], + }, + ]; +} + +const readiness = JSON.parse(readFileSync(readinessPath, "utf8")); +const details = readiness.blockerInventory?.liquidityMissingDetails ?? []; +const rows = []; + +for (const detail of details) { + const chainId = Number(detail.chainId); + const rpcUrl = rpcByChain[chainId]; + const native = rpcUrl ? await nativeBalance(rpcUrl, deployer) : { ok: false, raw: "0", units: "0", error: "missing_rpc" }; + const token = rpcUrl && detail.address?.startsWith("0x") + ? await erc20Balance(rpcUrl, detail.address, deployer) + : { ok: false, raw: "0", units: "0", decimals: 18, error: "missing_token_or_rpc" }; + const hasGas = BigInt(native.raw || "0") > 0n; + const hasToken = BigInt(token.raw || "0") > 0n; + const funding = classifyFundingPath(detail, token, native); + const gas = await gasPrice(rpcUrl, chainId); + const gasPlan = buildGasPlan({ chainId, native, gas, fundingPath: funding.fundingPath }); + let status = "token_balance_gated"; + if (detail.category === "no_visible_pool_binding") status = hasToken ? "pool_binding_gated" : "pool_binding_and_token_balance_gated"; + if (detail.category === "configured_or_indexed_pools_zero_tvl" && hasToken) status = "fundable_token_balance_present"; + if (!hasGas) status = `${status}+gas_gated`; + + rows.push({ + chainId, + symbol: detail.symbol, + address: detail.address, + category: detail.category, + poolCount: detail.poolCount, + zeroTvlPoolCount: detail.zeroTvlPoolCount, + nativeBalance: native.units, + tokenBalance: token.units, + tokenBalanceRaw: token.raw, + status, + ...funding, + gasPlan, + rpcError: native.error || token.error, + }); +} + +const gasBudgetRows = rows.map((row) => ({ + chainId: row.chainId, + symbol: row.symbol, + nativeSymbol: row.gasPlan.nativeSymbol, + fundingPath: row.fundingPath, + requiredNative: row.gasPlan.requiredNative, + nativeBalance: row.gasPlan.nativeBalance, + shortfallNative: row.gasPlan.shortfallNative, + status: row.gasPlan.status, +})); + +const chainGasBudgetMap = new Map(); +for (const row of rows) { + const existing = chainGasBudgetMap.get(row.chainId) ?? { + chainId: row.chainId, + nativeSymbol: row.gasPlan.nativeSymbol, + gasPriceGwei: row.gasPlan.gasPriceGwei, + requiredNativeRaw: 0n, + nativeBalanceRaw: BigInt(row.gasPlan.nativeBalanceRaw || "0"), + rows: 0, + symbols: [], + }; + existing.requiredNativeRaw += BigInt(row.gasPlan.requiredNativeRaw || "0"); + existing.rows += 1; + existing.symbols.push(row.symbol); + chainGasBudgetMap.set(row.chainId, existing); +} + +const chainGasBudgetRows = [...chainGasBudgetMap.values()] + .sort((a, b) => Number(a.chainId) - Number(b.chainId)) + .map((row) => { + const shortfallRaw = row.requiredNativeRaw > row.nativeBalanceRaw ? row.requiredNativeRaw - row.nativeBalanceRaw : 0n; + const surplusRaw = row.nativeBalanceRaw > row.requiredNativeRaw ? row.nativeBalanceRaw - row.requiredNativeRaw : 0n; + return { + chainId: row.chainId, + nativeSymbol: row.nativeSymbol, + gasPriceGwei: row.gasPriceGwei, + rows: row.rows, + symbols: [...new Set(row.symbols)].join(", "), + requiredNativeRaw: row.requiredNativeRaw.toString(), + requiredNative: decimalUnits(row.requiredNativeRaw, 18), + nativeBalanceRaw: row.nativeBalanceRaw.toString(), + nativeBalance: decimalUnits(row.nativeBalanceRaw, 18), + shortfallNativeRaw: shortfallRaw.toString(), + shortfallNative: decimalUnits(shortfallRaw, 18), + surplusNativeRaw: surplusRaw.toString(), + surplusNative: decimalUnits(surplusRaw, 18), + status: shortfallRaw === 0n ? "chain_gas_budget_satisfied" : "chain_gas_budget_shortfall", + }; + }); + +const etherscanStability = { + purpose: "off_chain_indexing_stability_for_token_trackers", + boundary: "Etherscan/token trackers index public on-chain facts; gas only funds the transactions that create and refresh those facts.", + requiredOnChainFacts: [ + "Verified token contract and correct metadata/logoURI publication path.", + "Visible/indexable pool contract for each promoted token pair.", + "Positive, non-dust liquidity on the visible pool.", + "Recent real swap or liquidity-change events when tracker freshness is required.", + "Official quote-token evidence when claiming cW*/USDC or c*/USDC peg support.", + ], + gasBudgetRole: [ + "Create or bind missing pools.", + "Approve and seed liquidity.", + "Execute Protocolink/bridge/mint/swap actions when needed.", + "Run recurring stability/rebalance transactions so public indexers observe fresh state.", + ], + cannotBeSolvedByGasAlone: [ + "A missing verified-source listing.", + "A token logo or page-info package that is not published at the expected endpoint.", + "A pool that exists only in internal config but is not visible/indexable on the public chain.", + "A c* balance that has not been bridged or swapped into the exact official quote asset required by the tracker claim.", + ], + readinessStatus: chainGasBudgetRows.some((row) => row.status === "chain_gas_budget_shortfall") + ? "on_chain_stability_transactions_gas_shortfall" + : "on_chain_stability_transactions_gas_budget_satisfied", +}; + +const coffeeMoneyExecutableRows = rows.filter((row) => [ + "seed_existing_visible_pool_from_deployer_balance", + "create_or_bind_pool_then_seed_from_deployer_balance", +].includes(row.fundingPath)); +const coffeeMoneyGasShortfallChains = chainGasBudgetRows.filter((row) => row.status === "chain_gas_budget_shortfall"); +const coffeeMoneyPlan = { + purpose: "start_visible_indexable_liquidity_with_coffee_money", + operatorObservedUsdAvailable: coffeeMoneyUsdAvailable, + liquidityDustUsdPerRow: coffeeMoneyLiquidityUsdPerRow, + immediatelyUsefulRows: coffeeMoneyExecutableRows.length, + estimatedLiquidityDustUsd: Number((coffeeMoneyExecutableRows.length * coffeeMoneyLiquidityUsdPerRow).toFixed(2)), + gasShortfallChains: coffeeMoneyGasShortfallChains.map((row) => ({ + chainId: row.chainId, + nativeSymbol: row.nativeSymbol, + shortfallNative: row.shortfallNative, + symbols: row.symbols, + })), + assessment: coffeeMoneyUsdAvailable >= 35 + ? "enough_to_start_coffee_money_liquidity_if_routed_into_missing_native_gas" + : "not_enough_for_full_coffee_money_set", + recommendedOrder: [ + "Top up native gas on shortfall chains first: Optimism, BSC, Polygon, Arbitrum.", + "Seed existing visible pools that already have deployer token balance.", + "Create or bind missing visible pools for rows that already have deployer token balance.", + "Run tiny real swaps/liquidity events so Etherscan/tracker indexers see fresh public facts.", + "Leave Protocolink-only official quote-asset rows for last unless a live quote proves conversion from current deployer assets.", + ], + boundary: "This starts indexable public liquidity evidence; it does not create deep market depth or a large 1:1 peg reserve.", +}; + +const counts = rows.reduce((acc, row) => { + acc[row.status] = (acc[row.status] || 0) + 1; + return acc; +}, {}); + +const nonEvmFundingRequirements = await buildNonEvmFundingRequirements(); +const ethereumSourceInventory = await buildEthereumSourceInventory(); + +const payload = { + generatedAt: new Date().toISOString(), + mode: "read_only_no_broadcast", + deployer, + sourceReadiness: "reports/status/token-aggregation-adoption-readiness-live-20260509.json", + summary: { + rows: rows.length, + nonEvmFundingRequirementRows: nonEvmFundingRequirements.length, + fundableTokenBalancePresent: rows.filter((row) => row.status.startsWith("fundable_token_balance_present")).length, + poolBindingGated: rows.filter((row) => row.status.includes("pool_binding")).length, + gasGated: rows.filter((row) => row.status.includes("gas_gated")).length, + protocolinkSwapCandidates: rows.filter((row) => row.fundingPath === "protocolink_swap_candidate_for_non_mintable_quote_asset").length, + bridgeOrMintCandidates: rows.filter((row) => row.fundingPath === "bridge_or_destination_mint_repo_asset_then_seed").length, + poolCreateOrBindFirst: rows.filter((row) => row.fundingPath === "create_or_bind_pool_then_seed_from_deployer_balance").length, + seedExistingVisiblePoolNow: rows.filter((row) => row.fundingPath === "seed_existing_visible_pool_from_deployer_balance").length, + gasBudgetSatisfied: rows.filter((row) => row.gasPlan.status === "gas_budget_satisfied").length, + gasBudgetShortfall: rows.filter((row) => row.gasPlan.status === "gas_budget_shortfall").length, + chainGasBudgetSatisfied: chainGasBudgetRows.filter((row) => row.status === "chain_gas_budget_satisfied").length, + chainGasBudgetShortfall: chainGasBudgetRows.filter((row) => row.status === "chain_gas_budget_shortfall").length, + gasPolicy: { + stabilityCycles, + gasSafetyBps: Number(gasSafetyBps), + }, + statusCounts: counts, + }, + rows, + gasBudgetRows, + chainGasBudgetRows, + etherscanStability, + coffeeMoneyPlan, + ethereumSourceInventory, + nonEvmFundingRequirements, +}; + +const md = [ + "# Token-Aggregation Liquidity Gap Funding Plan", + "", + `- Generated: \`${payload.generatedAt}\``, + `- Mode: \`${payload.mode}\``, + `- Deployer: \`${deployer}\``, + "", + table(["Metric", "Count"], Object.entries(payload.summary).map(([key, value]) => [key, typeof value === "object" ? JSON.stringify(value) : value])), + "", + "## Rows", + "", + table( + ["Chain", "Symbol", "Category", "Pools", "Native", "Token balance", "Status", "Funding path", "Gas shortfall"], + rows.map((row) => [row.chainId, row.symbol, row.category, row.poolCount, row.nativeBalance, row.tokenBalance, row.status, row.fundingPath, `${row.gasPlan.shortfallNative} ${row.gasPlan.nativeSymbol}`]), + ), + "", + "### Chain-Level Gas Budget", + "", + "This aggregates all planned row actions by network because the same deployer native balance pays every deployment, seed, swap, bridge, and stability transaction on that chain.", + "", + table( + ["Chain", "Symbols", "Native", "Rows", "Gas price gwei", "Required", "Balance", "Shortfall", "Status"], + chainGasBudgetRows.map((row) => [ + row.chainId, + row.symbols, + row.nativeSymbol, + row.rows, + row.gasPriceGwei, + `${row.requiredNative} ${row.nativeSymbol}`, + `${row.nativeBalance} ${row.nativeSymbol}`, + `${row.shortfallNative} ${row.nativeSymbol}`, + row.status, + ]), + ), + "", + "## Gas Budget", + "", + `Gas is budgeted for one deployment/seed action plus \`${stabilityCycles}\` continual stability cycles, with a \`${Number(gasSafetyBps) / 100}%\` safety multiplier. Etherscan/token-tracker stability itself is off-chain indexing; gas only funds the on-chain facts that Etherscan can index.`, + "", + table( + ["Chain", "Symbol", "Native", "Gas price gwei", "One-time gas", "Stability gas/cycle", "Required", "Balance", "Shortfall", "Status"], + rows.map((row) => [ + row.chainId, + row.symbol, + row.gasPlan.nativeSymbol, + row.gasPlan.gasPriceGwei, + row.gasPlan.oneTimeGasUnits, + row.gasPlan.stabilityGasUnitsPerCycle, + `${row.gasPlan.requiredNative} ${row.gasPlan.nativeSymbol}`, + `${row.gasPlan.nativeBalance} ${row.gasPlan.nativeSymbol}`, + `${row.gasPlan.shortfallNative} ${row.gasPlan.nativeSymbol}`, + row.gasPlan.status, + ]), + ), + "", + "## Etherscan Stability Boundary", + "", + `- Purpose: \`${etherscanStability.purpose}\``, + `- Status: \`${etherscanStability.readinessStatus}\``, + `- Boundary: ${etherscanStability.boundary}`, + "", + "Required on-chain facts for Etherscan/tracker stability:", + "", + ...etherscanStability.requiredOnChainFacts.map((item) => `- ${item}`), + "", + "Gas budget role:", + "", + ...etherscanStability.gasBudgetRole.map((item) => `- ${item}`), + "", + "Cannot be solved by gas alone:", + "", + ...etherscanStability.cannotBeSolvedByGasAlone.map((item) => `- ${item}`), + "", + "## Coffee-Money Start Plan", + "", + `- Operator-observed deployer value available: \`$${coffeeMoneyPlan.operatorObservedUsdAvailable}\``, + `- Assessment: \`${coffeeMoneyPlan.assessment}\``, + `- Immediately useful rows: \`${coffeeMoneyPlan.immediatelyUsefulRows}\``, + `- Planning dust liquidity: \`$${coffeeMoneyPlan.liquidityDustUsdPerRow}\` per row`, + `- Estimated dust liquidity: \`$${coffeeMoneyPlan.estimatedLiquidityDustUsd}\``, + `- Boundary: ${coffeeMoneyPlan.boundary}`, + "", + "Native gas shortfall chains to fill first:", + "", + table( + ["Chain", "Symbols", "Shortfall"], + coffeeMoneyPlan.gasShortfallChains.map((row) => [row.chainId, row.symbols, `${row.shortfallNative} ${row.nativeSymbol}`]), + ), + "", + "Recommended order:", + "", + ...coffeeMoneyPlan.recommendedOrder.map((item) => `- ${item}`), + "", + "### Ethereum Source Inventory", + "", + `- Native ETH: \`${ethereumSourceInventory.native.balance}\``, + "", + table( + ["Token", "Balance", "Role", "Status"], + ethereumSourceInventory.tokens.map((token) => [token.symbol, token.balance, token.role, token.balanceStatus]), + ), + "", + "Interpretation:", + "", + ...ethereumSourceInventory.interpretation.map((item) => `- ${item}`), + "", + "## Funding Path Interpretation", + "", + "- `seed_existing_visible_pool_from_deployer_balance`: token and gas are present; only operator approval and pool-specific seeding rules remain.", + "- `create_or_bind_pool_then_seed_from_deployer_balance`: token and gas are present, but no visible/indexable pool binding exists yet.", + "- `bridge_or_destination_mint_repo_asset_then_seed`: repo-controlled c*/cW* inventory can be moved or minted once the bridge/mint path and destination gas are ready.", + "- `protocolink_swap_candidate_for_non_mintable_quote_asset`: the needed asset is an official/non-mintable quote asset; Protocolink can help only after a live quote proves a deployer-held source asset converts into the exact target token with acceptable minOut.", + "- `external_quote_asset_required`: neither bridge nor Protocolink coverage is classified for that exact non-mintable quote asset.", + "", + "## Non-EVM Funding Requirements", + "", + "These networks are now part of funding scope. The planner resolves non-EVM deployer wallets where the repo can prove them, checks native gas balances where possible, and leaves funding amounts `TBD` until asset IDs and minimum venue targets are bound.", + "", + table( + ["Network", "Target", "Wallet", "Source", "Native gas", "Current balance", "Required funding", "Status"], + payload.nonEvmFundingRequirements.map((row) => [ + row.network, + row.target, + row.walletAddress, + row.walletSource, + row.nativeGasAsset, + row.currentBalanceStatus, + row.requiredFunding, + row.status, + ]), + ), + "", + "### Non-EVM Requirement Details", + "", + ...payload.nonEvmFundingRequirements.flatMap((row) => [ + `#### ${row.network}`, + "", + ...row.requirements.map((requirement) => `- ${requirement}`), + "", + ]), + "", + "## Execution Boundary", + "", + "This planner is read-only. It proves whether the deployer currently holds token and gas inventory for each liquidity gap. It does not create pools, add liquidity, approve tokens, bridge assets, or broadcast transactions.", +].join("\n"); + +mkdirSync(resolve(repoRoot, "reports/status"), { recursive: true }); +writeFileSync(jsonOut, `${JSON.stringify(payload, null, 2)}\n`); +writeFileSync(mdOut, `${md}\n`); +console.log(jsonOut); diff --git a/scripts/verify/reconcile-env-canonical.sh b/scripts/verify/reconcile-env-canonical.sh index 44bdcff6..d7c5c06c 100755 --- a/scripts/verify/reconcile-env-canonical.sh +++ b/scripts/verify/reconcile-env-canonical.sh @@ -32,7 +32,8 @@ FEE_COLLECTOR=0xF78246eB94c6CB14018E507E60661314E5f4C53f DEBT_REGISTRY=0x95BC4A997c0670d5DAC64d55cDf3769B53B63C28 POLICY_MANAGER=0x0C4FD27018130A00762a802f91a72D6a64a60F14 TOKEN_IMPLEMENTATION=0x0059e237973179146237aB49f1322E8197c22b21 -CCIPWETH9_BRIDGE_CHAIN138=0x9cba0D04Ae5f6f16e3C599025aB97a05c4A593d5 +# Alternate legacy deployment (do not use for ops): 0x9cba0D04Ae5f6f16e3C599025aB97a05c4A593d5 +CCIPWETH9_BRIDGE_CHAIN138=0xcacfd227A040002e49e2e01626363071324f820a CCIPWETH10_BRIDGE_CHAIN138=0xe0E93247376aa097dB308B92e6Ba36bA015535D0 LINK_TOKEN=0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03 CCIP_FEE_TOKEN=0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03 diff --git a/scripts/verify/run-all-validation.sh b/scripts/verify/run-all-validation.sh index 6045e1d4..4dc3a63d 100644 --- a/scripts/verify/run-all-validation.sh +++ b/scripts/verify/run-all-validation.sh @@ -3,6 +3,9 @@ # Use for CI or pre-deploy: dependencies, config files, optional genesis. # Usage: bash scripts/verify/run-all-validation.sh [--skip-genesis] # --skip-genesis: do not run validate-genesis.sh (default: run if smom-dbis-138 present). +# Optional: EI_MATRIX_ONCHAIN_AUDIT_CI=1 runs scripts/lib/ei_matrix_onchain_readiness_audit.py (needs +# ETHEREUM_MAINNET_RPC + RPC_URL_138 in .env). EI_MATRIX_ONCHAIN_AUDIT_CI_LIMIT default 120; 0 = full grid. +# Strict gate: set EI_MATRIX_AUDIT_MIN_MAINNET_RAW_CI / EI_MATRIX_AUDIT_MIN_138_RAW_CI. # Steps: dependencies, config files, cW* mesh matrix (if pair-discovery JSON exists), optional advisory non-EVM public health, genesis. set -euo pipefail @@ -170,6 +173,56 @@ run_summary_record_step "3d" "Non-EVM public network health" "success" "$((SECON step_done "$STEP_STARTED" echo "" +echo "3d1. d-bis.org CWUSDC Etherscan profile prereq URLs (advisory)..." +STEP_STARTED=$SECONDS +CWU_URLS="$SCRIPT_DIR/check-cwusdc-etherscan-prereq-urls.sh" +CWU_STATUS="skipped" +if [[ -x "$CWU_URLS" ]] && command -v curl &>/dev/null; then + if bash "$CWU_URLS"; then + log_ok "d-bis.org token-profile URLs OK (CWUSDC E2E prereq)" + CWU_STATUS="success" + else + echo " (advisory: one or more URLs not HTTP 200 — fix site or network; see CWUSDC_ETHERSCAN_E2E_RECOMMENDATIONS.md)" + CWU_STATUS="advisory_fail" + fi +else + echo " (skip: curl or $CWU_URLS missing)" +fi +run_summary_record_step "3d1" "CWUSDC d-bis URL prereqs" "$CWU_STATUS" "$((SECONDS - STEP_STARTED))" +step_done "$STEP_STARTED" +echo "" + +echo "3e. EI matrix on-chain readiness audit (optional)..." +STEP_STARTED=$SECONDS +EIM_STEP_STATUS="skipped" +if [[ "${EI_MATRIX_ONCHAIN_AUDIT_CI:-}" == "1" ]]; then + # shellcheck disable=SC1091 + source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" + if [[ -z "${ETHEREUM_MAINNET_RPC:-}" || -z "${RPC_URL_138:-}" ]]; then + echo " (skip: ETHEREUM_MAINNET_RPC or RPC_URL_138 unset — set RPCs in .env for CI gate)" + else + CI_LIMIT="${EI_MATRIX_ONCHAIN_AUDIT_CI_LIMIT:-120}" + CI_SHARD="${EI_MATRIX_ONCHAIN_AUDIT_CI_SHARD:-200}" + CI_WORKERS="${EI_MATRIX_ONCHAIN_AUDIT_CI_WORKERS:-2}" + MIN_M="${EI_MATRIX_AUDIT_MIN_MAINNET_RAW_CI:-0}" + MIN_138="${EI_MATRIX_AUDIT_MIN_138_RAW_CI:-0}" + JSON_CI="${EI_MATRIX_ONCHAIN_AUDIT_JSON_CI:-reports/status/ei-matrix-readiness-audit-ci.json}" + AUDIT_PY="$PROJECT_ROOT/scripts/lib/ei_matrix_onchain_readiness_audit.py" + EXTRA=(--shard-size "$CI_SHARD" --workers "$CI_WORKERS" --both --min-mainnet-raw "$MIN_M" --min-138-raw "$MIN_138" --json-out "$JSON_CI") + if [[ "$CI_LIMIT" != "0" ]]; then + EXTRA+=(--limit "$CI_LIMIT") + fi + python3 "$AUDIT_PY" "${EXTRA[@]}" || log_err "EI matrix on-chain audit failed (thresholds or RPC)" + log_ok "EI matrix on-chain audit OK ($JSON_CI)" + EIM_STEP_STATUS="success" + fi +else + echo " (skip: set EI_MATRIX_ONCHAIN_AUDIT_CI=1 to run; optional EI_MATRIX_ONCHAIN_AUDIT_CI_LIMIT=0 for full grid)" +fi +run_summary_record_step "3e" "EI matrix on-chain audit" "$EIM_STEP_STATUS" "$((SECONDS - STEP_STARTED))" +step_done "$STEP_STARTED" +echo "" + if [[ "$SKIP_GENESIS" == true ]]; then echo "4. Genesis — skipped (--skip-genesis)" run_summary_record_step "4" "Genesis (smom-dbis-138)" "skipped" "0" diff --git a/scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh b/scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh new file mode 100755 index 00000000..3f6ffa07 --- /dev/null +++ b/scripts/verify/run-cwusdc-provider-monitoring-snapshot.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +# Read-only cWUSDC provider propagation monitor. +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$PROJECT_ROOT" + +TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +JSON_OUT="reports/status/cwusdc-provider-monitoring-snapshot-latest.json" +MD_OUT="reports/status/cwusdc-provider-monitoring-snapshot-latest.md" +BUNDLE_DATE="${CWUSDC_EVIDENCE_BUNDLE_DATE:-$(date -u +%Y%m%d)}" + +pnpm cwusdc:etherscan-dossier +pnpm cwusdc:role-audit +pnpm cwusdc:provider-ci +pnpm cwusdc:doc-links +pnpm cwusdc:role-appendix +pnpm cwusdc:submission-prefill +CWUSDC_EVIDENCE_BUNDLE_DATE="$BUNDLE_DATE" pnpm cwusdc:evidence-bundle + +python3 - "$TS" "$JSON_OUT" "$MD_OUT" "$BUNDLE_DATE" <<'PY' +import json +import sys +from pathlib import Path + +ts = sys.argv[1] +json_out = Path(sys.argv[2]) +md_out = Path(sys.argv[3]) +bundle_date = sys.argv[4] + +def load(path): + p = Path(path) + return json.loads(p.read_text()) if p.exists() else {} + +dossier = load("reports/status/cwusdc-etherscan-value-dossier-latest.json") +dossier_readiness = dossier.get("readiness") or dossier.get("summary") or {} +provider_ci = load("reports/status/cwusdc-provider-readiness-ci-latest.json") +links = load("reports/status/cwusdc-institutional-doc-link-check-latest.json") +role_appendix = load("reports/status/cwusdc-role-deployment-appendix-latest.json") +payload = { + "schema": "cwusdc-provider-monitoring-snapshot/v1", + "generatedAt": ts, + "status": "success" if provider_ci.get("repoControlledPrereqsPassed") and links.get("status") == "pass" else "attention", + "readyForExternalSubmission": dossier_readiness.get("readyForExternalSubmission"), + "etherscanValueReady": dossier_readiness.get("etherscanValueReady"), + "coinGeckoPriceReady": dossier_readiness.get("coinGeckoPriceReady"), + "repoControlledPrereqsPassed": provider_ci.get("repoControlledPrereqsPassed"), + "externalBlockersAdvisory": provider_ci.get("externalBlockersAdvisory", []), + "docLinkStatus": links.get("status"), + "roleEventCount": role_appendix.get("eventCount"), + "artifacts": { + "dossier": "reports/status/cwusdc-etherscan-value-dossier-latest.json", + "providerCi": "reports/status/cwusdc-provider-readiness-ci-latest.json", + "docLinks": "reports/status/cwusdc-institutional-doc-link-check-latest.json", + "roleAppendix": "reports/status/cwusdc-role-deployment-appendix-latest.json", + "evidenceBundleSha256": f"reports/status/cwusdc-institutional-evidence-bundle-{bundle_date}.sha256", + }, +} +json_out.write_text(json.dumps(payload, indent=2) + "\n") +lines = [ + "# cWUSDC Provider Monitoring Snapshot", + "", + f"- Generated: `{payload['generatedAt']}`", + f"- Status: `{payload['status']}`", + f"- Ready for external submission: `{payload['readyForExternalSubmission']}`", + f"- Etherscan Value ready: `{payload['etherscanValueReady']}`", + f"- CoinGecko price ready: `{payload['coinGeckoPriceReady']}`", + f"- Repo-controlled prerequisites passed: `{payload['repoControlledPrereqsPassed']}`", + f"- Institutional doc link status: `{payload['docLinkStatus']}`", + f"- Role event count: `{payload['roleEventCount']}`", + f"- External advisory blockers: `{len(payload['externalBlockersAdvisory'])}`", +] +md_out.write_text("\n".join(lines) + "\n") +print(f"Wrote {json_out}") +print(f"Wrote {md_out}") +PY diff --git a/scripts/verify/run-cwusdc-provider-nonmanual-checks.sh b/scripts/verify/run-cwusdc-provider-nonmanual-checks.sh new file mode 100755 index 00000000..e3c7d941 --- /dev/null +++ b/scripts/verify/run-cwusdc-provider-nonmanual-checks.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# Run all non-manual cWUSDC provider checks and build a handoff report. +# This script is public/read-only except for report files under reports/status/. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" + +STRICT_REPO=false +while [[ $# -gt 0 ]]; do + case "$1" in + --strict-repo) + STRICT_REPO=true + shift + ;; + -h|--help) + sed -n '1,4p' "$0" + echo " --strict-repo Exit non-zero if repo-controlled URL prerequisites fail." + exit 0 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac +done + +PREREQ_JSON="reports/status/cwusdc-etherscan-prereq-urls-latest.json" +PREREQ_MD="reports/status/cwusdc-etherscan-prereq-urls-latest.md" +TRACKERS_JSON="reports/status/cwusdc-external-trackers-live-latest.json" +TRACKERS_MD="reports/status/cwusdc-external-trackers-live-latest.md" +LIQUIDITY_JSON="reports/status/token-aggregation-liquidity-gap-funding-plan-latest.json" +CMC_SANITY_JSON="reports/status/cmc-provider-report-sanity-latest.json" +HANDOFF_JSON="reports/status/cwusdc-provider-handoff-latest.json" +HANDOFF_MD="reports/status/cwusdc-provider-handoff-latest.md" + +echo "=== cWUSDC provider non-manual checks ===" +echo "Mode: public/read-only, report writes only" +echo "" + +REPO_STATUS=0 +echo "1. Repo-controlled Etherscan prerequisite URLs..." +if ! bash "$SCRIPT_DIR/check-cwusdc-etherscan-prereq-urls.sh" --json-out "$PREREQ_JSON" --md-out "$PREREQ_MD"; then + REPO_STATUS=1 + echo " Repo-controlled URL prerequisites failed." +fi +echo "" + +echo "2. External tracker/indexing probes (advisory)..." +bash "$SCRIPT_DIR/check-cwusdc-external-trackers-live.sh" --json-out "$TRACKERS_JSON" --md-out "$TRACKERS_MD" || true +echo "" + +echo "3. Liquidity-gap funding planner (read-only)..." +node "$SCRIPT_DIR/plan-token-aggregation-liquidity-gap-funding.mjs" +echo "" + +echo "3b. CMC-shaped report sanity (advisory)..." +python3 "$SCRIPT_DIR/check-cmc-provider-report-sanity.py" || true +echo "" + +echo "4. Provider handoff report..." +python3 "$SCRIPT_DIR/build-cwusdc-provider-handoff-report.py" \ + --prereq-json "$PREREQ_JSON" \ + --trackers-json "$TRACKERS_JSON" \ + --liquidity-json "$LIQUIDITY_JSON" \ + --cmc-sanity-json "$CMC_SANITY_JSON" \ + --json-out "$HANDOFF_JSON" \ + --md-out "$HANDOFF_MD" +echo "" + +echo "Handoff: $HANDOFF_MD" + +if [[ "$STRICT_REPO" == "true" && "$REPO_STATUS" -ne 0 ]]; then + exit "$REPO_STATUS" +fi + +exit 0 diff --git a/scripts/verify/run-ei-matrix-full-readiness-audit.sh b/scripts/verify/run-ei-matrix-full-readiness-audit.sh new file mode 100755 index 00000000..447b5260 --- /dev/null +++ b/scripts/verify/run-ei-matrix-full-readiness-audit.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# Full-grid EI matrix on-chain readiness: mainnet cWUSDC + Chain 138 cUSDC (sharded RPC). +# Sources scripts/lib/load-project-env.sh for RPCs and token defaults. +# +# Environment (optional): +# EI_MATRIX_AUDIT_SHARD_SIZE default 400 +# EI_MATRIX_AUDIT_WORKERS default 3 +# EI_MATRIX_AUDIT_MIN_MAINNET_RAW default 12000000 (12 USDC units, 6 decimals) +# EI_MATRIX_AUDIT_MIN_138_RAW default 0 (set >0 to require 138 cUSDC everywhere) +# EI_MATRIX_AUDIT_JSON_OUT default reports/status/ei-matrix-readiness-audit-latest.json +# EI_MATRIX_AUDIT_GAPS_MAINNET default reports/status/ei-matrix-readiness-gaps-mainnet-indices.txt +# EI_MATRIX_AUDIT_GAPS_138 default reports/status/ei-matrix-readiness-gaps-138-indices.txt +# +# Pass-through: any extra args after optional -- are forwarded to ei_matrix_onchain_readiness_audit.py +# ./scripts/verify/run-ei-matrix-full-readiness-audit.sh -- --offset 0 --limit 500 +# +# Exit 1 if any wallet is below configured minima (operator gate). +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +cd "$PROJECT_ROOT" +# shellcheck disable=SC1091 +source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" +[[ "${1:-}" == "--" ]] && shift + +SHARD="${EI_MATRIX_AUDIT_SHARD_SIZE:-400}" +WORKERS="${EI_MATRIX_AUDIT_WORKERS:-3}" +MIN_M="${EI_MATRIX_AUDIT_MIN_MAINNET_RAW:-12000000}" +MIN_138="${EI_MATRIX_AUDIT_MIN_138_RAW:-0}" +JSON_OUT="${EI_MATRIX_AUDIT_JSON_OUT:-reports/status/ei-matrix-readiness-audit-latest.json}" +GAPS_M="${EI_MATRIX_AUDIT_GAPS_MAINNET:-reports/status/ei-matrix-readiness-gaps-mainnet-indices.txt}" +GAPS_138="${EI_MATRIX_AUDIT_GAPS_138:-reports/status/ei-matrix-readiness-gaps-138-indices.txt}" + +exec python3 "$PROJECT_ROOT/scripts/lib/ei_matrix_onchain_readiness_audit.py" \ + --shard-size "$SHARD" \ + --workers "$WORKERS" \ + --both \ + --min-mainnet-raw "$MIN_M" \ + --min-138-raw "$MIN_138" \ + --report-by-class \ + --json-out "$JSON_OUT" \ + --gaps-mainnet-out "$GAPS_M" \ + --gaps-138-out "$GAPS_138" \ + "$@" diff --git a/scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.py b/scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.py index 7ba839cd..75fdae86 100755 --- a/scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.py +++ b/scripts/verify/snapshot-mainnet-cwusdc-usdc-preflight.py @@ -78,7 +78,13 @@ def parse_uint(value: str) -> int: def parse_uints(value: str, count: int) -> list[int]: - matches = [int(match) for match in UINT_RE.findall(value)] + matches: list[int] = [] + for line in value.splitlines(): + line_matches = UINT_RE.findall(line) + if line_matches: + matches.append(int(line_matches[0])) + if len(matches) < count: + matches = [int(match) for match in UINT_RE.findall(value)] if len(matches) < count: raise ValueError(f"expected at least {count} integers from {value!r}") return matches[:count] diff --git a/token-lists/chainlists/chain-138.json b/token-lists/chainlists/chain-138.json index 8a0c7daa..212ccac8 100644 --- a/token-lists/chainlists/chain-138.json +++ b/token-lists/chainlists/chain-138.json @@ -24,6 +24,5 @@ "standard": "EIP3091" } ], - "icon": "https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png" + "icon": "https://explorer.d-bis.org/token-icons/chain-138.png" } - diff --git a/token-lists/lists/dbis-138.tokenlist.json b/token-lists/lists/dbis-138.tokenlist.json index 447f5f0e..0cd266e1 100644 --- a/token-lists/lists/dbis-138.tokenlist.json +++ b/token-lists/lists/dbis-138.tokenlist.json @@ -11,7 +11,7 @@ "chain138", "defi oracle meta" ], - "logoURI": "https://ipfs.io/ipfs/Qma3FKtLce9MjgJgWbtyCxBiPjJ6xi8jGWUSKNS5Jc2ong", + "logoURI": "https://explorer.d-bis.org/api/v1/report/logo/chain-138", "tokens": [ { "chainId": 138, @@ -31,7 +31,7 @@ "name": "Wrapped Ether", "symbol": "WETH", "decimals": 18, - "logoURI": "https://ipfs.io/ipfs/Qma3FKtLce9MjgJgWbtyCxBiPjJ6xi8jGWUSKNS5Jc2ong", + "logoURI": "https://explorer.d-bis.org/api/v1/report/logo/ETH", "tags": [ "defi", "wrapped" @@ -53,7 +53,7 @@ "name": "Wrapped Ether v10", "symbol": "WETH10", "decimals": 18, - "logoURI": "https://ipfs.io/ipfs/QmanDFPHxnbKd6SSNzzXHf9GbpL9dLXSphxDZSPPYE6ds4", + "logoURI": "https://explorer.d-bis.org/api/v1/report/logo/ETH", "tags": [ "defi", "wrapped" @@ -73,7 +73,7 @@ "name": "Chainlink Token", "symbol": "LINK", "decimals": 18, - "logoURI": "https://ipfs.io/ipfs/QmenWcmfNGfssz4HXvrRV912eZDiKqLTt6z2brRYuTGz9A", + "logoURI": "https://explorer.d-bis.org/api/v1/report/logo/LINK", "tags": [ "defi", "oracle",

    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 z zJFk3VRhvLdOX`Cj`VgKFzL|*t^3kml(zw|^?%|4Tmkw@|p6_IG+@`-Bw%rBC zQErX4{c`u0gzOwB0`x=*cYXU+&o^-!Kqzx8DTMRnu-)VcXz7#TFig4>JA6}fceEqw zs{5TFD>HG>5=n5~R$0fyL@rhl3z=LJ)g+C#B_a&3am_vz6Y>An8XhXzkZnSzrW4x` zs1m2ZPpXgQHQ{9 z#P!~95~-x!7r)8H)OU}R&T^aRtK9Pufh}UVFCAn$rAvEcGbIyRFhk3iHPw>@Y-@VO z=0T?BPYjA{=dm=aQ!k_?Fk`etLzTAu&I;eQ3J&cJ_ak@^>P&^JMYHt}=R$--&1<3* zPUC*!^)L+#w-7ST;4a$)&qaOaw|Ll>-++4J1;vHi13fi!+){IK*LI7RXYheujnzv5 z{eNV027e&z_Waf3!Nb%llknV=5PRg>HA4A6pw`PPq{(IPtRh}usu|5pHmrD<;uorj zlMY8GdStBUV7xj+w%En$X55AaFhH0T4Kp{i;r|`8f|;F=lW0$ahj`#;{!>HI*rKyFXr9{VV_(&^_gDT+}XzsGd01v zC0cIZ(q^c-#zNhHrJ@R|>0N>WjI^qpcFd2vJq|2Nown*o@e=~J!tnA@JxF#_+fL?Q zWZ4rIPM7`df|!X}e7>=p{Jlw49T8u#4z^p@Vc3RL|*QRU9ax|)^D7wQr$ z-KQtlD7U=xTx|e8@8)=l-HV6cNA;q386@?6 zAj0BAQBm)NHkVULnRhDEPOz(-+bNT4Css@>Bb>=DRDU55S=!DLP$sR5~^48kb9-VVT4&%NF(;_R^)yM4|6Wzg1 z4XzVqud;4&`-?qszz(iN9BtYiP3+qw4{DX{36x6{(ohXL{c6t*Mu6Vb7!$tb?Cf#- zhAPr-u=kYT{ze>VtY+GncpRbwp7**b5H3p<{Z-VXQ=z!X$IWnGM1`-eigz+$L@?}K z!MHoyx}U^4wySk$EUGP2F_HUZab&7zyxvmrA_nI%03dM-1?_ZYjLIlVCmm#RIBGx7 zsAntw$*~@NB~xu7`pd;bA%f z;fQ=D}76-+slO?7^iN zi${GntT$4Xf=wAejqh`KIW}i_z}Tm4Lc=fNYERXhx9uNC{+rlnALCq&e~pdy$~s@& z-%rnz-TpwKD^VY6;gR5>x9;YW1<%aW{hKY>nZhc+@(AY36KYtVgaq+?rbT4%#n0ag zo5PD{S1{HNb`;BZ5xtuSQ;OmkO1!=L)v$6ZEps>cZ335Vf1y>TWoYRsL1iWV#G8JZ z`=451gEBx;QZ-cmo^eAV;syDA+aU$QVEsGOt&VTJl%+;LpKof&;{@q?8zhV;v3gx% zvZCj|^XY&_<0)G0!+x#?kl|Ac@O-acCH;7&-+W-gDdAYKYu!OU=5>={9MiFFN;F~#3G;1FL}QaV}BZB?0-lMk~}JkKHIcG zekScQ6&=;Ylw_rRd1-ML6M9lic;9ICcrn{5#w6yOp)Q|DYQQnS(m0LSa6qMPZ>7|& zV4@0erGvvUImq;^aj4X&itYH$5Rck|ZAW{p`RA2sg-!937Q=D{4Tn;r+Ar6-W4}26 zQ44Tz96^Fbm?>Ti^C5!DCaSdFdFN1;&qXs6-5=WbUCE8hjLd1oWCCp#M8SZz>ZW|Z zwI}(cyg?W_a4^;9B-6HMSx}S%)%Z&KuJEJ^DwdZG2On(T7NSxOXxlwyaYKS_Fgw#- ztCJh~e0(te;auiy~E$mXvx zNz+j-XKBgeQJ|e3&2&ibq4{aGeV=+jqE)wEy#Ax>sRH#Srs%wmQ@xm8=a|jcwdMmN z41{!0A|-jlsyZ}TozKI=xKN$0VucN zJ^!H$JHv6fR>{iVFy#SRj8+Fz*#Cq?A2F9gs(=#8JGXYB}( zNB0J8GdKNU@-S76E48yziOX=m?&Ae?^ZK; zv3s&;Z+hzS1Q08|2gK91U)8++eQz8H{Jlb6iWmnu14O3!@9=Xdm3@vz2n_UzbDX^H zw}5!Q3-w0b!rJmizxla<187Cp`*Vg_z_9tC^I37p`LfGC>;33P(YrvF>3M4Kyf7Gi z#_?g?|7z^e%!PpwctnSvP85BAS}1xi1HeGff8}|Isb(z4c)TtQ_dOFM93#TDS1mOQ zo~!~Pt>S~Pn~75fmVGaC8sx<^iT-{^Y;UUPO%7`!*Yf#qveN1Z+)^mEPd3B2F$RISBHRq%Pu`*{i8z* zn@hz5Ibsr!{A2~3_V_iUv{X)+_ccdfxafp>KE|c?QuK(vioow?{8_7>*lHkUIrgbU z6{hd||kyr@UlA=BReW zJie&vq9UESWi^~=#VbMnO9;?D=TYEGJ$e`W%BO+0%@mTrv<5`W=3$&e<-7i~e>vtA zH`f0ts%+lCv11~1oAyW*3wJ)f$l8A#(AbzP&8}|2YZi(!;tPxXU9Xg;S-yhr zR-rZA`9k8iX#kmLu0rbTtB>&11@OQ3&^iAyd)mkVFCc%Da|F?W_w=`Ou09C>-*r!- zY3QzA%${ODXZXliF);UkI}h@WKxsnd!(C2V(&+K^k%_$T8>yuda^8-0LeFeoR<1RFFN zM1ivRL~KKH6DH;@J2t?5Yz1~ARV=ox7()W0+J1yoj*I^k<4(rc0V03#S zcR2#P7K0BmsO0{#fBy;Zq5KN-+LnrIVj*#H_mhKaP~Qfg^gbzKXQ?--##+b_{q1zU zPw5%E((11tP3iSpQZE|~gnN4QuYSHMW!6jT-JnE$3N~wX#s!aGa(?g^s?LQxajZ^Y zqU~RZ;wsl71*k-!YWu#&79AlW5r>qFJrebG0g>O4xGuO}*&{XbwweW`7H$ z>#?C52+vkr9zjfk)MLNp<4>PXhV6un*IIE5NYUfY;T+8U1G}&tb1yu$wn@LOZyX@A zRa9e~*3(mg5<>dauD8F$1Imqg}kw_xeE}*{eC+*o@u*#kd za#GW2)_s6M=-20UN@Ces+*DnD0~|rzX7{#}bBQkC;0sSItF>#~p^itc42-X}-X&F9 z_MJq!=JriDuubng8cpQ(^0q@|UySg5pbTzNY_9gWA?dkU5Ki zRn={i`s~}vj~UkDMz2+EMD}$&#?yMD&tUi7kP$Xl}4 zaX&zSLLLhGjy;LbF@-r}Y349j!8JyBW1=MnX1gz`4rP8M?0^9(1M33!0h>Va@lo}x zm=_^`sMl5nkl%*5dI3VOkHLqWel?qclg(^IG=5}Fci$J%7C-qF!2>56Z9emN?ZdtZ z(=4(0v2geS(uW=GHqi_B2`I)r3+xSnY`^vllDJ?siEHjg>dFpNF@CLeQa5>QZ?H9l zmV2+wF;JrC`MuAR(-=@?Ax8=a9`ty*Zx15PVo`f><+Ga}NCDBz$r|^mpi@l<8L|QD zN0CXyew6d%U~?^MeVd|6PjoB*Ugordfu8=xY2D3%wcdMVF%o>UGRZXvR#0Dlc4^zp zP>{)`kzdGVPh<_nv__c0{u;8^NYeSYHPUTxI0e}r70NA_k@A-zh>H_8`^LUhZ|ulI zmo&Bg)_X85DLT?j03ghtm06%rB+9dF$bc3vHKuWN8fb8rJUVm zR*Q0(J)&^xD)*Me(K7uplgR4)aWU8ub*x#T_kf-RxBJ2ngI@4>Cs%=tK%W)saeIa5 zK~?fZ#a45c-B_2`{{P#AL&dbX>&yz)o2#1 zXulm|)&oz)0vvT6x#0q1$13+3Xvb6?b_M zdbsU;L?+g=n5`swoa{LXn36Bq=uoNGz1@#Y>XB1gL6Mu8>B_JlJ>~?iXZC0IU`Q8R z$;}SWvXbXko6H(W}15YT%a8 zdG*a@=%E|)WU{_xBGlcdGbN`4zg4u+UHL4iUML$4F}_|X{+bmx^^$J8sjmE&+~Pd} z=Th~UhO*5LzqsCkE(uRzWj7}Yef#x(;_&;=UD$`o1@7gdZ5A3Dz$Tj`YX1M2ijSNEQm$^B?Doci@@wnj?!05DEaFZ3#? z1Yuw|(%NItXi{m$-^LHSJ0XKaG~MQVq=Su16t&*?3JsaarHs1eS*W4InPyr5;*^^D zQHz`%S|ymGsm=LXaiWIcKY*H?ax)7DFuHLL=zhIPY(-RXs0RvkiQNeO_D+ma<7?T>5Q|W3_a!7`~v708^Sd( z9y(p}6qQjmq~qA8wB4UN4Hm1vA{3mEmQSJ2%SIHGLCK$d=AKUl#?XYN`7)>}*14(P zYFqKu(J55$(xU3_CC^$&h=tk9B7EX*)?=}w0wP6 zN+nHsCtx5WC1KHhb$zSuCah)EgGhJ&MIezZgOHSF;Zmm_m(5@>vJ3azxtQy>ws?{^ z4CCV(R#IAYb$%ImnyLJ@8*p3<1w zZw@>pt8NXDICWhU_VEfv`o1R)(vDxv8amS9^GPuHh&5-4FvHppAh=B)6}Tl0ghHB1 zm$mEfcp|Rr4X+S!Bi2d7m1##_QyC!>A}XDc#0m4e`1vUIUgGqH7Zs$wf`0?R^`n~% zsSoYwVI!V z#BnQ*SD7vr(evYW`}?~~+(BqaAB5X2q}`xm;>2aqMz_{FTQ*)Ss}Z+woG&W^3kT|J zTBy`mVm<|3c;(kml+<7}k9l@=R)>|>_=u5frSRy5Xz?8sTT=AF+~96=VKD>ciA1?+ zq0NspL(v#!$@fPqBUADU-0nns-_`R4WUWTtbyJj;7*LWVN7lMp>~vDM0<4-28N1@C zMP1#ig$(F!MHGF#*$7iF*k=Euhe~rXDNq_vDfDq`skV2hs_@z`Ss>M$;%3t;e=~SP zrsOEX!D)m&el_%!b14tjD+v@x0%8AUTjt-{!u*lc^k?w&pTW~Wr|3U}r~eF|b_W6)z5yYaK<;!% zIKSU66=nw=Q!F41aN*oOhcjOwS<4wZ7O<`)ApRA=!h7!v^}|{JQ{*%dSlwYqFT7Ry zKLk&Q6JdX(9e#jMKaL#dAKMvhC7`L{?VG~n@mftz0G(32rqLJJcJ^R-dHHhB7Nj`; z$gITTusOL0#FIa?Rgo^zRqi8U=Y8%8)vN70IcsiDib3OgVps#9rl_gBFi#z z>qHT|D0=48^Ohc&gsci++pWqN!IV=*vz1B@C%8gDmXF4_697G_WZyC9W^2%+_*m{Z zl4hnRFn-+U&3CGzH$DDqb+@_1GQXaWVBl)FQrBTuShqy|*7(Pc7q?8}`ozRR1Neno zU&J;mETWS2qM2yoOIJff+_1mKe`X(#9hh2U(&TZ^;k&>)B0YRR?px))gqmS|qIn&| zw0(@32}&L?Tb_qZ8^4=NWN`X(cLdFdf0pZj{yhICt(%sXnHJu|rG4dZdk^ z4cd%9i^|Zp*$a#s?nUwnW!AnJlo@_` zq@VL_EjRkfHJMCjWA4vQs4utt-xO{HoI|2Nej1>w2ObXVF%%kzM^)QIX|W0cY1xA4 zVP#@#OsiV%bENW^pR#y-6XPUrrc|UvG3M1%J$(I9ymU1K-O~MHT06rdSxrO?h!p*Z z3W!mVm$M7Gfmk_7NMDF06FE>kpAqj*ZUWl)%DjKe=Rr<+>mEFpY=*O(mS6p!wSD`g z2?B?8m8oo)&FrYF|8$Ji=J9*?vFLx5*YP!gy@Et z8?Ec56jsPv_>Cu0^hV@|?;D>`THDA}|40evy%y}28BV6G=U@^2q}5xmFo1)1A}5xL z4ECrYbn*LsVo(XOI?2yZ9NZ4i6G7nC+S95SuP^TB3-*0luFnZF^DPvBoLlOYdd=|JO)peN~Ix$E@wT2X+=-8Yr16H2&8Nrv|1qtds3$Rg>Aa#KV?FDAlWs*FaKU7bm&}|62jLmi$gmB^vvhJuq$?z zAXjd>0h$doyjlY`SnOV#g_2c{QD+H%%ZJlU;EnATI<>ZDLf^`68TMGasrFA05}g zNT1!VCzuu*n0&mO*y7Z>XSAq#J}hp?{~A^W=v+VQ32?gMr66gbW8nlNE};3}$npJ2 zgqp?EJpH2<@FyL5J`w-*%K4vk=$~}xpLFP-bm*US=>MT~sKl3@NSBT_@~T&|S~dsN zPWZ}%7bcqtfF!4mgPy3gWhdEM`=n~-romi5ZzVTdeD{cZ8U@TI&pg(KrfENm2pSZ_ zaueWcT>I$Y06l};tNVjzUB)1+$a>Juq!CUuQ}$>6Y9 z{nZVI#$Pl)Zqm?}xWCuJJ@|wL0KLE0&}w0Z%hqP?;T=t%X5MfJC-xaSL?oy<| zY$T#r1Bp+4;3LzXHMU*`!)X$7bAI^blHSN-y^%#jA5+htW80k;#k#wyNh{Al(7Mg& ze6KK(_0-820`xeVwGCygd4|ch>NTUqkPFq>3+NW}y4*zbKgtnmuQqU#+C|guOVYMk zwIwvW%@<&|lh1Y+Gk+VvH*+4*;lS(|DkQ5)d=ul>W*P#z_o8muiiPdupKZ=}MmC7i z5Z?KDI*iiK#tz>!9q>}C2CszF+k`>n#K$y?pk2*mY^3_qsnWL1Xf+HJh&kk$00-F-i?#lc3&oW{anVc{}8=PoC= zA55gN&c_vam&J-d))x8{>8;rssfhKPtm=^>S&PJIAJy+7R@e=%tEvvpS1+GD?fzl- zN%=7HL)mNd!t^CkF$B#Z>znpIUFpL@8@lzIwV&s^;%SD*Q(a(`r5!g zZ=F9Z4jqfO?WjMmy+}D(+Dk$ar_3*t(d>I?oTYA$->IrTNqohh+(5SV^soudo|C%2 znWee*@i~7__*tJp-UnZ$SVK@XhCG$HO2k|}sb2{^u^WCxLg60g^N7rxmp#Xs;FT;Q*KM>^a|B(3*oIC-sdRN5cpD zzn)VIdPpwpHt5rTgub{cT|@)#@n~4>C+#C%dz5-pZSorH!sv6RBA}#`=u)BAD?mUo zkuHQk;J2E5!|s@Ob1vIOX`5I+%$zj?Dpp{Q=6ue-cYGqXC_cPAUWOixi6M{A zZoTC$KBwGhRkeFCAEq#C)E59YRxvvTqlN36$4&M)kChLn+!QQ?-B4Y8$z%K43|2dy zxp@y@<#H2TwiX*+wX0uXYpd8o){H#gGn3AzrHymR0t-5R*EWp~EjWiWi!n7{&iDK& zQO2)xcx^|Hx@?IvLchphs+jeF4%!;*LoDj=?3>*V#YEOD`IGHD-L18E*+pQ*HfL62 zkzLQu8Y!mf7>@jFcb2j?%Gx9l0w-qr=`f3yqd`^JBfDsSU7y9e!DZ*F*Z#`cNM_8# z23Lu1#rsre@*{5FNm6YxrE6^`$rM*AXUqm`So4-2jGzvJ#MkqJXP%!&X1wnWbx8d= zq?6CD7f(YoFj>C7j7FJ2Ik=DYYZR1UQLEwCJ9H_MRY6aD)z6k3`)MK6Pil}v-};9% z+{SdW;Sv&p&9D-4pfkicL)C$xrIL3B;wZfKj+wjjmji;t8c*iOkEi-wl{#r%yFc^wwTCuid2(USX} zG{depqlLXrv(4gd>(&wU?T;EHmWI)7#lYQT51ycYO9d_6v99jZ7rr@#E}MsUvA59< zqV+f^&Gb)GyNYUeBGq}xUKgBbsL8Z%J_1%1k-k9o{0oJq<=?OjeoJS2Gnz1S$YL4| zw;*PAp48%`kXR0aY|c7OpPfx5PDf^a=cN+X@+#6hI18y0$^s_CY8O$`2Rz^S-sDD% zp+`l4ujl%`@ja0qH(bGQq7m?5RWo+@93`K5*Btr%xV?)pCc+w(V6!MFM*5PA6on=c zbl8Xhaf-(c#R^M>UaOZO?wGZTJFkk?#p&fj=X!`br|KLqvqUsh#b?qfGaQ22F&GK8 zonUs_#HoiE$TvYjFY`B54Iu23{q;1W8(u;Qk}s>Sq}Ps6JM(R31uq{37*=ClM#etP zoB6#I;}YE`3ZHb|L<*mvc5LA@C3IDZ-RKF-vqhsmM;afz6PX3Yb)H&EtHtv*`_$}j zJ*y~Q8XKoqf9eUWY1O|mpz1Ke zee5N_bY+qsFsnxM2XMEA_b0^XjP>`kM4IN=Hzv)yIU)mNCXs-wJsoqM8tAxXk5JX%P2r*nZYkHNS+nt6yN z%{S=EmAdz(S8vOv#4BCKx?Xm-`e9)Gu50b+^SAYikzVCdZ0VE_VjMWlt$!WE#GTx~ zQNmh~^whRXOuSe0y23H)IGtKv{SdH&6EluCZ-8oOYHH5qf`f>v+u| zYKFb4FzUOo!x0JeEG{qqlKTVEE91g8%_*Y; z4#e?g!7{Gv$IEZkXXw^Rfha4v}>MSA&j*_X##m*n>cD5aC{F;Hi z^~bluc40nTo1b$LQxh9VRz{zNk^%YvG4a8i--E721w-VKqApL@N3U;9T|w})pza6M z3+Y$83LUhY(0x26(jup7d~ILNhK<{()gpB2JGF8wCkzXsazc_>ZO!_&MBYx4>5JP7 z8EC8Map);Re7-T_WK%_#o=voM(MVU+{4Z2CkS3_{X*_jNHr9cpRfa$74nKV0a`{WC zW&+yuT=5#D^Y(J4+$6mS)cvd1`X((kyk=Pvf$xDAFyU#OpPQzJg{`H`)_cbbhBMS z=t^6^*n-kvxl$(2rmk3ZwN;N`={?Fs`My&ckx}4z7K-RZ^M74u8j! zydsm3y}yDG<7VVl19Kg?j}4QY)oo{R4LWcg1hdqjwHyL+ScJVxE2rPvK{DUgFJbTN zH`8zVhHnT$jER+E{dA}KBsmqMW1Wb|iE2SX@=lZZ>K6%YHb6Usgr%H%=hEfombCCN zgJ{DQUvJ+1RZL>q{nVg)A|`5_X3rh!52LEY`8z0!@269W4BuT^pK|%3qnWz3Ch%zc zxPISlW7&>Mf`4~mBMZp6rmk&M3F8=zblZ!9h8}?)(tA_K_P$POqJ(@tO}m#Sy!0pMc^9nBs}UY}BUG6^l!s26n9 z8wJ&wWXT^7ArC60sS5I>H>PaNM$8NRg=q zx20bURSN(7;d;6$8|d^)hiltxVYX`_$oBQeor&6ep)ayTcRCRTYI3;yA&oS!=DwjP zU^fk3*Xha2%Jub4ReG1K43F&?+VxV)?-zR8%DIjfS1v-@-A{D3u#q15M11@@<%r&d zDuwRRNV)^vdolIy`<-G+HBASWWec|PB6h(p?^b2vj?T2HUVS~rM54`X4lIvnlN+3u z(&B;zqW2O@+4kz)_!}#&b-myCjXCn9{<@J+w_8t*oH}t@9Y4B`C%M0x%_Lrv#Y{n* z=H15%r}6U83-ei?7|yjj6>>RBjF`<7QLkK_&MwCp=b`MtX~Y)t?wrog4YaVvDy~yf z@tdQ{GnXod`VWN^mZamSRJzzA66AUK(cCRPhQe-= zITKc`Wk=!iaS8jdRgs2QQAh5_F=_pAT_`5$D_3Py^vm26_xllUDk4o^wcKKGX1DR?TCj(6bN{En zKpt=$W*p{qb}*dEV8N>PnmPPv=6KjHDLkPO4W2fvdcw>#P}4WJx4GeIxAhd(S74EgR(7d~Zn5V8pMr#a}n5Oo8pETD;z4Kf=!h zHkQ|UTLa`60=5^m7rgl7OgxUrK+~Vvv*6dlXecrZ1zl=?B6Q(NY-1ffQIX*Ry^~PZ z#s|hb#s2p{?Lm@Xliz*wMNz1&Pp7#m6)k4!`8duQK-{3>I&(*671BV2(O zYy}+v&$_Ps^jBWx1jX#Pn)OE0X8_F|Y=t-;<^FtlJs~qoaq#}FW7KajM88sg1s}hr z_9t=0d>io)aoOSuZOcc<1FJ~3OunDDQyRz8_6QL2T1y%cz%aiNhk{fr`o@?Q%)*x` ztglf$F+E-n1Z`6A-TS}Td(Wt-x@}ujKR-o9Ktys95m2JUlB^=2L;(TGl5@@!$&V;m zq7p@NPDRc+Ne%@?jzua`Q9u>xE(-VF=ic`2Y3H1M-n+NGwttGS)|_jNIoBMckKQ|` zvG{S0@pxp8Fy={!lnkalKI!P=D=}IM;wMbJjKSHQaT?{ioC=?>@*BDPHW1yKhBAdu zc5480Q)bSS5U&9HLLj6-(8aS`to2e3z*(eb&suyn`vsWYHb$9btjobj ze%?x&ZdYfVQHi7Lrj=rC?xsr0eq&lBv`g&rEHxa#Jk>woB-Nw|K&9>htr2A|I{RXZo3+W29PL^5UA7 zxoqXgEpZf2^b8Ea=%bBKFH>1Gsms#K!Akn->)Z!GjrTVGu(V3lN&-CRtucYsz*7R* zZ=ZN>d+c!1r}Yq|ryC~hOm}w(W4~>lfo;$`#%NCB0w&#fwBqLKO&l{5kj8}p=*X%mX6DsSRyOtx;ilr46aCei+gyCTaaJ)Q&%SPE}Y`1d3C2#Jh8UPNBPj zn1fwrz&2LIMO^k3{lI*9Sq(nA&o&HKE zT@?`=R%_DhmOD2c&it7mc@*UK#CF_zb%2J@O=B+*HCh;&r&#Hw`2p^pvBT-Kf8f^` z?>R+!`*P8V*7T|}|8+w!2auxm8Jnd3gAGt24ZxwiGOK$S>fLIYJ$^;92$KBoqS3*h z&6Cj3(4bIwSKEjcK;F9KTax@qW%W}945P-!rjjNgfIB8c_Rt2m!33n>n!Dw6MdLD& z1bznZ* z3nszEbkr;+t6lx7uN?8RJVPaIKRV#AKdfFgE#L!Gv-S1KW(^HhH+$ZuvO{{hwKdJBGC=Iycs@JM3zjYrkape? zN{OBA-)WdEeS-qlDU%;AX_zO3HbU1z0UBlsR+@I&gb_PPsimQOPN<1H`@GYiR0JJ} zi)$4Bkfsd*q-kkb{|LkRn>6jo|0~k8J_d388-O&eJX*f>?^8%lrlBa8$r#G!?N6cj zjN|LQ)Ldn|B!N(cZf-dd5Wq!mrG#nk%g6L6VdoK@*3i(rZPRsOZ5g#uIAsL{3$QO- zdect1zIAl^9DC_aI|m$)S@O)60dHE7tGFmG{%F2ZoEDW*1RRo&G_Z$csaw+ph5ZUD z3I#`q->ftOa@Qa5&8ZgBvixtrKM0>ZujJObD<$n0vrT&g#Z_Fi7)rQlk6V@yzJZ^ z0$0tc6JGT1z@p<_$55J^Q{9p~v=0OUY1*`uL&TT!ztsY!m(-gJ=Q5JAt5LJL4I}Ui zyTE}A4J}`F<29p@Q6e#XC;L}zUq z6iw12UhxP+x9`W&`%{KzxR4wAB&}ccvPt_hgh}#e1 zSoW;YqTcf|dgFwBG1nk;0AtXg=mpyJbE4HTzMI?nfl0l@M|lM1EP;vHzAP-1H|)r& zAkVs}s+&8+4U7T=QYx3@%S5`UXIW+&OZr3?_uB3VTRA#Uk2CDUQY$Y!I>pVEQI551 zKd`&jH3;=TDg@4!b=tNKx!QqY3Sy5B3iDsh2@B+oe4$q^k7Krce4s(4vIKSh;9#>& zXsyix^Mm4rh+aIr=X6b+JghNfSKuWEy`vQ7TLIM$R)%gSMbsNh6%Yi*NDwVc0wYR7@&rR#?G zL^F?L*!#fl z|3{Pjv)ZDXiRAZJq6XLg`(ziw|5MA}_3q0rtkoLY-}&;xhZ=*2yq1SUxUS9v13<#Y zmtZ=u{{;Hn^V2US={XL_tog;MDv_4{`Kn}F2!f#^Q_QfgWX+f!r-w3hX|>+-mm8F_ zo*N|cm=hI^I1Gg!=6?s7&A+?|q-!b`nv6Gj$pd5>-8-_c-L-$Ds`@8w4mqT~ zN)F!~Ct6ld3PQu4TYjvv8|dqL8TKIdmxf32V!u#Re7VzXoz`#&-g-4{K?-Gbl92Pt zNycI)U5fTb=91%UXkD|Bn-}_Y*+;vK57BqwF!RI|4zM~?>d6}>nC~K)TRQ7@N87&c z(ffCF9^Q);RNn`&eS|bWC_AJj519K-s|?u-W4{a*?*NMHl9WdLd)wRg3ic$x0g?hp z`#To-Z4JqHXgHiZu1{%)kXNsrDXKo!0YFo-b{Xv=N9qJd z-L;e2QGUH&KOuFLnI7Dho~jE1sUf+;-i4ntx*i55H!Cc~<|h*=L+q`;E{AAozuVp6 zG~I*qx|+TdrodJ1$Plon&C6jmS>87cCQ1_ncgksTd1Y5Tt=*O6*SVbC%LHIAa+>Vv zPh!I*yH5@KIQ|1S_zOYl>WcD&Z^cnrH!gjd(m2)Al6MRzN~*MXwMs28*IY&4l}@DB zSq66y*!HuKi#l%(X>bcd1nL`dUcaU!%OK6@l!+X~|5&lp%MtE*OskXzac-zDg#Ws5 zu|z~?I>+@4#C-97UavCkl^HT;9mhD3!h0O1DRKVoR)O`1F~MED2boI!F5zXjo^T;NtubN@`Uk$5Gx_EoP5Y@F5g>cWN>WyVgd$M!}D$fV%Q_g z_T-y;=N{VbjUQ-saWz~+%Php8_7eN2+4`H2N+8CfZv2z6Ve-Py^?fS(CF*Rjuej&> zXRFKaF#0(I91|OfnW?yB&lyMEZ8lF_?Ib=4mxGrw2Uu8F#;pZEr)@Rmu1xjnWid(2 zUNkki?}o}6-oed8jm}DJLb5t&Ny786=Jp?J1QaBC@BNqU$ zK0>44(M{fbTrGG+BD+IfK>gfuC1?prDk|boa$h$si$UZ;F7_1wu0Ujo10AFGP1Vgo#?mxo|KAvw+?1MzJ2d+aZ8jHH=;B z{lM%i;;elc*-BS7mKVyo;bHhDRLfKQ6--%UzmAa|9QI$LB|uA-}F z&MuxaTcU2a;BJGxvI5j9rt}7i~3>4}gGDtUB_l zPwdyL%jT-6axzXWQoG$Zjh92$GY@?{m77Yx4QFpefcoK|zvp(E^R`XC1z&RJt;O=l)d7POCoVDLTa zc&qtyKcn<^=E@YHB})ou$=XalDY0D1>wo{U|BX9ainV5)ySap}Yj+8vyVqG=PsgRF z+{Pa%$552-0U9ui6^n>dvj6LWQRr<8#7q*%Oe>DC;<&tB%%`!W-sB`WT;9z}|9oas z@1vZ>H~#gKn}Us=!Q+u<(w*V)6&U2|mKfA|A^EQaXGouiFdeJi2KXkqxz6xGr?jvv>YPQ(VWTux2Z0S@{h0z8No-U9vf}((OEY!{BT2~5O11H;165#i#n@Fi2dvmy=32v z6?w@YayS9vJi0Sed7U>a zVa;{|^m*BtFR1bVVyMw#D3tndwSdddGC7exaLU)Z zB@$(YiIr_}+CE!(*NS=GAW&C6Jw89iWnj+pdn=5ZxPESv>6Pq`j3!(NeOtp>-(2$F~?m;!6%tVvJMN z0hP(H^22J|I}%VyKK$?dzgRTNq!_S=h+|Gd8;D_~LC&CmXhMPzuUygDxa@d-IdT>8 zfV;wA+1Og+H`-_@`s1A^i^iwvG9;0S+Oy=w<_XTb6QjlVbPU%@b zVmmxFI1%F1S<%QVJj^%1xq;%854|(yv2$ekgo)mqk3@pP=U`E!G-g|q$9^xfG?_a# zqv5E36&foWOpyOv!;0~twr*5hL#6%{*h@}JP*m5uOZ)7gjR|T1>f~4fYkxnS=$*1V z5Q7)Wd29~k^uj~#am;)#Wt+RII*LBd%!U}kcE5CQGTl|EfR}~hSj?5?@aT`QD@~uG z>?OPIyj}}2L>@gUoPk_uzE+fdh+A=xtL(+CWFZ=C*Cc(ebwcKE_4{qoQPirokTV6>zM~1zKXnyWLdsZmFm{uc^0O z4P28@>%I3Yt`#a#=K*`0p+g#OVY0ZQjUm!vT_^tX}6w2$Q9gj>e}lqGSoEi)t5Y@D%_>y;mvxTePNDPpx|*VD!Jaq z5i5fzVdN3u;xTI*oqQLy*a~5D8Vr!Q`6Wa#O58WTw*XfBE&C;Qa5mh`FXkm;iFUR{ zNkw$cG$W3$_Z;P`B@ps?A(oR1NG0B8RA(r@)V%QCQ4vkWmHn9Hx!}IKz!q%Ob}Jg8 zv$s45a4EkxoIR#czq%gKE*ucrfB)0{@nH=m&U{0a?oYd88x6)vy?=uox1NlBVkE{gx8s` z;EH{mv#}KKhmQZrxwi7W#okN50e&0dElRi`2Jz_+R zWO%RVz`we(_isEiopcswrdq0zN)V^GcSa>iwT-*m?~1f_Gvi%)LOCR|1EW4ak`)PVyCY(HBVJ$2dd!S z$mn{{y1%!VjrnQU>252M8Y9t@c4n>)SaFo^?h!=bTTMCa!n{*E!gM?%OCJ|J!mN~+ z=?muhtxQmIu%FWg+aAdO6+iA;LcFD!96tlr-A`Q8;BPr{(aow$_JWn)4JRly+@L6$KJ;CXB+#V^je;@dw9@*!W82i^BqcN+IKY#V* zfjoaumSI3jC*-5CVmZMhcNrAyQPTGB)~ge>D3xXfEXhD#+XFQxZ!-bLxRcaWS&G-p ziegkAujAgvfDil>?td}BuOmTfbgw3H54Os-L(RqiWIay`iQXdMD@4y^>Mbdyz5cj+ zS>-ngFf%JcI~*Jy)DejFV*GD?j=jPzE)Vv_kcNg?P3CokP4SABwM5~?e=D%f-f ztWIrOtL9Y_d=b+py`*ezc}>i|6&LBFs;aXTr(WTVQ`OLvWXRUB+|5CDc)%IuZaIKyt0kE~ z*4_a}tqcb3m6b8oM|mFAnw^Y=9O?pECdaLMekWTybJ z%arUI49}J9DZ#Cq(|>WmWIrS`*Ct(6P+@?@U$#ol(?uJCKk%Ia^~>Lefc0N*;Ku~n zRwnF<*ZQ!`zc0IWg~qU;@bI)L@Bo+wfHoPmDazGXOiRY^Uf$xR;CsuQv23B0)F0j& z0GtGXJFaeSPP^mdW0M&ISK6{dqfcD7;Kg9D`AYMn-xs+Q*US-c7*tVF!}f{Ir#hAQ zz=kyP^!yY+kLPWoIv(S5gi7ozd7!2Is8+FE`AuSyG}|7o87=dh1w$rJ=WLkDy=%Kv zD^8Uf+RhGW#$o0ZIsNiG^q1qhMi6W!T`;rod`<95fA+;aU$9H@lQ)}nJV*RD%uGzO zovW?#@~lmE4|YdQM*9Ph8}MQ5bQyArtRsl9Dy+@OVVQ%Q~Q>F6}o4-#XD=Xl){wy*}V*WbayvuW7 zlT|nwLkZN*w6>zdo3qm5PL(qDuapl~vWu*X1*rf}&Z+d8%?e6wicon;>q}2gr>j>Jj{vDfU9ajhRXP4o5iaBj(D#p&YAt901o%8bSqm@5wdIkq{w&aRSg4}hd*kKx%MeQO_xER( zwlwzg!9F6P(bKbou~>CrNzAhY4Fbbex!G|NvIs1+DRcl)=O~w8Be-F0Q!8_cZW7gQ z#un$-VplH0H)U3m<`ztid{pbQQ$TKOV+)@^-s&MXbP<8TQcRkWBMbmfUx0rsQu0%w zD0t`iF7FDVrwCQYu1p~A0l(UQZ!xi}?gzwM{iatp1HjLhop8`*6~85*5g|hNp3K`& z`cGRu)){0bMsZzUWiYI(wdvL{9x$%Ue_s110sx{L<64xl-R0~na<-|a|9WiEZRl|H zqC1zXtx?F?EnV(*XN*$HDWbKmg{#*wpr=;p<*58(3KcE&Pqca`V;HiQFT+UNQ5cGG z+8;UzXbYnTb*wQRRjCwjI-4??S=CqO?i`?jo!ow1g*0`XyoNlDi6LwoK46FqR1*!d z9OkhxuWi`wp(%gl?l#Q4*xGV|9N8W2oLKa*@jJ~-H7YsD4R4eE7b%D4(+0DekGe@` z)7%m%nT(FRO>~5X$1Pcss!6Md?DcIKb&I&wDVC~|rzzxLsj)BPn&oXk7Gjb`&QtwS z7G;A^vbKP*dJ*BcQmyC3>X)ABe0}}UrFxCcjVTtZ{d;M%+8!1st8CS)`2=V%;uS&jo>B-6D z+*n>)zdzhv#{zhA!i3uretU9u00mDESm3K6!UnU2?0!+Vjx7@pIGCq$Fs&Ne2Y7ON zdnQ>S6r-XV9(SVKKmxXh$5y{RIU&54P^`csr!C)1aS7c1Z+V)O^*7uc6se2QJs;lN z_N~z~;X`wS*gx<)Z!Z*`s05U&!oA{+W5EugTZ~yuhJ~SQG75X!sI{n}3VK?q+K8j> z*}5*c*P?XQTF8)kx%Jx*mv%WcoqG7sEY6Va=oVFyAeaJ%TLpX%fr(a zCpu4xFalofn8CGUI=WCT^B{Yt#+W5d14yoRw$D-u*{CdiA#a7U_OZ!;C-iaJ#{Aj> zJ$*vy1IH{Y&a{v-cXO|c!|zLAkuL~d1_=&q;F|~nhM-c`iO-E=tvY8DPp9?$_RY26 z4fK+tNiHX6vgx?ho$OV~IpCXZ_-1!syiwjGG$s$^s~Xs4VhRtt(}19``6lmaW#vwh z`-O(aRg&{9d~Ik6OpJIcQUc;;Xa4$y`SL#Ad~IU6Ww?-E()P4mKQI_Kdsk&>#5L?@ zU?R`1lXDw?D;?Og2vm$Ow)5C4nErjY8uC(K;=k1bu+#XjZ`ar%{0A{rfO)`miE^gv zdR$f>I)us(&R*vo&sxA|y%c+Mf0^rX&x2*vyUyJ1W{;FZP!>eL^KrlW;TBwsSl0i{hf4YFNwhy$!`d zx6|TBPsEGrnXYcyXSKf}J3D!DYSBEN&vn(-48yssb_>K*nCyuZscCTSmsPUe>(PeT zEGYyZYXe=W&_c|#^LDHU9G6SvZeuTAP1+TF7#mY4?`y!8= z#*d|E(I`o&yO4UX@8>IVH)BG>k>r$20Ue=a{Y;_RFf9AD;g7&tgz{EC}o;0sHy%aKcU-qvFKx39so9F8mad?U#>?{tuB z$XDM&#?~Q%jbwNv$ZGE;9tVpW@Tr2{W_0!kciG-4NxdcZX{Y&)?JHteS7O=Fnx^aY z5*^`Wu!BH+$5l#0a55zsasqaG+}&`SaUNWB|qXL_S^^4G6rKD2XEW zTj~FUF7hH&I73;7i4ZSD^-BYhJglcpzx#8TzCquU6 ze^hYU(p)--+EvUO)A_WEIdO=Bx!sItNvpfb zRPA`GJ=0-5n|%)2qC35?Ux@-U5g#N;I^cRxvDI2A=KYCP{-eG65 zv^Z+7Fd#?$3EPn4edt{aRGu0NQ(!;3zDY_R+#CKf1)Uodm(@B?xFOFjQx>X?UMK@e z9!IVmBr7-0#oE^Ww6&9%D2q%~>1sWV^w?CTzV~q-o+RIHCXH{URd2NS^M~byaJyQP z?iz`xGYZ$%Khq3H?4wSS4Tr}0iRq;Ooz10ItGNxzGxz` z_kh!l@<&A<8BiMOY#b-^eObWQ94`ze43?i$yUR@SFLCq}`-h{trW z_!H#84ZneNyO;VVx@-IfA*bJ>@AJdELrwXK#(9$)0a-0%>=w_d(Uh0`rZftBpo7rL zD45ndyb=cEC@1!qYrYYi=(#Hwvyql|g97Kcq7Kn*%FBITXX_7PtKQ>#{5qOA>FE$b zlAx&V%WsLH-}Zy@`=Vr@yu-kf-b1uSP5kaAl&9}%ep%TBef;_>1KuC&IkKM|yI#y*-YO%tV$b|9cuDf_X;X0ghzm+^}w zi;nQ}y@!xn^+5S%#irS)XQGNTEnlv598j}fdrg~kU%iwCaV7+}iq#hcQAgeiAwLjP zyrwa9NJ^V>Fx_!l3v{!6!Q*BUuJ{CpS`Vq0daWNTjHq~dsvgqCPz!R@w7)68Upc`F zFCA7=&5AopP8^*2LHpcQ@xyw*at>H7=3PbUFIm$`*o5tkWsCH!ri~TBa{KXuB(k1g z*hIj@8rUSc5Z>vi93peYWVtm#2Tbnp@u)0PE6+&1jIVI|F(X^bj?B}0CHApQrgJ*U z@d}K8;V|`4Td1Fnq@D|B)-lUY9h)hRmSimH%&I*;5L>M~oO=fY88aO_bK+}!BRd-tB-Qm&)cc1BaLo)LF zJ#zgYywKkpCC86nugsNejM6V9(+m}eDU~htWLck|SVf5i2EOB9dwYARiZ6Mt{24DY z*LoU~!5xAT#D~JpUsL~Xu+)%0LpfU~R~$*5A`+|m0gucgs+0Mq0N1!*%8_Emfq^_7 z;nc!)=7?rdE0}_!*XG2ll3=g15t>2Ns0{nW`^iP zG}P-YO5#%r+f6Ldhq{$wldLA6)@(?h5>8uK()}H+Pr^zTg|-t3BYx&__Tic&kFzg6 zIX3V0-VEqnOj$29UwM8s-N*>qoX_s!th6j4p%wYadS}S>AW;qI%ha5rf^M0GX4?ou zohZ57F!x2Vfzsq7(KNKmFC#c!G`ZlmK?~A#H_&I+<)&tPj;s7;dY3bPBdS)GDO@{# zRJc?uShBkF{CtQrDOk?HBLZa8RRF4pXJ%e$ti`98?agvctMQQt%#0B4nQPEJcY<^8 ztYvu#3aVe7lU<$z%G`(K{=&kR{q}c!eBK!Lf3Ck--fuZB9e~UFn)-qHz4dXXngsO^ zB+FXG749KmMA7=gv*W<|P2*A#GoglHb^GvZTjLL7s_u`^VS`!dqo>&8qB(Ofc-VQz9^k9IZKWRg zVLTOly1e!mo2#nmyQyz;Ok6Ec+x1@=_)ErT<|8~L>%&9x6$uXg=3SKJ&E~`->ubjit25_cTVwOKDl5jE@F}uPX*Jh@rj(= zF; z8A;MK3z9eBZTM0sV0Qbe8G8QnUIaiEU;}#d1MX%2z0`^w7cA<3C0L~WgERjBdp%Q-vLI_XE{v9IurZiZ&p>g%(7s|7Az8`h!N^JXGk8c; zuV>SBxDUUgu0YhDX5$jPG}$&0JUYM3O%ivAqpA*)gf|FuseuYdKL>tvR0jsWFzNp={YJ?t8+P&YE4Fcd1V(LQER$g$EJrdr?m`@ zDpe#Ybn*OhXk8?~Q(#`cj#Gw(IM^ zSUdamF9Y~S`JQfz{pf@_4ZhKN3${6=)G*RIiNMWZV|r{);d6_kdW5}=aZkm!Dnp;` z&PnXX10%W2x+q0BUC-Xo^&Gla>@`uZ+^Mh!4|8R3cC#c?KP)6#u#fGZ5w%oOU!5lW zvheu%g6igj<=usOwCp+@;6bz7ytJ6_qpw5aL|MJDd#$hiKEA{>?wQp&rkZ}aj@|)a zXM!I*?AhqqdOi(+ zKd7!Ma-c^viHup@u)FtH2?e}RyZU(z=g|E<{Rh@_&G$)=Yk?h*$F{2+q#SQkj+P^d zpXn$5TV`f~p_osClk>KI*`2FyahIo@;^N=)(fs0yqx2m=I`(SVdD!_z6{EHE&=okv z#D)!E^^>)-y@f*hk5cxy8H3kLQe``Fe={=KUNiUhR<4~ezTq<@X&$0agAixQsZOYy z*F*skXr#EmH&~tEv_fiNaX$9mr+5~5&+*muTiwz2r_+@uGO$_wOr}5MxeiG``tn-q zIO%?BnNCkwmq1?8F=ZkknSZYZ%+rbA40t@r%4>Kj84DtqDEGHgFDPi)w~YH%oD8c+ zM(Zwnfk+)DScyqe2}aBkoPVRE22uYLAJebj*(_rne^qSiDEct*tbcg2uqSMua|EZV zqB2?YzW{rhFlEo1#IZ8X&UmrAw~SUj+FOe13F=q-3)2y>-l!p}Wzw>7fD7j)uvX)t z=lfxC5yTWA7hlQ1WeofOX{R18C`tu#yj3U=`_koHV3~UTkDoVQFpZoez_*#E3@P5kjwEjql z>~aTf68r1YI@4q6vG@Y~reSEBN5V7sx9&kNljsGFgYxfO=aHu5LXL{d1!S)%`JPId z3pnQIh_t9^M=0mw(GEc$L0%1c;EkW=uR@v<J>)- zVdfNct2kzbG&cB0mvt^`@Nbx=>5KnoOmnqX1XIazf!*St25nR}Y5_d@m<TE@tDINWvLQ98{PoPUj~d5uvR)kbg3#~cFiKM@ z>~lqKX6=jJg$&FV8R!6c(uc{%2G*IAOpHCB3QA1{9k(YSvq1%);QOOnv$#?4H*-CN zqyB?GI7BCk5mj_XCRHyg?fWjkWfp52#3Lt;4@J(e4>wyT;A>MpAD!6il~+_rCw|jd z=j3Ez>G!fazHsZ=3u6C8=D@#H-ls7uXkhntST$x9IZ11wiL8}v@5qwy zE8fLYZ7Xwf>Q_gGrbdt=_t-WmDgIPnr5l^PslJ*~P0+gV_p06=^>+exH;dKT(y0nx z;o7}cyd_N#PDxL7N8Jh-`GoGEL+#lnRBnBpIjNXNO9b%+f~<7hr#RVYXp}RrW6MLW z#iyt2Y@lJlR`1LPIE(?GHSyqC=Hk1l2+?P#u^8?IqWc=AMm>LJP>K{qq)5tsgmA9J ziN&8(3_AprPO~-YRGMCVX|Y4Er79`$HSiS_AuayK+uTw#*78>!^z%$!*%|TZfed0v-x<3=>?qz1}eb@%D zc>Arg02cK2h4A~m(B(n7w1uh5Dw?;`8=6}JR49Pbd^13>%T~+7&|Tt z479AnH@6-26OjXCTZVyNuGj_*oU^>MQ`$uNMFid;%fn=; z;Les(eRUgdg($>w+7ZDQYQRBrNPgS4;1hIbSZ;LM&02YG9qGm21|Ke9e_g=sz%3y! zMKv>!(u*xD4pux@RL;%2m@Z#HjMzO{m??*TnuE1)uSU`CywG{($t_%CzbPz;q8Qiu z#-UyH-hIrWq($JQ+Bif+R(50lv)E(JJwN&ILV-SnmfII;*LG4n(W%0)V^QwMf>Y!9L@f7k>4&;s_T<_op(WcMOaymQjBZ{e3>+GQD1XqraRjN)elS|asVr?%s^dR)XsE~5+rH+)q+|F9F>LsGdz*sH0xymNtMk_sW$l|3 zoSvXAXl#XXJx`$=a@(Hf&ft}dC|A|xCVB`s5VVecNJW!r5}x9S`f;F}lqU+@gD9<5PK0-AU|nv@#f zelE^z4l$)!N{YO2qT7k8cl|nW(H2gD^*(x;@VY5gCf<93>6T#zHMj9OZ$Ssyh9&n( zQtU|3JY8Bqx5C>Db6UyvlJFxPl;e32Ds^a2>@`L0IH26*$- z)7&DjZg(j8tWaEHta+$aQi9KrVMA_4PlEgeJ$` z-{V$+v*f=^$2gx+)v}P!p2rUFpJ*+(`uleJ|I~$&|F9vF+zzPL0>v#0T;c0SfETaj zcgSXalzd8owL72}`}kBqgcC9q`56<@F_%z)nd3`A&&_%eghDs1HjTJrLOhWBUo%y6 zMYK>Hp?AG<;wlUMDod1At^4W@vbf8co`lc$H{jCjl&8n3OiPz{*KI6ujL7np4c^z4m&%2LIw8piT>43TOXLF>e)onL1B zPa?2+^-FM@NpUE0ltSPFO|IX;{Z*smmgvxA33!gwXO6AAd?qhN3e`scm3#!;h;%Vt zQXLDPWjP&*A-T&$rDHkcx~d}&65=drG}WGSY<7IMlQj9MMl!~)pyiZfCwZ>m@M0gv%Yt~hiUzqnjQ{%L%?Mi1htXK_nTD~hExe(q+ zX5l8{J~76T0yAa*A%uOVFb1FiAeXiIJU?!3P2~EBzyAe%0EZ@JY|I2>HFk|742$P3CsfM^?jhYZ&ZfDSW1Dz*^lu@E?-rhs3qP(VLk`5v2 zVAPf;`N16j#QN7sC6NxVRZ)X_(&k`2Pwr;){hh$UCWf?AdNcEjqufOH(G^eK`oWSB z*q7ASGf0QX%y{^i4!=Er{m<0(GpfUjv*TdTM$vqAdxzax(nD2{Wl@7-aw)gEG zVAy_y^qH|$QbEBuCM$_aODpVPTC-~G1GMU_M;w{LT&L|K z->YvQ{U7*#d${=Sbfd`K>f96c-1(dlUU?P8yw{_k!fyqn7X1$T(7DFrxF|hXn`b+& z=l&j93itP$9JGz>mB)_blw-r&Bjx>dt#lsye&sOvi#PBD9EB5JVbsBh+uBA(s}Xo< zb0d#fgH6OMk#~ZJ#r<3R>F6PD0ARq_ow`Z04=44~bIaMONnVscxm(Gn;xVei;c@co zR)VJ#4MG0jY5|A=eHkR?tRzLh6>O|^lQE1Xvnbb*+N#0yZFY*g6w|Lmuu3I%iP4Ds zNhOsw?hqGnP(B=E%^&8hId|qdsk2{Jh_-x;Ql#>mxR070Pg2pibMrT=v>S=Mq?HOt`$e-D}ToM$nke|Q|QL;RVF z$)kLowO3mm5~5C=Pcl}1)lC5`ug7TwIc_Hvh|Wsh`av0*kxjn{5>KevTwLZMA&&I< zO1VYZ{pKXRa7Se=bdOR4kA;p_?QYCL^Wl>9bVFn65^=!uag|JiSkhy1ZSpm12lw(5 z7xZvr+<|LhR-&!%!TR30ytIn3=MXxLa$iGqTw^Zl=c-Y~Pvj8FR2yeh`Ie&Vke;)4 zKsoPv0K4UJi`$zpHciZ*qrJ~Mh>@sZok^pHSYc#^(pq6&9*JmwX$JNM89ttWPZ4mo zs2s36Njy!i|~>wuZy<$>(?#FgLga3IUZDD^FXf5Eec= ztrKfQ5#VbHry{GX75xjwoiZz2b%*lC{|Kn5O_6w!-Wu!w>g)!S!w%WP(lZMvfd++j z*e3b#-|r%`D2{`m_{8yt$!L7E9*F9{>U2gP19{;tdfyb#~S;F4GcJ)bwaa z2b&eERkX2$nparRo55PDGwrRiTHA%EA@gnea&a-O-=>YQyDQ+k;gvqO}~` zvXEiT)Q*Mv^<2BX?-rTkx)TnwK}LYavhsa@y#kNdL|bhwt;O2R5q|kp{BpHN~S&v5-i^vF0F_ zW-aa8F`@}h5zY3_wg|swYI?K03&@ThM)h%vqa9s+4f~z5#koUbNugOw^`bD(^750$ zY>2OuM{2F=+oSooKbVz7m|ZQTDqks%<^D3$FgeC;)*QZkTZ1&56c$SqPkP6^(3@i& zq_=zqaMLhnu0PHzeuhwz4#YAh*N@Syem$o>BAg3tt#H&?Cp7N!l}t&dBPVK=JmHNs z$_@xeR6=+3?40)I!#Dg?^bbbxDTmcwK>x(^^2&7^OGWx9Jt>nSCfYbkQEJt>ZOXh> zWw*Eg)2DDM(?sypPH)H2$GV-fIq8ND*GJ>?^-{HLJ-1tp+$B?w;KqB&d?lSR9t=_1 zY&lLY__SoDKQ>opLa9fobuiUKJ4?gS9y+X;4gb`%ag(*(*UnJN^#k1GFS)a7iN{%7 zXyue-t+@-e;;$@MvB~gv6$&y=C={B|n^)uiC-zwT5^RT-61Vxp6eGppSu7yv9BP4g zF^APyxont9t1te}9^!)R`BDqo9Pba(e$ev|U0sA9JI~^A>Fq0=t~KyKr8My$F$Sl( z%A5WPBsUE&?-!WOQL>?6&#wp2+Rm2j5ElNa5s+!r86!V;dNjiraGx+rTRr0bPg_f& zMsp>zRpq%VQ)y!|lrvRf`I(=fK*f@V>WkYg)Dbsj;Hu-lU9Tab@&gPKNBF? zzvn#(=)X^B8bT}R<^qNJcuhmn($B|BeDp{!Fj>NN*q)(l1io1>HL^m<9tsMuzgBYE z>k8AN)v~xN98I9&X=cF_?nXpio8wU?~bc(cM+eXA)wHWByYj}Lw#*Z9klIWbig z{DqTa6bcJ&g$O=_g9AFx-)M5EcUqtQH>Z4^vR2fns8!2xSI37IBLVeKB)NfA3;H}` zOwI{%H1#|=V1odXaJ%rcvow7H(xfiTBkTDH4QmTttBN1V|6vUI`G zjUKJ1h<@YQA^8g@C&<-#fA`aK@eBm_J+K=r5&qy7&X=CV8(>_sq^bNkd;lR3crs2l zTp;fND$i!^s{Le%COd-Zj6B2a5jH~y3_M0%+)2wvYIKTBp~MdoQCsn`B^C!_0a)? z!n*QUVJP$nD`j=9=?usNMS8zduS;qUoTd?FhTkTP;a3xn9CQr#YMU6CLsLRF=dt^7kGd_0@H`=5M_(|LYor zDX!?lpEyp6IUg2r00pc+)g`V}tNw|_jXkRVXFa-*4^3Ks1Fde(4mI{R84t@k z^Igf=8vO7g)o<%cU)F+K^i73ZX<%gZUcVtt^Jwzcp4uq7jGqpH!}5HrBWPgv z!@9JNCYSu5830Q%4y?xZ*u4$nI}sA?uve}v?RB`Xz1Ia{C<@!6&Lk#z_IBz(o9*zo zV(zzdnB>%AdVaJYOR~<-v#HGy@TPBp4ZQ9sABf*{md;{@ zkH|bvwdgU%$DEWS|HxfVL8tICyk>4pV3zACpYiJC#QO|-M^ygBC z(_>?58N)uWE(qI(?*qu(8rP-m^M-W%(1e)|)Q;fIi>`6~!^{jB;ZCjh(OEHeNz#Br z&-a)rrRryr;1@SG1U2`sj1SG-u`Knmq}O2FXovVxSHuB{UD&h3#&N^3`RFXD4#(ai z<>r)53Yf=yqAH^Nt^Id1v`|3`UVdY-{ttcB|3(e&lM)Re4tF`j@cRYiY_eox1F+yq z7lG3nis<|gc=M9cT__`kpmmSQb4zPF{PBb`j-#TndpF^*^X!<^RLSA<1X8NCr~0z< z6>7LIaq-QlI_OOuGyT9U%vp-W89mwu$4{0wzS%MqaJh^ed@l^|*xRE!t$h?K6)S9W z@SD=IC1(KJPE@cwMQ+^Q-8tE&7Tg^Hp_zEb#zG3w2VxHJ$k}c`Qaune{pPn5IFQN zBuDQRJ4&EQMSaZpAv0lqxppca*K(U_0PBtv-We)w!9oTjqpnqdZ?&12Lo*W6vh(`& zjO?4gS;C)7kSt*(RdvEziA8K9^OiQR_GkJ_)*gCp$5%a1EzD!6SZ5IdIjoGES@JQ0`${mR4dgt%FB zqs6w{YVpjZ?H?r0MycQAA-3!y53t6c4$Q?rW;y7?@_!Jy<>}~L%j`|rIbF(BB8j1w z->;<`1ZFYs6fmE(9;QovOF8)yGlY`f?NG9ag;yW{BYZ_n=4A; zuiu|Cp$@lab=~4y%uFpe3Rrzk9!vNljGlTc>PMBjEpv-yIb}et@nWkMA=qLH#+Pqh z_t)EP4Y}Dj*&zw$-p2uPrH!rsjca=OC^FT9U8Zhgt;0Ap3^v`Pk(w(DeG zEB_acKswc%+8VbDIKQ~g{)dw!OB8YS)2RH+#<#jQNhN=Te+Y6v^C=#vofBSbt(i`F zUh^~Gb`Xg35-{VPVg|h}9d3Vu!~9A%0*4hI*Q_ijZ#IN?2Mw&mVe%JUInBvl+Xyhs z*DK-Z(v(m0x(Z4^ezO{%b}OE0o*_1>L4iUTB)IVt^)Wj8SB2`bO)AX5I!|y=@rLtJ zteZ^I%OiARDGZ(W-o8|?Ev=LI$Wy##M)<6+P0+#Sl|Q)4)~{XAYh{~%yP)&@SMGfA zJ_s8cY&;-d-DudvTTFR`75E@!o7c!d@#J$v=|=T;Jqvj4IdaFa1GT}8EbF%0T3LOZ zv*A-RIpg5enj-7@)AmDz_KF)hdC&x4t;nrAP@S!j+NhEePLZL*AFC+K0JHFCl{SVM zhoyh785mPjhX4Fs3-vA~HCf3|uXSfD&>HeuY-Ac&z*nhtP3Us;2ys&4rwTGgrjgwT?=jTTfD(lfO!U2WnhQa8pRAW<j9eGu-6B}wz8~^ z!iQc?=?QfYM>g;!t`n?=D)}PwSXsF}U`u2${Da3$UpXa`x;;Sp{rYX0u*7HluOt~d z_Kr5jHC{mXc&)IIwt0T?zmKK=PywOY*?_NNr6|_D(`w?`;YKSad!W7Wvtb}h1Ex{S zE(27fO^7T8ZAP>~G9JmdH-M?UKJ;){QDfci3kgiP$P;E3xyPmd#alwO z8zwawTFX|(1O_q~!VmVfcy%U9_;!QeG{zzPPZ$cioj@X%^`q$-=HXb@WUtEXHH@Ss z`sgohIuE#UP#_C+wKkWH}fVcYwk@)ist>&7p4nZvbXXix}Xf4Q#LY5svWJu#*xvpHTt z?ReHE>8*XgR-_$ovojH)P_McNf{6Ft~l&z;bPMs23%qgCDge=F4 zlt9fQzmsAdy#nC5CuW&9`J3bToHMdHFPy6%>6CI;+`(Wqx4C|cch&On-kFR(*@jsn zz^yu$A(y9=gk%1PaDNvtvIcc15IshEz5!`AF)Pa$#oAIUQ48>`UH^Z*pj22J2&1~Z zT$u<>{^lmvmeR;vK@>~FNa5>iZV{QOnkHF7dt;CSjk<{1Y(bx<#*-RRL518BCcVkxdVdLJ+;@_0PzLot{46?E5v5 zi0N99rR=)qpiLcpmSi<}jS^4$(lqsw0qEcmjAV8t({+qS_T;gkPQZ! zth$NhstzKRTWwW6o6&dda1e#!cE@TNd3Ys9!JGr-6&4oe7lejb^qwJGs=ldF4;(3oiC*M&*qS~0@w;F-*aL3t8?ZYJ;Kl>*r~7-8{F+N3$ADa1H^1_rS-hIE0iFvv z68`l8Ad0UXd!)V=>>;``P?y9?u1HsaYbkS)oKG!y-f5pDy5?h}$%$x(^L5eCmS{R> z*Kpq#x_EQhzS~CIZ`CLd@@1gQA^MmxkT*PNkEt zI!XAVtsI}4C8oqPxyjG1fG#zWCiG8bzM;ADS{KU&=+?u5K>2VUFo) zNI@-hj=YC)ZF8ut%z8S^9CrH3*`?6ss+H~PYa15DLB-INtw!{3bN}hfBSKuT($L6e zs<#NT@vmj`Qdf+DV1&8TBxKjE-iwyHro zaJjyQO3^Mu;b^nCyTQe;bFPlQuB+|L*MV&9jx?$#Xc!W^s!36ZQlZ6sB)nR&8&Q%(_1R0MsEaQ;v)^nuq z>752Zgk8$HtJfxNqHa(+6Ij^+>Er$>N-?w>S15TOdnAz0Zq5dryYfELewpa9%Gy!Y z-SINZ)u>W*~JWKAqh9Xqg$@u3gh}fB*kh*scCTK}&OV z`$)$EZ1M!IBPigc-6PeKJh}x*>juSDUGV$iX|#L=D*DOh?=)lKC{? z$M5sxg^wLQ^i0ah?jlHn>ew|9b(VblbOpg5T$UkNuQTtJ z5=F6Ua>y|r6DxNT;zJ5~*gt9=xoi5U&_|t5@a=EqA+D?5{yHOWJFVseHTg1UMg$~D zBoUv>@2epfm~lEFO$er7zT$VzxIYB4l<3F=&Lp+QRp z4S^}=oWNG5zfW|D^#xzL#t{*o7mRynP=#LkvQY4>zj>?ROK`m-Rw1!#=ebUcmPngR zwUZSkhdZeM@H-|g`xkEfD9H`T&uV7x-V+A`5cBPvg5&TE-Q(W+%$Qc!JIgqP#R)%n zPJK{n1}jrs-M+s*QWk7%`70Jsaq???JF(3hrQP$QaYVaR@^r3)!W&9^CJp0JVQ7Yo zM$j}qiP_aF?1O{fAs6KxSzYvhOnLZn23heD97i10i20|-FnQLgG9LF1{t#GuFfnq- z=`rrs&}Q5S{(`FXwd!Q9&+J^t)2ba|HbN7xSd9qqGv&uOi5syNHlFBr?y;({8>wW| z|h?`r^L49~WALyqDx1vw$K*^bMR)#TEprYUvvjKRh8{uu&A7vylr#RM>FHwu*f{kbEKo=kjR*t22*S9TSSa$U6vf4 zVnf&(~n|@m5HyN(t!_!z!Xsj?~MKB#@w-2dcRer4o`LG^N+5j=Mk zjJis(EY?#NO-9z_Pfeg!T2^pF%5bxfnWah|YTU%*?}b{st1t9l#UM9ulb=89{b$($ zlU2Urkc_49Ilp*@3$C*lEzYwet0Nb+2?wUT@|MkCw7GPPKp&sUpkX`&KG%V<)2#+| zeoos8Rp{Bq5GDcN`kAv0RBno*t&_p&V2gf(0v4wrtv!I)xal_7iI0TbrTHU*8IpcGZm)mx8-3QW&65XjDcj%K| zP0EFe%Z6R`r<0a;^_v-jNv)ru(?y9I2Xfjyo{bC~9~)%2(j!=i>C!usy{xWA5|{O5 zlAP&vxZbSwqV1@uBW#JZ2;Qxne(;`37>ms+~zdCA01M5y{Ju)*IRqA}GGh!B5VsZB~6kCtEQ25|Pi8Vz!=Bce&L) zaH##QE)i=)ZF>GRQlFUMm~lI-QrvC@?P+N1aZ#GTGnn_dO^RE5&6<##(rLHQYrIJV z`7Ar{TppJ?0*s-ew0Tk%L)?&!QAA%$X1(AjjWm&CCU!AurR&oA5trop8Mh=cNb@7K zx--&SV|p@7%_8?%qB{bQVAc6TZ~CbM7+N`1t|EECBFk>d zuFOGE^NqiEvtqd0SJ`aZZH0EezlR{sr{@4w&e*7(Gfz2!36_%1Miz_+39vbr%IJpY znot7BNVr0hnAh>rLd@gmRtpr76i03Gf@8HsVohj^Z+IGsyttoRcPaYUz zAxUPDnReeO<@;BBJ`n{^yYkhAK8f%uQ74mK%A-*@KUb!G-?x0sy$2YTh*o6<;f!*{zFAl7YMc0vQ>MhI%07aj#=~q@(w=2D_&5!IZ z&R^v}hbz0?R&72DXA9~DkxZQmIV%Koe5pYljta3YykJdCB_@9AaUnS@8r0@2XTJ6H z(^OpQGu*~g~0`wl76YTwOgD=ap}4!rk_5qw}q=@Hvyi*kW+Fv z*0Zd;4d;<)aqGEYt@!_B?W_3Ntes*)-#i zuT#9`+*kGbz6A&q6GEx$`cY0yHiiICBcZJ5uT+b)H*r$rdMHmeA`Q!Y@A z2D<*GB=`ONi1mjBg!|_9WFMRZWU6E72paosS1~n+WnT_%HF3WicT_v{B0h_zboh5cQht;_a4zq@&XDabP8Qac1*Pw~lBGP97t0@8ExsOt`uqm0u+j1g6 z>W3Cz8{F2c)b>(l)Xhm}jo~G~ezH$8w0J*X*u&r25uO^uH?VbV z1XL)Ue}JKpH0AO_Vm3)-SsI_M7eV)@?ro4U**4qW@QDzba{G%&XoDe7lbC)EaNHe zMWr)%+P3pNji`0<(cUtIeBF6E@Jx?czJGhopj(~Wdb*&VOyjMQPvo{%i3?Dn!jE?y z%iC(x#%y9-%Fr_nQCW_l?om%V*f0HFVVspkj)~6x0Y~D~u%jE9zf)~;R**Yrck-3( z+6>Hj1m;!Cv)MHC8r``z5A4vB8Y^-1K+1EIxR96Hj-6KRWX@uDI(WfF&|FGDKMX!0 z*GGUBv3#y;D1K5Q7P^P>e93z~=_)!=Z?EHsjqJsDCvpbW-I|57a`gExEuJ4~rl^wp z|Gnos;7y|@vAT<|ly(hYPT{YJcnKK~Cq{k50G2Zhem-5CQXr#MyBwLm4Cf*~_&r#e zH=lOLH>32`@(e7(lF7F7!74HcJ=6BSzAwtOiGsW^nNnyhsfUfIB2BX1>6*X8Lhjm9 z;@#*->H+JoJj=2a?@Zt(WzxJyer~4qo1Udt=)8 zItts(%!}n`VQy@}P&)tqu&dO>YB#giFXzSa){*7xWYD?3h=cNY=W16sXcqYDtTYo> zMk+SqXX5F;x4S*1a|=yw*>** za!-$17>j&qM_6>MJ}XQMYNzWk(Dx7I>>yL&e*$N743O{&YMR={f6h%Wt?|one!8T9z2lEK zKQwGMV7csRC3E^{^Q-Bu)cu#IE8hgY#gA&MCa}9B46Vmw)X3A{<~fYqc~#b*Plp1w zty3%a==f>l&Bx<3xsh%=d(`m~?LtR2bdcG+eUQlWnFtyAgpvCvqwKYfd#}rL%O*w=w9>5Z_5W9edg5CNNQOUukO4eF`CSpbJ zfcTFdpLcPZ_1}==|G_K&srtH0U^DpXk+f0qkr-i%VQ*INpp6f^-+w_LC`9yEEWihH zFieYX9;@{B1rTn@*-#ajT}|WV%6nT;6BA$JJeuMm9G4+oyU(+Sts*ycHjJW zw0UUdVSF8CqCMGg@q}^ShrMX3t3^k1um7qXa>DWkJ~rN~j>qB}F%8Hg+VSpn;P^jL z=f(cE;lF73Hyi%){W|fBiC{~q5dI!l#cgcFc~u?svh(%>OB)Bth-?m};pZr$9g<{r zYfpzu2mQ#b*BO?q24FJo?qk2*r<>E62sk0;6G?mZ$4t(HZl$A&Q5Rc$3ft`p^R=^S zri-d1sxfc-50_T;pPj;anVX*svukRE0v}(2N#oDxriTML6J-+}d#IhlvJ32B;?$d> z$_l6hUg;$$<;D^II%>@&R&rcQYn*k_V4;A>=LhPFy(rpK)s3CUBV(aZ! zV0v2Jtq68dt?g9QilYptHCFX5^XBhvtOV09^cJ!ns{8R#YUL{s(zoRF;}D{@nbi{F zvDg}?MI6Ds^m_Ykdgnto%fOO$J4!@lr72laz_7?jB3H!bMjrZ$-nuM-W!m+aqq8qQ zhU-S$+rsimk+tPQaAr*maSSW?&hVotpU9F2?3s_iES!-9ld-y+)gL9{+_}uOC)-)c zy&}GAw99Y%2iQFIJROwe-}jExLR)*z&NA{463fA>RNsr4r2~A7+kB6bx!k)B7x?of z`+CG4_CH>ooQ7v5KE^MvJP{<@#{BSNfcdxD6+kBg=9fCs^RZC7OH$4CV0Cd|Sauz?o#rc4`6JBC&t$WaMR3Sxs-3jM0 zz@dRbS7XL7=!ZMZapUj_?FF!#342;8BfftM8|lzW{1BzwOSR3fjf!I#Q}`zuLY zE2+%FxBY~c(P%i&lqM5# zk$L>?vL+tB9#!Qg)&Dbk-Dl@J2&C0mQXq4%#kMuEdoRr0o##}+o?!(6`eVKI}Vq*NOJ%vr64l9NYX$9Rzehh`2BSa=s>+ zd$9fmWey^+$yN-kp7LQBC)B*{AIEwl=xgNw^zeQYpcXQKQD@)n&mN+d34kagUw8a7 zfFBoGq{6%p(ATfk%L>@QK#6yGSpke5U{G9NGm}EzuFvm3HK9R+`5@=!CZP-_k>W!s z-etudND%EUOh||L|5ZKct-Z*{Yskl#NqK{LRLi2Wf*@phiN1)xm5yVBd(si*)e&8h zJl&+e9~muT`H$i+WP#*KCF`!X5F#HM3eutd;xkZ|v2uF5$%CIAGcXAE0RzcAf00kSx8q@#0 zr(RA+MTNqjaIfzBzv=T8!x{&Qu3TPb&>Ab8|A<6~X{LoD8}9#!I)CYPc*#qjyWV?s zh1-S3Oxg9yZs4i#Z9;6{4q?HDuP^i$Sf=}3PBMfhMq~U~h&IzeEXihib!$Z-Gkr3U z-R6Y27@{;OD66R6vmnz~B2VckAE3?LCz!u=hxtjO?t}Bq*xS~R;@F%FI@eD=+4g9g zZ$eSnyz+A#hHbz6M> zdGBZGkT=}x>+d&n=19LPFB^|5R4+WqRs>CXW&|gFYI7Zn+q^><{sqOh5K>w?$jTxv zI&6Azb7BzCEn^YW6%D!N<@=sw3t|MEi1pF%c1o9wL>(=?hwHfioW^#3tI@PN4f0nxY4df0}T{LKd=v zw7!aGL~wcEA!>MtA@gI7%eX#;bmsaOKhZZ6+Aw};VqURx|Kh+tfp;@CX$20VznR&2 zQ8h_KI@SC5{=DJ!#XnI)t3HF%@qy)pN5y!M^lV4Ko*CF{b@DNdWJAj-P) zGP%Z0tHXZZNXQh(3*b6w*Wst7&tubZr1WsVCw%p4ad($VH`kiQVxFVgUEgWTaHMR! z&Oe!rkruR3!6Nu+a87)63vNYiR%2_`GJ~haFLO|BllD#4%)t|l35&TE?a@LR^1&VG z4-^-Hx|z;}X9HAJVLO|IoQ-uk8>OqwZQQWoZ#vyyS6!E*cu7SMu`>6UVM>~8NrjLu z*R@C9IvSyG9bEK$Xli%X;TmaGm15~YY}>YAr^K@3>lHI|Zv1sa-TH||GV_DNee;`) zM215Xz;&F%V^WX&1=M(6ix+nEbp=QUt!L9YIbH^h>9G&M(Am*4b~fC&Jw8eT?AT{3 z^r(R@Z}i_^;dc|Vvwo|xTamdcny<;Ioz2y9P(Ti&TU?lTf~9+OCyR_)f+w7`!Mqx9 zQlX=j=7(T_#eNv@ZA;D}y>|6|qS8uTldjTjZ_zd%93m#AXdM#^Ope?TgDd#!0&uS= z=%gzh#GX5`PM<(o`{q8;DM+{WMoRo7?e{5dUqQ6FMd+BuH!Wph#WZ{#7P&1yDG+d| zJd%~2{l)K~LN24|<5}^YWj`;;)`VTpKOln@i-#OsyoR#pqmL{D0;7`HhN_)TA0W0< zIHr#wMWu(|8vw9G!C-W9p0n~6arTL{KZHHPL){`w{UCVlbq2*yK_Vf5Vh=i>oo5;b zQ0&|)=VH>fgEF8e^)GHf23haxNn~<=9*fTJu@N#aUK%Q-32d9Q;v|RlfA4K(dYwU; z4pVBAbKjWvjJ`;$(*yI7lQDHol@_Ib?3uU^Bn7N%_`GFV?5p6Twr$Z;cHT;Zo@oXI zQVZ&fWQafv$vTKU^+fUgj@hB7Sp#iHpl8IKoXR(H(+bZ+jsA<=}F=uFAhU(BI>WKOFXH*o9f|Td> zuUE+7yCP1nor{jXl_E>od^Buv)uy7gA^zgers7}!Ca-_?)~$baE_X$Jr`!cN#w0zA zj3LN7&2ZfbhIN}wRg%nQ>aQ(FaZMVE2;JcJFd(6DebW_gt!p zh!<-6X@3h(hHL9V5qHX9VrYRsFzligt`sbEYWbiembg6hXX$5;^I2W%yg&y#v#_3| z-E*4i9@V-|lDs4SWRr)IT2aQx;OnOXZz}4<*v*B^`>60EFWddkIkT*sG&uAzb$lM{ zVM0@h<0hr2R19=USQ(b?g@@bRik|+bOZw|2OLb)A;8Pp@1ca>9@b~+jP347>R_0dV zjwvs)-@CXMApM@(qn_~lvdZZUE&vrXt)i2f>g6?5M{!)yp9jLM8eO9IaC~voZJDE5+ z?!~D2@$Z~~a-3>WgHdYCMHN38wNv@lUpAg|2Q4%MahMi8>=3Qb;Jy8X;vZB2OBigM z+%|hUJmifIHW#gXqqqQM`?j>>B3$LwGSM618m9s9;Jf?5efq$2r;l zNV&}1uSXE&5w_oI1;juKKtz;EU6ziUTD$CEzWX#g6Gim$W2v+k9 z0c%#&{-Qh1?tr^?Q0Ur;pQfwsx=P<(ceozK@1h0j`@W3@;-p~6jcj=`k=gVzbLS1p zqv?W89WW+((PAp!(43Cul8voL=l{m^(%tQfDf`-}u28iF4=Z3W?K5A~(5Z5}@}vN} zSue-M?w+v{~;GSsaCI;Kv6qNPG!dZ;k-0zaEGhFKxRi`3tpNGP=I|Dl(bCV3L|e zdogs`wrpJ-?0V8ffuchUwVilLU}kw$Mn%o0Kb@(B@4Sp#?S8SQng~)&I=etkBhIBqzVQnr{C@ z=9lu~vf}-V9kM3Gju3cgT_|nLZh)dhJ^!VpMsV7poVgX=E4Q9yLMGC3{X!asc+X!VUWTd_Mab zM07OqL2^v&ARD|{zUpL13Z=u08go;V0py#wrMm=V9aSjR$G3zDMvI80kRriMLYSbh(-1*1+H5&@T5;xv}F69NW%E^Ka5v=W>=n+70t>JRast4s9NrkH_b07%5fA}(@46L zMif(dx#@eCFP{H3z0=+o&vDmyb~^i>>Y_(d$q}4P#!)0f8t-?SNy{n@qhkCecy(#t$$C;={eTP-860WMlouWB`Rl4_4mHy)UN9}->)Z4|LgrlOfd+nyNx3n*`B9QxRId~3 z3s2;Cb?eBt{GD-D@K?ZR`6MNm&&!}~D+E@4&3Jd8yJoy6(9p7JK__&#G~v4EJM;3L zn^N?IljloIlaKYGD|nnHLW=c6`z@k@Qiq3jSHDLi21E7bMft+adcz`-<9CbLEh91M zEhT8f=Q&)ybM>)8TGMnAFlDQ{ETldm5fr7A2+^VC)lA$I;_oKJupc=M@^wWK70s9` zZIib>{^%?9HA#O725OvH9$&7|Q^^$qn`=x_*mear-xLR`zW@;LtDJ${!}+7L<7kpG zjC>u5;;KQS5>oG^AqIVx0*)uJ2Gf=McZZnkcEE-1eTE{l+eB!8AN9 zc6AtxkG(olt1u=-CZzFOk7lfl-aOvElig_Cda3!w!FTHjMM05^f9kjCz%pMXAF0qF z_C^ntrQKGECWodOPRB17LDggdCeMh}g3{xJjCuV@aBZ$=*X#Ba6`5tv1-{wN(5387x5{cv4I<)QHDKV+0ix{8QRoBh0R&}W$-CCle-kj%)NkuLQE40^V zA<+Tf{YByBPJS*oHMcDEU4=1x@y8wbzNC5^3*SP4d<3%=3TrQm2q$f}<_dgP<>wn? zo-oeb_t=bYnAX;&*0^aNylf2_N**03dy6dJ{ofOXpqsY8wVq{_)29$KC9_4sz>Swz}mE3cRrYUzJpu#9Eb3DAY5-bbvc^YPV`w+ zO=J&$okrKB$Imxjo##8}zV_PF6H(mf3c^c`LHkK?3$gA?%JKy-T=EFxD}%l=2Cy^D z>2$tQHBOg$MUh*5S9CFa>a^7_Iy39uNL<$l*5l+Iu>kl~(c%=pQDK)jG5KD!jQhqe zwq^U*C#>#Xyce^}WzS8*m*{#xXCY$}%bADZafq8lJ8u=&b+^4+21NSUoHM>MgYIn{ zK6XyBg))yOH>2%LO%3(oVv6}wzZHcg`XpS#$x5nndFouQU$*5;B<8y{2A(D^lfdJE zOgg73dRS}cld0bl!fPuv`PVb@16O8xW2gdff)$9}))N(AjEfk;<$3gzr|Vszz_I1< zC7<2e7sxjL_DhzS0DDwgKi5v3B!1r4ymVA#boww^VOM-Xy6@_Yh<1MTwi zvQ`10-%sYY3e685?E*#AKpAQ=d5=3SPIY%r%fdbiidTU5WWTAM+Y6Vi%{?n|vT;+? zD1P!X{3W=6*EM(8Eh|+cc0anSL(@)^-+F#4tpBcc&5v}fsA`aq)Q2B1BU%n12ecLy zQD2I;+R%FUOuV~M{u~5SvpKElO7EQr{!?KZlM)9nk}R*XXgqUxwRDrv2~rTEZV6_c zNKaKS>GjJi#60QsGZ`|nPm>ZSyo@D{ugsNO`C=s*DtG3eYiS6}A$6v#@?GsMgDTx! zve4q8n8x$<$?SfyH14&$@Sgo()i73=UxOv%>anL}1Rs}cM?%*(s@XLRd=o?;$=tih zKH7uKmjPTnY+S0y=BaupVl$)Dt*ixVC3wq0rg;_u8CV&Jw&r(cJK9;g&phv)dqn5X zV>-8A9R&A$ihdJFaKOGtP@LX(;-774RFVNLw`SJ)HO3;q1yOtsGzs+tLic%;S%6g5 zzKZ!}B`Jh{QYXfoZbZT&h&*1MCQ)oMWkq=nBlSVhV6(hswP~}z)TwMgKOg%`lP@Ub z#ysU7-R{JeI=iyn({yJv+~ORxt;J?3s3Yq>UJi;svgyH9XMZ^AcL9!iQmHpqs?Zpa z#IQA8JEUsUm5m?w9E`QLQ(*$xT_`FG#Tbt3uc3B?FEnuN_F(4->OEMeC3D?0{hY%w zQmNk7`>H$fyHzH}H=>_;wQ`$WiOP>(2eKEA>4NF0@}82&!P$ldv7Wz7g{TECS$p;8 zZFYK3U<|GdP`q$>&&^23T4i*#CUugjL8IpChqQU~{Cr+_(k=fvnCkh_tGiWBo8u!Y z`In%nX8sP3rIp>{l8of#4Vq$Kv<OJHXTKIO^rjc z-deG5c;k?GBHuzD=CCDaL4ed64QxYw_X?_(Sn4qrNHW#Jud;yq!hpNNaK3@2DGY6@ z?$iKLES16315Ut#E4XH*#-AYi119O#kF*Dc(O1BZ2^Z(k1o@Vkm5)*%V>lq|-B-MZ zsE_1_W2rms;i|QlccsSnbfoZ772+@r8738tu!5rN-YO|4QjJ1Eh>0wR`QoLE?BwKb zmyhc@GPx*dk1T3cJ#Q<7{1po@bci%!(7beAnY_|Gy25|eLK9~r_`BsU{`Bbi7D-x@ z(ODJDf$hp0K?ABTYGibDc!An;JrH+dS~F?<6q5f_lDbdl6UuOQiVi80W_MSK~Ri>&YYN|kv!nl)Sd>ZaUojb9LXUP&)Vx6~a1)*8DD3&tx7 zv-3r`sz4oU2>eV;Adp*Wu>M^s?*osh%^6H#a1zoK0^#X1^PPvFUZT_;<a00W8r2x@3oMJ_vjuWlq3=bL~L9h z-1hhXz+U=3Wo1}OOU3#oiia}3=qBN;1Nnk2!u$18li;K`hle6HIC&drU-_7ugk4O6 zoa&>Y4E4miLh%f}V?PS2`#i!`B^fHKIGDX|YHlA^$g;%51Cpckgj9|q z_4CKh>`#(rTf&|=1KX!IJXv#d^MFnzb9>;;%A?E0GaNvi+aN2Xm-t6`RFpE+wU<~& z-dQGRXV}E!IsFmOl*ylMm5e=n4ru);4=6!D;3XDzgN(-!21l9yEx3J1#a61>wPUGxw+zCFLU*f-YM0BI{ z{YYE4ebCo>AzW|EZ+nDHcCnFpVuSpzTY%Dc^T)p$X8wmE^}muK(3Jlx8UC+i_`j0j z|4N3yRPg^h$?)&Fd>?0}E58*g!7PgL_TJ%3B5ucB*xSy;y!a3>!IVU<$AF5^($d@b zby;JlOD=n$I9EUHYjeBI1>cAP6coj*p_5?omGL0#kYUPcaARC8@yufm?7tRyTr$Nv zr_D_4zHW?11$D!7L-*RqfiK4w=qL_dsx0x~tY2=-zm2Z(YW0K;7hB4pRV_BQUez|c z&AXI^7aEJ8nOzNDuU4N5K7UGME=im${WyEZSHezA*$#ip|HiA~9AUXCh~ls-!FQ2c zTCkb7VqN$~IOK!aLlp`CQ@frH6~3e7@{@~_j7s85`k@-b#kHO(Q(rRc#VD|o{QSXhlpM+J-t{?;>lcqvrpF~FRDbj3#*DfTM3K{ULj+;^^>%bDM63Nch zeUZw81TKz4((4iESMly;2N&ovr-0~@sIb^UYk?EbMs+rjx;}C^i|Wm~m8KTtTFBsH z)7umVQ#JlTPvqqt&3yo8apdjBIKq?ZOv#~cdVNE{JJ0Oy;(qjIT-f&844Sb zVvj~G<7+Ms7PrY_=jp3XRNJ_Tf@byNlcBq7$p%tE$^q`VdoyKsNgc-u-}?F9!<6h) zXBn&ecy=kiTHMw8#ZCiWI_R_VF;P1C2U|hmrsU`K{c#J3(QM(sB#3NDFhKt-i@#2$ z&g3K_#yznK`BGe*fX>{h?zz;t_EVS1&3W?YqY$Y_MHTXo5cL$%T_GJh(Dxm8EF#Z} zqlx<&+}a5ZG*$M;GDl=YczLaTstXH)q=Sc^TTfI}_ZmQAJNHp(?}A=z^AuNdluHsS zLJSM+NhO6kLZY@V`rXbV0jc3iTB`rN-J5l8x>!-XNFq6XrHto2KCj-Vs@&h4Perq2 zz8x`4lq@C+ij)k=AG%sOe$aG_$Vu;xXEbDIXLmNfeJTsD%<= zHqON|l^?8u4N$-9$5CgIhEF~*<+emS~f!4BA&Q{v*madyMT%#a7Vk8Lr^A|CE z@IC2B-9spGt?htu-*K+jm- zyF7R=;-=o3u!ukX`=xB9@rc+nWZ-dS90-&$L6m7MhS;u}aoK9hU3I??%bQ}weZ0aK zWYv_gF-Z@cEAv}o=JYo^ll~A?n%voRGxLvGORZeaueahqzOL|YQ;zWW}HZ?Eq? z(`JNVu3#g=%pQEw`qcb8yr;a?ApKlo$urwg9nw8X*~mOxQ)1Y3aNDe;C3ko&T|sHl z%A<~H*0)k&K5;!nvb&?BH*$l=p|~tcixw!winpbO0>#}6 zElvpTQp4Td2_7g;&=v|5*I>adxP@Rr?j&@5``o+F{?6HQpL6fC*PoDN&N0UvW6m*t zueGjIu$~DA8*ge z{Be9GyNp$GrUA6$ypWZdUUWH|i;NG!Z%CNFuP8$#J~Tt9E%hQA^Mj#sl{Hf~hX9sh z9M?TMa&qk+Iq32kRP;0r)DONFlO>%TwohcJlN9XZu@*J zd%fE?C_BH&sg(b|uYA&cii07?M74b&sA=vfG&u2m;8n@uVui2O^*c+u4~ zO-m8qTpb_REa*)t9F~y0;bG?)P~nc?26!vx9_<^MtX;3yjAh*qTXd%@HCE*Y_ZkE=gXrr(zDAU7A-KIRyCZ^O=XP*+iv$%MqF4p; z0o+BowBD}$7ofN(%{+(X=vLX%N$^M;pX@NMzDov}GWJCThN6|W_MCa8>F13gmWHrKYx}}-k>i6$mwWpg&REhVN|B}IVE7*; z73^c-UxSL1U#5hxAAJWlj@TN&e}Y|zJPsy_8(OON@ojsYC!26VdveFUEn0tmAobt z1Sp-&VfF2hFNxC=N!kX5WFibVgZ=JQyEYv9m9$UkZPHOBMhM!zUHv7ggs1g8Ir>z* zxO`9 zB!0S0+$srE1}IOac~Z;|?nyxMDCO3`!qPhLFu?dhbXOUuiUqd`50Pqvr-sBrs zBy*6aHP#Jv%kD>#lAJPI<@BDcZsJleTrw420qO*$N>hTAnu_mK+nijgvlzwqJ{V%93qwx3ehE2j!$7xj(yAZGHT* zYNyPrpD(z@adw#r5k!d;S(s)rvJb+*u%ePbfclUm(nPfMJ%(sR?cLkspoJ%j>S5|u z#0j1(1Qb5k1--uPhxwfO1{o~^P%6c7H5FW)x*ci_T1gNuf=^U5M3%}=#3`np$?JJw z@Kv9m1m*m^iLnb&i<3)z%2MmQk55INq3B=91mjU7S%k@FnEA;)oWb_N1phyZwtrqT zH#6gc4;|p+-n;nhW6{DKWV~;N_Kx>UcW}3(@AJ0*Lj=jX8-iSe=_9GBM;ex2>A#I^ zGgVT7*~^nA8l2tdw!iE7_ziVE0yvDtvA`NaCqckAtW4Fibq?A>x^sF_JTC5X@A^|$ z;#J483z!BW=*)6O z`)0l+2(AQ42I&(u4@&mxoQ%_FqAOE-H>2f)Wt{Z1Ils``>=HM6vK4nQVmp-J0kD$p zGUgu1Z*J?>e){M|K?AgK_cS(DD+*X@#x!MI^Kw;M*V#MS72kZ*6j8N%gmemwPb7$1 z0LRm%G+Os`x*=?Rz4CwQRNG9U64~>BJx*>S_^O4V*xcq7W z*+*%=R(pDMdtfhWMl15j_2n$FsM$`fP-PvaZ9Q6ZrTNv_u34x^Lk2qqQHJqWagNx@ zM9fvtK;7aP_?*jaWn!p7wN?$x0+Uq7R)LpwfQJRQ!*p9r;n8Fhk}>D&L<|_aGP98B z)Y|``Gfn8xG0}p`2m+{RYSOP&Z}M#dTut_rSS<1KNNJb=1fx2DwK@UFX!bmUKX%Qe zJ}R1shMJPwsK3c(RUBMz*FljD07{N3-YynAiP+V`pRaspSdy zs1ucAl9lral4aE8VlZ1szJb0|vpq`3$OI9K;aWq=@YO}4sw$+S6Jwx`5aH}E7BP(; zeDoHb(~d<6sqx{ng=N;=LbcPnFO8`F^*_}mb z#><4PAwd(mO0F}(WD)jFwj-grw{H)O1>I=tjcajAr;X!d5E*rTr=O>(0jyRzaph8D z<4If*mqE^d%v@=CkXibHmtPGrB$!-T-&{0|RxE&47$>TzSdfleqtWzqlr^tb^G~(pmNq zt$$p$Y!aBgr=K3`KOo5@A0H{e^+;#Z;2IRjGNjIZn&3U9@?O!mP2wij@$)$uAZs`& z7|ZYMjT6Vo`D$@q;z;Rnyt{$yS)!e)duQyffNn4fWs-IGtlFvN%t-&uz6IdC7#_iM z!isLo%JPGK&=M|RBIBE!n1IjrO-e?!qCrhcppq5)Gr-YIJ!{w-gKGy}boGb!e^9o7 zaQh39OiE9_7)lFI(8vez2OoZuqLV&uLrPqe-TuB1gp4V6*~;8tqszceB8gl0z9HQ!!dJ|h5cYaQ2{VUSZ`ehU|rmlQ^5>Z8o8$#hA9+~0rl7^NH z%9kQM%s22uOF2OuvY9BX!31EO4sW{NB|{z-i?Bbrj}%m2Bd5%QDff2|(f41ohx6y_ z<_t<3eBD{%6)J>3GU9#ka23(&YWn%5csXBS|H+2DYlVl4HR2P{N7ui|ncmEXNQ|uO z*RxF9TRdXxRlx2nZbr@VH)^u>ae2?tet14oq>DKYfKL}E9!kddQj6$0R_>vaJYH9Z zeX55C$3oAJQ_R!XiSjuxsMdpymxf+_1&a$Yv9X)VZ*?oJm8!M!27TSpKWf<997?1- zTH%PJM+4h<@}o1>K4rTT{BhUw8#hhQA_=i_?{)NZ=Nk+el_y!5d8PE6c-Oo+QCu# zmg3stssoW_t;+JsJN8}wAk*3VYHMk|Ec%1lb;h10~*iMA{ z=YvJcUe0co%G>F@U3&G#iwjpk;!K4mjvTt*W;T=p30KpJ%SIa9=U4L2Rl+M+ozQ`S zBOZEeAW3kjvP|n!9;a z%nmp=gaOf^c$734@Q1}7R@Y|;?^60iFfL9qb*DD@GUBL)Fpnx%g_->4EX8%|ls_lC zgJv$i|FKBo&NGrb$CI>81mnbj<}u>8=26DX41`w9BmZ&necHK9CD!{>#xjxEbJ$i)o$#TY5RGt4tQm=K0s04>%x) zHZ7*)Q2ky?&6;g$PXN82SR5;U%xzu%rdUn8thwKIW1JVec?%-|=&q+=Ag0eaH#xM| zlB)X0C|)lh^COrj`De=oKpsl?K z;7VNGc@ERdcNrJt!5E7GkU-b2HUYbQH9kJ@HNCM8`}nJ<%~o{MT}X>H*9?wt>- zX`@uvcYdo)}y#79`i0_+OS(L7B zDqlf>D!n+^%$0`@2d=(1bc?`Yf*-HazWP2Z0EI%)OW7%(1hKcsIqe3HDOH!O62HQC zWnhZ_tk2I4m2Mx!3I?5L^5CM<(Mqd0dh<5%SfQfh2!ny9G{j@npopoVOlyYlcxyT z*TMWfP;z00HKe~MnH3L_bZ}89y|H0y9Q~&WK5V;tyi@XZbk8uG4qk$fUf*k|XOKMP zk51-GK6Gvy6Wl4F;1b!ID3x6J<=JF^HUSIhY(-VX2*`^VY+JA?`QXb3S+|gRp1N76 z@bmkVkOi>y-1n@MrP%Q@mT*sDiEAAiv;!KSn+LCZ^oAf4biOu>hKF!$`YmZ$Z z^|cdP+k3A1Rma`(f>`rJQHy|VCt$m}0YawzQ>(`$_f`ACX!-MbNG{Y?E{D2G9wmgTng<2D4p9WsO&q0Yb8da4~n`R@a3u?~wsw?JOb3?F3iJFXc|lDgfb6 z>ORT2sm@gP`|OEEOLLxO4`}P0vXT~2!ZYJ667M0{>NE3DkGieWM!=pJ-j?;y2bRbO zP<&l#zXOTN9)Suz*}{|~l8=h2J6C%=%AHaz!WE57yK;weD+^zZWy-IcHWQv_tDoB+ zA5O{7F)+26U$VxNZ(i}$F~cKX>KR`D#lp-Ytj1VBvPYdHXsp%R-OFE+%qHyEQvnIO z8xU%N`|OoR3lZ`Op~G^TVyHYNF_r6}$jp=E!-<8dp#npR*OO1lvrM|;cET5hSOaWr zi8Hw4F3pLTU)5Q5JAMi|%H4c{GxSgEc;|=tfx5RZXYPMyPGWD}zjLXOQuT+G0pe`4 zgud3C(_b#*C{jEpa)ef~@LAG{P3GkqVVj-&M}Pd7W22klcr5!Szq$8=2Wgm0DGyS- z5g(Wrc-Y6wYkqGU2Vay&uK<=857!Xb?+%n4pJKs54~q)bY?XyKP}+oQQkkc?l^J%9 ztm=#LTB?d2@Cr!F>pCx@I_cupjlEZA(>>0%-{j7=`X>?~Q+2I>DIGcl$~w2;`;Q)F z_T5@!hZdT5f2FUF3Be1tt0>jW*YwOa>to;&D4D#b<6CXtusc1?zX6+gFtmER8FOl2 z`HtL)>!MHWUF`9M1i%#>GZm7bF}Ho&-50lyd_=aqN={X_lIRYCYwdK>6@(Lp&PPt` zWMio+kt2_tM;MI>Ty~}yuY?p=d3_Luu92F9U=3RXD`m<~`lQ#I?NV;tc@j@r=j50# zzOxhhS;xfc>>)DH->WK=^4`h#bC8&<#TR(nDLqHBpwLb|PP3n1QoARma`$d%j~q{+ zxR|3comwI~Lg}=8Y9!f8!=mwcrB+`zAm|xSrf;kBY|d76w-SCk#hO=d*`@zq9Wb9A zDP^m|!>{0saGJX+O&hg#=eus=ugo4wjHlG-F94rw|;trdQ< zh*)oQ?j6vpg>B<@!Zt-JMYHK1(a@*$CKM+|h}Bh}rhg}Eu7k#Mu!|Ycp?-xWOHG37 z@3z5EvUr}K8fj^SrCD#SmJO-!?*lPNl$Iij!gDkC6A8smi%(JmtSmf@$z7W4H7LHJ z!~32gcQ8f5;FQA_h~Q=6lOdASjo4VpIUv|b!(4PE^tNJ zhXVOpu2fG?*9@$^+GKz@)!X?gUO8I+L%;6XTwm0;XGR6Jxw9wUH`-dtLia*2#-(X0 zIOU7RQ&-G6Wdk?9wR5~$gGtMzD^2#Q#GkAhv;;7S^Ql`lE}Y$+GH{iB9%+PeNkq*I zv{JamiGEMp;d@BX_>93hYY8L84Zho16yzKv&^Ue;XdIcW6M*_5+y0DlIAD_WJw! zwp@r>QHD>=2pe^#gk(_wT;lNP)$*4V**mrz@%<_X9T@bL_S2LG;C%8EgrGRsrV|q- zRhE-1-kKnC0{Nwubf3svr(qp3$$Z^66%r1Ex`wHXHY3LNAup&tuz2qHn4MdURIK zYmZOmGD2R9PX4$`JzNZp{d&CO36cpjKPiuVdEZ;wsXy8dADz{w9ZBR1I*>$)EsqJA zRNG~@gT`Ktrkx3$Lv39)$wb6z7?TfXKaIbr2;S(1hy*avQS6N?u)H8rnt6)u?l>2; zb5K%nD%dGlY-_})A}qCh<7AKzr01=W(H&J3Phj7h-zWROL{a&ko*4OVEBl&_w`#iA zR=$>qewp`V`E)Cagn7%F%-O6#bHP*;RGQr2&S#4rTf=xB6gI3m{>6_TM%jPo+Hl}baH%* z);VeUQ9vLzu+?&9{99rVE#VB?BQgYmF2{gr?7m73>G(FcU#B-7`zEm_v=XI8MEG!# z28tIltiAP$WyG|82teFPSRt%x#g(4@3g&ph)PUaz66u82UWXX(;z-#KwvXh{W3SBukr z<+zO>P!~>EkzR2#sOL zcWjXi!H7`)JaKqJb^%>d_1-zFHl5rWFa7s;Xy@A!iE9U}3>Vqm(ns+~?^Q)o4bc%NBs*u2&4$->#hzuuI zHm_K1>gw9px$w*fZX0hmL{<@uDW*-Xr#o%?`s;#JUUP+n0g}X-=g-DdDK2Hamm43^ ze7CSGfCWpO`Kp`mjo*(*TflkR)S3XWUumeq+OJ&h#j&EnepQWNWW;oxiao}vyJL(i zaBl)@vipZirU^pTbdRV_KY$SXv=a9F&+i7X2l{ueJpQ@W&EHty{{bwJtThmzDPQ^p z{EZ9#jSK#N5*PgN-FEL_&<*|cRo9s6SY?}|ZOi*l^>_Ij?vYXFS`}LXf)cZ(UoQsE zW=kjlTMun3!KiNgWpt`h)~jkQitHjwi$%+)B798_xi47ekw#mOi(pf&TG5z}uC}{M zX8!;TlUM#1XrX!A|9}>P-M{2 zM-Cq%>Zk8S%RP^1!wDCa9XqWm_{`@z7P*h}C$~QPcvl~2@2ZKOpKQ*&P9*5MTimW$ zVm+G_>)p<0@4TK^;yY5P-rkPIqILtaE`tnF8G>ik0rrQaDaeA`a7{nLhaO1!G! zWQl=Vxk`@pd>xWMkb+8dJmOuawusl5JZawf@p#ZD%AHfq0!Q|^io>#P7L;BGHR-)V zQeLAL2xFP-*ILd_Cij6R-uN%xuvQh-y|EwHI&(xS+17%c^rZ&`WGwd21W`=jR6G~c zj=Dvb{vQL;v82=!fKt)2Nyg@2ZWa4FD7`3fsBU=~z4o*pjxa!^>U&uDOIVQaD-3)? z)a?F75ux$1g(J640d3;Gap6Su)?3%5KY|6k-tT*I(PQc>C_KOx5Q-;gZ|@DT(x5LN zsXPKbcB8X!`Q6~oMq($rjL*dAm4$a)sj0!{ry~GoG@mPV-q?sWhqfb1&Cv+hjm6-a z+$?{w_*!Oe)roL`ocP@^uIgm*hzs;WMjF`g-?yJF5qs;HbDyHjvthesqgSlKbZoVJ zgDtY+UjRk~=Ogb*Rj1(+ts9rFX7;>q6;~z-Ta#tV0_Vv%64KPC^^6Nd8U3)ODa% zUrZM7jhiSo@rZ%U@}4r1*tm)>x(K;+uDt%$@yHzW#{O@{TNxB$dSL2G>%s7W6M_+A z{K3&pLG@R}_p-_;a6?kL0=Hg@JON3#e%txppj7saq%l>WG)a^br!)PKvLc->-B-)z#KuO zzebm8@Jq6+dQagBuiSAp;|7shz$*kKYASUI&xS*NNPV?=MnyQ8ot~5F2UTAP?-@l=_ zYy{~@-5kOK5r1H5!g?xddNo#B5h$()r-NmpW`$E#&o~Ts$LGLZCw=&Sx5<_gv{+{P zmM`E^hxd+tka5Gol@qwqb{gJ5o<~#W=kb?UWEG~Zp>RvCsSnsh8+p2FIh?b*Yt4HS=a8$~R_dMwIRriHazjJbs($y2G&yg#l* za;IoFEY*ir7CYw}Z^fKO(>$UkeXm*3=e_38BqqrEMkQ8F6N{1j0gz7BO~;$6oGgzD zFcxe1F5({L3{R&=Ys`&@_#>`&#?P_lAvj-C{R_Z)3$X0@4X`4$zS(Jf%VjMF;ZhY= zM5~gT{J9JI!eI$`{zNui`v>&;<^p;hIXrBAgQt5q)37@J8C=+%{{H}8r7`R#@ax__ zrXbSHBZT_axBn^ddS0pdWOz&TceHKVJ3PQ;h5t`3m*f?J9O-raF1*L|VN>ihDog2>XZIlYM|$Dt#|2&3# zERgmtCRW`7neF>V-Hj0mmt|^hs}En&!GXIoyR|o@?eUDqwvY~`|%*9c6cjC4D(%A=(rRKKmuEeCLk9FAcW%f6FSOQ&+ zbZIZcXLauaw1_>4#>Vwa+&O2lOLY@c~KZ z(P9vx6E|pXg7+MxS@-TNh#yk@-t_pS+hPf(P7WW<-#2P3FC13w7Bg-NLR%nvY{hC+ z$@szZIHG-gi%NM5@_Hg| z2TxHIo0^~6_xEIezdw9{e7J^?r%l?a-SCppJD1+CTnu!CaipJ*N^z4K;WPeb(YF2r zYX0z?ot-^9;dsj6#U=YPTBlBhigH3cUBPb)I<`r;O#WYAmvzB){u&#rE+bQbeNoy| z09exMT`UIb%N#xB=qrx>|Gz-9bmhLxb@v^GE|K926h|RX;fY@}_l5qlCh;%#$zT#| zW|F;Hk*{>+Oh7Q~qu;@>u>%9+tC>n%fL-MUUL^@pVXfO=1KSP)p2VR8yHO7hxROa25p~K7z)87)R0>RN_pfBvr^Jm zWV5kq+kG6C$DWjy1i*%Co6`p!m06?jcsEVreKm0|dH6FKsHfZD z42_SE&)LGqCx9#4ScEFEB5P|@SbFg>Z%*UAs^?@s*ec1*ZW?=e1gl zUIO^APOT$!Wv!swu{Jgq75byNHgqpv!5PZ~`siL>UJiutuAD=ml}iP~7NV@t`cC?J znM^Y_mrTK|nHLilz(jGt3myn}_=ny$j$Kx1w4dR-J}_C_E+>mPjxZE9rl^ZZLvP7l zCL$1!=VcY(K}n+s7A|2nd`%UVx{5ZmNoO(Gexs()jjw%-u zUF-bQ3zt{%^&-ip(oJm1!=4C`2rbWw(r(V zT#z6fC9p!>=VS~H*KPx}4UQ_T-uZ_!mg}Hfu~u z&Q=d7SVWYbGZpK_?oQNEC{of>$I5x`jt~TP=69>p+?l3*(J%JK#ohgF+$t3w;#tq; zR9v##SOs){Yc>b(ZXlfyM>pZ071c^Ln5x78N^p`km$SrhFYzhIL~f}Fu#Ug11(-gF zqSU1m@A?_UC4LnK!d^r&u81nE<^+ffJF}M#cdrNRBMJD7oRqsT*?$zbEK1wBB$#@}4gndJ(yr9F4hY-Y{sef%hntG%<^`KJ)m^ zid2P#2|#*wXYe|74nqIB+17L4D?*tX9Z7fniO(fIoOeN>V`V<;udb7Adkga#8#3*~ zXa%?AWR*YQvFUolawpFYZZkxSah^8vLKbTjgi1->wc`gBGLNDhKiP%%ACsovm384M z3YFHeiG?R)Ot(Zw9%Od(#VO_~f;9b0B~wTHedy0*i_cc}cIs1qN&^zsR#0*-eCt}gBJj+it2`(%6>KP^?!2C4AwxkyLN`Kc?ROl&&|~oDYTt`Y z+EgA!zP)U>?*@W9u=e^q^_HN38lxv~dgHj}89JR*NER0uUzt2n#J-gJ{Qr_tOn$kW z3xTw#C{GJLeuM4anux$ybMY^3%p`Yq>Uk08JE~;0_bzAgAOEFt`^y>sPj&m?E59Tx z%sh8K2H#KBxWuUW-(QzBF-Dwj`kU!jR!`^N5AgfA8On&(DIy(&>^rCup z*yjvg$~IPezc|XzNo(eoLq4R9Szm7Gl{hvR6bzkTZ8+(eUgSU7ShGkMY?PAnhzY)R zYwd9Oo8D8oldb&5$r{vbxq(3YBt)5qT(;Q#1n!s#f2hKML7zBirMCCHuSj8IrP*mD zMX?7DHF}zl=6mw@*yqi4{RF{ZPr7Y-FuHzDt>(4>ZLrblo_u$P{9-)D3liL$PkVB? zzQ_Q$#s3U?9h@jhez{|+bgqAZ;?uPnP0=r#(M^mKS!e+huqTKeZSM^cPsxYU?fG8G zx6{|t*xp&u451fjKch*0K}=GMBCHkhD2u4NLD!cX6}_kL2P_ zzs_WLo2oe3D1HAqRcU_2V+j3%0MmdePY6n=$x(Cec@HtX*`qAUhm& zuxxb4KC${WoL7ZXwm8g0nV3fB2In6mmv0mVp|xobP7u+x2UZDgN>zeY z**wn=)@DE9w2iohj6C)%w(V2CX4UhI@+~hyc8Wm0A9mBjFWX05w5E`PYg@D4j(tFz z6MB>cM?7gN-WZQ=AUIH7Yrw{h|1seMAkx(Ps92gNc^XCtzEfObf90=SCFc7$_2)FS z{tp&$*YJ6L9^s9x=nXMcB7Yso$#(PK$ESElsFxr#^=E9)hjIEi>_PK`x4#WZEG^8SJn1WHjPzU#ia1@bH{C!gD)cl z?vLKW*>6_vgxebAj56$UhiMyZ#DWQ1y$POBiq-klLYQH7mRQzl4w9#k%(D zhtA%{3^MhcyLp?Bz4u^5D_ij3f6-qf%Is#Y zeuU)Ahnrg+dZntxuDVU1+#SKOn`gQY9ht`2+vE20`kLw(F@=EK zl0!VeK?mB&v99cN((B8flpB@^&b7P=exfbQBn~y7HxLc@A)sErFwWEIE&Fbue)#JPrq(HwR*@XU6GzzbDE%itw+C) z8D4UF^==RDvZ&eD^BMv+GO|2%Jk?|&&&_CVc0OG>goi+=m+mlSD= zZ7UwvF2$6c!0Kc{3$)ZJcG_ulK$YCHwbCzs_DsiZFe=gl*;v?7ZKfG8>g(ev{O06Z zRD=AvY1rXjQw^xi^BB#mdteocA37l*_@qm7iQD*OCh4P{41Ub3vn^iwIzwLq=W=L# z=JqSubR|sNT5q7k?d1_CB*`M1Z%>E@h?|9^EAf%-#F>tIO*Rw>EAf% z-#F>tIO*Rw>EAf%-#F=iSDf^3Z1itz^uH4}x;F|=_^TH1ALlV(QPKaf+rZS-Fb2EX zC4G51fnS89orG~UhtGd!UKjyo`$TxPlUa5F6#(t5&Ltbg)K)&BaXmGmSRqoX5_@2? zFw~+QSj=CNG*Q3nKlD?t-iNAH1l6&554C}0bpfqzfB)HXvupa<5+?Ay8{T<;47Zxi zR(uFZ`w86T2a$iI*FNSndZZUfE^ul=W%?30d4|PzS{?t{(;E?6e;D2SWeGaDH$tO* zR^w=oS-+t4laS=TIM5^9SahUC}pX+Oz7 zrPf-mRFp^9YN-i!8-8<2KyUsoL!~frV$C~~Xbb1h@alsW`{u4HIW6ysnuV;fbKl4a z93NAMS(_E&yBT%Ac-NbibQ$hFjeXqxmXcibnTOSI60?kr%|>wlJyn5%s=%PGtZf7* zV4h{B{G*RT+1I?K@uTc@*%NpIo=o;bpEY0E6d|wAmAeXgnl+Ct%KX}OP~-W?0i3;H zx#W1X{pXFhFQQvqL>lD?*2QdQk-;sAPcgNU=0Tke><1+=i-n$uh_eEUW}eF{yANEM z-ta27zS>Q^!2VjHm4xllC_*RJblSs(h$F?L0`>Lc@^RJ!BTlg_{k@1X?&912vIO9+ zvGR@Q@h#@Oo{rl=jG_*4+zEa7ojRy#PKZwp0f;L`bBLaPe1EfX=X(LdGP2Y-bh~kb zva78UDw6HR#m2j!&wcMDS>%q6vAI6dL8HOl>vZ)?<<~Yt@vJIJ57(tZ<@e=9sp4ls zW8nL~Ob|&aa0N@Fkb)DRNsIW|Z5c;h`_Pfm#wUtSC`AiV#NKgxZVoc|F!t+HEQl)S z_c4>WjDr0oO-9iq#!z}D&BReH&%ylPj^rd)znUJHSfw-GxYU*z>3SgVb*3^g5X-n< z4eBPxex|J_gf~Wvun@$Av3}uMQ|i1Sr$X%ypi@RE^#1s7E9^sGXidb@#YT6 zYFIAd07ifhtEesVPbu9~_xX%Y+|4Le6CIw1>NQ;ZV z(iJo3jR0$PsBphq9hU_cCkv@2HoAK{PC04a`f0n{i|A-F>7pjOH1N~K0UU?3ht0jA z<4dWBO+E*FoNxQJSV1p|*S#2gt=WI16IHIs-{GPIOmW_)2wSjxi?|gR2OSKE#K(d{xam~Ia+s~YU(fP zQ5DAH9;PWiwd{Y@+@%{mLIA2ziAm1m@j?j{{^f$}Ux{_W&8CVq6{s;RrDwo=z|aPd zO9~dE!c^T-rQaTnVfe+6uQj@yyp{?oSkKGy)4m@5xr;SeSys9*8P;9zV!9ax>X>r> zWtz|G&g7Is*leX2s?6OE z_NTw?dV6*=E~af?#l=KeHHfz;rL)ixVfU~e2vW~iD&;qZ&E1xnI*#QJ^p`1{%W|qY zgvoHjg<_5Aa${^i1@ThFJ|ro2AANT#D7m3Oq6RRo4d|h8T-adC=jc6>DqMr*7jZTx z)ic_pni-}{edFNX8%>~VY2BxbJzeyB1b&=4mq0?CRN{Wx@u73cB^14t3OL)M>nbcr zTc&v{zs0i$^XZ0d>Z7`_MorIi7JmnCLrA8z|5sUcjs&h-*d@Rp2V|F|=0E=b8;iO8 zb2Whf!xnQ%%{22>w*!Aq(~0s0(aG@unpjZ}l-NEw&C6GB-S=Deo^Lz@ zZ}o)-)9M$ko$@)Oesejs|=32sR*250H8&9gv8ZOBvm?rJCvWw*TP$@qJ)l{+4_ka{1ah1TJSj1*1 zUhPfKebU6Dsf{O2MO#li4{h=m_ZegHtvv1Qth`I~_JXK+9VF%wn)w; zBXtSi7iMwV+En)?GjqUd{C(at_is&%uX?%cOvDVf?KbRmO4w90hAW_(kJMU4q(padiTZ3>I-;&cU$~`J<&4e(f`@JEL&NhEm(&jw3?CpP=QRCnoRXaow z`jXkl~z>Oa_g;-|y62E8rm_fCN3OnRouASw2ZB4cdAFeKM^3SXhV1 z2}KgUZ$tN15zCLUCk2+ZDVZxxN4puQMLL@L$Mu6ghk5IGj{tq!OCm1E-JfqvUfNX5 zMOKONNegjO8BPRKvfbHV7e!L5rr#ltAa_7pp_A`l!<%ngm0vg0_EQ;v>UU(t4Rp7} zij9>wd{9vN+Bn~|f;-vTd-fW^LyGXuOts`TPdW(mN{#C0+C*aQvHqBG0UDBe^ebdT zQb+p}*9vz;^DEsKdN5hjV~Fqv@_WlCc;n)f$8=9)qRBiJO_t}aRP=2gRy9>XEbw7! zKt8Hmhp5ea36Enj7xadZ%9S1NlzVjRy#iVWf*u`N>$KxSmezg}kH%9L1~e3-kfQ$C z^n&4+95w6df6nGSJ6}I_(@{2=+B(+{`+D8`dU&J+;SCW9y)_IT#@JmK>{ zKbgP0dZu=7TSXBe82+djdF_2^kp;ByXA9j3qSpbM&^KcRIOd*wkOdrbF}X9?0rBtW z@?(GYpV$=9#4e5wAIC*#@ziP1Rev?$9-{4X7caLU!q-W!@)9BVp_8 z@zTH~xGSE|&~MG74RUV2(mHWR+oEd00!%6Ja50=Ba7yr9`PAP14IT7)HHmmuStz~D zfN~=uPTk;g-y`R9Cj`HnbuUk5m=jMOkss8y4|180U4eLw?<^7jD3Yk)6Lf$FtPq(W z6r}y2-%Nh&Qn1uBNm2Ji$VtN4p{L^pt}*+_hF&7+Zf0WE7mQe)^HGz*<^j6@^#R<^ zty!z&{aM#*eINOhvWFhlZ@y`%#FECwb@35xo~ek=5|b6m(*4;5&ko4oJXkD>JN_9G z>f`>$Q?wlu(0h@#dS;JW<8JCch2Fg_St=FxN{gn>=nGO|CR= zPElrA@!%CJYIjj^c(u2krTD|?nZAX?R5sjV3ZbtsoEAu%ay+r_z0zJa-Kr@d<5D)n{FU!a^sJZB&QK?Mh8_%77RJ7> zP_qlxG;IbJsMk!z%gxJRKNunR#EPV#^4%Ju3=+j$RG}N4?RwE?3p;2pUH;8%jUQU! zvGu(X+vdXqQbie|2J^;vc2@k8`-3YuB8`vhm(_8Z4m9&ZgNNIK5`@`Acv*BNH}SPR z-unH5KDqGA1p$7!EfaZ#*!$l{0j$OBm9B3uRW8^W9SI28Rhn>kF*pvEDrzBE6m^2gdrQIB@z65I&lRST}n>6VR9O*Mcw!%Dw>vp$&FelhD58Z5WkfIVmR{g zbgD;2gTwHjG(U{*HX31AD#@HZsSe3+D6y|fP^oD+Dc8AM+zN8sirCgyF zyP%rOAc1$-FUz0&12&*+OhlbtFVNlRP2i_6LPA{(TUoc)VhMUeTWeKYvHHra;+Fq# zz}Dbjs?Xs9r_qMVsz*RB#M2*X#N(dtBi`p96t#CWnvn*fH@6J1+9hX&C$AybxKl?P zc=dno;VB~W15kDc3+~&|g6QB``h>N_p(f)l7a`O&?UN3Zxg?iY&K*foV6l2n2gmhQ zmL95xqI0F>lb-7%HRNLX?d9P4oA+OQ$@~IwdP=sXQI^lV7mv>4nr0iZrkh2-W-AX| z3R+?7*tH7{j529`eK$eaqARAwOQS(TNa)ck!PdN_k+Kl)P&bnxyL$mg&zI&zUa-8^ zp?fu&j}O)?%VC_0U$_N`H-~9>)k!>D(%R9+MZ;Yueq&pY?d1lDY81=JM9a=$=#@~~ z6k!vkff;LPu3(9qiJaN`E&)syyYaMts#nQa`y2yUkpk}RR#tqfBj~%h$1mJ&ujO^) zB8w00q@veU4}qLZ3W~B6YgJX9=`6eengn4a{57|)S@CAI$I8jkRf@Y-?{vLKc#~--bYp+ih&!hN!BGps=-0HlD3?pEM~}5c5;C>iG1&8Bx(Q zV^jy+;w(vjwy<;CKmLiw%3M%6Ir0Zo)muQj%4#Z7-})zWeX*m$K-V4;`R0nRUGYha znEbSYBYIhsivUu;ZQfd_IKtU$AW&&{Y7wtJk;7E((JGg8)&b6*wu)D}7-ZXNxY4}n zKPE};cptVWtmA*$2h?;wPVZiNS3Z>lk~V)YkNyi^wZD@#ySv#hD?w&&nxC6J`PWIC zJXr>5Jmi3AvcZ%<(V1=C@zP&)`4#YgrS!DFw3!KcGZ&Zgu?K69+X~p@l5N~B`Y7H` zNqzDEzC50)^21yemCKCG!`vuo@2ar@=8Mn%NPb=qQ-o~C_i;J}=?^{)#yW^c9L*@WVzO*BwH6>entm^^4qehPY z^C~`p4VevaN-eQzpnLx%Xw$6vptpk(8?>3>-W(ZqHRXZs*g&Se|4q~S$HB2GmDzxK zDYjk0%&XnOfJilGBSVGt{vB^O@>{*zhEjeAl;Y(4h0X>twpdz`2ZOXAI<+B6f?i4L zVzHtZKm8?T_kR)h-f>N>>$b3EDJ~JPf`EXEf`Bw>QllWC^xlgINC`!{)SxtxrXnD{ zcS7$iNL6|bB|s=b=skfDlH5sft-bfT=YIG6?%ChHf6C99Ip;gy@;uLY#u!c^UoFSh zdzq}Nvo+p=`6VvKcqZBLk29QEPd}z+#vD^KX^yFx;2FzkMrb8VP&&3Vii7kqZZi$e z{7ucYPafB+e!3or0wx97hOQ3qs8jhGoZ1s4(uVKk+X@F1-3IDJ9oK+JJ~J)(mpZP% z-|D!9|2uWu|Bf6ZNf9@i@H}ELIhsS8bbvgO0K8H)qf2L-_>wK3zN{#NAG<^e*p>A{O^_BWj3g; zOJEp-Q2XWE>kheQD46*T0RvC_Hs57h?)!&{u*wh>Yv+bbCAn7VWak~nNsCg1S|-oY zWt&NKv;kspOvjX=K-)hQw-PxVuNh9SYC_eTc8QE06#2C^6s1& zodD>VUv4fR(=qpka|)67sw4I=DqE!@*x_{t+eN%4TP;|w^DLNcP5(fP`QiFRp(?Rq6Jg? zDyA4l*ROgnH{pnl>jjyGgi=FiRT4e?lnCXSaLPWD$x7FS%6LJeLSe(vhtEd8wLXV( zfcr7wVar<1#f95mP|c;yx#B$E(-EzK)QtR^QHl1J;*=`MK~=a(E*f7SA531_?`eW#*OB0R1o zdA(+7^N1C`Vj6k1WwK82E6tim(Xk}1VVO!Gi#Q`v{ytX?!n)6^)-!@6iM#gW*Ag6% z#D!{4G6%jRgcZRcJ3lu1f}|Bc4*lk1QvT*+`aCV;%$|8RJFB)_k%ja9HK0CJ2!jQ$ zE6mRF6CV1 zBa>z&wElqwL{fq7+KG@X!-p8?Pp*CmrV;TUzQCrXIN~DS^8SR3!dIiBdyQ^V5#W+1 z7yKl&XdA96{6EX2sTeyJ!ZsP`s?#ftPG&zF5c$6h4;0wEwT3fMT&Pgwvto7xy+TMChW zfte0$?6Z%kin?Rm*zcAhqmlHG0r%N-oE)Ex9S4CN2}A~HjB9z`2y=QfTw;LPXy~xf zR2eIQoFZ(Gw?~e`HYvR3f|l+^jM|DL_-kPip6U%H9^kN@Z8O7fTd{i~cOoZhmFUMf zcc$#&-s;A*G;}AN?}P6-GoOTp+9sgLa|PbB77N_ZLV4l|9oaM-_G>SpHPvs86Fr^} ze|GSUSYZFTIfQQkIkH;r;4>I7pvKKV z#K`Bxw`oDBAYTr{NJ1aR`hx zyO_1awSHSY`{ejK_C(NWx+odaY}hgd_QLo=aMNb{-c5##@L{q(`oR&8lG$#>r+({> znJQtSTOoVu=l`%|rJ!J7nBn}|$n3%1caziN7NkpvtV@Tb~2Cm(n`nsyQ@9=Vd3%0O5-kR z&Tur{>g= znk(@{JFRx{GzWqCc<)JwIZ%ZyK;E8bqmaSuaV|B;nqIjp3oYSVrmfagGF%cLBWml(61y%Heo3lSYg63Yf% ze77~gm*IV3(S6(=VIOuvB39VB;>g3$_a*si>vosW7JUlis^$#CqNuiHLxaaVb9)>3 zs5#FemBRGuHbKQFPim)etLZfIblgO|W%`A6!rOjyOhP&j%;vSvP^5r?OM< zYwO@U&YUd{JCgIXiGoIQ{6|NOBV(?KWkEGGGnc1NPYIlc2S$V`HoG%L4-w~^?(ez; zRg6CbONbNQ71c9KJO&!$I{P>JR_zTnuclBXEm`0I#-tBt+x>-BCHUf3RHf?3ha46$KYjH*(pmx~{C$Sqd?O?z6rZ>15qK_`>|Od+9%Dp*r55?l+^Hwkxs}(qlgRI6W+-^jo&u}j2S=Y!jfXH zW;xo5H8@Ev5<&oDM(Q3OOZ&%@>xY0b_mxFAm_n)AMW5JOxYl}e;2OAKnt>Qmdwao zS^I7)3KB=qy}jVsGa%JlF6o$6Jm!p53aasj1Z_w5$vqU>RIA~}O|9V<+C>J$^N9UR zzFig}RCM&~w(A5{hZjGYWmqHLJ{(WE&q30}m;{B&iHe!`7nfZ7;wAr(wM&tL(o?_o z&9da|cXCPpOLTb;g&k9Wt>$H9dw}hnzKLS&A9N%3pYMHJt<>p+O#}XYX}G0vZZY#M zCtD|jQUKy=M;lCWIPC4Uo+3@3COoil%nFAh;DwWm9(3P$OuWiPql)RMqQ3dxePr_M zrY3&CusuDfHyabaF}R_+(GTJgEcDb>o$hFpx?0pw(x#)%fuG{@G5czakTIu;x(vM& zvfdi)LaU$9=Vh8r@X;#JB7N^S5TGP=CMEUE_WN|g7a5db7q&>gTas3= z`!YNqV#A%8!^tLLYDK*1woe=H)FXR%vUw0kSLa&)Qr@iN(MHb5O|kl z?mBJOjrIxh0OObrV~}(vbOS)*j-S^z{5=q0JMkxh^tGHT*M_8MGPNfzgQ6M;&z|b~ zsXPl${7Sc=@PI1@LYTIYv6`2bD)7t>+<9*(+V?o0UE}oGYw6s`Tv(ZDiph}+BkoBX~zN(u7z2F}(?Lp>}4ctF4 zE{0_6OeK`eu`4J6ZbxuyiD0O?q^g(qI^rr3%26*q`3E$To%ao zW9pKY<0K0;kR`ClQthLq&&EgEMuv#qluCnz5gXVal2ab>LK%{r@tkDaD|I(itBxy*bhj|ghbWrf{d`x@GuSgke zigMw#<%Jft#`Nm$8{>RGOQ|u&mMlTf%B)fZRoz0=tc*Lb^*XJZ@Z3}KSaGA@Ww$x0 z-2GJfKJYG98D-NW6cnNVxF;pQ6L~Zp9vYi%3+alxk?tyxUonuIucZ)S>3xI$ace{T zefyEg8c{!**QnkLMZLN;FTWQo)J}niBzaZ)QrD6j8C?cD_(%Qn~yt@k3hV^ z9-y#;<$@cci+u)r<_EuoYbhv2qChX>)CMLwVtvgv0lVz0=JGws{W@9gR0W z<|?oKc#CSe-{R5>Uzvi*LpBMx zwXzbGrhq>?KV8Q!Hw(vbzmO z{xDFOBN}#fRf+%E;J0%6M!&74&j&YjeWXqC+arikChc1&-Ua&n*Mxf|JbjaE*w2YrL$~xxjU?(i*#lEf%zl0p4Pv?r*l_9SwCMFT3)Wb zy*@%s(l@nk6bAH7f0=KV-K&qQaQ>3tWHwf<+me7#oO5;dOEQi&+RG1!#1#y8$gG;m zC?-WE#a%D7b0dRFusr*vb+bp(KCd#TW&YLslh8=x&5w83XBdv{JcObQD>pP>xn zdd~Xr#^~!HoxF#FiM_^9tb?MpVKt0rRHv|Vj7~wYLTexY@~QV~!PARkHqm*j7Wrc~ zuPv_5J3(PAfO1iJjCKKjQ@N_pE5~C$s{u73|M+41AbTqL=&C;rUm z3FbTO57vZ4P(hq_S7LeBX*hJ0ZfHMm@nOrjys~w0vtoN}7Jl~v*yV*$fXJ(1UnWEb zWiUfZS;7x6`BjBBTw=b9SCN_&jl^w9L-nnO3Skn$WCVL1^c!Jn)YM7;^CHE-#6y`~ z=&`P7oxQwWg@pP0r>y1p_In)~n}(55kfDb+SEphiq+^uv`bQ+uC-({N`bR*5->}AU zp-x^40^>NlD)wv^7 zV1VBMkv-Ho?8>-Yp_WaBMRlwSG7Pj)L|o2xEjS`hL+Kh{jqklPY>NQzkY6fYN0gf& zGrzY`7!tAAICI_mCEP`E0tGn5)vCu4pUO6r-J=FLVt9}{@>|-@PJ)Rvd^N$vf(yEes zzSUuiI)=T;&I=m8@o~)+aQgnSNYa9cbRmLJkC@`#Nc{+y6hi(aZ21nDlzD4|MG}eI zhf&1J)JdL&&pcW&$A?h=6@GrBoz<1qb#JP`=pIf^;0!ATP>KmudMz3A!s6mFaqv5?pjgF0*QC zmLzfLt0YBtUe537>4=#S%;kWpW;@oI zD(b8{3XlDbZn>894vzdoRMhRtZ(m0hUFHCH(tWp@J_mXd3kn9XxI7K^P9d=uY%^?w zQJms(F>ih0U4w65n1e6&AD#%1`lU@zTDm=Up5T(pR7+K<4tlqBi96cAS{x`y_WAsj`tfo4di4$Un(Udo9qwqS<>O<*H-TTM>UnVB)W#8TI{>4TnNNRHgIbm$eQ5T_ zVm;o$p6>20+i1t5|EmRokk9=3K!ZKA6Pt6jS{aZY zjo{EOw`(bN0>fFns^QdLhQdhy7?VTO# zQUu%FR;VY0N@Ma%%RqtJj_vVOdcu0FDf%7I6jk|;R*u1dl_M~h{O(k-KG!Zw{Jj{> zGE8ot4(j0fg}J=^Uh6>)X}cvY-O5jPz+;mp!hfTEHvMcqrw^YK;?JPpS^CE=bNxp| zjv}R)y`6;R0YFnUszZXf%G#Exx!46*IaZ~7OTI5IEFq|XZeY+CR@$8WR6|T#t(kzu zCkyh}jEy;%UOGL<7$fIO(AQFJso2-L^et&yEe(kU*IfWSle;d*#|e78yd6UV2vbZ= zGT60gh$T)_xQ@){%~ck|D#Z4|$gK2aTTw#}qeMmo9^>g6LN}oQtv5+n-Dlu!W&5Mm z@$5@JP{q#vJHej|51NaVmBUsJ4bxh&b31$i#&)VQgd*AjLlUxZis1qvcRdac_ffr@ zNl(~Tr%{X;$@5m5aM=5cn5iotoN_g(7_W$!B_nDkGqQrWw+*7bkgcbNT=lkvn& z|K%@Jt80e_h$)9Du7McJdg3OcS8rv78zD^-MOu6*^S5V~wr;iCg0=1HtmYTuhFp3i zox@&)4%e2Rx7{53W+zRyO4m247eL^m%)fYZ>$#2P>{E5kacp3vZ~Ds1MWV!#2le5Y zy>Y@APS4GA9h=@3r8bkg$*?GY0@NvO#qC>{4 zsOgKI`+mt^9~dwq3R?Yt6j``hE%6JU%e*X8A{R+B}2ze`M%ekd1YS-0P zSLSnskH(Wi2)&S3Pzgac-tGpll>7I>{fh}9p>Uw()^c!uyFp{_OC1!`on5zIO--vA z*dDGBZr3CCb;_en{MF4Rl$iI(3cW~2jih_?p?1fw_t9k+OX6o`rCSU%9#aA{JPi2GUp{%- zZQ-GfsW&q`*OsLqVIs-)Bjpp4)Pjl>-9fbyQlt*NBw^#W~@R^5XiN5)Kdb1#G=G`TjIO;G zyXHUc>Z5Zc?=<#~W-oA+TLFwGdS(A2#!hi(l7FPuLV#x@f^6nis;VgS=QmnRvdVyY);x z+`E=xtF?Xf2xg`1!3(&bWysiDoD3<09rpxHoxG8h#DS~&8pZr)+6Oz$r5iW%b`FN>@G9oO{BcHuA zUh3<&#O=$wq6NGJ;m8p)#NpFzaNKmVBIQLVgX!J28scu)!sg=Z+*Am1t0xk@y#cX6 zxY4^M=)3I<>Zba5Juj-5_e%`88s0?@dSEn9aZ)1bF z%B#A2n4g%fZ7jYp#Rt!M5?12VCtbHRv4EA$pju$M?c;kYk+}2#D)WcZ64T|a4Iz4E zJ@%jj8KVXt0Yh1gYjSSS@Q7!6Mc0Sv)4f`&Zu%gO*qyL8%};4~w5c~rI@dlts36*f zDY~%41vjMr`P$K%=T2Y2k0Q6|?xmw7<&Cn3h2STvvX5B<{R5JqlOEr(SF-S15v1jK zFls^(9xk7*8o(Ye-z%sk;?ral#oE^cnh@I#e%F3ZstYn=pL(6QJnIxEtFo3|#bFOU z(qjF#<}6652egxj&T`vRKX(E5bbetI+L6k?w{e#XP9s=(!Gv1`To%j`klmR7RgaGT z7>Sa$O2~cJle)}+$)#?*$D zA0fOQ3sBLa#7(vUjGlDGCDF?Mi<& zaqVmu3cpsy>%+PqQ}30rF2;ZnN9x=S+82G~wzYVt(=a)KkiH#s)Iu5nLR8MoQq$2H zn($?#JyrK%A&WydZP`HUWTt7;G$U^WmW>mQ6wnuld+a^RlWVN=((D_!41BMUoB}sA zRJgzyXeoeh11CI{87*FQrR-nTrm#xDE^lun=gz$!#xvIvJ>G6DokB@py__fTp)-P8 zgoO=;J4)Mcy)$tY$yTPG+H~@QK2BIHk6T#q66oG5 z-Gs7VcWmA!n=iD5gu}HdYYYFFw-deysT_CA|#4-FAz-0L;jFp4qW`!IR|thkP_Xlpgzi=|nZw_&_q(rFf} zrs4Ve!}N^Tx`3l)tJrAj-Jl?GLeH`vOI`miJ!uzWIMY%V-i^3S<7B3i%*WF8z05@) zR`Yn(Fml#{S2*{b$@=Ei@hbfz8Vhw~4Sz`y@_7Shn{fJkSe;Ub=))W^_(6)s9!C8l zxD1_j^^Z&s$(2tNC6!mx7v>`?>KcV(9CIFdf0>0oZHzkwlf~bv>(%2Bh`t;2db-IM zYQfD|P!&>!)OGpp;8R#-X*1?Ab5v`eAfHwnF$&75acR4p*_@(XrL?4ycNmmckj(yn{ezj2rdM?u==u_j9e5lDl zP_%E3gm9$P6gW-~R_DAZis;Y}ulL5QIvZy0I-kEKXP%=p?(rb=k;1qme5HDHHI+1t zeC`3QFv_{1!(?)xAsJzbJ~kzM*3M@7nXD=PJl6~PmJWRx{ePgxj$Vx#BH=!^_2t_` zomiZ6eDXS|hk^5f-SjG)-&#tec#qHCtEJWr=FSOoHGwodT^3EtcAOeNED{Jq*KRm? z*qV=a!ji$obn7M_#OI@WjQT_zf@rl)V2Wg(tHa4ya}l>2?BT(lE=*ecche08dZnfC zmwZ5G)*~*X)r*13xjyw(2X)(X9a$TJaLG&DVUqYdT0iZ5!t`dqNJCu=>2;i+1I-D{ zfX9YhSc|H?OBUnli>mgvcKVFXTCePC=yWX4ln({U5|BU7Qq}jP9AxK}A`Ooo%Ow{V zPHV+Or`^p^k8Z_|hwzUgpx-ORLHu{{+x7dg< zQPF9|A?p-80Iw|%YVjE~8+Bf%!${2u0NUiI(>=kP5>x$4wa?fSH%AURb#0|-7*5x6 zorZ3%@|h?Qd(JX|C5~JZ!2)5Y3`d`v4!L5hH>>1mzK%Zo3asL-n=ku6 z@Ul^fP*N>mQd0Ob#5EvD;Ji)~mw zD$;2#@)(%0-F=W(_Fe5qPGALiSXQkrp(+dXFb&LapppYIiV>x zKT9<)qU(!SS5l+$f~C%^zz$`IRU9jYhDl6Fdlv{As+8LHy78b3W>9~qH&wPTq>TH> z^wXl*6hEz&;BDJcf-OX}_IlQC*2hPm)68QHW!lPKyaqek((f6<`-r=~RB9S;!!AgH zY^klI?mQ8{TXLcz?EKcKGK)zRlIpbeuYiuT5_&{^T0Gm+<_+dH6KQrO{tW2+FA#}{ z9;d$}jQ>1o4?XJo?^{ZcR_OmR>*zlVOPya9 z;j_H~+k7PA|3LwduKx-UBIlPA=^yPI?}EB#g4Y8l|S~yuh;;E=|>Zv_+9sYB!%G!rY)6DJ)_|ak8Hl%L#8{l zNiX%r_$|4!^U99{lk{tMH8m}$>=4-Had?x|7&x5KG3&+`zJRu@E;o_xb)0BuvX|DY z8uyq^@A1voo7_V1;0;xLkPMlDguYk*n58{am?zH8R6V*c|p`F&&U`{E<|PVp_1B@ii-=|X)6jt({X|2dyN zmFqw9HmCL8_0NAYcjT-@Y&>EVcb2GdbB=M1a10{6D{+|W`nV&(#rWmzdKhPWoZj+g z(l&GY(S#s-U5>vcg{}>2WkJ{2oYx|~D0;u_RRt+c^u+-{EJLzg>#$W>vLY?rU2Ag8 z;#Yo=D&1a);VbISVw1pPBfP06o3!nVZCZI;N3}XcvudnECcsD{c0U()z$G`raHbfn zu5q&`X9F#lG3-2 z#!J)6%##^wA2bXeQzFr<7dz?v?>eq!3_k!Uku^uV`x1O|^xSl>rbGpRR>=wXcHLu2 zgQD_o zY|C*lk|H#GVGMRb#*lWtQ+)tw^`M)q%2pi6;%~-3^49p4!})`w>`%qbjG#+r&n6Pz zV?G^9kcDQN120YIQR9}!0jh>gq7_E3J7yk+;}gF&%*jR^%>m8A6M{Ks0u>=zUiCsK zm73*W4w0o`%f8~%cj%%l8zSYU+*Olsiu`Ea;FERdivz5zj*Dp#D~x7OdU|@YR%(;} zva*Ub_>b);|Ie~g2Ti7lSYfyJYk|+DUYZRu^F`ZA7)-&wK&!~yrULqFYMq#hXW~=jtnuNuDSF>(0Tbw?;;ATa>E;LNZu;P`+vsDr|aq54~ zO*D<~4xnG`?x7w+9yzPO=d|zP=t|PhA*|{T0lwnO7SJ(X$YL6I3u~Y57m3IBbU5?m zL*x}+$6s)RuqST?lf$#9E-zZEOAo~09JLj^U&*$MGI7xsI#p_I5)2QWHWMk`0gU9v z3*PU|2C8bs_8oDG4u8teZMKb*P7*V~*XHaHg)!zkypqN$*Yvy?ZdVfld(``3d6lsN zTpswHih{{&NTu+eYw~0IoPo>O^{gI;_mfg?Lar492aat>0 zy*n)22F0NLs4%8m%7%gpp1XhQ=kE$ajdrIA?@P}c?rjaDUUMrbQ&*XDO&h=D?bah4<1%5lTi&- z1>XK1nDGWtbC$ImRQgj()2q3F;nUSAIt%}HmW~{7I73m%w3p9F9gPyiqrqY8eSzP7 zY;yf)2_4hAd4ns8&p-9Pe)!n2^WjEdE%Mtk+xPZK@%yh$*a#0`{Ey9*4o95R*T1!% z$dX`HzTdf~W!k%{d+tsyQCMzsI)z@qd*L?zW#VJ)xMUoPfm@05k!_cUuohTg^jm_|aoq`^6smi8XH z#YwxXRq6D5N2Pmd#+(V07MT))dQ5!QI|X~g8E;(bL@m+0ckWg-TT*+dS4cB3(p)=H zB}sWNMcK_-YWyM@(p0<_c8(27Zkxm0E=JtRaCl+b4t#)Zh@FwRl;_-(qO_Yf**3RH z{)2+zbN4S@JTyUHqx0_k2(?h!B#L+vLQS4(dPa*2i@9tlrK1a}Qcgk+pcTPOYaWwH zTf`8dU*W!9ptBCeS>oCQ$(>vP13F9Rry?e~)qV($CM~#|Ic%!xc zG^{paJu*%6d#3p!-~^F)(lk(_8&((7Yv|>55FfAI7itC5`R z)E-%b%ObR+;p>v;kcOp)I2SC5ptnvA5w@uE=*%C2u&nfH-s}?|O}cP# zge?Huicu71eMmt=v=Y&dhM6p^xDkb4ejhYu3CM{O@%{k<8C5NR;Iez`|G2_*fw*rs zvUQ^?i)xMC#~{-98+uHD~6h~HDVh1}jih9e~3f2|lC2Z~s2hYBMGNU;cu_PBc$@ag9*B6>hA2<*^84K~d1x%Tme&mt9I+5b6pq36`_oHu z{c6N2VS>m)DdX4c^Z;{Hz+v;Kiee#Hn!jN5&hMceCq{@V% z{}XcK^&L_a^>1{e+NIvQ08pv`WR7%BEd5Pl1XzKp><#ObL8Q3ZnQo9rg~Y8g{#WD4 zyTIRbRa9DMX^&A|!yb(j*E^phPTvh!(YqcRi+0~UF zQWPU~DDZ|~K0-@BvSq+)q4NgmV|=2rdc%shuNaJaos(GAXTv#};@YwcpsZ*2A3g*g zbwe{Rn!}bkc>Yw1=& zwM**zoH>1uVjpPbHY~`GIq!Rh@mbTXFel)7x!At(PK5M{-lm*8Z@JnN2CRZ6^K#RYYwOB0^~6O8Wsgf8vy@s&^I z)&N2?x4qqU(g#ia0I*&or&2uyl(9oLhjK zAOG{e(@f5wW4j$6i%@#Jcao*68E_%KV2#~fYBOR`3K8%NvpHfItTBj<3;M{|^?_I2 zxwfN+%RjeEO!79@$2uK6P=Vce8pFO3!qiduJCm07aC*}VpD@)LrMt+|k936%Rj-=% zLSwGtdyNs&4+LtB0>_5S2hN_Yu^~M<135F`J9!Y1xH=8ulD^s~o*sB86rIG+fVV*` z>us;>jcrsR%k+moOgB4Yx?^`j+RFr@b^9dDx4^b)fs`*oo!e-9ygjTnMmMkC@1==J zW;=2Wd9(xR`LJ=9bc3ZQB;QG=y^yQNzLUwdmL3Iw?_`H-Bf(D9)?|A2*mtrDF#=*Y znY-i%H-fzF5*-J8CnLyZW$vG=MVw(~l8^64O>Bg(x&}8o&)^|QSGbxsWSpxuhxD~i zF_4{>4MOqQ>DM_T6zRD~6AHo9X<&s{8Sp3pOV5sWXATja(YK9o_B}TTz<1JD_LUSl zRa{lrHVO&;Sx5~luyOsZ*MJC}Lh zlo=n@tO}Xye-Sy4N!;w8>}9m|G)zoOyGS>-t``&d9@=#=LHWpZ=ylj;+X=Jfi7asK zNll}__J`%q7wU=NbbFO#yN}EiNLqPoF507v)>$>f@mLWHl*GHZI+20~LMu%hi&aF@ zKtsk}MrTDyA{%?7Diw$pEPk*(%h#5Sx-JXaFFR#@GWQsOh6%CU_krS!$uTZt zit`OcBRXCNavYM^WFtPMebUorlI@x8!x-$j5w3yJB`<uF7-_^{~8LXAI2Ittg((;7ZK8ggno9&}o(pcK8PI7f% z=z|QbD6YMRrHn_bze(GAle?!k}U ziL?1!t}G{O_y4-_xtaSB1<6 zFlr$O+rUaF^k5e*k&U<$=)m1rx$BR`O!eSUtn!@JQt~|AeV!th6U4)XYAQykL)bDPG||n?|wt z)7~eJ5!_|G+qn~(c?c_{ry+g6Q&bWF(SgTlfUHibt=otP{1uQk^=W@U{--oZ{!ErKzSQ7Y*zh6<-Rdc$hz)jT7kfLJb?wbA&4 z-lV6ZS~#E2k55fMT4fh)gfaM1^3~wAQKykUbA{j<%m(~pf`GoX-r*J)D>FXrMuh`f zQC;N}-dNg9G@ttkKP%c;aMA+U3nlYGvxsrAwI<5t;Ka)gqLz*X zIQEmuCVJO@8aOh=%m@j99u9|G_q2=x1OOCJF*0*?>%8<~A0ma;_ zissV^&7^jD{y}S^MXz?dO;h|^yv3=D}E`=|$dlYjccK9q~xE*w-Uz#eSIFUW) zfGyI4v^AGL1v&=CL#b0KRY%v7Vy=%7+tzPbC+dAXOP63yAJ@o7ZP9wmsNt~_el7|- z3)AIihU-qflt^L@IL8;=trRjKdnvx&x@AIh==`KuZmWm&?%)DKdMA|EV_95of8lFj z23PlU`df^X_T9VW7W?8=tosPKfBI}!K(2UE;d@@Q4cKde{+X}iy`>=^R3lM}gUONOx(j*n$Bz%b9Kx=4V?!b-#ItO~SdUy*&XLKrjz!q2z@j>jo-rTWj=d;u1MpuLrWIe`@LUYhE5ahx5?`BK_ZrK zK2)Rl0Xd^$97B2PfCoB>4pmnrO_Nn5=&fS%&CMGdC=8imlDleT_$fy{xvp*Y$TW}= zqC=Bm1@*jg{FJ`O6X&ctxI*oe$*%HIPdt$`VMy7LBy(ze=c2aDdzrC~O1bZVs91AN zk>)*EjqTG;mwYQrCcV9%izwXG*K^f_*GK7Yc@rzx-c86tYfP*nR*f`hAYbjndY)f| z)%G}A4jr17&~AnfPCH*ugd5x1@#K?r>s47rJFWCkm-T=o@kKiPq@%Nc_L$Q&=)bp4 zqvljFwv3t2IwuW` zM;oGV&97@OqM)c5Rae%gp=COR888$V-Cdq!j{d;wFnUq8pq+dF7bI4|(-#a^IO?jo zVJ?~^nDJ2J<$!dD^q7*DF8r`jvtvJ5eP8jyD5+ie2`f;)c(*+FT5PC_pMwwQJD{O@ z@btBo!`qdD)I$2YIC7zfQ)cnSOHr)t4W;)qZS)B3r%_EtLJtJ)9}bgolsU?CYOMl# zLor3;>gyMu*>nhU8mm)RS@-Pv*;jWJh`j3l^#@{FfWz%pUg?W>KjL(UlJp^ScGR>L z(YEf}CBqh@$<KCX67gW$lCZ&lejc@I%F)s;7- zJa1kqbB#{`yDJd;*4q3y9wmo|@G0m*?8bK7s9USdZwmofQOjjvaEGvi^02GtQ)c`b{+gO(TaNMmF-u6qVn? zb-@}uCmEwKxbZ)yG8tnys37(Gk#oCQBJon`A)$iz!WhI$E#@1EW5w%0#9$h9Nq-BG zyuW>e^yZT^(`OhGMIQN#E%`s!92xgRxcYch3T$1*#H9x%SOxr2FezEyNu+eb5h&+b zlcRL(rZXLlF?Hj(t}vH0PYq(~!0DJiY9@Zc3B&|GeeTN_*-$0MZJpAm@>--!t{QSP z%Jpq$iis)fJ#4g&Qgl4sElj2J>|j8%AC3P7T7C^($6t~^M>St4qv4Z_JZ@`9m2Xv> zpO<(?ZA-pF8j2=ap6w5m8NcnEK}{@Hn`!4g3tO$J)t*~g4nF-GYYRK(I^L{;8rJln z`FTv54=ml-O#~R(dH<9)YyQETcbHxmDod59yv{I{Ih8({3VCT`uwR;19}yCC&&bm> zq$Er0u+HM>#{*bpSSJ_z9X%;(L@?*-qsqt0*mfm6zCh=sKXQif@}pcwHa)M)#F~YA zVBm*|_YK1L!+LF_ca3Ad1w69(cBep_IA$cLs;}nNK1kr*7&ac^#FVI}#wag(uShh8 zsJR54TAR2Y<>w_=qVhXF?0~Ea06C<7xFyOa&>5>@z(qW2=nEZe z4++%SSE5)rSLd4Kprx5}<~)mxaicoKqT@-+K?yLPdNg;VoR<^%c`NVL9n7J0SC#i7 z!uQ+~K<L{UmDl;0>JEm8%FW{!U zd^>pA{?;2bfARz#la@XB<*w&Vk4x@zG=S2m8`|4`$XSTpRZQUCb}qDiRZw#ih!kTn z7~XvgK^i+Fkt(#lT*BUPz2-Pso_<}=i`qjI&pl7*d3Vd#0dc=q!)o(25z(N!;s+*e zS#B(UBqM5<+5()Uf50`<%WXyV!)^5{Qmvm9RBo+o7u={r^%;D<_6XYpYrqyiFsOQi z4Jm64LQu0VPp+?Q{YkFX!#LxUNx5-tZaUw&V=}fYoTBT;k^aO>eG^RQ0ym*_5pSEX zE@>xW3|@|=$>!=Cx!3vn#d| zpDGUeR)jfNP`#q6Bd#CvT7-@D4!b9cE#(Tn`Ypv2@=`1GOcZZoGhTSOktrVdW~jE< zcT#tw_L<7ii4`;0ave6E0oabUPjA6d{Y81X5197wk($*qN0*^#BxXW!JctF8xnBhv zK76I7x6)q|(O55(ZR0w}vu+z_M-VI+agWz3a<_*7taC1pw<}I%G+C@c9}y*hpd}*> z6}N7^vmO%u?3Kn2nqgQ^s#&UK%Bt<_UJNxg3=r7pZi^3u9K@ead$k!CRkIkhNEF9q zez!&b_-e)dXTIWZRn`tbl@0R^C zt=O-K@??HQtsJa{^txOj@(fX_3LW_vXiBCOt8a{uD;vb^@%({N#nJc5Vpl z$WdNcV|R2dquX^|jBg3b_J?r$@+9|)t1(>Rtn7Q?&@1!;&|t0FRfOyNT&>vay`qPv zvdWuocylg{Fw9;I-uLso zXW#ohdq3|vpL5PW&!2u4&RW;CuC>In3%{=A1$cnxc3shh5KOI7IiJZq!%(n{iwfPx@MKb~)a9gM#E4~P*D0tEKfI`zJN*>n9&3&;Rh>wY? zL|Yvoitz$Hy$C0j;_{0}JC(VN?BQO<7a!Nw%Ydy;gWDrl-DZd{ZbvbRo9AKx`B>c) z%v47GG`nlQPQ+b|K$wpMl zK>a;#|5ahQK+U(x6i$A_=~8RD_Urb^ZLjNozC|=b-m158TD1kWlEYG-+=1 z>3%%rwGv+)Auwchvx$wZy-yg^?OzI=^PAx0!`GBo)5VdZB;3CW_RU1eXrPafSO)stk4Cd`vBGSJA-qGPtR|305UYT=1 zS1qWq?=4L^fVjI2C-yE_VIwp*5*MH;-E-GYq`@+>!6~N?{vBq*X{O9HeHm z5@4T|^pl=e6N63_C7~iof+;C;s(B+uyK@ms3!NK0QE77VC;fAd(;BhwVEThLI+S)P0n1~GW0CCw7@NsH;ACe<%W(qXlcC;>(Z-E zs((#>4=T8rHZl#5+tc-_vs-RvV;biRh0SVui+kdUrgcenqkrZKdM*1IS%ZeNyY zG2+_P=6BrLnY9FvagL=b_Bw|bqNPvK*{SySw{nVR3gvl>oxaKn9P>nbPL*XHEX$Qp z4lxK-)i6l#NPPKiO}-O=rZw_yTNFNZh`oPrDr7RLUrlYaM^MX)p6* zCuXbG{2cjPf=48(!G5X)c2+L zC4=Pnz*xZ+ufqTZ`8s}O0L%GM8x(;K+edXda~)pSO)3m2lY$+QxO0BhRV}B<87o-t zzKk?=`E0~N0lKp1`Lem5s^!xGIrX_1=X+EMgwqaQjM8N)EXnit^`_RXm6pxB_%aaW zG^Rm_iQ>)LM_pcvYKOU`jTIcs!TtG6B)ig*sHD{z=1OArg}eJ?y)nx_G5M6 zzTHm^m}67!$ylUyj?sEf&_cBe+kxK$LTc-YbaJnZ&glKafdV#-BrQ(xTOIkx1Xs;e zK@L_?5}x_!3Pd!71oN_!f;g8rvOh0+jL6+6k96~tk@1k#LrCQHZDu=DFr#7-CQoEx z;wQMpr}VWrx3uIB)f44z)%@WRU<`2>UF4-@2^`7zBU7nqrW|U@C;_m8spwa2Fc;NC zSeU+~dXKr@d8wE<|990|FaEf+65?#A;+jCVzB)HQQY|_jl+|Vn;GvBqTcQ1!aEb#8Apk%Har|Ale53(dAhd| z-M%?dE}&}2Jf-oDWw7>+qDP6FiHlq2UOcRWD!S^R*_q}g2lsLf-)mQBIW#?+#|1lY@h|Vi)=HO` zyJThTJo4A3Y@djf=Pa$w!ulG)Mx6;f?85t1Y<+f49WfE>BEVRb%VwzsXzXQQ`-G=r zsgD%`|HtYU06RaUNU@mnC4-<3jr!k{FLu`k!50w$m;M=|{Fmz99#F&MnwpvzDCnY) z83^(D*#G`r!(#xndzH0cCP0BbWA9(Kz;1n1$=fQUhzmYmuODC+oF@7b0P+BZG+;lf z_**#*Fk_w)eytYrVjCyWyzCpwg@r;A6-_KmcI2}%FTm{`d4`DFmVf{j`)=a@=wh29 zHOqo~4Z!}+<=GY86BE?|1yxyX7La0WN2TFv*ONdrg@cX`jPpS%;CXs}l~svEx5cAa z*T(rvu)ibN%Q~!Hh0G?(eYW-zP_fRj&TY$Qm3q_x)0_HC4*NG$y!}>N2@zcUo;ndy z;wL`z4A%t3tBTVkR`28Yx~P+}Wtqub))2w&hMe93N^gKFAUh$RrNl^h`{>!-_}Qk= zyXAn=zlHRjw6t_dhap4}kcyW_l}n}Bo$(fUu)3e0CL|1C9x(J3PQ;1yTghc@4;#A? zvK|Re85axuF)neV9>e4?ioo#t@p(mSy(ZR zeOYSl3D^e9X`->CpCtG@7BlwHf1z=+Nnib|j~V@qDoun%H6OdAKe#!$x@Lvn_m)ai z;-gl+a&+r*3)*_IJ)(Jwm1hj0t=+A2y*^*KKSgvF`_jI&+c!C>=g6CiDK8t3VFeWc zzRez5?r9(6KeRYw1&LvwZU8E29-fh5o;MQ1CTQ%coq4HS#wn#MQGUtOTa;!K_M}=Y z(LMZ*lZIkgN_M*TIy}M-yG^8e*8idhUZ0ayB}<09)UESHv+4n~t#-&ngi+ehLDiFrIcQjISzV`1;3>||j^ zIv5tc-fmFLaSvxq|ivlIGpysJiwtX zwJ+dlPLedZ;zFvYIPe<(&O$Nv0kvcPs9^Z2G0%WB z42*Gr+u6u^hSiLOP~krcV3MT#wCw#vI>!gAS@K%-(&4;1njY!f z9W3pw7_P@v7v}$oSI-5%fae;URH|L0h{sy;YLP}nA;rWAvRWMG?d;n^){L6AP{m|= z`ElIQa7E9uY#ETm0F-nJ(g?y83!JZR%;usAkZOVa2|8r|$0LmUgu1jA+OT>h`95~; z?I_O4-HjFIh<0-x^BPUts(ke?`Rsn*G*pKZ5tQTuc`NU==1(+odf`pF%9pQF`Qfq% z0#RTB@LpmoCCbiIIAGl+N{vDU5V-2BTNDU+mR2a-7Tm9G{L>?m@(xh>WdwZ<4%}D0 zErIqEqn8PqaI6!v6>u#@*xUR2GaA1yhiH-AE@Ne~65a`xfpXQ6>?vZejuIDWOl905 z<8}~Tf0RN;FJqq{SohMsiXn*84a}TXX|Nr3-&fk+5WE%}hx)^GbFJ_YNuWarO%-x^ zeH7Xs#yHaKke+$`TIkdu_h6>Qw};R(UXcPl*>fdx_G0)?|Df1Sy-jxLO>{_yIA585ix< z^QpH<<9hoY{mBR<`@`>NV_H8%=IC-;N=CYtrzgQg^v_1HW>2{M%f>m-RiM%5(W`zv z84n?{+vb-tFIrH2ogzI&CwfxuAba#%9}nSYyI@Ko;cPRIvwZiN*LTh*+1MfS-(>@= zKoZ@BvjJBf;01PJqlmTXcmcNgXDb!7Z$Z^)^t=COtj_*>y38K&O6z|Ii+3QZq4)(Z zslJ0JRSB*88$b_~O4)Up9-nll8f|1vVyRtp1XGv$RS9?3M9u}vsyEg93{^PGDi~-i z6_LXm>>loAE&OVr!iM(fC+wJ}oNPDiq|qI$=&rCY_<=DYmQ@ZvQSca!F6WpA5h`udY{bcVFB%N}XMlr)Der-Ljp%HObDq(uGm?og*V^#(r?hwG1Ad1UYQF)5A_z0#tG zRjS5q;kv1PJ z-|;MCUGpC5)wj7*loTa)60<+yqj{p1F+l&7ltfoR*(&%d-gyqv{ue0vql=5t>)1`7 zC(=J$$$N0M3K@ljAH7Q8HAm1_t7do$kar^{LYaUt*BEYI+6wshuijy&IAxnc^l>FJ zzusz|cE?;ZDMEhH4I}BM%4hAUS8T&pV>6clc-mS$N7fw#_{pghSl14Ewa|I1`3FF9 zMW?o+n+jen7pODfZkR708szgP>Qww9GSE~+8xBvjBqtJUKHh^a73oz~RF3GJVlr$_ zTLE8tw@(D)yb^}t;Ct;pU_u&9#IrJZ641gIM$%YOX-S#yz@^qrDa_)68*CzU&%Cp@ zZq5G@ION`aAf=|wkER<~9F&maU9J>`>+p#^YK(T4z!_ zX*dhWa{ZzHDrr?f-}-gu>`(y52%B~^^%+#0L(lTf&D^v~O9X*QN!TM!N2lO^cfK^5 zEF6yh>%KRR$oEcvj=A?B+R($%R)1tLs|iWeI{p|87k2j%sp|h;rRO2_W&5tQjJ0>s z43qv(e;Mx+P$V8d%&2>}s~dR_I;N+%ewx<;r=m7-GB8Y%$ru`CUMg$95A;HHUXdXM z%bxPk>ZAQj1>D`vACiWvfVbr1Jx8HzvE*}l#lwZ>qN*oGyZx%T*VapRlQ~p`IA)q( zcNB?OGTl<&!O#}OL6-9fuf%)r4$*I=CtW4S2yo(xf1EEosr&rle;_4UUTY+fL zDhE`}HJ)5mWPxGH?Svmao$*}Rmc~w}opd<;oZ=JsgPL*PDSd1D)MUcPu0(V(+u_R4 zkpdk-zGNr&=Kk6z!!zd>_@Vpb#4m^Urgb>+&pwY z_XiY`CrTRjSsNr;E9=P~YB4rXQzl-0Yo`IrOMdAkr-OPKGpILiQj`s=%F*$E;j}QHQjd6Z=_k+6JUt)+VCJL!2x=l}Q&@C5Uoc(QR`xvk(EDLSjqx z*r8|ha_itxZWf1vn7(F>Zx}=IcRvdgtKU2tob7x0v)0GkRi~tHA!bV##;sPrm2JGfkk%89V>F=zKPN`LKS86{J1;EM4uL!tXhi z34x4eWr}$I4x#m5niaaMPbR#?3k2CWBj~d926lPyG;s(!4aJ|p2=7kHEPnbA;5pWA zj0;hDK;PM2N!2)TUEKygJzK?|w>X*~Se>)aAa7k9xT4SZ5)|r;iSR2c%epN0O$~p74cQ|Z6r>I#1w5Pg;~rnl4HnK4i7r)|v;7Fl1?V6P?vCtaT= zEGX!CqYctP5D42%=GsHRP1#Mg2B<^CzC;ueEJB@7Xq;Z!pIdvhOds*oeC2x+;6oQ* z^jzqy=BDRUbLGQihS_{aeA4nY-1$>gVnH%`cQNE(Q#6ErHEzPbF{%!x5m)JP)-$3q z`bn=PHQ$}7(KhE|pTEiUKU*`L=bbSAmzl2TYw6OzZkzlsH6Z@3lkso=<$wDxW7p#5 z`0w5+fEV+#fsf^Y74sw3{=1|4t%{()@-;oa zeP0tHmj{o)2wq3U04(4RK=AcWsPKcevh33hcv|p-N0iU3e}$h|A~-Y(*6ZC(kYCQa zkNl-UrIn-oRh4?4hy9iFVFYnop@Ili&rwv~fp2`?VsE;*Tw2z1fyyjc)JJ z{#uV{#wCCxF`$30OrCxHm#KTcc}aY0{NCK$i-aCKOEoKskfly7+fhmbwOy62 zxN61D-+QC&(`zM>TlqHejg?mg%1Cku;z8R>pbjuDkxqWQlf{t79=-qw+Qj_mwG4ggU% zlFeV)-MNytI#t2Tn;>ngie~<|Ia&YX2vU>`2n8R|z<*|_VCwI(JAkse-Py)aRV^|x z6AsUn{nl*?U&RHl1Tdk_ZVNRF2^cgo!mF08OP0Kt_sU z*5=Q%T~e&;Tc>qu@Vmk1|jYm5!o0+p(m zUQ3(HorLYx0?A6Z@y3eD0KOkHRoVO5KhRx6l-)D>mam%U82Wh1j8U{+6aJ2yZ1%(q zqjeEBw?Xi5-Ix6zrT~1?bO4_!-4TD9>ref!g?v`hj(iRpHb-TG3AX@ZENAyKM#yil zweqWlV%o@8KXY+U#0BNaqkOZ?({9KrO=)#`v+|oaKehi6k4{sOx944!mhKIQzop8p zK1sZ2_U{0iU&S(gPr%FL5udG$O=g9)IiBja{N37_MoAZ$AwTjMyB*tUr@Z||!(cKM z0iEmvj_KAIj!se)wJt8BB;0y#&sTp+fXOOY&7M(D7aM`ae&!5VQXOK95efac30eQ7 z0fs#|*8n?^+`yNNFQ-L}{=By1sZGU^X?dJD%P}yZ=zFak^f75C_~wZJ+<-DMG&7q$ z2leC?yo45O$hXY~ShO;$2k@|VXG>~@ezUXfeUEY&$>uWL>4^MV-L#Lpo`r~BcZA;P zRI53S<5{ZT4jHYplXuveVs+9TFJD_#S1*(77!e*gitp;Ls8%diCIqUn``53b8;+EZ zpry!wGX(5MOL^`Dy^#?(k8F|o?f2*Ge0po8xaud0 z!+`@UpX}z8yluyQUEf${6_47@o~@O=`r&qrAX!GdlLMi;Lj`i(b{d6Szd6XQHap6f zCvc9MEv@6o#F!CJ;G((4zl<8Jg4?BWc2#6uUDlh~!1Qvr>W9AN;x02XKT4JRqLLQ? zWTScm8>4%&_plS#dg-z+vv-jC_H@}Yh$N|y)K-OcA~(Lyp>4r8#WAd{|gzzVbcnHOE8U!AsyFF()+Uo^HsiqOEowW{ZI+vX|5aTJh!GCrrBb-Wfm7; z9Q!mglbwXzyewvJ{=}IW6S8s{Ejm~=5!-(-nQ??nCK?yFZQds`JgICEZ|9hQWM|D0 z?>7-&>99lnt5f%fsV>7*Ote-XcsORZ`?1o7)~Sm}r`N)RxN-Fr`G3N6pAh~nrVGCH zpJ2L};XQQ4H!NG*?%CgkuHF|3F@c{-fR~iC%IQv{4-zIh-5X6O1tI;nyXNGI=_Mvh zJ%^@s(pa)%Y7ZKtG;k<7o2ubz2{3mZN$)0lx8Cj2F;bii7?GhGfXiPPT{HZ6@LRd8 zv22>|`TcMuJCqzRN5%z=5l|G3b@X!o3(6(EUFumDDJGpE6mO5LB2Fl>blZ`x`kp?_B6x05vDO_JUSSYl{meyDQghvH*KZ)Mp& zf1XM!eqN+DO#O!-w{sHoK5CR~O0Q(7B&i-HMj`{ymBkX_4{964ttfm5j ztghv#6#mS-aSyQDuKv;}k=BniVO1J_*MhAZ@M(e2RyoB$l?m~`(>42S0g~&u;ok@^ zp^gGtTW^b7=IQAHrQHU@S7Xm@w_VD~>*U#IC@$6n(<$(r9_EZzT& z*js@PJ8M9W}H?%v7qT6y?{&q#%%w8i`jm}h`1h6j|@g^p*(f(-_N7< zzdLv{Su~KSNxmUcR3gA$$w7QO1?`k}*)J6}4CPZ`E z=Z-m!{@OlS6@XAUuIn5a)l8lsAM;v+YD-GGz#`CS&rT1qoDz%m;>xA> zdxfo)Jzxs~gL*@-#LoCw<0o*v$FT)9$@$gJyaZ56s3cJ(Q@`+`hl#YVvgEXlew+Uy zADp}sUMvwH^SlcsHhZ#_EkI2#^5$lLC1~S@O{7ueA9azc%G$?gIMV{E`J)O9mE>lq z=Rn@=S2;{+%?if+E35-NIsMK3fj$pqcAY~kfk5aZ(d4=2b?@b4uiC<;T9LXUn@!%9 z&C(3O`EodJkgxz$R7b;zDoHNR%Sz(f%I{&aoi2o;x62MDSVFNgyHE26MeX<6)6YWo zNo^(pDKeKohTR_seQf4UO<@wQ|5e{v`lr6?hS|!4CIOa{j=4_1EtS?3w>I43G!7`Lb{{ZI)fG%T z?@f1Sv(z&U)`jqkC^2oaua0io_q4S9fzJWekE%Jdo(cqWdx*62V(BZ#TjsPFRYAKakEoD4};k+a%EWItN>)!f9mdSsms>ce!vhm<3m z@wK3_(;VnC(uBxmgnMMM&KEigp#^z!t zEQ-2oM@w$K4`6Paym1vRu@Mvf&v9@i`EGRJaI+8!sHQs(MND=+^XNXkE3tZJ%J;2E zm3YV)O|~04#o_o#-{V`f=Z4GEN0bv`CDN$5UGQrH%kxpZNDyu43y>uC?InZBoOI~9 zwXlwjC2|>imlQQoURrrgZ)*#{V1v>cwJ!%Pb?yr?8?BxZ=luZjQpnPbQHBoB%nKriJKygSKssnYYmdlZ zw}~q;1#4I8&L+16&czRS)78W!lw0(rUYcL25WmHKUE0Ka0D)W$d|g{o)aL#Jmw3G| z^!8M8`4N$OtzrCVTpew7s_k4*Nz!}w_&0B%1X4BFI@SG-qx@leiQf*$|GmHz{#;)T5CR*2Uy{Tn9baXNj4X4JqUvBd15 zN~Jn|>GfI_Q{#IdZ;=asi6YOfrj*T_wn9?`Mo>rbHY(^}!Q2zSr+|*%r-QKA7IT}& z5K+-aFl&W)pv0Bp@St5uQhPDH*=|+@_;y$yjN#{Wt?K zbkvdvAU3z>yufQsvU5m~^24;_aoUc%il9nG`1 zN+B=TOO=O4EfR)!Apy5d4|MxdaBUtDJnw$09N|EzQ_Q7C`?)RCesF{BY zr=W=na(9d)vLNR1?r@EBgV4+fsr!b`Vya;sNNqsP(+Tu?i4_%2vg~W@y&bGh2o?<4 zL&iVP=~DP!u3I7_Tv0trW9%Xt`&0u{eR>--UleRRyhRku7PDh@WJj2hm;W;zA9n|J zc1j3Fl+np`ISXg34cpvuJ!xKEI<*_i*N5k%WWu4sdw$~TI$Ax#``0a(SF_1{-I7DQ z#;Vuo+AJI=OA{zkC`Kd81eZsTQx^whHsuUYYntXk4ri>Y9>Fb#%Qf+eMEjkwzPQNm zx$8VFLVM!K`Ny3dXL$<)Q7!+N3aAM^t$AzwRI$g)$%;&`5pum^o($P%trL_@e2}s) ze9>893#vX0ZPAkBanWPm+%#V~hS58LeEs=pa!tbDio2-LNMFltoVAHX{HchKv-NjEzDBND; zEkZ}lF3lF@K#XeZ7+A7Brjj$@YjNNSl$C;UuIK#?bsqPhvi$O=5+VAamnsEc{ zQ42@M1BNKOHt4i$yaASP`a!r$+SHt2CAxfxidnILdfLL=j7oU$VlRyh$)fzw5`x9P{``wrtXl8Wi#e?ZJK@HR)$V_EqPVx?T}wykk0t+J8I8f{R_?9E*4hOP5~j_o6Vd>srFf&b>B8dDT z+uE_GIKofq*Oo)@EVik$qjM^xB-ik%g^E^o_2wK_gKm+sb(%R*F(tZ4VfpT2{U zB%TUKVMLV0h)3z3~O1c~YO?K29;m zuY5?|WixRwhu5cxI>-tLep`WNCTh__LF|46H@y`uoqv<1W#`T^h@2HW_-S+Yc5I}D zeu`H-t@^LX-)VrBHDaqJ=$>76s)PXhcDEJmH-C&N!%&b9G3tQ&l#;E_9#N=EMR$Md{wfk-+I*k^!Mn82j*zy~j)0GE4Bt z*+O<`G~_+?$f~6r{`Zr9&#jo|M{&aYC)@$uXv$sEdwZ|cmfh8{_i0=3O3-wVhgHkr zXUZP8#<}~+zW#e@O|a13z^~4or(X(CI)z=p0MGg!#c3A$4k;XU_UD z{?FLozu9g4*PnkZba3h2-~15pIO+{wwPcZrrKB=Dq~zWiLqtN!DTyWqz^`TZDUI-g zfao2q<(lES+==M(?T%}~_VIpRL=dE!qFvgPTbR}9`xuYYCN*Ok6#r>k21?oOYqkCN zF+oqQq&)qSyp@Ar6}ptSUP!#=&1>Xm^X}TWEktasx?Lmi-(S)#Xm3Dp{Ta8gItG|MmdBfvQ z-Qo$O!eisO`CA{R`ef_522kid;E#dLFB=xbkkC?;`Be2^^*&)DaM+Z^SnUN6Om_7b zA(%WWYYKH=DM_sb+@taMDX(gscpMk|>5E9s@pf$mmN?bmE&=QlO+Fie&AzjEv0yr4 z-FcL0dDnMs15#H>b4X-w_xmL-?1$F|a4!?5y=u9^MQAZ??)PRY`2EI$R>BQ=0q|LLx&OrHEmvq~PelI5E38 z20i~aZIFT`$)Qg%SsSOWe^yQtoPyx#5OroTe8;KVC%ON+duE+MlOiR-TO(#?_xeTd zJ?RZ)Z`Asod9c@sXMyB056v&QL&Z!7+0h@wu86wRl<_aCv&|q>du=LY(3>!|N_Y$KZQ+8Vc3 z@Zp5TLxs9~6&>T`-X&@)#TW9?>OzVk5)xi3SfcUF5Aka^@^NHb<}pUK$CJqYXup5Z4g-rQzAt<1a*P{E(_MfA&E=(#o$m4#DXnWdlB2hNcG z!@;TXKHaQB6S0&QQcU+MjZdK$2BhSXY%q~NIQmW=wo~7YlYkkfK}|UhR#8t=UL+P! zsr^CWpUMFQ4Tnx`t_0!JqD& zv~NXE2$pvLEcQTx^gu&w#rSjK;OK=MaeL;`%)2M(iZ6HN_mp9I93QMSr0_v^=2Jv* zMag*?lptBWldw-dB}G*gFUbj~_RNCtd>XcIoh2ugWijbkakpLmD8O{0O*R{@vFM9N zN$bAp&m*_rEsF%%UPG@GzQ|g75rK&8$BW~B_zqIQl2cFhh1WC)*e2EQID|>xdCk}I z&FoOcTHtW}6d&)+y%Ie!`$zBHG{2txii9JoxJ<3j5*G!rpIQGzWS8ahYcA;uK)(IT z+E9*X^};?W?~Bvg4SV09!Pv~R?Dv+H25wFjWs9)`Eu62I20vdd1c7mBA&!9Y&wlfrY_a85a(6GSN0N-=?EZQeS7HGfuHPuV1rw9iX6A|zhr&D2`==G*i?>8b9}S&O9BRRZ zICaCP&*IYRlJb`t>d%Z8m)3SV&gzv*CZ+R)4Q_J{x|Q--&TrnY4%rA=;uz9#58q>p z7GRT!<1)FK(|dj&jwMVholIuL(5Qpz8)6-YfWp#ci4InFYrhj@i~qU-fj|s5FU^Xf zf5F?TJe%Yam8y0SGswYqlZ-<&%Vg3VIE-{O`%6*7mTElZuHtgwsqRi9rs*7q zn@N-+^r$Yb9&dYBh)3Ug*}4yt4>J6#5+PAHUn?(gy*Wtkg-Y;CwbH5Htz zltq40@bEYrnw~b6Gf;jDa*qv*sLk2VtbYINSgn5o%Aq&u2>Q10Z1DhASshfR%0cw_ zCqdZ2bDf|yx005_Ef=us%bkze?aeAl2La!?*yy-S>QEM}fhP=m+M@$@h!tc==CXn+ zv#XIp1MVXIaO1>qLD$JlPWOGHghF*&1qHor>9Nxwvs+T_euQibWrV{(B6MaB{HS|6_WV&D~fm<72I6ngt zm;sbMS>*^~TZzSz6MI5@KklB(n2!^MUJc0&4Zpr@h8}Mz~_{t0vKY*qmlN{FMk_@FR+zLrI9^*;aWGw zdhti4wp~HKNQm-p#d5#;ui3o5l^cg5wq=rdd%xlF$M{Ee0uu(?s|9_=PvP6Nun!rn zaI=$)QzGirBOA?{)NdL$R&QYG8x5c5KB4uX9frO5?{bD1BeHED-0a!bll&sEH#|9y zb?HY?vI>AE3N%-jhvZV^tEo3FMRc&D<#(aL?Aj#v4KI1LHVVPA6J(e3)~o>h8+(s| znJDcpsECRh`EaJqdNR^5#EP+#%41bU4dtj}KWQ)c7JkH?)(@=(af+?ixf`j@UWbv# z10l=QcHKWiJ=@`~flKW}7TEij$f-TWZyVUXe1!`51JB80oZiacvgPm8fy?&p@?5D@vFg5?RD%5g4J zVe|9Tu847x!2}-=Zr?l?EC;PmUiS65pvNFXx<7orjo0(O6>)2~yfW~21hoFbUlGtJ zIC%>4Y*_jB`NLZyS~UwqQ)377uQ#89v^U%q(>ExUS%3F#h@&9oh8T!-3C&VOxYymd zyZI$V37-2VhJjrkV`*z5qip;1>~cMK$g@wTgS0g19W1+9`A2p%*EyULryWA`P# z@I#L(lxk7sm5VGRJ$YnNAxN8rhJg{sd!})^UVLVaiGes$6|#TYVSb`}Os8f#U1v*23N& zi#MQb@xoh#>C{$gU5VCmUf04YOUF&+%I$7Ylzkqa*n^a(D@V!B*n) z1@DAA$v)T>*_(6M>SBFlLnplXA1;BzUK{^P>n_`)7wLdc6t!mZKiudW z4av`aCFJz#m_XyuuJX@bz>)9sSGI+sL*sycbsup`M5|19vyko3&R@s%VqP&)- zZ0HMF7^$L}*UMn}QonQdq`$4WkzOD^tL0cGdXUKK%hLRfDZ_{3ABuv7(VeB+AIR&j zvaa*!s0$>-aOwv8Oe)=ZPHQ&a$qo|;iXtHt_iE<&9Sj}dB$;P^MF{wge7=)eTRSyA zD(IG(fW3x&I&e4lwPSphETuUKh&c+Ss6&wukn$XhdK zMbvK+$SMsoWF~EarioXNnwA+B8valRc>OxsYV2}^r3Z1L@SqQbMcl!GVyDL4F7GYo!TQeY+d!C4oGMwDT(qd z%wXl@Gq)~fcxa`dr(xrjxBdCC4KEF42k1UkwH{cksDS8`7(%h`fap1 z9yjWGOQ+`HW)c+asaD@UHhH(?m^4gfqVi?7nt-dC)9#INuZ=;g#yr)BL!Qd-^kd7P zJIC5v>Nbg(R!QW<8g|C=_VMuU`h}Zofmcsz;j^C*zHs!=*Efz$5~uzw5+Lj+KCuVz zO0SJAtJ3GLzoq*`t3_Jtz0=n|dG)ac!f{^`BW8RC^?C=LTE%QQG|s-E)JFN|AC(EU zW#kI0sRT}$znG)_AOk&37YHR3V z@@9>m&YLN9V#NFh;-f+>9)9-6 zT>IPPq+@)f5a}yAGIDop@sAL&Yu>miQQ(>fBml1$)l_%l@T z3F@?AuX;IS5ZM*Y#sBabqi|}LmF1L3x=*7BE1!DZOyY`j$5PB1KH)I$*73CK`vMl` z(!lrxLAK|;nAx#5CUA7=MJ1~Wyy%SLB)x_o+&^>L=S|s6=hj-O=^W`y=f7(tUFE7Pc9> zPip#6Tl$}1*PlYyQr_L?_e@xCJPdNV9v5Pf4cQKM7Qi4*KJrkvtHU^|A3iiutdT!` z*Io5fXc1SU-IJfO+;zZDOG5E+%E8=pzYD~&TXT|a6FGfR%3TKfjZxjaNL_tJ@w7Bs zT-=Pjs^pi{#7iT}x$>1PkIU(Hg8BRuv|n4OgH60ydkw;w({QH(40*}d&4YsKJNEFE zJh!DZB@877+2AFd8`Kh!2FnfRVV`3BVq2!G%gpf`TNcGp=G~oPMrmvbLi#7! ze2*-1j>T7JdFC;A`$#c;h%%OL_9(6XVu*jZN6;ZuOzhP z^Ow@(w|v5r@OJf((roA8&`VC43|_S*7U39oc!(LVRf>g8L<({(pTuT^EU6)E@Z-tY z1c%ro;se(KuyE1S^&DskzQjQ!e35vVbC`M*W?fEatYVhA8MIZKA;(0^-KjxWA}8)T64ZMgV6e zHbl>bfvux(L@!o&es-NlZ^%bB7^iDW+iLKhEj~EwjVRBfC+xYb^I4;0ZS;D&8V(A} zE{}w2kEmFkTJmxGL;okA%fIT^?rsuB`0Qg*YG~0zmtP<9jYh`UrcaiIh@Sp*k~wXGCP=b%jcU zZ{o4H2=XENW=W1P30(qf69v>0ymW{W5$Yiw>~&h{>=UdYN`Hi`)JmHUWPCcWH>AW`>NQa1~T&E$1U5#O7xJb0(C+b=GHL#44kO$a7w|) zUe>1u_6Og9rq6_4JY`mOqweN-eOj&)hJa?ka&(UO?BHxZ^sZPsUHv{#JGXF;q;bPu zbJ`1z1bvB(yvz6IVifiFtoB`40n1s4qn+SE;CC*LRE`KM4LoI#HzV&{-)amFe51(C zc4a^I8_iW0!FDYq%Euc&i-qkh)kbgOfIxs*W_hvRSI)(*vtcuE?J^lnl_+tR=|uCO z`6d|MNPKE!{ayRwRGxr>{fOhOR^ii=lZv+2)^&C|FAv0zxLZ~WauA|IcK*&QUy5`e z56-#SFG@=Ev{ZmRyJiYAlCQFQf=<2%RDC$I@`*Yi+ReD- zn?m&pQX})A(Ra;z@ie-)AXu)-+F#1?FIVbXz?HgSxylKtWPXx0-h&qxrn4G&mCKwY zTM7d5VmxlEv~8{+@b735@!TpPcAn?6Ra=&2X^}qK5MIsC?!Dte`+Q+{3Rx|Hi~$Rq zAdTckL{p0|Kh}@Gl{2m2yty|Sn_WcnLpXl`9#8dbFAX!z6)4W{zOrXd9ETEE;CQs; zSJ;gz#!lY3IJPzcJrjhuArOD!(?s_QpJ-V+0792UPP+H~VFU;|E4(oSD*h2RqWr9Ck_Z!nsRSUYsByh2##(D zn9Y?;u<-EkGnQrae2rZZ=%k>4h8I(m?-CbIqe-st9TWJ zm)NG)gcDgXCw?}V^E zv;S+V4nXo5eQ0kVQ0vh@<7X{Ln~s_N(B$0VTj)Bq$1&Hr8Qf|X6pPvrsRd0w{LP~g zyCz}zMDp;7`OMewRhjDIqp5xs%udX*YNUk0Vy#d|y@x9@G(y_j8dYUnE4aj_U2eB( zfr$X!Cb&utq{gPPXzRDa?^+T%nyoElwt~vXxLM!oI1IFv3I~I8)%lw0=e^5m3`%7u z$-8~DnBt`|&#koEvr})q_RKTR&B`qsr@NPl5LBJvFd+|ZzU7(%OFHd9d#mFZZArPK z8kOa*J3{o&MCfX_r*F;c?XU#jtu&N;Fw78NFpw+ub}@!!um3s-!WY zchfKCzp?k$VQp>u+GyQ@3Q{PtC(U>b@n~?eEYfIbMIaMl_zQDm}8DH<`}=%c7=9Y(}sCBH3}H$Y@%d} z2O02I-@ka>zK43m`|wf&Mc~GJ`k6#0Zj+INbg2TBT5vUQYthDJ&_3d;cYh61{>@cu z8#|;0&(&ot<#&($y|grqh@3$l{!!G(Fn8Ec^y6<)Yh~2?wi;$nbAsPL_!d>IeA2=4 z`QzzlI%uU#XspTPsuA*Px^6pO55kcrYuOD$vYJ49pWAL3L_Ihr^}(QBJ$kE+w9UPA z+--n5u`c?>E7}R0eDBUBykk(IR>uWtUAe3YG&A1fx|bY$Ll=HtF?1S#Wp<0*r~aC+YE-U2uE{6+rHNLt^CbY- z(gumb4{|~3yaxN(Ag$Y+4QY#NlHQ5rk2pCs4x7f2Z1s6gySEHY89ReWT1lS3ytly+ z^;7pw{K&G?xvwb&6}j)?X7t9ON6VSq;&vb~>hU*a>^l&UXRUJpC{^7Cjiuk=D~QS&Z@VJZbf#L z7r5lI2$-q6NZs@TNRtmd1w&t<+&xh@K{jr}*qaypp8WpE;vQwnLXIIw@9tD-7)o}}@0GG=KTaicPz@BI5y(g4x=i~AqPKRg zG%(UetQf7V)eF3X7{zGZASFsOq2n917Js49-KOE5KI6GA36hgYeeStrwp(WnzWBCw zu5j24=ICW@j47{wD>Kee;@p8J6^LUpUcp~67oqgLlR^!R?M3?!nc&^n_n#B8WPugD z8Yt&ZGI6_H!@Ub(cA7}0VyDf9(G7!`h$+bPO}H2LSa5o7?N41W=}6?jq&Gc8hia@7 zI2f@avlj{^ooGJfa76h{x)if)dQ-lnd)L3Nd<;Vrz0t{&w4bB2@S=&=(EpH>wW?7m zTRCgBExWQaLUsL?#sp?#>`eshbiF>>v)U)nigl1+l`u_@=H<(+2yq*VnoqM7zGMwT z!d^Iq6pW))1*XlzJ;Hv%jXkQHCu7nrOBwuTc?FD)y!49?CiZfN7WgzjjNxf#%n!ax znIE?sJOaoM6WptlyoOQ1F+0A&m#M|42LtI!Qz^Dh`1(FA>vu@D9nt-E2r)Zh-q7K< z{;WG2T`yr~cDUu*NG%HCHRF@s5$znEH03ubq-H%FDYF=z5qfd_}+>&*U zf%Hqh-4Nw5071*Ex=uBJaA0eswY!xJp4rr%fX!rd5scfz2fur8C)zS@EeBcor$=86 z54r2OE56E^8#`uGp)d{bWvVnAod$3zOJ^6gVO0xNg&US%d0(h%jUjVT)}WmOJat=& zZpYu8mRs#G%42jD4~6R~)T4l?-nZQ*3Zv%AKD)&wmdNmg2wo?z+O4KzrR|M`gX}z` zNkvRX$Td4vPrIdD_jbR2)CZ(Pe0lMg^|6W##%Fw*!OWrp{0miSL^6a;wrg@B+q-EU zWkUfQWJii8;sxnU0UQ(NmLiQCaYH2)HfjmofsQ-T?(+pS;|9?m&qn%I(mzun-+s3s zLUK->eR$z1$we>thh{wNAOAkKQbD4th`obDS%vz!fdIcS`85De!UoCSEvr_KZKK9s z(Z%!Sov`a}m&kuyU#H9lXP0xF(=3;S=QNU((^I^$hPkiM9KVb~UHnPSGiA?Qdhtdd z@La-WH^Q>B1QUC~^F9@Cg#jl~0N3)ac$+7`U&70Tg_Z;<%zuETQ&(v5e%bWSRpzV1 zz?YAVK%lX-L5}m8mL$3}+%+%=gUOTM`3OXI0`S~pNU|K=fa}H4-45GdUy3)fec7*` zqv;`y_jqb6sPi$dng3gXLJY8%vWz<4SmBX6R3axvXxyYA{%?f=quwmQs28o?^lDw!V(MHz%L|a_I7iOE(T{{`iF^#0xLo;_${EvNIXTdXL z*m3lo@6|bW`B!3_|M8x37Hk+=H99Y_BX!sn{s(e*w7=V%sYB=gHqQdne`A~$NY#Y{ zxE?cl-O>mY8yR^VsWByt*pUj)KCk#b6>&Na=ZF+XLyR)|9Y-7nK&iy24-ki>vlLtG zW_fPv)wmIWt}il|Hj8j9{SHsoZ&W_@B6GWbm?=wVQGlfszin~NC@ZfvmLS^W#|t(+ z>(uX;-;ysKqF!p77)N;him_#i%vnD1(6}gEiul8@_vQE_{{Bss-K!24o=yRl&k0t5 z#jx&iBW2yWCf7dc5Vu#oP(94+^Cc{-6`$kdXw={T>mpJ)`|?KpJI}Z1D%$n{XbaC^ zwUU})75k|m1q(2`$gh75tr-5`BU!pvc5(ND2cBLn@R=2I!t~g*-}v9 z{hnmotgavK<4Amdi8+lafQ>B}@_l`2riV|CwH z9F~H#C+x462a%)vP1l7RPS0-Q`jAm6}(}7C&{z$6p33YY8A6D;BwQE?-WbnM}n-89VLBa?|5_;tK)t;s&*9>ZIKQ;zx&23B!#lXvvJ7Lk*)Fwe2 zGv;Cc^aZQpWH9@Zh^GfGlfba^_MSt=^HbLb!)yLdj~SBIk_P0Rs?&L=3d!2hiNNXg z>dXCA>Mp+;MD6;?vKd`h>t`>6xo&jY`H5Z)K(3H|*Q9RUK9IgWZ8Bq(qiel@%}SftPqk8Ex!DyvX4SxLae4N!CT$ARPISoK;9t%9!kt6F{tnw9iU; zapQq4QQGs1SHmfpPqgo{V}Vy!H4j%|Ak9<;%#p=~EG%2Ni?P|{ra%f5A@B(waF<#Qol%()^ft__qvK5d7g+>iUkFh#*_6i%94es^ z0dL+8T+|3`^0d~WUim>)pZHv0#%kMc6XNs)v-?bI!E+T0K3u2;B5gk|ca(&v_pU#E znn%a0LIoSdAtvHAd3EBCJ?`N4yZIxQ{TZ@H_8bPGMPw9V&-TnicxW_6i5nT&&Y%EjS3A)YqIkrY3I ztrArag~zJGVUJHUVmh@X6-F=B%$Hjpg|roiQd|0qfOM zo$&Tag%;isyaFf9VTmypx6tx_`@M6Fa)StJQ9~@=;GFf zwejy$z=9*_J0?{W<-%e$86Z}wKZ^331&y2;me&Pz^)i|sK0>&F(LV7LuRJNW5nclW zi#fL^A&g?9FpcF=7x`&QOXVVK3tOFcD_#KjlkZbJpRX9Ax&Zc-Z0l_A_d7)}n=oY_ z&73K4sN2eIYVWmBE~gg5o(f=8Z5C(y6yVEqb}ZDhz8j2-FnSE6K*U2b;OmY4U%Q?& z@zY3~z_1KaOk6qFDE?ipXDp1|_4246!A$|hzSPr26E{8jLSPJ?aVS%dmuNfr`NfDU z>AGpn(1-Aju2FPjgu9oGD!h-Rfg+I%Gu~DJgW1TWq?3_fEy=a8hMxPSW5hm^!P4$@xw-FEvqT%$NO5?in@lsH9)~dI0qNlN|H<@?Xd? z*XtZJWMQ1VtF8v~bjVML5yexT)WB)|&c5IWE`UDQ(S@$H!*6;w<9LXIshXc6ZPyQn z`l?8}x03X$4H*u?e2K~7y9u?anZ_c@!##1-7}r)@Ve3)M#EE5E^6nnvJ`Urx)Wq^x zoHnz*r2S>b&9|Y_igYAA-^RFOszHF8ZJ$9vK9m9D?r8@lkjjMUq8rL zZXai$k^NgZ=yndj6IJKIMnQy0jyV|9tvq`}U|PS}CXM1?R2B9DN|g7IJUqtiy;_yN zib(Dh#(uC|iZi3h{ph+xbcy}6epY!6+Vp`o_=?CIHOIk=iQK*^m*y0XEG#r;+G<`R z!$_S}!IGxa23~nZjjCyycEe;6nwGuQ9V4p?F@}~AOf8Ji?dmvo56Cd{OsLkEr;}%| zE?0gxXy%?SKbb&TQ_vPXRpgP)Op`_pleOA{(Q$%W!fIUkLZ8QMb<2nE59bbjHn?Z>^B)ba*UG> z5Em=YZJVfqRp;E&cCJK;1P7R?mpsW}F+Kej-b1EC#M5_@yVu)jAi%cRn%FRVd$G|& zktd`1O8bN?UxgEFneFij(WzxuzE7GcOT5l+mLGO9OxQo)%%MF#4?axp5H=?t#iWua>0!I{C^Z98wc}4-PmIK!VEqB!nn**5VqH zcN6cDjS=5%4;&nV>zVPzkr26Pp3*NLqM1!m731)Ry?rxkzEj%m!0G%6#Sr@1QtHj{ zXG1bKRX?40x@%Qe9z_EKjM?cu* zPTSg*mT{8j6e*g;u+DPr9rrILZ+FA=3;{} zDFV6gCp80=BS>{Bmz_h(EGHw@#+l2ccjsLNGdP={37dq#bp@w?xVfGY~+B(&rV0h-hA0!yY)9RLL3n+|YKAKAS8{ zAmEPK*4@)^MoK_~%-)ZP!nYiS-yfXemBBTsTzVaZEVOJkAt$ZR0lZQa%Ekumu6^sl z&*~t2kQ-q~2=_lejOqQ}kL0Kuc8OKY(vTWWlb)VUc!wCi8(wSEQ1(9ADYyqnJseyM znc*;T(5fS)zS5M=K%!c0*}0`54IAI6u$*1}+LW?5tALMai)|Ex9}vlLBn;R5)@m13 zwR$gFZ7H9i2cA|}rx<%&vXv>K{wzqhb{jnC=NjMw2tGH>Bw5!~+1Q*9n5`HzayV+^ z`)jX!1qjT9EmL~k=P#YanLjAX5zh?%uMh{VU~Jc1_$yf8U+fnCvxCFGK17^#|Aqga z6~zDehf;}n)vKO4iG-KzdbHZ1yu0DL4Bq4{NjW1n2flV_hd==O*^0xIGni(6)0+J{ z5nJNhdH9+^OzOp|8P9n9(d{yW9|h_$rXP9f&?jSd0pntXGF?ugf5GA`)~`T z8&hKTOZ}?h!HEqvnwK=TE2YC(QjIbD+B#<)>3ZxXZBUSL5W6#%8-*SSFbf2MR7@t8 z>(kkEu6NzgAQezjb(wp=KU5y2C$h3(9tAxxdq$7Iyl&omRL&Iusl`-2`59!;!pvtx zK3vpclO>UNPlBwgjOuX)^=sVwXP3AzZgzGgXe-ug7$qZA8Ixa$ZKtB0a zfW39~LOrJw!z3vWpPqKJD|w)0B)U#xTG+77S0F3yp~LAM355?XJ+&QxD9sT1 z0WV&YoJZ4m_(mC*x~fBO&o0ZxpgJ4ZTGomc;tFxh|aVfp3NI>Xx);EG?*y9{i0>2yxoPAIt zyf~-eI4dXtFadi<36pPuEjQv=Hr!`+w!0>ebKW5AJ4pwtWZJfS`JhtOIdm`F$iLpH za;`vc1k^1=OU2ZU^p)MsGXCBirB|O_A)9dgk~725_+4S(>Rv_0^>*iFn4N@Huq4Hi zbL^W%H146Fx5MMy-8zP|rd+TmzbLY)Cs3(%{3AfGPQ&76k8mRp6sRn^^tS1xF8Jrr zDf6&y&GQx4^l#;B0-doU)*JoKC!cz@1N1!QX9t>~2X-=nQ7_hen9*gGRZecY-C^#F zjkL$NaLFpbPW{>7r=L*W7H{LKfq^wnT?9}2$$_T zoJMCY-%8EMVsO3veGJcFt%AMt(V&FNJU7Wsl|Ss{9pkmH@|gl0kF3wzD+ z2Va*VT%RluJCti`$P+)Vl4B~?SgJ+-W2sF-&UfdeF8GHZfb~pBt>_~zDjmnZ{56+~ z(g8@#!eRLQJtYUTuAPF(ggWi{j~e53Ov=na%Z3#S;ph>y^?Y_tfYu3E3Sz;r3$?Z-1X_Fhoc@L1DB^pCMi@mTragoJz248yA z=}C;}a`J3NuNd-n5uo0WdZt;_BlJz4Vk{vVgI`9VA1Be~a$!FvMx!uNqRcgR^{C;R zu-vE*5Dl|TrU{sli<X^2c1sC^uA(b3t_qJ zZ4EpRaPG13p__04K^Hugx6cO!U~Hgrm*qZsg@VM50L$ECPVHK|$B)@JYvrUbs!mL} z#7VxY#@>Ysj*M(ri?p0Fy$8Q8hb`{B%{T97G)^X>wW`C9S`DA{xj*}sPYAJkpCk)O zYGvB!pVJ*f9*w%Z$|BwsF0DwAG(4JuHB~Quech>gB>#2);DId3t^&;oE1Z>*5&6lc zCBuwHqFdB1o<4=`i1>;4axf1RMOlg`CFQ+afxnSgep_T7PR)+CcqTg3>%XCO-|TGG z3r+%s_Q%}oj2xmy&zGR^9p#1_d4nU`k#pZ@pxxIE3q0^0Q`L+rD&ASr0l<>RNOZI+ zNyx#pN@%CN4FGk2sOXh^nUij5iyg-&GLDa+^#!T$Umj)O3Ve5->)lFGF!gTwV5&zGwrAIxOHn>r*E>sXMde&(x)nlCXR zU$!*Q;%hC;nl+P?3IfS&jXEX*4k=5kjP&<2P$LKVU>?KH-iZi`I`1s`vmUr`1|Rac z1xnM8tOsoTCRm&p@gzR+6+P!6v3u(D(b`?F4oc!X{K^w#F;B*(S7K73U}A(tTgXlF#XHj*4ad-8-vCP|NO z09dv2)oPC_#3d6yU;a7Sre?SFuH)-U!L5S`@g^@XBTy%|%X{HcAwDia&~8QtB#Xrp zqpj%l1`*RlBTrnlxhn&Ae|6#Q*Y>g=p_&CrB#HIi%#EA~rB~QGg|E0K4njyT(YwjN_aMfq{{q z^hW@=3*hwt=+);02cwN2@2dVFwxf8JkOin^tE-%dBK9*qpz3XBo;ejQ1Kn5YPuvkF zy+=5!3$_#Ma$Kvny7`LRYGuMV)=}IeX88_GxlolET#2FKgHt;GiHMrhhRBKQrR2?O z)jJcg!SYtdvtvFHO@U;>J?pV>j<|@Knzh_=;N{Xk zn=b$gsm4>B^DTnU+wapX_&aCl#=r9juu4014~RQlUsw1i_1;;$XWqupg5~)xB#{#D zG8Rw)RC?aoiP?Gnzf?qb9Uf-NX8|D0oikw)tm7A;qE2<4l#XE56mQz?z&*fKxPt^+ zzwXW`Rj-=K>j7YyGhlKiPdZ2LbS=R5{GEMWrBJ;;^QcAm9ACY{oxeI%FzJdO9USBU zJS)y;oqov61FN$A&4TdjZf8KwMK7;2$VQC)lk0(ViR!N}Eyj@H?GI%uYV^AScam1( z-2h7M!CQkY7>ANBU~lRBWfAfX7rXM7sXq18o)2}?qJ|fxf?*>7EJx4(ZgalUUX-c~ zw-@i1OGD$;<3^6iwj_!q`5ZYqxy4^eq;>!h4=3&hazjUXRcy=4)vJ2DauVOB+6s(M zg6odXT9fny=-s*3sd*izL0(RVasu(4pn>Uxj7Pr=Hl_{Y)z7j>FP_$_>=b;?QAIC@ zDXZom~ z4Qi@w7D(cM4Mr28uaz7Xj6=-|TqJX+@=DyZT_CjA$! zueApOPVblx!Ay=mD^s&o+aJ`w#^0|_zI4+*?tHV%ZGRW3?BsNOc$;x280Y9Sb_{JL z74kB*YQU#n@dG9%<3{Iw%sOR|m&XL^yIR{Ne2(*MxdvZ%<#* zp4UinJp(Dy&f&xLauzXpnV@3cvdpO88LMLJ_R@c0h!x)gGXN03 zR$a!$Ie*G~l<^m@6ObnS2pW4ZXJ++?;C$M_0kQ5S+(3=yb;=zgfR3PsJ>DGwlh@wE zx&f$RVQ=PtLoHl8eAp^6!kew~i`~q~G-TR_9-7e=Zl`~Clahy0MUS2zv((p05_?)K zJ^(3HUy{;HNFe5r-K`~qR!XiR;#95kXR8MFwghW8yPrvQMwya7*|f-VM4DN(f$|eU z>`avV^Ua?#3N|12^EBMB8jeF51fq7zu;Xiw$xk+XWgNDNK%u3%LzV=b+qDyY*(a4@ zhpPb(78{LjY6x%CEKae=h}>Gu3Z)H9EQvF;WB{X;cE9J-*nI!lJQaY_oXVW$>F|g8 z-OHd4Ok_B=jO9T=o_O9l-;?Y;zCzmCKe*RHG+`MI0PNuo`XC>I4RS-Cj4|#R1cS2QycpP}5=Rxw9xz2lz9Q zU5_>sP1m>B{_l1IlqkQ*(BsA1mVI9rY$?fa`QI6|)5bXp)<|}1!{bnY>4JFnUSO&) z=GAP%joVLo^~(klOqX%FjIWnq7J<|2MX6KA7B;E^J2PI$QEY38<&*{qcd5WR&oC(x z2t+&uSmX6yT>9&6l2^Jb5o?HExLA#(sk7o*293m zlDe$&JfEkRUr^rz5WI;T@av=4MfGWPx+RkGD;+w#(rLaeK>Qj9i{K?GPy+4}{*z&e z5_Fw>#*9Z+roJQnlLlEY=`si|2KRkym2N%^;Lrco0GV*=gr7>~a(Xnr#$6vTo3~$1 zK#EQH`f*g;wh?UaqVezc7LPYslmbVjgp|dkl9m-v``%{DchGaf!ndH zS@ctPJK%WLZGxp2wJ2PUq79}maynmE88oXaw&iCxs3*s%%6h2%Zn!jB%g~OLnfa;D z4S&59?24X5wEYK(i}-_+6SSu6MACmB zujzkSdR(RLj^$=Nj24xF#{gi|oy5etk|qnJs_`2$ri5P_xc3gopwoO_F5LM%)Encu zLX8Ctty$BNM#tZdM~2@`Y6QzH7T8d5-t`rHg1t3z|qiZ6P z5-PR(=2~`c)@!qC>W%P9W-iN(-gUXoScGql?}%OQ31a9pDG&>IYzYE_xQ;ZRaRLJh zCs=8EVfGWVsv_;iojB+f!p`bE`aaGvJ>#R?%$3RB21BclY)GZe8j<<(+(`wGZ}Z`D zkzwnKl$*tL8M(Vp0O_FtJ(4)Ys;$*-k>UPTSlct>yT}9pa&1jlI*v_?E$8t$D-(dk z#w%;rN^qVvh4_WB^YV6@3dDt0pGqxqNGP=scxbdK4VjkXRnjo&%yvPpUn zjZwB#$%F_hp0t)KE`C;3w@tqvpaoSB7?aM@NGRIt2wdfXqsvEk949JKOBNTexdAUx9h|J2RY>EyF+x&4DFRxh44C4N2BS3`*z;5xvgD{ zH^n;M1q(3ERvs#i!G=S&3MH|N+tDQef^IX&;nm%Zy{o%InznkWLCY_owUs8Lo4@9{ zmczT2qq5_b_>ZTEwcN|!!gKD^EVMGSuRm0pfh{;8dR#boAGav1!>5_fIfvH5at-74~@UTK5@{jfOJdCbJvH?nE}C0#u7jUeO1x#QQUDNJIYu5~T@5 zQA1PTu%aFU1up<>-JQ%M;=g9%JHgaq@Minq{j|ILuZgGD>6D8~yjx8`7>u_1(~*OBkHmR&ex1!H19aujiVZ*maQo)VzL`y^v4 zq42qb#om(ZchRmqG2fx^&6nMC%Rj%%?>LG%CPP-nRu`|@)Q|~V8`@@PZH03;czH-E zE8%Y`R-Swtm-c@msw^{}Gtp-yPkm*85P$IFPwX=8a;f6$dSj_$ZIE$@)Lc$1`Z26D zl0Zyoans6$RRlhzN*lNawR^tgQhGoLwH=@FckrE3a%+D7xCKEnZo1Avd! zl@*UcfqwO2BdOu)fOW3Y;|WHx3YYM-2vFy0!u7`(mZ-;<%J$Xe#(1PQ3;VfB-=?A+ zJEyGshx!M`VCs)4l^(4Gu#ayL<{dNv=GCis^p`9+<}w)7WLW0?k?45<5=E1??$|~4 z+mZiNE3+zSgLKSQ9l<8*RFtW*|aZJk)Dq%yr-Ue`00c1iEsVUOOk_@?~)Trp_IT*5OU zuArUQL2q*_zS~POkcD(&uqe$V&KuvPlYU4d;I_?V&(A&kk8#^upjBkp04JcFj*Z{E zlSr{{x4!Zxt>*5nKakPQ$&|9+fzkQ9cJrlc?aryspPR@i%YM&;7a)o`Tuu=@&|`G5 zL9CGoEz?@%W#6LNSx090sfFA^fjYE}11za>VKemLluSMk*z==f!D!^_gBR=Z< z!SwES!}UXxo!;v;r-t3*oCu;3;*plwh>9EQnSiEtu)|i0<7QOC0pchwcl^mNy+jBm z6TYZh6VH*#CUYYyVcT{vroT)yRMPi5d}hc*G?BvIZ1>XgFi2EDRTZIn<_5&or@AF1?w18=Z*2g2_{jUVT9GY?IR($&kn@ZtVw@x(a+EFk#XE(_)`Lk=^wvRF!Et^Tb6{aXY2w+8fY4d{P1L;70-`nLx3Zw=`Gmo=b&>puV1eg3Wc z{9E_=x9$^L)%#obdEvkI!t8#)7x8;7;KD!n3jM7C{aXY2w+8fY4d~w*(Eq<^KvkDMzho)cIc@6Dy{}&% zxVTYe(BvbOm+vBDPPeK-%v`Ls-82=7woCyvhyGEJZF$v252bUJsC^VSfRh%0VFid0 z7cNjwtgl|ITSwgw7B(ORQyVK1aOM93fDXTepk2j`9=ljGr#!`k2bJtpz2+G%){cEO za?8HLd#VLx{I6!q;=B9;J3x`78^%wcq57a*T?J#MRt+bDc|oKh{B*~YmPB5LX8a$u zG<0`*3)<;9Hv%X$p0z7Q7ICRoSoNIlA>as4g?+la#8yC1OV3;ggxzd+|;P6Vi>UCAe=Nz7v6FRe(9JKH6}v2drA7 z!*s=u%-ejEQ`maEeWFt^=1x;JWZp;NKw({gOpyoHjqkYVv{3O7k7BQw36 z8{(ruFU-JE&Y3-5vzQk)Ar+-RSOh*WZ!qRbEzJ!_JzrmE8YaC*W+N^{iPebGD|A?0 z=lh&RABfKg7+mqv8WJ{?LpioEH+p$p|BaYg4ER`d!DBf{`?iv4bS9GqQC?U zZ654o>6Q8>gn^fh2+$job66bg!kAZLwgK8Nb?tDlX|uw|omU6Y@Xyi~lt`Wl)G={N zA9`~k656U5_e%#VPrFt&FTY+1hZc0-y-)CDpyjI{wrP78|3c@f>?Y6k2sG}i_ZOj? z69jiVn^yb<0;|hS8w(FN$*ulF-YHsd@K;LAI(v_jl@8*C>1k175x7oW^gTWN+OMgP znfX>-yW-wRUlb~C6ZQWA|HRzlZ3A0%oYv|tA6^gn)xI;BR)*Wcy}uGRR?Hs zgx+Vi7HyL78c#iGtF=bPOzynSZTL_e`!<$!9RZ2>uGX%^?Ak7Xso+>vTmW zwZ@Mm=u`JM?0Q8PAMkLmShywT=WM*ew)G79{x8BbiE@@6_OH5I%Y+Mc8JUj@7RQ_3 zKYBWwS3CE-F|7m6_1%-X$kelJT16C7iGAdA@$v{9(3L z8>9ZzRlVY%9kuA0Ngx~**)s}S8@2G|TwvT#^zCOlykb!Hi(`3ag4hcHPsYaCnWff} zEEazRW;Q_d=F9!YBYp}jJP~ss=9Hv6q+A=gdi>~elgQQOw4=Zhh1^=(47nD0qu@K> zx7>vK%@BUp1qBLDL}lV^6ETIPh>L{ksmX#X*5$QA^`!pX=)9_jeN=I0or zi(`$&(rUi8-nVaEXa!&sfSQFW+S!6_>Bpl&8MgAMLsK842n6HRSIgAK)kKU zo$0-|`DD@)Iu>P6)TyVlEwoR%XfZDy=Nmj#VyO4}pW-g5`Pb$jCC2Xd=|JmX2O_74 zy=W#uEd9pwNi1hcIx573buT{9nVHvxIbKyoN93XAA5;n1doennuKOAFfv}?( zkL&-Xmao{>|HJX?oJIZL^@se!yT!Kd!yzuky`y2jt36cLtl6QR;O$O<&7w;88wtCU z5sf$l*2XWfPA%Mt-fxz_>Yhq?L1iGx9E_-a@jeMdfLQ=J?(8XN*@lS*Jba9-bUxUk zJ?77QX<`zg!Xs?%&ArfK5Qqz_#9)jO(v#rR;ihK>F!W(28asDgk5d49i42^C7dpzX z3!7|LrUE7s<5zCId=0p+c#Ru)tZ6Hy@9#|DS}mfP+A<({w&T@pBc~w5$Vcn(UItG; zVqR|T?s=K;>x@KW)nhJA?(m40wxZ+R6{Sr&Ur)@+sS>$y_*=2yS&!v8FZQOVX=5t=%iW%e^Snle7iz0Wdpluq`? zy+Fw!6_jq^e5`QBqTe0j?pf)L-bqdd=XWL!+qB^is0tE?H4J!|F?`Owsan@;&1CVq zZ}bopzmpr|_-1M)uu4%r#p&Cy_v=z_fXF;iW97@6mM*vi2avLOd@Gx|x`JC0qH034 zk}T6MEaHdrD4B3EhhB=uk-ur;$mp6E9|4*9;n++UPvGRMyejbvwk|$mKR*m&b?X<# zMPvbv=E`TPx1R2?LVFpl0mGf)nB$R*4$6EP9ZU~Hg(~yL-HtN##A;Nt`&idUi}5np zTcVRyBmCXpYXOSwbHcmtzTk1%Xk=S z?8`80lNtcqF2$XQnUQ81KtISSk3E+CA=Mer))fCig&%$B1SxBN)D_*pV`s>%R;`B= zwUhJE?WPK*jNBZYoah;PxhvYo=~PYlI2`98@$P%Y{fJhp#Ki?!f1H~K7V+qVJ=bXF zQ)IpYL+`S1qFKq(_#|cGJr*f<8${%}@kpz(nbo$)&EWLVt6j zISLMtDXTG8$NY%ik`?y%N1VbPcD*~}V*)7{co5s|-G()z_CsjXm3yJz_>LN3gq(I} z-FIR_wrWt?>OYca2h9SN2k@@mq2TGv?DNj&ttth`k{d6-ZV2f=IpK1mbmv}A zYAj3*r}<6TbQ&>sR>z<5C##XS0;MK_jlDpA%gBd4#~I@iXW}0$QfW0#%`{-HRXBY; zoasn7-P$Fz_K8;0&#Y+bgH8qZL$hxTF+4@HHEbc^@IzA#xBdY}dBpJkjf98D*P2HZ zxIiGK^9|?_p8!>-i%CQKLUUCYx)0ij^K0A00&MGkPn%?2c(YXYyDXCWbHPG*I8hz! z!0KC(+Rv_CwX+pOEY`Qjg9up@{K;-Wxeg1fg{7X??2+ zJZ>hzoMTOSTV+&tZ0V=m2!*MOQ(yKQ7PN%?ahZEP?^g64p52@a3chBOW%1y(C?JNE zDp(hL>#pC9$#^5+LR}zB5grnLil8WA3)ONXvCZqssTNVdGJ`+d0k+Dzqe&ygk92Qq zv|-M4kZ!hsp}T4D3qGy=deK)r_rl^5itTz9##6$UP)VNk9Z<%5S&u%ZNbqQgsf5Q+ zz)W`$)s<;I)fm~()8+%lvTuv!X-$Cna#RItUZ(jWl!7$A#L)*mxN5^exL8|+u1x`S z$inaXmlrNX!S;yPYllbXCw^#cc^ZOg z4M&GP#GoEuM!^@xP4gjJ;DZhkri!LTUP)&t(D(MT58I`BP2n;L0+HA{1?rwC80&N- zcf?JDs_Qx8{4Q(;UnHwnRqn<2bp56z7T7=1h?neQ59E5o(#_4vRJrH`n6kD5#YL+l zOsy$G?XiRZh@6fKzs10;NL1PF)g)iU&_4$`iuockhep>KLrCA9=*2v7683$LQcZlE zx_`4<0l<;_6 zVKXRTeNui{-zQdw&1PRMo)SyH+YR)gjJU};`TSm*xTPp95yz84oNp(6(Jby z2}G4A7!+EU>SpM;5ComTIMGB%R*GuDlI{1?-zqAc?Z3~2q`~4V5}qDD(OWm;q~Pp= zXgwq5at`gY&qEn`mOn<`Pe z%T2^&NF0mis;1udFJhuMY7f)*9}U{%Z#*0444(KaXH{UWDM{8pE#C82XK(2e*2`;F z!dRwl+eWUI;xFpx&2P~2P0&Fs&sB%cLCz9?VWrv`+j;9BREN7OaQMr}J!=()=b@>*)hV*UZW-lKt^GYzDw|tb zUO%FK*k|dp&viQQTTL;ppT4AyJXx}%byWnF_E|m#B?Nj{=s^w&es)kKMs9ZLUH+?Z z=>M5osYdW3?8c27Kv*2j*?nC&^&H0u<8`|Pe)WBt*3c$tZ1&vY6)e1Qtu_ADMc9<@ z!2`LZ)^(bxv#+~?UvFH?mZS6GI&pJtpqPV3{|Zbqn{yRTPnle&b?!k=-RA0V|AAeU zPQ{MPj9!u85RjtJF7S$^OqpQGTn!tZ;R>D#nJs=x@YL?=)sru0zgEfg{JFVcVR>E$ zV_6mU0Zk>)w73Wa@^UHC+g;0=+QPepD-djUu5&C0VrkCWbOBlF%h>t(hcW@1-_gB` zUWwND7FP^j9KHIn$o!&3BLVxJajUrv#1K);9m*dh{+>HHkdL=fzRr4W1v`xViWE~d z&Tpv7a0c@9+IaSeTdQ!#c-Wrys~7K~?lH{Z9q45VyPopC=;@@5I~Zrpfymvkx^ zg7b2HCr8|H*M77>9ma%hW-Fx~*2ML=_f8&iJ38LuQNJmQ;v!tNo8^``ID8X`E*#xw z!fuR{UR+e=vGfnnxd;Q)hPNIpjaEW|JWQGmF!qNXub%HB|E=bL z0nir4-O@J5oWfyO+3FDXi3xIFx_tSU#<8Y=1$xmxOKEnT0ER1)K^4D-$<_u2hq!_1qzO$Y8g3<%CJl(CYTydtCC@W=3XaW_A5^ z6eCF#Pq6r+Wq55JfO{z^TT)b8(b%8TJk-={hnJ`xoA-K3dk+oxTdyf5se0N3u#R! zsWhVP&Nmice;mEC?fWWbe?dcSetU1b!bjaa91ddc>X97p`tH?265{^imJ3sERS#k!sHkd70 z9)EQf&XMiMF7tu{kL@lO1e>CMNnrmshCnKwQT}*DZBDC}GAd_LFS>uma6MoR!f3$q zq^4BUB24l|m&a@(dO5X~1Uj27Lh$kl!x8OGsrI5fL(WEU$%H;9s}f)4qlhv};cLsn zUT}UMrwE6_8hH3hEvzj^f1SU=aAu~TX!d&iD&kG1ji_Z`0g&f&mK_S^%mO1e)k-zR!>oG;PPoJZCVqwSd{ztnZ&pWW7K`-~ zS@BkkKYB?81nxBwxitm!8<-+=YPb{}R^A_~+htN=7DF;Go}ZQZ-2rFOaS3&>JY&Wq zN*Tg@ka3TZ`z{JG2~+A(QM25W-i@0YTPI=V-)N!Mtv&ATAuCvn924Vbfap65>5G8$ z=d_+#!EHA;sth7C>Aet#8LE2mjFI`(jTii}BPnSUkZSF|98?8ytXJ#I4}9xmTo=0I z7ZBKg41^Xw6yFQ-X<&@(Vu!jfJCVw>+0Wb&w?EW~tvygNQuwYR5O)g0J&vfSI3Bny z6|jsLpK#u2YrTD@Ze)8I^((Uw4pa$UMw_2SG~X@TQpx7o3Gc8v_TTIVG7D9mCLX4w z+=N2jA!+h-csauyh=drPwJrE*I-iU33IJu~ZofuRVCQN@>a0>tlsi5sQP#ElY)YmHH1#=qABy1s?Yk(Ci(oYZng@Yjmv6N37DwouW1 zb5GMoD*Q8+muQcfJ?$}H_i4n1PPPJ6K~mwh7~5#Oke&$JWLzoKNSHK(fFZDlcXh_IJA0 z)@JK!jlIyQHvG+GA*$I7M#YNS9TAsvYlEx6C~Zrd1#;*4Z#eS9GP6rRl@(ccti(|X zaA}##&gYLR-VZ-m^qC1{4PC=T)b1;$+SQ&49u?a_<5_Y_iYxLGO}K(j>qq%ip9wcp zDIIr0RHgSL{l)zT4vmK96~s~$stj#&RU%Z0!;jPqdYo1>Mt28mf>bw-y+ax(Qxe;F zPi<_h;9ZfRkA6Fj>+VE$U>B|V<&-#D35&i5BCB(Fiq-6?NtCt|A_VCfzPs|o;w2pG z+{@=13^d??if1KTa|~A9+bPxQlbF6I6OqOkSVC00DnXqVdX@R-ll+m1Dc?sbgY|Nv z3)E&dvMiM(KI)+DO732eEsNd&NMtSkdI?$U7$dcrngArkVt8p8X21Bov!l<;0j~^} z^g(Pm4zsfI=Gkq+bd#2&H*uLcn70ARI2G+`5#=ZMTx2A)n1^1!^OtYfn~xpr3JiSS z*d?yY+jZvax&;p6@RI2z5i0#(?7d}JTW~hnp4b^0DfTswP^`ETb_oW`DONNO!L4y)a>(RMX0;5Hl-gutT5eK%A60WvBaD)RU1$W@~Zz(6Qyp%Y#oTOq{lnH?6WxZ~q=9C|$|x3(2>9 zsTqUoI)~XrTz$91hNITCh{0hoHaky@+=D}akJdxcw4-k`_G9yX-z+B``S$vW_15=6 zWcXGI;L{ibeMC#EE2e-t0t=EToD=3!=Bc8N(k?8ZqCBW0fBir;2}ZI0&^2Y7uPptb z%sfimb+sY>bWBDjJe$$0gYL4AJDi}nkN-(zvx!;#PCH*Sp7_+)0}X92Mvk{6?=@;m ztMqb$5g&du4HhtvrA@gY{OB3jmUj&Lga+ez?JP!nA1ks!Xu}~l2otaGKttI|+_@si zv#0w%Q2>ms-sKWY3w0i%ip^iaJH%nXC@u$bLTX{Dxao^RL*lEqv1B+xBLi@m;)aFl zohPCcmjHx8&bqmfPIOIc8>jh#W%p;FkEv2~EX>l}i5uopa|0hw-|7F@l}!y5uN-WMW;rja7wn&A_}blv2cRRerY zdCirJp+6P|RNNUQ@QqJ|w)sEoqk^McdFFQ^R?XjN1=4hO6)bRsKcNgg=8x{0d8T8t03inPec`&iI?zxpFqk(`}T!fqKB zPSUb!C;s~#hGl~A^tz92yulnVLD{P{OfHnhflA*}C-;`{GJ;tMsm;}dRdIir71x1Y zZD!?#KVFsOqlKXcoH7muo#r*>J}5vqPTQ4FAXQayEr(iiQW4pl6g7=j)%D2-9F72A z%bI?gXhW9MeG-)#))mE}GQ*W>vA~ZUDi~TZRRvcdh}ZqH_=WU^FGotfxi`aRd|5Zd zlqe?18A?ZFq}Q}5HJMf!!=*>eYLspOVL||+(4SB*mS3QhhMDi`+XUpprInMmp$M`P z!-M{F7C%?ko5UuogT*SI1(1sz*#2fwD&dNIz-c! zXG7A-$avc#dDmdnr?mgOa?_%3cVyZ?LF0i$aad5v5Y?5#1c)E-HC{FHu;Uwg!c#l| z?|t?%N3MaTJI!g5zG1birSORLWJ{ygx<8jhvU!kx|4(F!{}}54jZy@Q z8|*X=OJAyX6DzO%lpnzv(&qLU|2$|k>syYZ4W%&-lK0-BjZwnFKqZ`k&_+gBa=%+k!uelW{BW1Jo6+1~Wvcj5Y^ z7XAep1_R?>220f)hxi%moeEEsM9n@#i;1M)i@o(Yx<>RNsn?vhymwh@3BLt+YugNm zkUZ)ex24fSb@!tI*GjhQU3`ZLmsJlb`gaQQa#7SnPbTO!in?JjOqx78p2y9&T^M9a zs^ok+7rp}X1+0xTBr9Pvb+K_I$#@)_xg3LvIwbtm_gNiQkgGsqg)G_Ev@PPu?5Qgz zeJW&cd;SSMioV0dzK^WB6gSmcK$kThh9>dR7E;F8sD&%d_`GD>&QME~(rK~2K>lo4 zVwJz{Xh~X&Q`7OVq=fFI+|JJZC@=+*Yjm;`p-4s~ly9DMO?(}^Ccaj1IQoO=rz&>= zB;8FI{~h)NH>PEX#d1D#d5A{93U=q7|3TRl7Q-X5YMB8E zCn+U>tn4rABq!SKF&b{Vl)pDH*|nm%(Ia=r$>?u3Uoy5=Fk#D0mZ{AQ=fi^0J6 zhPS(@_)QB2%bJf(wPhzf+Sa!Je!P+Eq$8!qarx%DLL5`Xek;|^qBMD`)))#EfLVq z@`Nf5qWF}W6zFFe6h`~&dKBK8<@ik@Nh96(ZK5`s_i7o+2rR<<8K&4>zEeCdrvUI( z=O&g`;ctfWZ+`Tjs9-?v^nVr{{pEL$c*HQdDw7L8%_s@49#WC7WX{5YY_7pd_Izm= zZ{=r4&br&CCYQRVV-tI zU_D|4B+YSfuY97Q8?rh?LA<*uv29Z2RU+p!2tF<4m9VEG?>*k2mf2jnPitp48bZB! zY4dZVaan4r>129Z0&Y&M%h^5TwlQfP^ZHNJ>kyFi8%8dfjEePZM+geZmVt9hF1997T-|XRHm3U&)cc%4v(z3*$=B z%k1gT9?GxF&Mn*iwHD9^bc>UlL)POSwzaO19E;__lvU$ZUkymk?V_Sbcv)Rf8lRpK zEU!E*i%(^1%%B66aWFad1+CMhurR8nsmE9HfV{LuM{OI)$CtQk*;^qfX-_lBYVCj% z^Rb{{mDYppz$L7TQ;o98iH{1qW{{aq!rXOmKuQglkrG;4iOsuircK{=P#rD_9b?4wWgFVfhS6ASc znoJpgruV)Nunp~0VkRUTdlVq>X5Y=-*H1)yZZ1W<2{pjk=7{D z!_(51W(bR9ks}8WRYO4!1qu&JEUb3ZEuZVDi1)FsjCz(~<_|UH(Wg{XFN48Vj_ySY?YOMA)wKm% z8us>R^eWh85IYWBm@EG*3pKab;GjDXw3DpnZE-uqUSIk_DjJ%b-C*QBEEga14Ceft zp$ru(&%%_NfsV#5!Z)~DdvMnhBquNlhYvONC3L7dle8uI%2i`4uEt9@KP}8LznKC&irfo}Xcvb!Ti< zHxo%zYo9|^=02#_a?x%g9{WufFkI^PKkremzL4v#S=`34vOv|#>R?yFli0oF58QD0`_^NeKLta0o(L-Y=bmuaUx0}lhfY^X>_we0h z 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 a?{S{~&&;PW(O510>v~z*uP>SL>ej+9 z5XEWe;Rs<1o%@n_ZsnF#q4cbVN-l!tnEJu8A=F?*>4{b7wwSbds`wMKRQ<&iymPE*jwj z%gL-w>|m(w#%WSOI_HaMExHCpSk8Iv8siH<;5(d!eWO7G%6d=dz&Il8kBw+4S&Qh8 zMBl>i|JG0UI8>ZYly^Pwri<#aIVgzm0R-mb$_w_MPE+zO6zN5TaKokt0`U`7le3Q> zSMw<`YA)tj7JB6u9OE=3->0q%+~f4&M9H%%5R7>wQao7F(s#8@S&C&8*i;lF z2#b1q3zE1+-+=&`(i)pn>Ox*~?vVZHd=?>aak^Y(!PWUPYe+x4f`L(DwKKyNobH`VYOtcvmF8Opgti`X*Djm~R)Z8gFt+ zIv_RSZ`;PC5?C)Pvn6?t{rN5QxMQrhyHD{APt-e6D=x$*v;5Tn0;>OiTnMr1kyq>; zmG-MN)eJD4;$8lVKuG;wPWN+GU;0sRUuO@=qv4dS3F!0UUXYut{M%0AxV&dgTE6t) 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 wGQf~&j7y%H9M6Y?ZKb`S?t(C+*! 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