Compare commits

...

50 Commits

Author SHA1 Message Date
Devin AI
5a172101a6 feat(deploy): add CROMERO dapp Phoenix target
Some checks failed
AI Code Review / claude-review (pull_request) Failing after 2m41s
Validate (PR) / run-all-validation (pull_request) Failing after 29s
Wire the new d-bis/CROMERO dapp (Vite + thirdweb v5, two-chain asset
transfer flow at https://d-bis.org/ecosystem/cromero/) into the
existing Phoenix Deploy API pipeline.

- phoenix-deploy-api/deploy-targets.json: register
  d-bis/CROMERO :: default running
  scripts/deployment/phoenix-deploy-cromero-from-workspace.sh, with a
  healthcheck against the public URL.
- scripts/deployment/phoenix-deploy-cromero-from-workspace.sh: build
  the staged workspace and rsync dist/ to the NPMplus host's
  /var/www/ecosystem/cromero/. Best-effort nginx reload; --dry-run
  supported. Defaults sourced from config/ip-addresses.conf.
- docs/03-deployment/CROMERO_DAPP_DEPLOYMENT.md: pipeline overview,
  one-time nginx location block, required Actions secrets/vars,
  manual-trigger and dry-run recipes.

Co-Authored-By: Nakamoto, S <defi@defi-oracle.io>
2026-04-25 22:55:40 +00:00
defiQUG
aba8ca5700 feat: add universal resource activation manifest wiring
Some checks failed
Deploy to Phoenix / validate (push) Failing after 28s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-24 18:31:54 -07:00
defiQUG
60b8fb9ddc ops: schedule gitea tls expiry monitoring
Some checks failed
Deploy to Phoenix / validate (push) Failing after 30s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-24 18:25:28 -07:00
defiQUG
01c36a5489 ops: add gitea tls handoff and expiry check
Some checks failed
Deploy to Phoenix / validate (push) Failing after 29s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-24 16:30:18 -07:00
defiQUG
a4738c1376 Merge remote-tracking branch 'gitea/master'
Some checks failed
Deploy to Phoenix / validate (push) Has been cancelled
Deploy to Phoenix / deploy (push) Has been cancelled
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been cancelled
Deploy to Phoenix / cloudflare (push) Has been cancelled
# Conflicts:
#	docs/04-configuration/README.md
#	docs/MASTER_INDEX.md
#	phoenix-deploy-api/deploy-targets.json
#	scripts/deployment/phoenix-deploy-explorer-live-from-workspace.sh
2026-04-24 16:12:08 -07:00
defiQUG
c23fdf4614 repo: align explorer submodule to remote master 2026-04-24 16:10:04 -07:00
defiQUG
7e2d9c58e3 repo: update the-order hook fix 2026-04-24 12:59:55 -07:00
defiQUG
64d2e550a1 repo: update cleaned nested repos 2026-04-24 12:56:52 -07:00
defiQUG
7572444b8f docs: index universal resource activation schema 2026-04-24 12:40:52 -07:00
defiQUG
83482d6d13 docs: add blocker cleanup runbook and resource activation pack 2026-04-24 12:40:35 -07:00
defiQUG
219247b872 ops: clear besu verifier gaps and health monitor noise 2026-04-24 12:36:26 -07:00
defiQUG
780648a2ee config: add thirdweb besu sentries to allowlists and template 2026-04-24 12:31:17 -07:00
defiQUG
1336253f8d docs: promote thirdweb besu sentries into canonical inventory 2026-04-24 12:27:10 -07:00
defiQUG
a1eacd3098 ops: destroy duplicate besu cts and add cluster inventory audit 2026-04-24 11:52:46 -07:00
defiQUG
91ba6f4f2f docs: finalize besu host placement reconciliation 2026-04-24 11:45:04 -07:00
defiQUG
21ad898c6b docs: reconcile besu rpc inventory after duplicate retirement 2026-04-24 11:30:46 -07:00
defiQUG
a14a683b9b verify: skip non-evm lane status when inventory inputs are missing 2026-04-24 11:02:26 -07:00
defiQUG
984900deba repo: ignore generated deployment and inventory report outputs 2026-04-24 10:58:54 -07:00
defiQUG
d8ff571c60 repo: ignore generated validation and inventory artifacts 2026-04-24 10:58:21 -07:00
defiQUG
e27ec30ab1 docs: add planning and terminology notes 2026-04-24 10:56:05 -07:00
defiQUG
1927058a95 feat: add inventory and validation builders 2026-04-24 10:56:01 -07:00
defiQUG
c65b896fad ops: add chain138 and rpc diagnostic tooling 2026-04-24 10:55:55 -07:00
defiQUG
454aeda9d5 ops: add new deployment and operator automation scripts 2026-04-24 10:55:50 -07:00
defiQUG
996d45d1ba feat: add phoenix deploy and x402 service updates 2026-04-24 10:55:45 -07:00
defiQUG
c5ec42d3d2 ci: update gitea workflows and contributor guidance 2026-04-24 10:55:42 -07:00
defiQUG
afde88ff9a config: refresh operational templates and network mappings 2026-04-24 10:55:39 -07:00
defiQUG
fc32d51ca7 docs: update operator, endpoint, and deployment references 2026-04-24 10:55:35 -07:00
defiQUG
9f60311ef1 docs: mark historical references to removed cleanup helpers 2026-04-24 10:47:02 -07:00
defiQUG
3743d20f49 repo: prune obsolete helpers and backup artifacts 2026-04-24 10:47:01 -07:00
defiQUG
58ca82bbe3 chain138: harden besu txpool recovery and runbooks 2026-04-24 10:46:40 -07:00
Codex
453ccc8d12 Add explorer-live deploy target and operator handoff
Some checks failed
Deploy to Phoenix / validate (push) Failing after 13s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-23 09:53:49 -07:00
defiQUG
77d40201a3 ci: prefer gitea remote for workflow parity checks
Some checks failed
Deploy to Phoenix / validate (push) Failing after 12s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-22 21:48:58 -07:00
defiQUG
0e7200f1b8 ci: lock deploy workflows across main and master
Some checks failed
Deploy to Phoenix / validate (push) Failing after 13s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-22 21:47:57 -07:00
defiQUG
725dcd180d phoenix: automate CurrenciCombo e2e deploys
Some checks failed
Deploy to Phoenix / validate (push) Successful in 13s
Deploy to Phoenix / deploy (push) Successful in 37s
phoenix-deploy Phoenix deployment in progress
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Failing after 30s
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-22 20:05:26 -07:00
773c83e6c6 ci(validate): materialize cross-chain-pmm-lps via anon clone + guard step 3
Some checks failed
Deploy to Phoenix / validate (push) Successful in 14s
Deploy to Phoenix / deploy (push) Failing after 9s
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Failing after 9s
Deploy to Phoenix / cloudflare (push) Has been skipped
phoenix-deploy Deployed to atomic-swap-dapp-live
Unblocks the Gitea Actions validate gate so pushes to master can run deploy-to-phoenix -> deploy-atomic-swap-dapp.

Co-authored-by: Nakamoto, S <nsatoshi2007@hotmail.com>
Co-committed-by: Nakamoto, S <nsatoshi2007@hotmail.com>
2026-04-22 22:08:03 +00:00
defiQUG
d9a3053a58 Harden deployment env flows and surface external blockers
Some checks failed
Deploy to Phoenix / validate (push) Failing after 10s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-22 14:47:52 -07:00
defiQUG
dc123ff647 Wire Phoenix deploy path for atomic swap dapp
Some checks failed
Deploy to Phoenix / validate (push) Failing after 11s
Deploy to Phoenix / deploy (push) Has been skipped
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Has been skipped
Deploy to Phoenix / cloudflare (push) Has been skipped
2026-04-22 13:49:46 -07:00
defiQUG
d06af63700 Rewire atomic swap dapp submodule to Gitea
Some checks failed
Deploy to Phoenix / validate (push) Failing after 14s
Deploy to Phoenix / deploy (push) Has been skipped
2026-04-22 10:01:17 -07:00
defiQUG
f0f0a4bb84 docs(AGENTS): mcp-proxmox Gitea URL and pmm-lops-publish worktree note
Some checks failed
Deploy to Phoenix / validate (push) Failing after 12s
Deploy to Phoenix / deploy (push) Has been skipped
Made-with: Cursor
2026-04-21 22:04:30 -07:00
defiQUG
deba4f9f00 chore: pin metamask-integration to logo commit; ignore vendor checkouts
Some checks failed
Deploy to Phoenix / validate (push) Failing after 14s
Deploy to Phoenix / deploy (push) Has been skipped
Made-with: Cursor
2026-04-21 22:04:13 -07:00
defiQUG
8e3d2e1ddb fix(submodules): mcp-proxmox on Gitea, drop spurious pmm-lps-publish link, ignore local secrets
Some checks failed
Deploy to Phoenix / validate (push) Failing after 13s
Deploy to Phoenix / deploy (push) Has been skipped
- Point mcp-proxmox URL to gitea.d-bis.org and pin to 2b629ba (incl. test_auth)
- Remove cross-chain-pmm-lps-publish from index (worktree, not a parent submodule)
- .gitignore: worktree path, tmp/codex, operator env exports, select output/ noise

Made-with: Cursor
2026-04-21 22:03:32 -07:00
defiQUG
b8613905bd chore: sync workspace — configs, docs, scripts, CI, pnpm, submodules
Some checks failed
Deploy to Phoenix / validate (push) Failing after 15s
Deploy to Phoenix / deploy (push) Has been skipped
- Submodule pins: dbis_core, cross-chain-pmm-lps, mcp-proxmox (local, push may be pending), metamask-integration, smom-dbis-138
- Atomic swap + cross-chain-pmm-lops-publish, deploy-portal workflow, phoenix deploy-targets, routing/aggregator matrices
- Docs, token-lists, forge proxy, phoenix API, runbooks, verify scripts

Made-with: Cursor
2026-04-21 22:01:33 -07:00
defiQUG
e6bc7a6d7c chore(verify): PR validation workflow, pnpm Solana peer, lockfile check, backup SSH
- Gitea: add validate-on-pr.yml (run-all-validation only; no deploy)
- .env.master.example: document NPM_EMAIL/NPM_PASSWORD for backup-npmplus
- pnpm: allowedVersions for @solana/sysvars to quiet thirdweb/x402 peer drift
- AGENTS + verify README: CI pointers and .env.master.example for env
- backup-npmplus: npm_lxc_ssh helper; keep prior timeout/BatchMode behavior
- check-pnpm-workspace-lockfile + run-all-validation step 1b (from prior work in same commit set)

Made-with: Cursor
2026-04-21 21:56:49 -07:00
defiQUG
4fab998e51 chore: sync workspace docs, configs, and submodules
All checks were successful
Deploy to Phoenix / deploy (push) Successful in 9s
2026-04-18 12:07:15 -07:00
defiQUG
d63efcb315 fix(ops): map dev VM 5700 to r630-04; add phoenix-deploy-api deploy script
All checks were successful
Deploy to Phoenix / deploy (push) Successful in 9s
Sync get_host_for_vmid with live placement for VMID 5700 (dev-vm). Add
deploy-phoenix-deploy-api-to-dev-vm.sh for pct-based install to CT 5700.

Made-with: Cursor
2026-04-17 04:51:47 -07:00
1892827711 chore: merge upstream sync — Mission Control launchpad, runbooks, ProxmoxVE React 19 build fix
All checks were successful
Deploy to Phoenix / deploy (push) Successful in 6s
- Merge origin/main into master (already applied).
- Regenerate doc-manifest.json for new RUNBOOK markdown (60 entries).
- Launchpad: E2E endpoints doc, docs.d-bis.org, Gitea, Chain 138 dapp + env overrides.
- ProxmoxVE submodule: fix react-syntax-highlighter JSX types for Next 15 / React 19.

Made-with: Cursor
2026-04-07 16:28:44 +08:00
820174d556 merge: sync local master with origin/main 2026-04-07 16:07:16 +08:00
252b766a53 feat(mission-control): sync launchpad and runbooks with upstream main
- Merge-aligned doc-manifest regeneration (58 doc-derived runbooks)

- Launchpad: Phoenix Deploy API, Meta testnet 2138 runbook, aggregator route matrix

- Curated runbook: check-chain138-rpc-health.sh; README env vars; catalog test threshold

Made-with: Cursor
2026-03-29 10:13:59 +08:00
fa5de3ba01 merge origin/main: sync upstream with Mission Control 2026-03-29 10:11:51 +08:00
18767b7d8b feat: add Mission Control operator console and workspace wiring
- New mission-control Next.js app: runbook catalog, GO execution, SSE stream, audit ZIP export

- Generated doc-manifest from docs runbooks; curated JSON specs; health-check script

- pnpm workspace package, root scripts, README updates

- Resilience: Windows-safe path checks, optional MISSION_CONTROL_PROJECT_ROOT fallback, system fonts

- Bump mcp-proxmox submodule to tracked main

Made-with: Cursor
2026-03-28 14:50:11 +08:00
1202 changed files with 204416 additions and 111112 deletions

View File

@@ -20,6 +20,8 @@ PROXMOX_ALLOW_ELEVATED=
# Prefer CLOUDFLARE_API_TOKEN scoped to Zone:DNS:Edit on the zones you use (avoid global Account API key when possible).
# Bulk DNS script: scripts/update-all-dns-to-public-ip.sh — use --dry-run and --zone-only=sankofa.nexus (etc.) before wide updates.
CLOUDFLARE_API_TOKEN=
# Set to 1 if token has no DNS:Edit and you need Global API key for scripts/cloudflare/provision-d-bis-mail-dns-and-npmplus.sh etc.
CLOUDFLARE_DNS_PREFER_GLOBAL_KEY=
CLOUDFLARE_EMAIL=
CLOUDFLARE_API_KEY=
CLOUDFLARE_ZONE_ID=
@@ -40,6 +42,10 @@ CLOUDNS_AUTH_ID=
CLOUDNS_AUTH_PASSWORD=
# --- NPM / NPMplus ---
# For scripts/verify/backup-npmplus.sh: NPM_EMAIL and NPM_PASSWORD are both required
# (no in-script defaults); see AGENTS.md operator / backup row.
# PMG (LXC 100) web UI — optional: run scripts/operator/sync-pmg-webui-password-to-dotenv.sh to pull from /root/PMG_WEBUI_password.txt
PMG_WEBUI_PASSWORD=
NPM_URL=
NPM_EMAIL=
NPM_PASSWORD=
@@ -94,13 +100,66 @@ AZURE_STORAGE_CONTAINER=
# --- Blockchain / SMOM-DBIS-138 (use smom-dbis-138/.env for PRIVATE_KEY) ---
PRIVATE_KEY=
DEPLOYER_ADDRESS=
RPC_URL_138=
RPC_URL_138_PUBLIC=
ETHEREUM_MAINNET_RPC=
# Clear scripts/verify/check-external-dependencies.sh — use real service URLs when split; example interim health target:
# DBIS_CORE_URL=https://dbis-api.d-bis.org/health
DBIS_CORE_URL=
CC_PAYMENT_ADAPTERS_URL=
CC_AUDIT_LEDGER_URL=
CC_SHARED_EVENTS_URL=
CC_SHARED_SCHEMAS_URL=
FIN_GATEWAY_URL=
ALLIANCE_ACCESS_URL=
# cast must be in PATH; use a runner-reachable Chain 138 RPC, e.g.:
# CHAIN138_CI_RPC_URL=https://rpc.public-0138.defi-oracle.io
CHAIN138_CI_RPC_URL=
ALL_MAINNET_RPC=
# Alltra / Wemix / Etherlink: set for production; for local read-only checks, deployer-gas-auto-route.sh falls back to public RPCs documented in scripts/deployment/deployer-gas-auto-route.sh
CHAIN_651940_RPC_URL=
# ALLTRA_MAINNET_RPC=https://mainnet-rpc.alltra.global
# WEMIX_RPC_URL=https://api.wemix.com
# ETHERLINK_RPC_URL=https://node.mainnet.etherlink.com
CHAIN_1_UNISWAP_V2_FACTORY=0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
CHAIN_1_UNISWAP_V2_ROUTER=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
CHAIN_1_UNISWAP_V2_START_BLOCK=0
CHAIN_10_UNISWAP_V2_FACTORY=0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf
CHAIN_10_UNISWAP_V2_ROUTER=0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2
CHAIN_10_UNISWAP_V2_START_BLOCK=0
CHAIN_25_UNISWAP_V2_FACTORY=0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15
CHAIN_25_UNISWAP_V2_ROUTER=0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae
CHAIN_25_UNISWAP_V2_START_BLOCK=0
CHAIN_56_UNISWAP_V2_FACTORY=0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73
CHAIN_56_UNISWAP_V2_ROUTER=0x10ED43C718714eb63d5aA57B78B54704E256024E
CHAIN_56_UNISWAP_V2_START_BLOCK=0
CHAIN_100_UNISWAP_V2_FACTORY=0xc35DADB65012eC5796536bD9864eD8773aBc74C4
CHAIN_100_UNISWAP_V2_ROUTER=0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
CHAIN_100_UNISWAP_V2_START_BLOCK=0
CHAIN_137_UNISWAP_V2_FACTORY=0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32
CHAIN_137_UNISWAP_V2_ROUTER=0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
CHAIN_137_UNISWAP_V2_START_BLOCK=0
CHAIN_42220_UNISWAP_V2_FACTORY=0x62d5b84bE28a183aBB507E125B384122D2C25fAE
CHAIN_42220_UNISWAP_V2_ROUTER=0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121
CHAIN_42220_UNISWAP_V2_START_BLOCK=0
CHAIN_43114_UNISWAP_V2_FACTORY=0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10
CHAIN_43114_UNISWAP_V2_ROUTER=0x60aE616a2155Ee3d9A68541Ba4544862310933d4
CHAIN_43114_UNISWAP_V2_START_BLOCK=0
CHAIN_8453_UNISWAP_V2_FACTORY=0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E
CHAIN_8453_UNISWAP_V2_ROUTER=0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb
CHAIN_8453_UNISWAP_V2_START_BLOCK=0
CHAIN_42161_UNISWAP_V2_FACTORY=0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E
CHAIN_42161_UNISWAP_V2_ROUTER=0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb
CHAIN_42161_UNISWAP_V2_START_BLOCK=0
# Optional / scaffold-only until Wemix UniV2 routing is promoted
CHAIN_1111_UNISWAP_V2_FACTORY=
CHAIN_1111_UNISWAP_V2_ROUTER=
CHAIN_1111_UNISWAP_V2_START_BLOCK=0
ETHERLINK_RPC_URL=
TEZOS_RPC_URL=
ETHERSCAN_API_KEY=
WEMIXSCAN_API_KEY=
ETHERLINK_CCIP_SELECTOR=
TEZOS_BRIDGE_ENABLED=
ETHERLINK_BRIDGE_ENABLED=

View File

@@ -6,6 +6,10 @@
2. Make changes, ensure tests pass
3. Open a pull request
Deploy workflow policy:
`main` and `master` are both deploy-triggering branches, so `.gitea/workflow-sources/deploy-to-phoenix.yml` and `.gitea/workflow-sources/validate-on-pr.yml` must stay identical across both branches.
Use `bash scripts/verify/sync-gitea-workflows.sh` after editing workflow-source files, and `bash scripts/verify/run-all-validation.sh --skip-genesis` to catch workflow drift before push.
## Pull Requests
- Use the PR template when opening a PR

View File

@@ -0,0 +1,81 @@
# Canonical deploy workflow. Keep source and checked-in workflow copies byte-identical.
# Validation checks both file sync and main/master parity.
name: Deploy to Phoenix
on:
push:
branches: [main, master]
workflow_dispatch:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Fetch deploy branches for workflow parity check
run: |
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
if git remote | grep -qx gitea; then
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
fi
git fetch --depth=1 "$REMOTE" main master
- name: Run repo validation gate
run: |
bash scripts/verify/run-all-validation.sh --skip-genesis
deploy:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Trigger Phoenix deployment
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}"
deploy-atomic-swap-dapp:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Trigger Atomic Swap dApp deployment (Phoenix)
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"atomic-swap-dapp-live\"}"
# After app deploy, ask Phoenix to run path-gated Cloudflare DNS sync on the host that has
# PHOENIX_REPO_ROOT + .env (not on this runner). Skips unless PHOENIX_CLOUDFLARE_SYNC=1 on that host.
# continue-on-error: first-time or missing opt-in should not block the main deploy.
cloudflare:
needs:
- deploy
- deploy-atomic-swap-dapp
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Request Cloudflare DNS sync (Phoenix)
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"cloudflare-sync\"}"

View File

@@ -0,0 +1,25 @@
# Canonical PR validation workflow. Keep source and checked-in workflow copies byte-identical.
# Validation checks both file sync and main/master parity.
# PR-only: push validation already runs in deploy-to-phoenix.yml; this gives PRs the same
# no-LAN checks without the deploy job (and without deploy secrets).
name: Validate (PR)
on:
pull_request:
types: [opened, synchronize, reopened]
branches: [main, master]
workflow_dispatch:
jobs:
run-all-validation:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Fetch deploy branches for workflow parity check
run: |
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
if git remote | grep -qx gitea; then
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
fi
git fetch --depth=1 "$REMOTE" main master
- name: run-all-validation (no LAN, no genesis)
run: bash scripts/verify/run-all-validation.sh --skip-genesis

View File

@@ -0,0 +1,31 @@
name: Deploy Sankofa Portal Live
on:
workflow_dispatch:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run repo validation gate
run: |
bash scripts/verify/run-all-validation.sh --skip-genesis
deploy:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Trigger portal-live deployment
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"portal-live\"}"

View File

@@ -1,11 +1,33 @@
# Canonical deploy workflow. Keep source and checked-in workflow copies byte-identical.
# Validation checks both file sync and main/master parity.
name: Deploy to Phoenix
on:
push:
branches: [main, master]
workflow_dispatch:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Fetch deploy branches for workflow parity check
run: |
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
if git remote | grep -qx gitea; then
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
fi
git fetch --depth=1 "$REMOTE" main master
- name: Run repo validation gate
run: |
bash scripts/verify/run-all-validation.sh --skip-genesis
deploy:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Checkout code
@@ -13,8 +35,47 @@ jobs:
- name: Trigger Phoenix deployment
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${{ gitea.sha }}\",\"branch\":\"${{ gitea.ref_name }}\"}"
continue-on-error: true
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}"
deploy-atomic-swap-dapp:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Trigger Atomic Swap dApp deployment (Phoenix)
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"atomic-swap-dapp-live\"}"
# After app deploy, ask Phoenix to run path-gated Cloudflare DNS sync on the host that has
# PHOENIX_REPO_ROOT + .env (not on this runner). Skips unless PHOENIX_CLOUDFLARE_SYNC=1 on that host.
# continue-on-error: first-time or missing opt-in should not block the main deploy.
cloudflare:
needs:
- deploy
- deploy-atomic-swap-dapp
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Request Cloudflare DNS sync (Phoenix)
run: |
SHA="$(git rev-parse HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"cloudflare-sync\"}"

View File

@@ -0,0 +1,25 @@
# Canonical PR validation workflow. Keep source and checked-in workflow copies byte-identical.
# Validation checks both file sync and main/master parity.
# PR-only: push validation already runs in deploy-to-phoenix.yml; this gives PRs the same
# no-LAN checks without the deploy job (and without deploy secrets).
name: Validate (PR)
on:
pull_request:
types: [opened, synchronize, reopened]
branches: [main, master]
workflow_dispatch:
jobs:
run-all-validation:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Fetch deploy branches for workflow parity check
run: |
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
if git remote | grep -qx gitea; then
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
fi
git fetch --depth=1 "$REMOTE" main master
- name: run-all-validation (no LAN, no genesis)
run: bash scripts/verify/run-all-validation.sh --skip-genesis

67
.gitignore vendored
View File

@@ -74,3 +74,70 @@ reconciliation/
*.payload.json
*.payload.sha256
audit_log.jsonl
# cross-chain-pmm-lps-publish: git worktree under that repo — not a parent submodule
cross-chain-pmm-lps-publish/
# Local scratch (never commit)
.tmp-*.cjs
.codex
.codex/
.venv-checkjson/
.env.bak.pmg.*
# Teammate / third-party onboarding (API token handoffs; never commit)
reports/secrets/
# Operator / runtime env snapshots under reports/ (sensitive; regenerate from hosts)
reports/status/operator-*.env
reports/status/operator-runtime*.env
reports/status/chain138_aave_runtime.env
reports/status/*runtime-env*.env
reports/status/ei-matrix-eth-send*
reports/status/token-aggregation-*.tar.gz
config/production/*did-secrets.env
# Bulky one-off local outputs (re-run scripts to restore)
output/omnl-e2e-*.zip
output/omnl-e2e-*/
output/office22-*.zip
output/settlement-events/
output/transaction-package-*/
output/cw-assets-usd-quote-dump.json
output/jvmtm-evidence/
# Generated verification evidence snapshots (keep curated evidence, ignore rerunnable timestamped dumps)
docs/04-configuration/verification-evidence/e2e-verification-*/
# Generated deployment and inventory machine outputs
reports/deployment/*_20[0-9][0-9]-[0-9][0-9]-[0-9][0-9].md
reports/deployment/check-deployer-lp-balances-*.json
reports/inventory/container_inventory_*.csv
reports/inventory/contract-inventory-*.json
reports/inventory/DEPLOYED_CONTRACTS_*.md
reports/inventory/INCOMPLETE_DUPLICATE_ANALYSIS.md
reports/inventory/INVENTORY_COVERAGE_GAPS.md
reports/inventory/deployed-contracts-completion-matrix.json
reports/inventory/incomplete-duplicate-bytecode-analysis.json
# Generated status artifacts (rerunnable from wrappers/validation scripts)
reports/status/MULTI_NETWORK_DEPLOYMENT_AUDIT_*.md
reports/status/*-latest.json
reports/status/*-latest.md
reports/status/*-latest.csv
reports/status/hardware_poll_*.txt
reports/status/lxc_cluster_health_*.json
reports/status/lxc_cluster_health_*.txt
reports/status/mainnet-cwusdc-usdc-preflight-*.json
reports/status/mainnet-cwusdc-usdc-repeg-plan-*.json
reports/status/live_inventory_*.json
reports/status/drift_*.json
# Large optional vendor trees and local checkouts (keep out of main clone)
smom-dbis-138-publish/
third-party/
thirdweb-core-2103-test/
tmp/
token-aggregation-build/
transaction-composer/
vendor/

6
.gitmodules vendored
View File

@@ -4,7 +4,7 @@
# Primary integration remote is Gitea; use GitHub only as an optional mirror when available.
[submodule "mcp-proxmox"]
path = mcp-proxmox
url = https://github.com/gilby125/mcp-proxmox.git
url = https://gitea.d-bis.org/d-bis/mcp-proxmox.git
[submodule "smom-dbis-138"]
path = smom-dbis-138
url = git@github.com:Order-of-Hospitallers/smom-dbis-138.git
@@ -64,3 +64,7 @@
[submodule "MEV_Bot"]
path = MEV_Bot
url = https://gitea.d-bis.org/d-bis/MEV_Bot.git
[submodule "atomic-swap-dapp"]
path = atomic-swap-dapp
url = https://gitea.d-bis.org/d-bis/atomic-swap-dapp.git
# Local bootstrap remote for initial scaffolding; replace with canonical hosted remote before team-wide clone use.

View File

@@ -11,15 +11,18 @@ Orchestration for Proxmox VE, Chain 138 (`smom-dbis-138/`), explorers, NPMplus,
| Need | Location |
|------|-----------|
| Doc index | `docs/MASTER_INDEX.md` |
| Universal resource activation (manifest, CI, Phoenix) | `docs/04-configuration/universal-resource-activation/UNIVERSAL_RESOURCE_WIRING.md`, `config/universal-resource-activation/manifest.json`, `node scripts/validate/validate-universal-resource-activation.mjs`, `bash scripts/verify/smoke-universal-resource-activation.sh` (add `--http` or `PHOENIX_BASE_URL=…` for live API), `GET` `/api/v1/universal-resource-activation/manifest` on `phoenix-deploy-api` |
| cXAUC/cXAUT unit | 1 full token = 1 troy oz Au — `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` (section 5.1) |
| PMM mesh 6s tick | `smom-dbis-138/scripts/reserve/pmm-mesh-6s-automation.sh``docs/integration/ORACLE_AND_KEEPER_CHAIN138.md` (PMM mesh automation) |
| VMID / IP / FQDN | `docs/04-configuration/ALL_VMIDS_ENDPOINTS.md` |
| Ops template + JSON | `docs/03-deployment/PROXMOX_VE_OPERATIONAL_DEPLOYMENT_TEMPLATE.md`, `config/proxmox-operational-template.json` |
| 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 …]` |
| 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` |
| 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. |
| smom-dbis-138 `.env` in bash scripts | Prefer `source smom-dbis-138/scripts/lib/deployment/dotenv.sh` + `load_deployment_env --repo-root "$PROJECT_ROOT"` (trims RPC URL line endings). From an interactive shell: `source smom-dbis-138/scripts/load-env.sh`. Proxmox root scripts: `source scripts/lib/load-project-env.sh` (also trims common RPC vars). |
| Sankofa portal → CT 7801 (build + restart) | `./scripts/deployment/sync-sankofa-portal-7801.sh` (`--dry-run` first); sets `NEXTAUTH_URL` on CT via `sankofa-portal-ensure-nextauth-on-ct.sh` |
| CCIP relay (r630-01 host) | Unit: `config/systemd/ccip-relay.service``/etc/systemd/system/ccip-relay.service`; `systemctl enable --now ccip-relay` |
@@ -27,7 +30,13 @@ Orchestration for Proxmox VE, Chain 138 (`smom-dbis-138/`), explorers, NPMplus,
| The Order portal (`https://the-order.sankofa.nexus`) | OSJ management UI (secure auth); source repo **the_order** at `~/projects/the_order`. NPM upstream defaults to **order-haproxy** CT **10210** (`IP_ORDER_HAPROXY:80`); use `THE_ORDER_UPSTREAM_*` to point at the Sankofa portal if 10210 is down. Provision HAProxy: `scripts/deployment/provision-order-haproxy-10210.sh`. **`www.the-order.sankofa.nexus`** → **301** apex (same as www.sankofa / www.phoenix). |
| Portal login + Keycloak systemd + `.env` (prints password once) | `./scripts/deployment/enable-sankofa-portal-login-7801.sh` (`--dry-run` first) |
| Completable (no LAN) | `./scripts/run-completable-tasks-from-anywhere.sh` |
| Operator (LAN + secrets) | `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if `NPM_PASSWORD` unset) |
| smom-dbis-138 root `forge test` | Uses `foundry.toml` `[profile.default] skip` for legacy Uniswap V2 vendor trees (0.5/0.6 solc); scoped work still uses `bash scripts/forge/scope.sh …` |
| cWUSDT Mainnet USD pricing (on-chain + runbook) | `./scripts/deployment/price-cw-token-mainnet.sh``docs/03-deployment/CW_TOKEN_USD_PRICING_RUNBOOK.md` |
| Deployer LP balances (mesh inventory) | `python3 scripts/deployment/check-deployer-lp-balances.py` — scans `deployment-status.json` + `reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json`; **UniV2** `lpToken` = pair; **DODO DVM** LP shares = `balanceOf(pool)`; on failure, probes `_BASE_TOKEN_` / `_BASE_CAPITAL_TOKEN_` / `_QUOTE_CAPITAL_TOKEN_` + extra public RPCs (`--no-resolve-dodo` skips; `--chain-id N` for one chain). JSON: `lpTokenAddress`, `lpResolution`, `lpBalances[]`. Use `--deployer` / `DEPLOYER_ADDRESS` if no `PRIVATE_KEY` |
| Etherscan Value $0 for Mainnet `cW*` | Listing path (CoinGecko/CMC), not a contract toggle — `docs/04-configuration/coingecko/ETHERSCAN_USD_VALUE_MAINNET_TOKENS.md` |
| Verify contracts on explorers (all networks) | `cd smom-dbis-138 && ./scripts/deployment/verify-all-networks-explorers.sh` — Blockscout 138, Etherscan + multichain `cW*`, Avax/Arb bridges, optional Cronos/Wemix/CCIPLogger |
| Operator (LAN + secrets) | `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if `NPM_PASSWORD` unset; backup also needs `NPM_EMAIL` in `.env`) |
| Remote SSH to dev VM (5700 / `192.168.11.59`) for runner & deploy API | [docs/04-configuration/DEV_VM_SSH_REMOTE_ACCESS.md](docs/04-configuration/DEV_VM_SSH_REMOTE_ACCESS.md) (Cloudflare Access + tunnel, or UDM allowlist) |
| Cloudflare bulk DNS → `PUBLIC_IP` | `./scripts/update-all-dns-to-public-ip.sh` — use **`--dry-run`** and **`--zone-only=sankofa.nexus`** (or `d-bis.org` / `mim4u.org` / `defi-oracle.io`) to limit scope; see script header. Prefer scoped **`CLOUDFLARE_API_TOKEN`** (see `.env.master.example`). |
## Git submodules

Submodule MEV_Bot updated: 682bd76349...f126ae50b4

View File

@@ -90,6 +90,14 @@ From the root directory, you can run:
- `pnpm frontend:build` - Build the ProxmoxVE frontend for production
- `pnpm frontend:start` - Start the production frontend server
### Mission Control (unified operator console)
- `pnpm mission-control:dev` - Next.js console on **http://localhost:3010** (launchpad + guided runbooks + live run trace + audit ZIP)
- `pnpm mission-control:build` / `pnpm mission-control:start` - Production build and server
- `pnpm mission-control:test` - Executor smoke test (real allowlisted child process)
See [mission-control/README.md](mission-control/README.md) and [mission-control/TIMELINE.md](mission-control/TIMELINE.md).
### Testing
- `pnpm test` - Run tests (if available)

1
atomic-swap-dapp Submodule

Submodule atomic-swap-dapp added at 44a731b606

View File

@@ -20,7 +20,5 @@ liveBridgeRoute,138-WETH-25-ccip,live,bridge,138,25,WETH,0xC02aaA39b223FE8D0A0e5
liveBridgeRoute,138-WETH-42220-ccip,live,bridge,138,42220,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
liveBridgeRoute,138-WETH-651940-alltra,live,bridge,138,651940,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,ALT,0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc,LiFi,,,,
liveBridgeRoute,138-WETH10-1-ccip,live,bridge,138,1,WETH10,0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f,WETH10,0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f,,CCIP,0xe0E93247376aa097dB308B92e6Ba36bA015535D0,LiFi,,,,
blockedOrPlannedRoute,138-compliant-stable-to-weth-bridgeable,blocked,swap-bridge-swap,138,1,cUSDT|cUSDC|cEURT,,,,,,,,,,,"No live public cUSDT/WETH, cUSDC/WETH, or cEURT/WETH pool on Chain 138."
blockedOrPlannedRoute,651940-public-dex-routes,planned,swap,651940,651940,,,,,,,,,,,,Uniswap V2/V3 and DODO are env placeholders only; no pool addresses are documented in-repo.
blockedOrPlannedRoute,cw-edge-pools-public-chains,planned,swap,1,43114,,,,,,,,,,,,"cW* token addresses exist on several public chains, but deployment-status.json contains no PMM pools."
blockedOrPlannedRoute,138-weth-1111-ccip,planned,bridge,138,1111,,,,,,,,,,,,Wemix bridge is pending funding and deployment.
blockedOrPlannedRoute,651940-public-dex-routes,planned,swap,651940,651940,,,,,,,,,,,,Alltra same-chain settlement remains documentation-only: no deployed PMM or Uniswap venue inventory is published in canonical deployment status, and HYDX/AlltraDEX router-factory-pool addresses are still not committed in-repo.
blockedOrPlannedRoute,138-weth-1111-ccip,planned,bridge,138,1111,,,,,,,,,,,,"Wemix bridge contracts are deployed and destinations are wired, but the current Chain 138 CCIP router still rejects the Wemix selector with `CCIPRouter: chain not supported`; the WEMIX-side LINK balances are also zero and no successful proof transfer has been recorded."
1 kind routeId status routeType fromChainId toChainId tokenInSymbol tokenInAddress tokenOutSymbol tokenOutAddress hopCount bridgeType bridgeAddress aggregatorFamilies tags intermediateSymbols legRefs notesOrReason
20 liveBridgeRoute 138-WETH-42220-ccip live bridge 138 42220 WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 CCIP 0xcacfd227A040002e49e2e01626363071324f820a LiFi
21 liveBridgeRoute 138-WETH-651940-alltra live bridge 138 651940 WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ALT 0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc LiFi
22 liveBridgeRoute 138-WETH10-1-ccip live bridge 138 1 WETH10 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f WETH10 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f CCIP 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 LiFi
23 blockedOrPlannedRoute 138-compliant-stable-to-weth-bridgeable 651940-public-dex-routes blocked planned swap-bridge-swap swap 138 651940 1 651940 cUSDT|cUSDC|cEURT No live public cUSDT/WETH, cUSDC/WETH, or cEURT/WETH pool on Chain 138. Alltra same-chain settlement remains documentation-only: no deployed PMM or Uniswap venue inventory is published in canonical deployment status
24 blockedOrPlannedRoute 651940-public-dex-routes 138-weth-1111-ccip planned swap bridge 651940 138 651940 1111 Uniswap V2/V3 and DODO are env placeholders only; no pool addresses are documented in-repo. Wemix bridge contracts are deployed and destinations are wired, but the current Chain 138 CCIP router still rejects the Wemix selector with `CCIPRouter: chain not supported`; the WEMIX-side LINK balances are also zero and no successful proof transfer has been recorded.
blockedOrPlannedRoute cw-edge-pools-public-chains planned swap 1 43114 cW* token addresses exist on several public chains, but deployment-status.json contains no PMM pools.
blockedOrPlannedRoute 138-weth-1111-ccip planned bridge 138 1111 Wemix bridge is pending funding and deployment.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,161 @@
{
"name": "ALL Mainnet Non-DODO Protocol Surface",
"version": "0.1.0",
"updated": "2026-04-21",
"chainId": 651940,
"network": "ALL Mainnet (Alltra)",
"status": "bridge_live_swap_inventory_pending",
"summary": {
"bridgeOnlyLive": true,
"sameChainSwapInventoryPublished": false,
"notes": [
"The Chain 138 <-> 651940 AlltraAdapter bridge is live.",
"This file documents the known non-DODO Alltra protocol and token surface without asserting live routable pool inventory.",
"Promote protocols here into canonical route inventory only after real factory/router/pool addresses are committed and verified."
]
},
"documentedTokens": [
{
"symbol": "AUSDT",
"address": "0x015B1897Ed5279930bC2Be46F661894d219292A6",
"decimals": 18,
"category": "stablecoin",
"status": "verified"
},
{
"symbol": "USDT",
"address": "0x66D8Efa0AF63B0e84eb1Dd72bf00f00cd1e2234e",
"decimals": 18,
"category": "stablecoin",
"status": "verified"
},
{
"symbol": "USDC",
"address": "0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881",
"decimals": 18,
"category": "stablecoin",
"status": "verified"
},
{
"symbol": "WETH",
"address": "0x798F6762BB40d6801A593459d08F890603D3979C",
"decimals": 18,
"category": "wrapped-native",
"status": "verified"
},
{
"symbol": "WALL",
"address": "0x2da2b8f961F161ab6320acB3377e2e844a3C3ce4",
"decimals": 18,
"category": "wrapped-native",
"status": "verified"
},
{
"symbol": "HYDX",
"address": "0x0d9793861AEB9244AD1B34375a83A6730F6AdD38",
"decimals": 18,
"category": "dex-token",
"status": "verified"
},
{
"symbol": "HYBX",
"address": "0x1839f77eBed7F388c7035f7061B4B8Ef0E72317a",
"decimals": 8,
"category": "defi-token",
"status": "verified"
},
{
"symbol": "CHT",
"address": "0xE59Bb804F4884FcEA183a4A67B1bb04f4a4567bc",
"decimals": 8,
"category": "defi-token",
"status": "verified"
},
{
"symbol": "AUDA",
"address": "0x690740f055A41FA7669f5a379Bf71B0cDF353073",
"decimals": 18,
"category": "defi-token",
"status": "verified"
}
],
"protocols": [
{
"name": "AlltraDEX / EnhancedSwapRouter",
"family": "custom_router",
"status": "documented_inventory_pending",
"factoryAddress": null,
"routerAddress": null,
"notes": [
"Documented in docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md as the intended same-chain swap surface.",
"No committed canonical factory/router/pool inventory is currently published in-repo."
]
},
{
"name": "HYDX",
"family": "custom_router",
"status": "token_present_protocol_surface_pending",
"factoryAddress": null,
"routerAddress": null,
"envKeys": [
"CHAIN_651940_HYDX_FACTORY",
"CHAIN_651940_HYDX_ROUTER",
"CHAIN_651940_HYDX_START_BLOCK",
"CHAIN_651940_HYDX_PAIR_CREATED_EVENT"
],
"notes": [
"The HYDX token is documented and verified on ALL Mainnet.",
"The repo expects factory/router discovery via env, but no canonical pool inventory is currently committed."
]
},
{
"name": "Uniswap V2",
"family": "uniswap_v2",
"status": "env_placeholder_only",
"factoryAddress": null,
"routerAddress": null,
"notes": [
"Referenced in token-aggregation dex-factory config and docs as an env-driven surface.",
"Do not treat as routable until real factory/router/pair addresses are committed."
]
},
{
"name": "Uniswap V3",
"family": "uniswap_v3",
"status": "env_placeholder_only",
"factoryAddress": null,
"routerAddress": null,
"notes": [
"Referenced in token-aggregation dex-factory config and docs as an env-driven surface.",
"Do not treat as routable until real factory/router/pool addresses are committed."
]
},
{
"name": "DODO PMM",
"family": "dodo_pmm",
"status": "env_placeholder_only",
"factoryAddress": null,
"routerAddress": null,
"notes": [
"Mentioned in docs as placeholder-only for ALL Mainnet.",
"No committed DODO PMM pool inventory is currently published for chain 651940."
]
}
],
"bridgeSurface": {
"adapter": {
"name": "AlltraAdapter",
"address": "0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc",
"status": "live"
},
"supportedBridgeAssets": [
"cUSDC",
"cUSDT"
]
},
"nextTasks": [
"Publish real same-chain pool inventory before promoting ALL Mainnet beyond bridge-live inventory.",
"Commit canonical factory/router metadata once HYDX or AlltraDEX routing addresses are confirmed.",
"Add pool-level addresses and verification artifacts before enabling public route generation from this protocol surface."
]
}

View File

@@ -1,6 +1,6 @@
# Node Permissioning — SINGLE SOURCE OF TRUTH for all Besu nodes
# Must match config/besu-node-lists/static-nodes.json and be deployed to every node.
# Generated by scripts/besu/collect-enodes-from-all-besu-nodes.sh — 34 enodes (incl. Putu RPC 2307/2308 .237/.238).
# Generated by scripts/besu/collect-enodes-from-all-besu-nodes.sh — 37 enodes after live adds of 2103 (.217), 1509 (.219), and 1510 (.220).
nodes-allowlist=[
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
@@ -17,8 +17,11 @@ nodes-allowlist=[
"enode://5f048208071f2a3036128433e1e4a647a7683abd8bc0f27d063e2933ced983accdfc44998666f3be711e4eff27511142d9989775b86cdbe28c79b74409fc36bb@192.168.11.214:30303",
"enode://8da1b586e2e98f521f07148d3bb5d81fde151ce3d5738b51bc36e2c81de1aaa5404ce31e991b4393bbe471934f0a9a31f78d1d7c17c1899c3e2dde5e9f16eb24@192.168.11.244:30303",
"enode://acd46d31913b8379f075467cd88d2ea650d33474d2f9546426da4a414fe92233584c9d8c2e1ea9962fa4257c20b66c9434d0488e51c632f285205d6a379cfbd6@192.168.11.245:30303",
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://e53713bb77ad9f39e8a04b9c82aadddd3449220167f546bca8e9f36f6ebf60ae003e48ac293790e2bd7b0aca382777db9eca61d6f048c04f9dbe65eedb79d893@192.168.11.212:30303?discport=0",
"enode://e871ff3b1f58b9a87122e552b2404e1893bf92ae74d4fa6bc2bd002d0350c506ea452f4aefa1a3497ef32694c4beb48bf8a006d2b82f57649c90b22f59044aad@192.168.11.217:30303?discport=0",
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
"enode://868bd957d6d887944deac0190161a3db7d1316a022e40a2383d5c334aa3fb8bc7ca36f165b6fb377b77d202fec46f3840f2f659b6a47807b7ce9b944b8382f10@192.168.11.232:30303",
"enode://688f271d94c7995600ae36d25aa2fb92fea0c52e50e86c598be8966515458c1408b67fba76e1f771073e4774a6e399588443da63394ea25d56e6ca36f2288e00@192.168.11.233:30303",

View File

@@ -13,8 +13,11 @@
"enode://5f048208071f2a3036128433e1e4a647a7683abd8bc0f27d063e2933ced983accdfc44998666f3be711e4eff27511142d9989775b86cdbe28c79b74409fc36bb@192.168.11.214:30303",
"enode://8da1b586e2e98f521f07148d3bb5d81fde151ce3d5738b51bc36e2c81de1aaa5404ce31e991b4393bbe471934f0a9a31f78d1d7c17c1899c3e2dde5e9f16eb24@192.168.11.244:30303",
"enode://acd46d31913b8379f075467cd88d2ea650d33474d2f9546426da4a414fe92233584c9d8c2e1ea9962fa4257c20b66c9434d0488e51c632f285205d6a379cfbd6@192.168.11.245:30303",
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://e53713bb77ad9f39e8a04b9c82aadddd3449220167f546bca8e9f36f6ebf60ae003e48ac293790e2bd7b0aca382777db9eca61d6f048c04f9dbe65eedb79d893@192.168.11.212:30303?discport=0",
"enode://e871ff3b1f58b9a87122e552b2404e1893bf92ae74d4fa6bc2bd002d0350c506ea452f4aefa1a3497ef32694c4beb48bf8a006d2b82f57649c90b22f59044aad@192.168.11.217:30303?discport=0",
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
"enode://868bd957d6d887944deac0190161a3db7d1316a022e40a2383d5c334aa3fb8bc7ca36f165b6fb377b77d202fec46f3840f2f659b6a47807b7ce9b944b8382f10@192.168.11.232:30303",
"enode://688f271d94c7995600ae36d25aa2fb92fea0c52e50e86c598be8966515458c1408b67fba76e1f771073e4774a6e399588443da63394ea25d56e6ca36f2288e00@192.168.11.233:30303",

View File

@@ -0,0 +1,21 @@
{
"registryEntryId": "a5c115dd-e147-4eb5-8cf1-f7d9c38f959e",
"entity_id": "98450070C57395F6B906",
"jurisdiction": "International",
"chain_id": 138,
"address": "0x1ac3F4942a71E86A9682D91837E1E71b7BACdF99",
"addressRole": "token_contract",
"aliases": [
{
"aliasType": "internal_slug",
"aliasValue": "chain138-cusdc-v2",
"validFrom": "2026-03-31T08:22:11Z"
}
],
"blockscout": {
"label": "Chain 138 cUSDC V2 (staged)",
"labelType": "token"
},
"status": "active",
"lastCorrelationId": "deploy-cusdc-v2-2026-03-31"
}

View File

@@ -0,0 +1,21 @@
{
"registryEntryId": "3cc7d52c-26fb-4afb-9508-0c102f8f6f81",
"entity_id": "98450070C57395F6B906",
"jurisdiction": "International",
"chain_id": 138,
"address": "0x8d342d321DdEe97D0c5011DAF8ca0B59DA617D29",
"addressRole": "token_contract",
"aliases": [
{
"aliasType": "internal_slug",
"aliasValue": "chain138-cusdt-v2",
"validFrom": "2026-03-31T08:22:11Z"
}
],
"blockscout": {
"label": "Chain 138 cUSDT V2 (staged)",
"labelType": "token"
},
"status": "active",
"lastCorrelationId": "deploy-cusdt-v2-2026-03-31"
}

View File

@@ -0,0 +1,37 @@
{
"registryVersion": 1,
"purpose": "Authoritative network codes for Elemental Imperium (33×33×6) wallet labels. ASNs are optional; add when assigned.",
"labelSpec": {
"id": "ei-wallet-label-v1",
"cellIdFormat": "EI-L{lpbca:02d}-B{branch:02d}-C{class}",
"labelFormatDefault": "{networkCode}.{cellId}",
"labelFormatWithAsn": "{networkCode}.{cellId}.AS{asn}",
"notes": [
"cellId is stable and never depends on ASN or network reassignment uses.",
"networkCode is lowercase kebab-case; use this registry as the allow-list.",
"When asn is assigned, append .AS{n} with integer n (no leading AS in the number token beyond the literal AS prefix)."
]
},
"defaultNetworkCode": "unassigned",
"overlayExamplePath": "config/elemental-imperium-wallet-overlay.example.json",
"networks": [
{
"code": "unassigned",
"displayName": "Not yet mapped to an operational network",
"asn": null,
"status": "placeholder"
},
{
"code": "chain138-core",
"displayName": "Chain 138 execution / RPC plane (internal)",
"asn": null,
"status": "planned"
},
{
"code": "operator-lan",
"displayName": "Operator management LAN (e.g. 192.168.11.0/24)",
"asn": null,
"status": "planned"
}
]
}

View File

@@ -0,0 +1,23 @@
{
"overlayVersion": 1,
"description": "Optional mapping layered on registry defaults. rangeRules: first matching rule sets networkCode and asn for that wallet. cellOverrides: per cellId, partial overrides win over rangeRules.",
"rangeRules": [
{
"comment": "Example: LPBCA slice 010 on chain138-core; remove or edit when ASNs are assigned",
"match": {
"lpbca": [0, 10],
"branch": [0, 32],
"class": [0, 5]
},
"networkCode": "chain138-core",
"asn": null
}
],
"cellOverrides": {
"EI-L00-B00-C0": {
"comment": "Example single-cell override",
"networkCode": "unassigned",
"asn": null
}
}
}

View File

@@ -0,0 +1,62 @@
{
"template_version": "1.1.0",
"purpose": "Additional on-chain and off-chain inventory for the source-to-CEX execution model.",
"questions_to_fill": [
"All additional EVM EOAs or smart-wallet addresses",
"Any multisigs, vaults, or treasury contracts you want included",
"Any custodial or exchange balances to include off-chain",
"Any LP or staking positions not visible from wallet token balances alone",
"The real production CEX or OTC sink to use for handoff"
],
"wallets": [
{
"label": "primary-deployer-documented",
"address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8",
"chains": [
"1",
"138"
],
"role": "treasury",
"include_in_baseline": true,
"notes": "Canonical documented deployer wallet. Deduplicate against primary baseline if loaded twice."
}
],
"offchain_accounts": [
{
"label": "example-exchange",
"platform": "unknown",
"account_type": "unknown",
"operational_status": "planned",
"enabled_for_production_handoff": false,
"accepted_deposit_assets": [
"USDC"
],
"preferred_deposit_asset": "USDC",
"deposit_chain_id": "1",
"deposit_chain_name": "Ethereum Mainnet",
"deposit_address": "",
"min_packet_usd": 1000,
"max_packet_usd": 250000,
"slippage_ceiling_bps": 100,
"asset_balances": [
{
"symbol": "USDC",
"amount": 0,
"estimated_usd": 0,
"chain_id": "offchain",
"chain_name": "Off-chain / custodial",
"notes": "Replace with a real balance only when you want it counted."
}
],
"include_in_baseline": false,
"notes": "Replace with a real sink before enabling production handoff."
}
],
"risk_preferences": {
"max_drawdown_pct": null,
"liquidity_need_horizon": null,
"bridging_allowed": null,
"lp_allowed": null,
"leverage_allowed": null
}
}

View File

@@ -0,0 +1,62 @@
{
"template_version": "1.1.0",
"purpose": "Additional on-chain and off-chain inventory for the source-to-CEX execution model.",
"questions_to_fill": [
"All additional EVM EOAs or smart-wallet addresses",
"Any multisigs, vaults, or treasury contracts you want included",
"Any custodial or exchange balances to include off-chain",
"Any LP or staking positions not visible from wallet token balances alone",
"The real production CEX or OTC sink to use for handoff"
],
"wallets": [
{
"label": "primary-deployer-documented",
"address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8",
"chains": [
"1",
"138"
],
"role": "treasury",
"include_in_baseline": true,
"notes": "Canonical documented deployer wallet. Deduplicate against primary baseline if loaded twice."
}
],
"offchain_accounts": [
{
"label": "example-exchange",
"platform": "unknown",
"account_type": "unknown",
"operational_status": "planned",
"enabled_for_production_handoff": false,
"accepted_deposit_assets": [
"USDC"
],
"preferred_deposit_asset": "USDC",
"deposit_chain_id": "1",
"deposit_chain_name": "Ethereum Mainnet",
"deposit_address": "",
"min_packet_usd": 1000,
"max_packet_usd": 250000,
"slippage_ceiling_bps": 100,
"asset_balances": [
{
"symbol": "USDC",
"amount": 0,
"estimated_usd": 0,
"chain_id": "offchain",
"chain_name": "Off-chain / custodial",
"notes": "Replace with a real balance only when you want it counted."
}
],
"include_in_baseline": false,
"notes": "Replace with a real sink before enabling production handoff."
}
],
"risk_preferences": {
"max_drawdown_pct": null,
"liquidity_need_horizon": null,
"bridging_allowed": null,
"lp_allowed": null,
"leverage_allowed": null
}
}

View File

@@ -0,0 +1,55 @@
{
"version": "1.0.0",
"updated": "2026-04-18",
"rail": "mainnet_cwusdc_usdc",
"network": {
"chainId": 1,
"name": "Ethereum Mainnet",
"rpcEnvKeys": [
"ETHEREUM_MAINNET_RPC"
]
},
"publicPair": {
"base": "cWUSDC",
"quote": "USDC",
"role": "discovery_lane",
"venue": "uniswap_v2_pair",
"poolAddress": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9"
},
"defendedVenue": {
"base": "cWUSDC",
"quote": "USDC",
"role": "primary_defense",
"venue": "dodo_pmm",
"poolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E",
"managedCycleScript": "smom-dbis-138/script/flash/RunManagedMainnetAaveCwusdcUsdcQuotePushCycle.s.sol:RunManagedMainnetAaveCwusdcUsdcQuotePushCycle"
},
"thresholds": {
"warnDeviationBps": 25,
"interveneDeviationBps": 75,
"criticalDeviationBps": 150,
"minBaseReserveUnits": 2500,
"minQuoteReserveUnits": 2500
},
"managedCycle": {
"defaultHarvestSurplus": true,
"defaultGasHoldbackTargetRaw": 0,
"maxAutomatedFlashQuoteAmountRaw": 2964298,
"quoteAmountByDeviationBps": [
{
"minDeviationBps": 150,
"flashQuoteAmountRaw": 2964298
},
{
"minDeviationBps": 75,
"flashQuoteAmountRaw": 1482149
}
]
},
"notes": [
"The public Uniswap V2 pair is for visible routing and discovery, not for hard parity guarantees on its own.",
"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 is capped to the currently tested safe tranche until the defended lane is explicitly re-sized from fresh liquidity measurements."
]
}

View File

@@ -0,0 +1,83 @@
{
"program_name": "Mr. Promod Uniswap V2 cW Deep Liquidity Program",
"purpose": "Define the desired-state Uniswap V2 or Uniswap-V2-compatible liquidity rollout for cW* and cWAUSDT rails on bridged public networks.",
"operator_rule": "When canonical USDC or USDT depth is scarce, concentrate depth first in wrapped support rails and then expand into canonical settlement rails.",
"mainnet_funding_posture": {
"mode": "triple-rail-support",
"required_deployer_assets": [
"cWUSDC",
"cWUSDT",
"cWAUSDT"
],
"notes": [
"cWUSDC and cWUSDT remain the core settlement-adjacent rails.",
"cWAUSDT is the wrapped-depth support asset when canonical USDC or USDT inventory is not yet deep enough."
]
},
"priority_tiers": {
"tier_1": [
"1",
"8453",
"42161",
"10",
"137"
],
"tier_2": [
"56",
"43114",
"100",
"42220",
"25"
],
"tier_3": [
"1111"
]
},
"wrapped_depth_phase": {
"preferred_pairs_in_order": [
"cWAUSDT/cWUSDC",
"cWAUSDT/cWUSDT",
"cWUSDT/cWUSDC"
],
"allocation_share_pct": {
"flagship_pair": 50,
"second_pair": 30,
"third_pair": 20
},
"notes": [
"This phase is for creating visibly deep wrapped-to-wrapped liquidity before canonical settlement rails are deep enough.",
"Wrapped-depth pools strengthen routing and inventory transfer between the cW settlement rails and cWAUSDT support inventory.",
"These pools do not replace the eventual need for direct canonical settlement rails."
]
},
"settlement_phase": {
"preferred_pairs_by_hub": {
"USDC": [
"cWUSDC/USDC",
"cWUSDT/USDC",
"cWAUSDT/USDC"
],
"USDT": [
"cWUSDT/USDT",
"cWUSDC/USDT",
"cWAUSDT/USDT"
]
},
"notes": [
"Settlement-phase pools remain the preferred terminal rails for exchange and OTC normalization.",
"Promote settlement rails only after wrapped-depth support is stable and enough canonical stable inventory is available."
]
},
"uniswap_v2_requirements": {
"required_env_suffixes": [
"UNISWAP_V2_FACTORY",
"UNISWAP_V2_ROUTER",
"UNISWAP_V2_START_BLOCK"
],
"required_registry_updates": [
"cross-chain-pmm-lps/config/deployment-status.json",
"token-aggregation env for the target chain",
"MCP allowlist or indexer visibility for new pairs"
]
}
}

View File

@@ -0,0 +1,35 @@
{
"version": "1.0.0",
"last_updated": "2026-04-17",
"purpose": "Operator policy for Chain 138 -> Mainnet normalization -> CEX handoff.",
"production_enabled": false,
"default_route_model": "Chain 138 inventory -> canonical bridge -> Mainnet normalization -> CEX handoff",
"operator_defaults": {
"primary_same_day_feeder": "cUSDC",
"secondary_same_day_feeder": "cUSDT",
"stable_lp_mode": "unwind_first",
"immediate_assets": [
"cWUSDC",
"cWUSDT"
],
"reject_non_promoted_assets": true
},
"normalization_policy": {
"preferred_settlement_assets": [
"USDC",
"USDT"
],
"default_settlement_asset": "USDC",
"allow_usdt_only_with_operator_approval": true,
"post_bridge_aggregation_only": true
},
"packetization_policy": {
"bridge_packet_usd_max": 250000,
"normalization_packet_usd_max": 100000,
"direct_cwusdc_usdc_usage_cap_usd": 213.102461,
"direct_cwusdt_usdt_usage_cap_usd": 2.182358,
"force_cwusdt_via_cwusdc_threshold_usd": 10,
"default_slippage_ceiling_bps": 100,
"chunking_mode": "bridge_in_chunks_then_normalize_then_continuous_cex_handoff"
}
}

View File

@@ -77,6 +77,8 @@ BLOCKSCOUT_API_URL="http://${IP_BLOCKSCOUT}:${BLOCKSCOUT_API_PORT}"
FORGE_VERIFIER_PROXY_PORT="${FORGE_VERIFIER_PROXY_PORT:-3080}"
IP_NPMPLUS="192.168.11.167"
IP_NPMPLUS_SECONDARY="192.168.11.168"
# Proxmox Mail Gateway (LXC 100, VMID 100) — PMG web UI; SMTP 25/587 on same host
IP_PMG="${IP_PMG:-192.168.11.32}"
IP_NGINX_LEGACY="192.168.11.26"
IP_ORDER_OPENSEARCH="192.168.11.48"
IP_ORDER_HAPROXY="192.168.11.39"
@@ -169,6 +171,10 @@ PUBLIC_IP_MIFOS="76.53.10.41"
# DApp LXC (VMID 5801) — frontend-dapp for Chain 138 bridge. See docs/03-deployment/DAPP_LXC_DEPLOYMENT.md; E2E: tunnel + NPMplus dapp.d-bis.org
IP_DAPP_LXC="192.168.11.58"
# CurrenciCombo Phoenix CT (VMID 8604) on r630-01 — internal Phoenix app deployment on VLAN 160
IP_CURRENCICOMBO_PHOENIX="${IP_CURRENCICOMBO_PHOENIX:-10.160.0.14}"
CURRENCICOMBO_PHOENIX_VMID="${CURRENCICOMBO_PHOENIX_VMID:-8604}"
# Phoenix / Sankofa public edge (NPMplus → CT 7800 API, 7801 portal). Legacy scripts use IP_SERVICE_50 / IP_SERVICE_51.
# SolaceScanScout / Blockscout is IP_BLOCKSCOUT:80 — do NOT point sankofa.nexus or phoenix.sankofa.nexus there.
IP_SERVICE_50="${IP_SERVICE_50:-192.168.11.50}"

View File

@@ -18,6 +18,8 @@
"enode://17413a9ab0f570c72e9d7d511a856cd5b5abb58b70d0b9635524220a5354ee275429bf5d630025dbbb0d67c6ae24510e6560bf8b38a7e226e24a00cd181d6ae6@192.168.11.174:30303",
"enode://ab7f104acbcb254ced2653122f80b2c93b541467edc8f5b4bc90c4d3794cbbb1b2cbea69f9fe5e89f848e46a158e6ce45d76901e64801669321ce62172048eb8@192.168.11.244:30303",
"enode://237e27eb3a8738189e266615e7d613da18f86018a76080e18dbb9856baeab6454b1aebff889bc0790f2d791dd277121ee76a4fc0a0d1bc1001c2811b42518618@192.168.11.245:30303",
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
"enode://89570ba8882ea1d383afb97d0d82eb3cf5d0c5fec7ae2acfe39487e5335ee91c36cd4b5e9aa05110d99b51a16b869f7531e6f89ec63476cba7f928356c437348@192.168.11.246:30303",
"enode://0fdbda7b6916973e598b7c9ff6e4e2da6f8bcce2ca46bb11c58368a9fbcfcb303a4955a563b2f71a51a813abeed3b44da220ad1488d19c9483f733548a7b7765@192.168.11.247:30303",
"enode://0c710ae1e4eaf7ee9d375c404798625c5165e1699a24aedadcfb69fa8fcde41c822d3576b1a180c3251aeba9782ceb43cb32c300c4e1a205905728d72b94cfe9@192.168.11.248:30303",

View File

@@ -18,6 +18,8 @@
"enode://17413a9ab0f570c72e9d7d511a856cd5b5abb58b70d0b9635524220a5354ee275429bf5d630025dbbb0d67c6ae24510e6560bf8b38a7e226e24a00cd181d6ae6@192.168.11.174:30303",
"enode://ab7f104acbcb254ced2653122f80b2c93b541467edc8f5b4bc90c4d3794cbbb1b2cbea69f9fe5e89f848e46a158e6ce45d76901e64801669321ce62172048eb8@192.168.11.244:30303",
"enode://237e27eb3a8738189e266615e7d613da18f86018a76080e18dbb9856baeab6454b1aebff889bc0790f2d791dd277121ee76a4fc0a0d1bc1001c2811b42518618@192.168.11.245:30303",
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
"enode://89570ba8882ea1d383afb97d0d82eb3cf5d0c5fec7ae2acfe39487e5335ee91c36cd4b5e9aa05110d99b51a16b869f7531e6f89ec63476cba7f928356c437348@192.168.11.246:30303",
"enode://0fdbda7b6916973e598b7c9ff6e4e2da6f8bcce2ca46bb11c58368a9fbcfcb303a4955a563b2f71a51a813abeed3b44da220ad1488d19c9483f733548a7b7765@192.168.11.247:30303",
"enode://0c710ae1e4eaf7ee9d375c404798625c5165e1699a24aedadcfb69fa8fcde41c822d3576b1a180c3251aeba9782ceb43cb32c300c4e1a205905728d72b94cfe9@192.168.11.248:30303",

View File

@@ -0,0 +1,41 @@
# Standard Chain Config Parameters
[rollup_config]
# alt_da must be nil
seq_window_size = [3600, 3600]
block_time = [1, 2]
[optimism_portal_2]
proof_maturity_delay_seconds = [604800, 604800] # 7 days
dispute_game_finality_delay_seconds = [302400, 302400] # 3.5 days
respected_game_type = 0
[resource_config]
max_resource_limit = 20000000
elasticity_multiplier = 10
base_fee_max_change_denominator = 8
minimum_base_fee = 1000000000
system_tx_max_gas = 1000000
maximum_base_fee = "340_282_366_920_938_463_463_374_607_431_768_211_455"
[gas_price_oracle.pre-ecotone]
decimals = [6, 6]
overhead = [188, 188]
scalar = [684_000, 684_000]
[gas_price_oracle.ecotone]
decimals = [6, 6]
blob_base_fee_scalar = [0, 10_000_000]
base_fee_scalar = [0, 10_000_000]
[system_config]
gas_limit = [8_000_000, 200_000_000]
operator_fee_scalar = [0, 0]
operator_fee_constant = [0, 0]
minimum_base_fee = [0, 10_000_000_000] # 10 Gwei
[proofs.permissioned]
game_type = 1
max_game_depth = 73
split_depth = 30
max_clock_duration = 302400
clock_extension = 10800

View File

@@ -0,0 +1,8 @@
guardian = "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2"
challenger = "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A"
l1ProxyAdminOwner = "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A"
protocolVersionsOwner = "0x847B5c174615B1B7fDF770882256e2D3E95b9D92"
# This is the ALIASED address of the L1 2/2 Safe between the Optimism Foundation and the Security Council.
# To compute the aliased address, add 0x1111000000000000000000000000000000001111
l2ProxyAdminOwner = "0x6B1BAE59D09fCcbdDB6C6cceb07B7279367C4E3b"

View File

@@ -0,0 +1,446 @@
# Contracts which are
# * unproxied singletons: specify a standard "address"
# * proxied : specify a standard "implementation_address"
# * neither : specify neither a standard "address" nor "implementation_address"
["op-contracts/v6.0.0"]
system_config = { version = "3.13.1", implementation_address = "0xd392c27b84b1ca776528f2704bc67b82a62132d2" }
fault_dispute_game = { version = "2.2.0" }
permissioned_dispute_game = { version = "2.2.0" }
mips = { version = "1.9.0", address = "0x6463dEE3828677F6270d83d45408044fc5eDB908" }
optimism_portal = { version = "5.2.0", implementation_address = "0x97cebbf8959e2a5476fbe9b98a21806ec234609b" }
optimism_portal_interop = { version = "5.1.0+interop", implementation_address = "0x5cb365a10e99335d8fedfa225aac5e21287302dd" }
anchor_state_registry = { version = "3.7.0", implementation_address = "0x36398155cd17cfe804f69b233edda800dd4d5aa5" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.4.0", implementation_address = "0xc040f392e52cb6970ca8e110c280fe24e07c5e2c" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.11.0", implementation_address = "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0" }
l1_erc721_bridge = { version = "2.9.0", implementation_address = "0x74f1ac50eb0be98853805d381c884f5f9abdecf9" }
l1_standard_bridge = { version = "2.8.0", implementation_address = "0x61525eaacddb97d9184afc205827e6a4fd0bf62a" }
optimism_mintable_erc20_factory = { version = "1.10.2", implementation_address = "0x8ee6fb13c6c9a7e401531168e196fbf8b05ceabb" }
op_contracts_manager = { version = "6.0.0", address = "0x50f47b43c24f40b92c873fa0704d4207586d0c9f" }
superchain_config = { version = "2.4.0", implementation_address = "0xb08cc720f511062537ca78bdb0ae691f04f5a957" }
protocol_versions = { version = "1.1.1", implementation_address = "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda" }
# The L1 contracts are unchanged from Upgrade 18 / v6.0.0-rc.1, this entry is required for a release of op-deployer
# with updates to L2 contracts only.
["op-contracts/v6.0.0-rc.2"]
system_config = { version = "3.13.1", implementation_address = "0xd392c27b84b1ca776528f2704bc67b82a62132d2" }
fault_dispute_game = { version = "2.2.0" }
permissioned_dispute_game = { version = "2.2.0" }
mips = { version = "1.9.0", address = "0x6463dEE3828677F6270d83d45408044fc5eDB908" }
optimism_portal = { version = "5.2.0", implementation_address = "0x97cebbf8959e2a5476fbe9b98a21806ec234609b" }
optimism_portal_interop = { version = "5.1.0+interop", implementation_address = "0x5cb365a10e99335d8fedfa225aac5e21287302dd" }
anchor_state_registry = { version = "3.7.0", implementation_address = "0x36398155cd17cfe804f69b233edda800dd4d5aa5" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.4.0", implementation_address = "0xc040f392e52cb6970ca8e110c280fe24e07c5e2c" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.11.0", implementation_address = "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0" }
l1_erc721_bridge = { version = "2.9.0", implementation_address = "0x74f1ac50eb0be98853805d381c884f5f9abdecf9" }
l1_standard_bridge = { version = "2.8.0", implementation_address = "0x61525eaacddb97d9184afc205827e6a4fd0bf62a" }
optimism_mintable_erc20_factory = { version = "1.10.2", implementation_address = "0x8ee6fb13c6c9a7e401531168e196fbf8b05ceabb" }
op_contracts_manager = { version = "6.0.0", address = "0x50f47b43c24f40b92c873fa0704d4207586d0c9f" }
superchain_config = { version = "2.4.0", implementation_address = "0xb08cc720f511062537ca78bdb0ae691f04f5a957" }
protocol_versions = { version = "1.1.1", implementation_address = "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda" }
# Upgrade 18 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv6.0.0-rc.1
["op-contracts/v6.0.0-rc.1"]
system_config = { version = "3.13.1", implementation_address = "0xd392c27b84b1ca776528f2704bc67b82a62132d2" }
fault_dispute_game = { version = "2.2.0" }
permissioned_dispute_game = { version = "2.2.0" }
mips = { version = "1.9.0", address = "0x6463dEE3828677F6270d83d45408044fc5eDB908" }
optimism_portal = { version = "5.2.0", implementation_address = "0x97cebbf8959e2a5476fbe9b98a21806ec234609b" }
optimism_portal_interop = { version = "5.1.0+interop", implementation_address = "0x5cb365a10e99335d8fedfa225aac5e21287302dd" }
anchor_state_registry = { version = "3.7.0", implementation_address = "0x36398155cd17cfe804f69b233edda800dd4d5aa5" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.4.0", implementation_address = "0xc040f392e52cb6970ca8e110c280fe24e07c5e2c" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.11.0", implementation_address = "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0" }
l1_erc721_bridge = { version = "2.9.0", implementation_address = "0x74f1ac50eb0be98853805d381c884f5f9abdecf9" }
l1_standard_bridge = { version = "2.8.0", implementation_address = "0x61525eaacddb97d9184afc205827e6a4fd0bf62a" }
optimism_mintable_erc20_factory = { version = "1.10.2", implementation_address = "0x8ee6fb13c6c9a7e401531168e196fbf8b05ceabb" }
op_contracts_manager = { version = "6.0.0", address = "0x50f47b43c24f40b92c873fa0704d4207586d0c9f" }
superchain_config = { version = "2.4.0", implementation_address = "0xb08cc720f511062537ca78bdb0ae691f04f5a957" }
protocol_versions = { version = "1.1.1", implementation_address = "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda" }
# Upgrade 17 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv5.0.0
["op-contracts/v5.0.0"]
system_config = { version = "3.11.0", implementation_address = "0x2fa28989fc559836e9d66dff3010c7f7f41c65ed" }
fault_dispute_game = { version = "1.8.0" }
permissioned_dispute_game = { version = "1.8.0" }
mips = { version = "1.9.0", address = "0x6463dEE3828677F6270d83d45408044fc5eDB908" }
optimism_portal = { version = "5.1.1", implementation_address = "0x7cf803296662e8c72a6c1d6450572209acf7f202" }
optimism_portal_interop = { version = "5.1.0+interop", implementation_address = "0x5cb365a10e99335d8fedfa225aac5e21287302dd" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.3.0", implementation_address = "0x74fac1d45b98bae058f8f566201c9a81b85c7d50" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.11.0", implementation_address = "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0" }
l1_erc721_bridge = { version = "2.9.0", implementation_address = "0x74f1ac50eb0be98853805d381c884f5f9abdecf9" }
l1_standard_bridge = { version = "2.8.0", implementation_address = "0x61525eaacddb97d9184afc205827e6a4fd0bf62a" }
optimism_mintable_erc20_factory = { version = "1.10.2", implementation_address = "0x8ee6fb13c6c9a7e401531168e196fbf8b05ceabb" }
op_contracts_manager = { version = "4.2.0", address = "0xfa1ef97fb02b0da2ee2346b8e310907ab5519449" }
superchain_config = { version = "2.4.0", implementation_address = "0xb08cc720f511062537ca78bdb0ae691f04f5a957" }
protocol_versions = { version = "1.1.1", implementation_address = "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda" }
# Upgrade 17 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv5.0.0-rc.2
["op-contracts/v5.0.0-rc.2"]
system_config = { version = "3.11.0", implementation_address = "0x2fa28989fc559836e9d66dff3010c7f7f41c65ed" }
fault_dispute_game = { version = "1.8.0" }
permissioned_dispute_game = { version = "1.8.0" }
mips = { version = "1.9.0", address = "0x6463dEE3828677F6270d83d45408044fc5eDB908" }
optimism_portal = { version = "5.1.1", implementation_address = "0x7cf803296662e8c72a6c1d6450572209acf7f202" }
optimism_portal_interop = { version = "5.1.0+interop", implementation_address = "0x5cb365a10e99335d8fedfa225aac5e21287302dd" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.3.0", implementation_address = "0x74fac1d45b98bae058f8f566201c9a81b85c7d50" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.11.0", implementation_address = "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0" }
l1_erc721_bridge = { version = "2.9.0", implementation_address = "0x74f1ac50eb0be98853805d381c884f5f9abdecf9" }
l1_standard_bridge = { version = "2.8.0", implementation_address = "0x61525eaacddb97d9184afc205827e6a4fd0bf62a" }
optimism_mintable_erc20_factory = { version = "1.10.2", implementation_address = "0x8ee6fb13c6c9a7e401531168e196fbf8b05ceabb" }
op_contracts_manager = { version = "4.2.0", address = "0xfa1ef97fb02b0da2ee2346b8e310907ab5519449" }
superchain_config = { version = "2.4.0", implementation_address = "0xb08cc720f511062537ca78bdb0ae691f04f5a957" }
protocol_versions = { version = "1.1.1", implementation_address = "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda" }
# Upgrade 16a https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.1.0
["op-contracts/v4.1.0"]
system_config = { version = "3.7.0", implementation_address = "0x2bfe4a5bd5a41e9d848d843ebcdfa15954e9a557" }
fault_dispute_game = { version = "1.7.0" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.8.0", address = "0x07babe08ee4d07dba236530183b24055535a7011" }
optimism_portal = { version = "5.0.0", implementation_address = "0x381e729ff983fa4bced820e7b922d79bf653b999" }
optimism_portal_interop = { version = "5.0.0+interop", implementation_address = "0xb0eb854fd842e0e564d49d2fe6b2ac25d035523c" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.10.0", implementation_address = "0x22d12e0faebd62d429514a65ebae32dd316c12d6" }
l1_erc721_bridge = { version = "2.8.0", implementation_address = "0x7f1d12fb2911eb095278085f721e644c1f675696" }
l1_standard_bridge = { version = "2.7.0", implementation_address = "0xe32b192fb1dca88fcb1c56b3acb429e32238adcb" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "3.2.0", address = "0x8123739c1368c2dedc8c564255bc417feeebff9d" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Upgrade 16a https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.1.0-rc.3
["op-contracts/v4.1.0-rc.3"]
system_config = { version = "3.7.0", implementation_address = "0x2bfe4a5bd5a41e9d848d843ebcdfa15954e9a557" }
fault_dispute_game = { version = "1.7.0" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.8.0", address = "0x07babe08ee4d07dba236530183b24055535a7011" }
optimism_portal = { version = "5.0.0", implementation_address = "0x381e729ff983fa4bced820e7b922d79bf653b999" }
optimism_portal_interop = { version = "5.0.0+interop", implementation_address = "0xb0eb854fd842e0e564d49d2fe6b2ac25d035523c" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.10.0", implementation_address = "0x22d12e0faebd62d429514a65ebae32dd316c12d6" }
l1_erc721_bridge = { version = "2.8.0", implementation_address = "0x7f1d12fb2911eb095278085f721e644c1f675696" }
l1_standard_bridge = { version = "2.7.0", implementation_address = "0xe32b192fb1dca88fcb1c56b3acb429e32238adcb" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "3.2.0", address = "0x8123739c1368c2dedc8c564255bc417feeebff9d" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Upgrade 16 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.0.0
["op-contracts/v4.0.0"]
system_config = { version = "3.4.0", implementation_address = "0xfaa660bf783cbaa55e1b7f3475c20db74a53b9fa" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.4.0-patch.2", address = "0xa1b54d89e305bcd322ba0c9c094093173c0d6b3a" }
optimism_portal = { version = "4.6.0", implementation_address = "0xefed7f38bb9be74bba583a1a5b7d0fe7c9d5787a" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.9.0", implementation_address = "0xd26bb3aaaa4cb5638a8581a4c4b1d937d8e05c54" }
l1_erc721_bridge = { version = "2.7.0", implementation_address = "0x25d6cedeb277ad7ebee71226ed7877768e0b7a2f" }
l1_standard_bridge = { version = "2.6.0", implementation_address = "0x44afb7722af276a601d524f429016a18b6923df0" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "2.4.0", address = "0x56ebc5c4870f5367b836081610592241ad3e0734" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Upgrade 16 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.0.0-rc.8
["op-contracts/v4.0.0-rc.8"]
system_config = { version = "3.4.0", implementation_address = "0xfaa660bf783cbaa55e1b7f3475c20db74a53b9fa" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.4.0-patch.2", address = "0xa1b54d89e305bcd322ba0c9c094093173c0d6b3a" }
optimism_portal = { version = "4.6.0", implementation_address = "0xefed7f38bb9be74bba583a1a5b7d0fe7c9d5787a" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.9.0", implementation_address = "0xd26bb3aaaa4cb5638a8581a4c4b1d937d8e05c54" }
l1_erc721_bridge = { version = "2.7.0", implementation_address = "0x25d6cedeb277ad7ebee71226ed7877768e0b7a2f" }
l1_standard_bridge = { version = "2.6.0", implementation_address = "0x44afb7722af276a601d524f429016a18b6923df0" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "2.4.0", address = "0x56ebc5c4870f5367b836081610592241ad3e0734" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Upgrade 16 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.0.0-rc.7
["op-contracts/v4.0.0-rc.7"]
system_config = { version = "3.4.0", implementation_address = "0xfaa660bf783cbaa55e1b7f3475c20db74a53b9fa" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.4.0", address = "0x8a4e5594662775f71b05977a6c90590dd14e3c8f" }
optimism_portal = { version = "4.6.0", implementation_address = "0xefed7f38bb9be74bba583a1a5b7d0fe7c9d5787a" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.9.0", implementation_address = "0xd26bb3aaaa4cb5638a8581a4c4b1d937d8e05c54" }
l1_erc721_bridge = { version = "2.7.0", implementation_address = "0x25d6cedeb277ad7ebee71226ed7877768e0b7a2f" }
l1_standard_bridge = { version = "2.6.0", implementation_address = "0x44afb7722af276a601d524f429016a18b6923df0" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "2.4.0", address = "0x4fefd0c327d08143be8037c45f8a29fa0d711e50" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Upgrade 16 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv4.0.0-rc.6
["op-contracts/v4.0.0-rc.6"]
system_config = { version = "3.4.0", implementation_address = "0xfaa660bf783cbaa55e1b7f3475c20db74a53b9fa" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.7.0" }
mips = { version = "1.4.0", address = "0x8a4e5594662775f71b05977a6c90590dd14e3c8f" }
optimism_portal = { version = "4.6.0", implementation_address = "0xefed7f38bb9be74bba583a1a5b7d0fe7c9d5787a" }
anchor_state_registry = { version = "3.5.0", implementation_address = "0xeb69cc681e8d4a557b30dffbad85affd47a2cf2e" }
delayed_weth = { version = "1.5.0", implementation_address = "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998" }
eth_lockbox = { version = "1.2.0", implementation_address = "0x784d2f03593a42a6e4676a012762f18775ecbbe6" }
dispute_game_factory = { version = "1.2.0", implementation_address = "0x33d1e8571a85a538ed3d5a4d88f46c112383439d" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.9.0", implementation_address = "0xd26bb3aaaa4cb5638a8581a4c4b1d937d8e05c54" }
l1_erc721_bridge = { version = "2.7.0", implementation_address = "0x25d6cedeb277ad7ebee71226ed7877768e0b7a2f" }
l1_standard_bridge = { version = "2.6.0", implementation_address = "0x44afb7722af276a601d524f429016a18b6923df0" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677a186f64805fe7317d6993ba4863988f" }
op_contracts_manager = { version = "2.4.0", address = "0x4fefd0c327d08143be8037c45f8a29fa0d711e50" }
superchain_config = { version = "2.3.0", implementation_address = "0xce28685eb204186b557133766eca00334eb441e4" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37e15e4d6dffa9e5e320ee1ec036922e563cb76c" }
# Only the DeployOPChain.s.sol script changed between v3.0.0 and v3.0.1
["op-contracts/v3.0.1"]
system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0
optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" }
l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" }
l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.9.0", address = "0x3a1f523a4bc09cd344a2745a108bb0398288094f" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0
# Only the L2 predeploys changed between rc.1 and rc.2. See https://github.com/ethereum-optimism/optimism/pull/14848.
["op-contracts/v3.0.0"]
system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0
optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" }
l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" }
l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.9.0", address = "0x3a1f523a4bc09cd344a2745a108bb0398288094f" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.2
# Only the L2 predeploys changed between rc.1 and rc.2. See https://github.com/ethereum-optimism/optimism/pull/14848.
["op-contracts/v3.0.0-rc.2"]
system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0
optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" }
l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" }
l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.9.0", address = "0x3a1f523a4bc09cd344a2745a108bb0398288094f" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.1
["op-contracts/v3.0.0-rc.1"]
system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0
optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" }
l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" }
l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.9.0", address = "0x3a1f523a4bc09cd344a2745a108bb0398288094f" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# OPCM https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv2.2.0
["op-contracts/v2.2.0"]
system_config = { version = "2.4.0", implementation_address = "0x760c48c62a85045a6b69f07f4a9f22868659cbcc" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.3.0", address = "0xaa59a0777648bc75cd10364083e878c1ccd6112a" }
optimism_portal = { version = "3.13.0", implementation_address = "0x2d7e764a0d9919e16983a46595cfa81fc34fa7cd" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.5.0", implementation_address = "0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231" }
l1_erc721_bridge = { version = "2.3.1", implementation_address = "0x276d3730f219f7ec22274f7263180b8452b46d47" }
l1_standard_bridge = { version = "2.2.2", implementation_address = "0x78972E88Ab8BBB517a36cAea23b931BAB58AD3c6" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.7.0", address = "0x1c7bfa38a25ad22cafc556a9bd827e1da7ec1791" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# OPCM https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv2.0.0
["op-contracts/v2.0.0"]
system_config = { version = "2.4.0", implementation_address = "0x760c48c62a85045a6b69f07f4a9f22868659cbcc" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.3.0", address = "0xaa59a0777648bc75cd10364083e878c1ccd6112a" }
optimism_portal = { version = "3.13.0", implementation_address = "0x2d7e764a0d9919e16983a46595cfa81fc34fa7cd" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.5.0", implementation_address = "0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231" }
l1_erc721_bridge = { version = "2.3.1", implementation_address = "0x276d3730f219f7ec22274f7263180b8452b46d47" }
l1_standard_bridge = { version = "2.2.2", implementation_address = "0x78972E88Ab8BBB517a36cAea23b931BAB58AD3c6" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.6.0", address = "0x026b2f158255beac46c1e7c6b8bbf29a4b6a7b76" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# OPCM https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv2.0.0-rc.1
["op-contracts/v2.0.0-rc.1"]
system_config = { version = "2.4.0", implementation_address = "0x760c48c62a85045a6b69f07f4a9f22868659cbcc" }
fault_dispute_game = { version = "1.4.1" }
permissioned_dispute_game = { version = "1.4.1" }
mips = { version = "1.3.0", address = "0xaa59a0777648bc75cd10364083e878c1ccd6112a" }
optimism_portal = { version = "3.13.0", implementation_address = "0x2d7e764a0d9919e16983a46595cfa81fc34fa7cd" }
anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" }
delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" }
dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" }
preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" }
l1_cross_domain_messenger = { version = "2.5.0", implementation_address = "0x3eA6084748ED1b2A9B5D4426181F1ad8C93F6231" }
l1_erc721_bridge = { version = "2.3.1", implementation_address = "0x276d3730f219f7ec22274f7263180b8452b46d47" }
l1_standard_bridge = { version = "2.2.2", implementation_address = "0x78972E88Ab8BBB517a36cAea23b931BAB58AD3c6" }
optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" }
op_contracts_manager = { version = "1.6.0", address = "0x026b2f158255beac46c1e7c6b8bbf29a4b6a7b76" }
superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" }
protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" }
# Holocene https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.8.0
["op-contracts/v1.8.0"]
# Updated in this release
system_config = { version = "2.3.0", implementation_address = "0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375" } # UPDATED IN THIS RELEASE
fault_dispute_game = { version = "1.3.1" } # UPDATED IN THIS RELEASE
permissioned_dispute_game = { version = "1.3.1" } # UPDATED IN THIS RELEASE
mips = { version = "1.2.1", address = "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C" } # UPDATED IN THIS RELEASE
# Unchanged in this release
optimism_portal = { version = "3.10.0", implementation_address = "0xe2F826324b2faf99E513D16D266c3F80aE87832B" }
anchor_state_registry = { version = "2.0.0" }
delayed_weth = { version = "1.1.0", implementation_address = "0x71e966Ae981d1ce531a7b6d23DC0f27B38409087" }
dispute_game_factory = { version = "1.0.0", implementation_address = "0xc641A33cab81C559F2bd4b21EA34C290E2440C2B" }
preimage_oracle = { version = "1.1.2", address = "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277" }
l1_cross_domain_messenger = { version = "2.3.0", implementation_address = "0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65" }
l1_erc721_bridge = { version = "2.1.0", implementation_address = "0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d" }
l1_standard_bridge = { version = "2.1.0", implementation_address = "0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF" }
# l2_output_oracle -- This contract not used in fault proofs
optimism_mintable_erc20_factory = { version = "1.9.0", implementation_address = "0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846" }
op_contracts_manager = { version = "1.0.0-beta.21", implementation_address = "0x5269eed89b0d04d909a0973439e2587e815ba932" }
# Holocene https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.8.0-rc.4
["op-contracts/v1.8.0-rc.4"]
# Updated in this release
system_config = { version = "2.3.0", implementation_address = "0xAB9d6cB7A427c0765163A7f45BB91cAfe5f2D375" } # UPDATED IN THIS RELEASE
fault_dispute_game = { version = "1.3.1" } # UPDATED IN THIS RELEASE
permissioned_dispute_game = { version = "1.3.1" } # UPDATED IN THIS RELEASE
mips = { version = "1.2.1", address = "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C" } # UPDATED IN THIS RELEASE
# Unchanged in this release
optimism_portal = { version = "3.10.0", implementation_address = "0xe2F826324b2faf99E513D16D266c3F80aE87832B" }
anchor_state_registry = { version = "2.0.0" }
delayed_weth = { version = "1.1.0", implementation_address = "0x71e966Ae981d1ce531a7b6d23DC0f27B38409087" }
dispute_game_factory = { version = "1.0.0", implementation_address = "0xc641A33cab81C559F2bd4b21EA34C290E2440C2B" }
preimage_oracle = { version = "1.1.2", address = "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277" }
l1_cross_domain_messenger = { version = "2.3.0", implementation_address = "0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65" }
l1_erc721_bridge = { version = "2.1.0", implementation_address = "0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d" }
l1_standard_bridge = { version = "2.1.0", implementation_address = "0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF" }
# l2_output_oracle -- This contract not used in fault proofs
optimism_mintable_erc20_factory = { version = "1.9.0", implementation_address = "0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846" }
op_contracts_manager = { version = "1.0.0-beta.21", implementation_address = "0x5269eed89b0d04d909a0973439e2587e815ba932" }
# Fault Proofs https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.6.0
["op-contracts/v1.6.0"]
optimism_portal = { version = "3.10.0", implementation_address = "0xe2F826324b2faf99E513D16D266c3F80aE87832B" }
system_config = { version = "2.2.0", implementation_address = "0xF56D96B2535B932656d3c04Ebf51baBff241D886" }
anchor_state_registry = { version = "2.0.0" }
delayed_weth = { version = "1.1.0", implementation_address = "0x71e966Ae981d1ce531a7b6d23DC0f27B38409087" }
dispute_game_factory = { version = "1.0.0", implementation_address = "0xc641A33cab81C559F2bd4b21EA34C290E2440C2B" }
fault_dispute_game = { version = "1.3.0" }
permissioned_dispute_game = { version = "1.3.0" }
mips = { version = "1.1.0", address = "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4" }
preimage_oracle = { version = "1.1.2", address = "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277" }
l1_cross_domain_messenger = { version = "2.3.0", implementation_address = "0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65" }
l1_erc721_bridge = { version = "2.1.0", implementation_address = "0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d" }
l1_standard_bridge = { version = "2.1.0", implementation_address = "0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF" }
# l2_output_oracle -- This contract not used in fault proofs
optimism_mintable_erc20_factory = { version = "1.9.0", implementation_address = "0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846" }
op_contracts_manager = { version = "1.0.0-beta.21", implementation_address = "0x9BC0A1eD534BFb31a6Be69e5b767Cba332f14347" }
# Fault Proofs https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.4.0
["op-contracts/v1.4.0"]
optimism_portal = { version = "3.10.0", implementation_address = "0xe2F826324b2faf99E513D16D266c3F80aE87832B" }
system_config = { version = "2.2.0", implementation_address = "0xF56D96B2535B932656d3c04Ebf51baBff241D886" }
anchor_state_registry = { version = "1.0.0" }
delayed_weth = { version = "1.0.0", implementation_address = "0x97988d5624F1ba266E1da305117BCf20713bee08" }
dispute_game_factory = { version = "1.0.0", implementation_address = "0xc641A33cab81C559F2bd4b21EA34C290E2440C2B" }
fault_dispute_game = { version = "1.2.0" }
permissioned_dispute_game = { version = "1.2.0" }
mips = { version = "1.0.1", address = "0x0f8EdFbDdD3c0256A80AD8C0F2560B1807873C9c" }
preimage_oracle = { version = "1.0.0", address = "0xD326E10B8186e90F4E2adc5c13a2d0C137ee8b34" }
# MCP https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.3.0
["op-contracts/v1.3.0"]
l1_cross_domain_messenger = { version = "2.3.0", implementation_address = "0xD3494713A5cfaD3F5359379DfA074E2Ac8C6Fd65" }
l1_erc721_bridge = { version = "2.1.0", implementation_address = "0xAE2AF01232a6c4a4d3012C5eC5b1b35059caF10d" }
l1_standard_bridge = { version = "2.1.0", implementation_address = "0x64B5a5Ed26DCb17370Ff4d33a8D503f0fbD06CfF" }
l2_output_oracle = { version = "1.8.0", implementation_address = "0xF243BEd163251380e78068d317ae10f26042B292" }
optimism_mintable_erc20_factory = { version = "1.9.0", implementation_address = "0xE01efbeb1089D1d1dB9c6c8b135C934C0734c846" }
optimism_portal = { version = "2.5.0", implementation_address = "0x2D778797049FE9259d947D1ED8e5442226dFB589" }
system_config = { version = "1.12.0", implementation_address = "0xba2492e52F45651B60B8B38d4Ea5E2390C64Ffb1" }

File diff suppressed because it is too large Load Diff

View File

@@ -1250,7 +1250,10 @@
"port": 80
}
],
"fqdns": []
"fqdns": [
"tsunamiswap.com",
"app.tsunamiswap.com"
]
},
{
"vmid": 10070,
@@ -1459,7 +1462,41 @@
"vmid": 1508,
"hostname": "besu-sentry-hybx-2",
"ipv4": "192.168.11.245",
"preferred_node": "ml110",
"preferred_node": "r630-04",
"category": "besu_sentry",
"ports": [
{
"port": 30303
},
{
"port": 9545
}
],
"peering_layer": "sentry_boundary",
"fqdns": []
},
{
"vmid": 1509,
"hostname": "besu-sentry-thirdweb-01",
"ipv4": "192.168.11.219",
"preferred_node": "r630-03",
"category": "besu_sentry",
"ports": [
{
"port": 30303
},
{
"port": 9545
}
],
"peering_layer": "sentry_boundary",
"fqdns": []
},
{
"vmid": 1510,
"hostname": "besu-sentry-thirdweb-02",
"ipv4": "192.168.11.220",
"preferred_node": "r630-03",
"category": "besu_sentry",
"ports": [
{
@@ -1617,7 +1654,9 @@
"port": 80
}
],
"fqdns": []
"fqdns": [
"tsunamiswap.com"
]
},
{
"vmid": 5201,

View File

@@ -35,10 +35,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0xc9901ce2Ddb6490FAA183645147a87496d8b20B6",
"bridgeChainId": 1,
"label": "CCIPWETH9Bridge",
"note": "Set to MAINNET_CCIP_WETH9_BRIDGE from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -54,10 +53,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x24293CA562aE1100E60a4640FF49bd656cFf93B4",
"bridgeChainId": 56,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_BSC from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -73,10 +71,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0xF7736443f02913e7e0773052103296CfE1637448",
"bridgeChainId": 137,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_POLYGON from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -92,10 +89,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x6e94e53F73893b2a6784Df663920D31043A6dE07",
"bridgeChainId": 10,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_OPTIMISM from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -111,10 +107,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x937824f2516fa58f25aeAb92E7BFf7D74F463B4c",
"bridgeChainId": 42161,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_ARBITRUM from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -130,10 +125,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x24293CA562aE1100E60a4640FF49bd656cFf93B4",
"bridgeChainId": 43114,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_AVALANCHE from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -149,10 +143,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x24293CA562aE1100E60a4640FF49bd656cFf93B4",
"bridgeChainId": 8453,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_BASE from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -168,10 +161,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0xc8656F24488cb90c452058da92d1a25BA464eaAE",
"bridgeChainId": 100,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_GNOSIS from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -187,10 +179,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab",
"bridgeChainId": 25,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_CRONOS from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -206,10 +197,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7",
"bridgeChainId": 42220,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_CELO from .env"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,
@@ -225,10 +215,9 @@
"toChain": 138,
"asset": "WETH",
"pathType": "CCIP",
"bridgeAddress": "0x0000000000000000000000000000000000000000",
"bridgeAddress": "0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04",
"bridgeChainId": 1111,
"label": "CCIPWETH9Bridge",
"note": "Set to CCIPWETH9_BRIDGE_WEMIX from .env when deployed"
"label": "CCIPWETH9Bridge"
},
{
"fromChain": 138,

View File

@@ -0,0 +1,160 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Operator lineup: Chain 138 canonical GRU assets plus live-confirmed Solana corridor evidence → Solana SPL bridge targets (cW* / WETH). Populate solanaMint when mints exist. Source addresses: docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md §2.",
"version": "1.0.0",
"updated": "2026-04-19",
"status": "partial_live_causdt_lane_confirmed_lineup_and_mints_still_outstanding",
"references": {
"canonicalCrosscheck": "docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md",
"tokenMapping": "config/token-mapping-multichain.json",
"nonEvmFramework": "config/non-evm-bridge-framework.json",
"runbook": "docs/03-deployment/CHAIN138_TO_SOLANA_GRU_TOKEN_DEPLOYMENT_LINEUP.md"
},
"chain138": {
"chainId": 138,
"rpcEnv": "RPC_URL_138"
},
"solana": {
"caip2": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"cluster": "mainnet-beta",
"hubStablesNote": "Resolve SPL USDC (primary) and USDT mints for edge liquidity; not EVM hub addresses — see cross-chain-pmm-lps/config/chains.json nonEvm.Solana"
},
"liveBridgeEvidence": {
"chain138Symbol": "cAUSDT",
"solanaSymbol": "cWAUSDT",
"chain138Address": "0x5fdDF65733e3d590463F68f93Cf16E8c04081271",
"solanaAdapter": "0x8244a5c27C0eA32fb8cB324131a04dC9F4E433f7",
"evidenceDate": "2026-04-16",
"mintedRaw": "22000000",
"bridgedRaw": "9000000",
"bridgeRequestId": "0x69035dfb7c0af5447da6104a8c09aa6bac7b19695517441014dda3c687d4550d",
"finalStatus": 2,
"finalStatusLabel": "Confirmed",
"transactions": {
"mint": "0x8d18b8df7024418bf167cc80d11e0425b0c81507ace13326973951f3dfd0f6f8",
"bridge": "0x4f6368754a5b55a43f8dae4e645bf67e9cf6c9c64bfdadb4625508c351d64319",
"confirm": "0x6cce9a740d170278c95e494052e1b031b394d1d807df05ba3bad55030a36fc68"
},
"notes": "Confirmed live Chain 138 -> Solana send/confirm for the AUSDT corridor. Full canonical Solana SPL mint inventory is still being populated."
},
"bridgeModel": {
"sourceRole": "canonical c* (and WETH) on Chain 138",
"destinationRole": "SPL mints for bridge-wrapped symbols per token-mapping nonEvmNetworks.Solana.assetRepresentationModel",
"naming": "c* on 138 → cW* on Solana for fiat-stable GRU assets; WETH remains WETH (wrapped ETH representation on Solana)"
},
"assets": [
{
"chain138Symbol": "cAUSDT",
"solanaSymbol": "cWAUSDT",
"decimals": 6,
"chain138Address": "0x5fdDF65733e3d590463F68f93Cf16E8c04081271",
"solanaMint": null,
"deploymentStatus": "confirmed_live_send_confirm_mint_address_pending",
"evidenceRef": "liveBridgeEvidence"
},
{
"chain138Symbol": "WETH",
"solanaSymbol": "WETH",
"decimals": 18,
"chain138Address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cUSDT",
"solanaSymbol": "cWUSDT",
"decimals": 6,
"chain138Address": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cUSDC",
"solanaSymbol": "cWUSDC",
"decimals": 6,
"chain138Address": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cEURC",
"solanaSymbol": "cWEURC",
"decimals": 6,
"chain138Address": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cEURT",
"solanaSymbol": "cWEURT",
"decimals": 6,
"chain138Address": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cGBPC",
"solanaSymbol": "cWGBPC",
"decimals": 6,
"chain138Address": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cGBPT",
"solanaSymbol": "cWGBPT",
"decimals": 6,
"chain138Address": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cAUDC",
"solanaSymbol": "cWAUDC",
"decimals": 6,
"chain138Address": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cJPYC",
"solanaSymbol": "cWJPYC",
"decimals": 6,
"chain138Address": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cCHFC",
"solanaSymbol": "cWCHFC",
"decimals": 6,
"chain138Address": "0x873990849DDa5117d7C644f0aF24370797C03885",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cCADC",
"solanaSymbol": "cWCADC",
"decimals": 6,
"chain138Address": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cXAUC",
"solanaSymbol": "cWXAUC",
"decimals": 6,
"chain138Address": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"solanaMint": null,
"deploymentStatus": "planned"
},
{
"chain138Symbol": "cXAUT",
"solanaSymbol": "cWXAUT",
"decimals": 6,
"chain138Address": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"solanaMint": null,
"deploymentStatus": "planned"
}
]
}

View File

@@ -1,8 +1,8 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Multi-chain token mapping: Chain 138↔651940 (ALL Mainnet) and 651940↔1,56,137,100,43114,8453,42161,10,25,42220,1111. Single source of truth for bridge/LP tooling. Verify canonical addresses per chain: see docs/07-ccip/EXPLORER_TOKENS_CANONICAL_MAPPING.md.",
"version": "1.1.0",
"updated": "2026-02-27",
"version": "1.2.0",
"updated": "2026-04-19",
"cToCwSymbolMapping": {
"cUSDT": "cWUSDT",
"cUSDC": "cWUSDC",
@@ -26,10 +26,10 @@
"137": "Polygon",
"138": "SMOM-DBIS-138 (DeFi Oracle Meta)",
"1111": "Wemix",
"42793": "Etherlink",
"8453": "Base",
"42161": "Arbitrum One",
"42220": "Celo",
"42793": "Etherlink",
"43114": "Avalanche C-Chain",
"651940": "ALL Mainnet (Alltra)"
},
@@ -146,6 +146,118 @@
}
]
},
{
"fromChainId": 138,
"toChainId": 1,
"notes": "Chain 138 ↔ Ethereum Mainnet (CCIP); direct mapping; c*_cW = c* → cW* on destination",
"tokens": [
{
"key": "WETH9",
"name": "Wrapped Ether",
"addressFrom": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"addressTo": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"notes": "138 WETH9 → Mainnet WETH"
},
{
"key": "Compliant_USDT",
"name": "cUSDT",
"addressFrom": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
"addressTo": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"notes": "138 cUSDT → Mainnet USDT (native)"
},
{
"key": "Compliant_USDT_cW",
"name": "cUSDT→cWUSDT",
"addressFrom": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
"addressTo": "0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE",
"notes": "138 cUSDT → Mainnet cWUSDT; set when deployed"
},
{
"key": "Compliant_USDC",
"name": "cUSDC",
"addressFrom": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
"addressTo": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"notes": "138 cUSDC → Mainnet USDC (native)"
},
{
"key": "Compliant_USDC_cW",
"name": "cUSDC→cWUSDC",
"addressFrom": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
"addressTo": "0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a",
"notes": "138 cUSDC → Mainnet cWUSDC; set when deployed"
},
{
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0xD4aEAa8cD3fB41Dc8437FaC7639B6d91B60A5e8d",
"notes": "138 cEURC → Mainnet cWEURC"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x855d74FFB6CF75721a9bAbc8B2ed35c8119241dC",
"notes": "138 cEURT → Mainnet cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0xc074007dc0bfb384b1cf6426a56287ed23fe4d52",
"notes": "138 cGBPC → Mainnet cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x1dDF9970F01c76A692Fdba2706203E6f16e0C46F",
"notes": "138 cGBPT → Mainnet cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x5020Db641B3Fc0dAbBc0c688C845bc4E3699f35F",
"notes": "138 cAUDC → Mainnet cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0x07EEd0D7dD40984e47B9D3a3bdded1c536435582",
"notes": "138 cJPYC → Mainnet cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0x0F91C5E6Ddd46403746aAC970D05d70FFe404780",
"notes": "138 cCHFC → Mainnet cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0x209FE32fe7B541751D190ae4e50cd005DcF8EDb4",
"notes": "138 cCADC → Mainnet cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x572Be0fa8CA0534d642A567CEDb398B771D8a715",
"notes": "138 cXAUC → Mainnet cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0xACE1DBF857549a11aF1322e1f91F2F64b029c906",
"notes": "138 cXAUT → Mainnet cWXAUT"
}
]
},
{
"fromChainId": 651940,
"toChainId": 138,
@@ -442,70 +554,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0x3CD9ee18db7ad13616FCC1c83bC6098e03968E66",
"addressTo": "0x25603ae4bff0b71d637b3573d1b6657f5f6d17ef",
"notes": "138 cEURC → Gnosis cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0xBeF5A0Bcc0E77740c910f197138cdD90F98d2427",
"addressTo": "0x8e54c52d34a684e22865ac9f2d7c27c30561a7b9",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0x948690147D2e50ffe50C5d38C14125aD6a9FA036",
"addressTo": "0x4d9bc6c74ba65e37c4139f0aec9fc5ddff28dcc4",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x58a8D8F78F1B65c06dAd7542eC46b299629A60dd",
"addressTo": "0x9f6d2578003fe04e58a9819a4943732f2a203a61",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0xFb4B6Cc81211F7d886950158294A44C312abCA29",
"addressTo": "0xddc4063f770f7c49d00b5a10fb552e922aa39b2c",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0xf9f5D0ACD71C76F9476F10B3F3d3E201F0883C68",
"addressTo": "0x145e8e8c49b6a021969dd9d2c01c8fea44374f61",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0xeE17bB0322383fecCA2784fbE2d4CD7d02b1905B",
"addressTo": "0x46d90d7947f1139477c206c39268923b99cf09e4",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0xc9750828124D4c10e7a6f4B655cA8487bD3842EB",
"addressTo": "0xa7133c78e0ec74503a5941bcbd44257615b6b4f6",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x328Cd365Bb35524297E68ED28c6fF2C9557d1363",
"addressTo": "0x23873b85cfeb343eb952618e8c9e9bfb7f6a0d45",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0x9e6044d730d4183bF7a666293d257d035Fba6d44",
"addressTo": "0xc6189d404dc60cae7b48e2190e44770a03193e5f",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -554,70 +666,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0x61D642979eD75c1325f35b9275C5A7FE97F22451",
"addressTo": "0x84353ed1f0c7a703a17abad19b0db15bc9a5e3e5",
"notes": "138 cEURC → Avalanche cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x30751782486eed825187C1EAe5DE4b4baD428AaE",
"addressTo": "0xfc7d256e48253f7a7e08f0e55b9ff7039eb2524c",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0xb0FA7ec4123C7c275B3a89d9239569707Ea3C66A",
"addressTo": "0xbdf0c4ea1d81e8e769b0f41389a2c733e3ff723e",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x6389a643e71F000FC4ce5a0d58fDC4a40AD68EBE",
"addressTo": "0x4611d3424e059392a52b957e508273bc761c80f2",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x528376e3a4bAAE78F7F4D0E9aDB75eFA9942373E",
"addressTo": "0x04e1e22b0d41e99f4275bd40a50480219bc9a223",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0xCF9D867DA220c6B4756BeDC6888dDac3a0463AEa",
"addressTo": "0x3714b1a312e0916c7dcdc4edf480fc0339e59a59",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0x4f6167e9aE79878f6Cd71330eAD7f68a45Ed29DC",
"addressTo": "0xc2fa05f12a75ac84ea778af9d6935ca807275e55",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0x1B051588A33A7d56ed46f7C5C78870175b44F9FA",
"addressTo": "0x1872e033b30f3ce0498847926857433e0146394e",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x826d5F3e5713C76a1D13e41A76843A361090c896",
"addressTo": "0x4f95297c23d9f4a1032b1c6a2e553225cb175bee",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0xC15ACdBAC59B3C7Cb4Ea4B3D58334A4b143B4b44",
"addressTo": "0xd2b4dbf2f6bd6704e066d752eec61fb0be953fd3",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -666,70 +778,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF",
"addressTo": "0xcb145ba9a370681e3545f60e55621ebf218b1031",
"notes": "138 cEURC → Base cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4",
"addressTo": "0x73e0cf8bf861d376b3a4c87c136f975027f045ff",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0x3CD9ee18db7ad13616FCC1c83bC6098e03968E66",
"addressTo": "0x2a0023ad5ce1ac6072b454575996dffb1bb11b16",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0xBeF5A0Bcc0E77740c910f197138cdD90F98d2427",
"addressTo": "0x22b98130ab4d9c355512b25ade4c35e75a4e7e89",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x948690147D2e50ffe50C5d38C14125aD6a9FA036",
"addressTo": "0xa846aead3071df1b6439d5d813156ace7c2c1da1",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0x58a8D8F78F1B65c06dAd7542eC46b299629A60dd",
"addressTo": "0x29828e9ab2057cd3df3c9211455ae1f76e53d2af",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0xFb4B6Cc81211F7d886950158294A44C312abCA29",
"addressTo": "0xc1535e88578d984f12eab55863376b8d8b9fb05a",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0xf9f5D0ACD71C76F9476F10B3F3d3E201F0883C68",
"addressTo": "0xdc383c489533a4dd9a6bd3007386e25d5078b878",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0xeE17bB0322383fecCA2784fbE2d4CD7d02b1905B",
"addressTo": "0x7e4b4682453bcce19ec903fb69153d3031986bc4",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0xc9750828124D4c10e7a6f4B655cA8487bD3842EB",
"addressTo": "0xcc6ae6016d564e9ab82aaff44d65e05a9b18951c",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -778,70 +890,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4",
"addressTo": "0x2a0023ad5ce1ac6072b454575996dffb1bb11b16",
"notes": "138 cEURC → Arbitrum cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x3CD9ee18db7ad13616FCC1c83bC6098e03968E66",
"addressTo": "0x22b98130ab4d9c355512b25ade4c35e75a4e7e89",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0xBeF5A0Bcc0E77740c910f197138cdD90F98d2427",
"addressTo": "0xa846aead3071df1b6439d5d813156ace7c2c1da1",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x948690147D2e50ffe50C5d38C14125aD6a9FA036",
"addressTo": "0x29828e9ab2057cd3df3c9211455ae1f76e53d2af",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x58a8D8F78F1B65c06dAd7542eC46b299629A60dd",
"addressTo": "0xc1535e88578d984f12eab55863376b8d8b9fb05a",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0xFb4B6Cc81211F7d886950158294A44C312abCA29",
"addressTo": "0xdc383c489533a4dd9a6bd3007386e25d5078b878",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0xf9f5D0ACD71C76F9476F10B3F3d3E201F0883C68",
"addressTo": "0x7e4b4682453bcce19ec903fb69153d3031986bc4",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0xeE17bB0322383fecCA2784fbE2d4CD7d02b1905B",
"addressTo": "0xcc6ae6016d564e9ab82aaff44d65e05a9b18951c",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0xc9750828124D4c10e7a6f4B655cA8487bD3842EB",
"addressTo": "0xa7762b63c4871581885ad17c5714ebb286a7480b",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0x328Cd365Bb35524297E68ED28c6fF2C9557d1363",
"addressTo": "0x66568899ffe8f00b25dc470e878b65a478994e76",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -890,70 +1002,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0x2627177f33968128C7fb916F5B9E1f14cc550A80",
"addressTo": "0x4ab39b5bab7b463435209a9039bd40cf241f5a82",
"notes": "138 cEURC → Optimism cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x07dE1f489E1bfCE2c326066a9DFc10e731CBA0CB",
"addressTo": "0x6f521cd9fcf7884cd4e9486c7790e818638e09dd",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0x9a1D0dBEE997929ED02fD19E0E199704d20914dB",
"addressTo": "0x3f8c409c6072a2b6a4ff17071927ba70f80c725f",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x5355148C4740fcc3D7a96F05EdD89AB14851206b",
"addressTo": "0x456373d095d6b9260f01709f93fccf1d8aa14d11",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x50b073d0D1D2f002745cb9FC28a057d5be84911c",
"addressTo": "0x25603ae4bff0b71d637b3573d1b6657f5f6d17ef",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0x1ED9E491A5eCd53BeF21962A5FCE24880264F63f",
"addressTo": "0x8e54c52d34a684e22865ac9f2d7c27c30561a7b9",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0x8b6EE72001cAFcb21D56a6c4686D6Db951d499A6",
"addressTo": "0x4d9bc6c74ba65e37c4139f0aec9fc5ddff28dcc4",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0xA6eFb8783C8ad2740ec880e46D4f7E608E893B1B",
"addressTo": "0x9f6d2578003fe04e58a9819a4943732f2a203a61",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x7062f35567BBAb4d98dc33af03B0d14Df42294D5",
"addressTo": "0xddc4063f770f7c49d00b5a10fb552e922aa39b2c",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0x5fbCE65524211BC1bFb0309fd9EE09E786c6D097",
"addressTo": "0x145e8e8c49b6a021969dd9d2c01c8fea44374f61",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -1002,70 +1114,70 @@
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0x7574d37F42528B47c88962931e48FC61608a4050",
"notes": "138 cEURC → Cronos cWEURC; set when deployed"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0x9f833b4f1012F52eb3317b09922a79c6EdFca77D",
"notes": "138 cEURT → cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xe5c65A76A541368d3061fe9E7A2140cABB903dbF",
"notes": "138 cGBPC → cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xBb58fa16bAc8E789f09C14243adEE6480D8213A2",
"notes": "138 cGBPT → cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xff3084410A732231472Ee9f93F5855dA89CC5254",
"notes": "138 cAUDC → cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0x52aD62B8bD01154e2A4E067F8Dc4144C9988d203",
"notes": "138 cJPYC → cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xB55F49D6316322d5caA96D34C6e4b1003BD3E670",
"notes": "138 cCHFC → cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0x32aD687F24F77bF8C86605c202c829163Ac5Ab36",
"notes": "138 cCADC → cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xf1B771c95573113E993374c0c7cB2dc1a7908B12",
"notes": "138 cXAUC → cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0x0000000000000000000000000000000000000000",
"addressTo": "0xD517C0cF7013f988946A468c880Cc9F8e2A4BCbE",
"notes": "138 cXAUT → cWXAUT"
}
]
@@ -1322,6 +1434,118 @@
}
]
},
{
"fromChainId": 138,
"toChainId": 42220,
"notes": "Chain 138 ↔ Celo (CCIP); direct mapping; c*_cW = c* → cW* on destination",
"tokens": [
{
"key": "WETH9",
"name": "Wrapped Ether",
"addressFrom": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"addressTo": "0xD221812de1BD094f35587EE8E174B07B6167D9Af",
"notes": "138 WETH9 → Celo WETH"
},
{
"key": "Compliant_USDT",
"name": "cUSDT",
"addressFrom": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
"addressTo": "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
"notes": "138 cUSDT → Celo USDT (native)"
},
{
"key": "Compliant_USDT_cW",
"name": "cUSDT→cWUSDT",
"addressFrom": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
"addressTo": "0x73376eB92c16977B126dB9112936A20Fa0De3442",
"notes": "138 cUSDT → Celo cWUSDT; set when deployed"
},
{
"key": "Compliant_USDC",
"name": "cUSDC",
"addressFrom": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
"addressTo": "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
"notes": "138 cUSDC → Celo USDC (native)"
},
{
"key": "Compliant_USDC_cW",
"name": "cUSDC→cWUSDC",
"addressFrom": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
"addressTo": "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3",
"notes": "138 cUSDC → Celo cWUSDC; set when deployed"
},
{
"key": "Compliant_EURC_cW",
"name": "cEURC→cWEURC",
"addressFrom": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
"addressTo": "0xb6D2f38b9015F32ccE8818509c712264E7fceeD3",
"notes": "138 cEURC → Celo cWEURC"
},
{
"key": "Compliant_EURT_cW",
"name": "cEURT→cWEURT",
"addressFrom": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
"addressTo": "0x7e6fB8D80f81430e560F8232b2A4fd06249d74ce",
"notes": "138 cEURT → Celo cWEURT"
},
{
"key": "Compliant_GBPC_cW",
"name": "cGBPC→cWGBPC",
"addressFrom": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
"addressTo": "0xE37c332a88f112F9e039C5d92D821402A89c7052",
"notes": "138 cGBPC → Celo cWGBPC"
},
{
"key": "Compliant_GBPT_cW",
"name": "cGBPT→cWGBPT",
"addressFrom": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
"addressTo": "0x1dBa81f91f1BeC47FFf60eC3e7DeD780ad9968E3",
"notes": "138 cGBPT → Celo cWGBPT"
},
{
"key": "Compliant_AUDC_cW",
"name": "cAUDC→cWAUDC",
"addressFrom": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
"addressTo": "0x2d3a2ED4Ca4d69912d217c305EE921609F7906A8",
"notes": "138 cAUDC → Celo cWAUDC"
},
{
"key": "Compliant_JPYC_cW",
"name": "cJPYC→cWJPYC",
"addressFrom": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
"addressTo": "0x0b39F47D2E68aB0eB18d4b637Bbd1dD8E97cFbB5",
"notes": "138 cJPYC → Celo cWJPYC"
},
{
"key": "Compliant_CHFC_cW",
"name": "cCHFC→cWCHFC",
"addressFrom": "0x873990849DDa5117d7C644f0aF24370797C03885",
"addressTo": "0x8142BA530B08f3950128601F00DaaA678213DFdf",
"notes": "138 cCHFC → Celo cWCHFC"
},
{
"key": "Compliant_CADC_cW",
"name": "cCADC→cWCADC",
"addressFrom": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
"addressTo": "0x0C242b513008Cd49C89078F5aFb237A3112251EB",
"notes": "138 cCADC → Celo cWCADC"
},
{
"key": "Compliant_XAUC_cW",
"name": "cXAUC→cWXAUC",
"addressFrom": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
"addressTo": "0x61D642979eD75c1325f35b9275C5A7FE97F22451",
"notes": "138 cXAUC → Celo cWXAUC"
},
{
"key": "Compliant_XAUT_cW",
"name": "cXAUT→cWXAUT",
"addressFrom": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
"addressTo": "0x30751782486eed825187C1EAe5DE4b4baD428AaE",
"notes": "138 cXAUT → Celo cWXAUT"
}
]
},
{
"fromChainId": 651940,
"toChainId": 42220,

View File

@@ -0,0 +1,64 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://d-bis.org/schemas/universal-resource-activation.evidence-package.v1.json",
"title": "EvidencePackage",
"type": "object",
"required": ["evidencePackageId", "resourceIds", "actionType", "reconciliationStatus"],
"properties": {
"evidencePackageId": { "type": "string", "minLength": 1 },
"resourceIds": {
"type": "array",
"minItems": 1,
"items": { "type": "string" }
},
"actionType": {
"type": "string",
"enum": [
"REGISTER",
"FUNDING_DRAW",
"CAP_RESERVE",
"MINT_AUTH",
"DEPLOY",
"ALLOCATE",
"REVERSAL"
]
},
"initiator": { "type": "string" },
"timestamp": { "type": "string" },
"jurisdiction": { "type": "string" },
"lawfulBasis": { "type": "string" },
"policyDecisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"profileId": { "type": "string" },
"version": { "type": "string" },
"result": { "type": "string" },
"reason": { "type": "string" }
}
}
},
"complianceResults": {
"type": "array",
"items": {
"type": "object",
"properties": {
"check": { "type": "string" },
"result": { "type": "string" },
"ref": { "type": "string" }
}
}
},
"custodyOrSourceEvidence": { "type": "string" },
"accountingRef": { "type": "string" },
"settlementOrChainRef": { "type": "string" },
"deploymentRef": { "type": "string" },
"reconciliationStatus": {
"type": "string",
"enum": ["open", "matched", "exception"]
},
"explanation": { "type": "string" }
},
"additionalProperties": true
}

View File

@@ -0,0 +1,29 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://d-bis.org/schemas/universal-resource-activation.manifest.v1.json",
"title": "UniversalResourceManifest",
"type": "object",
"required": ["schemaVersion", "resources", "evidencePackages"],
"properties": {
"schemaVersion": { "type": "string", "pattern": "^1\\." },
"updatedAt": { "type": "string" },
"resources": {
"type": "array"
},
"evidencePackages": {
"type": "array"
},
"policyProfileRefs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"version": { "type": "string" }
},
"required": ["id"]
}
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,69 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://d-bis.org/schemas/universal-resource-activation.resource.v1.json",
"title": "UniversalResource",
"type": "object",
"required": ["resourceId", "schemaVersion", "family", "lifecycleState", "deployabilityState"],
"properties": {
"resourceId": { "type": "string", "minLength": 1, "description": "bytes32 hex (0x...) or UUID" },
"schemaVersion": { "type": "integer", "minimum": 1 },
"displayName": { "type": "string" },
"description": { "type": "string" },
"family": {
"type": "string",
"enum": [
"SKR_SAFEKEEPING",
"STRATEGIC_RECORD",
"SERVER_FUNDS",
"FIAT_DIGITAL",
"CRYPTO",
"COMMODITY",
"SECURITY",
"RWA_GENERIC",
"INFRA_CAPACITY"
]
},
"subType": { "type": "string" },
"ownerParticipantId": { "type": "string" },
"jurisdiction": { "type": "string" },
"policyProfileId": { "type": "string" },
"tokenizationMode": {
"type": "string",
"enum": ["NONE", "CLAIM", "ENTITLEMENT", "TRANSFERABLE_ERC20", "RESTRICTED_SECURITY"]
},
"unitOfMeasure": { "type": "string" },
"quantity": { "type": "string" },
"valuationMethod": {
"type": "string",
"enum": ["MARK", "NAV", "AMORTIZED", "NOTIONAL", "NONE"]
},
"valuationRef": { "type": "string" },
"encumbranceState": {
"type": "string",
"enum": ["unencumbered", "held", "pledged", "lien", "disputed"]
},
"lifecycleState": {
"type": "string",
"enum": ["draft", "pending_validation", "active", "suspended", "closed", "void"]
},
"deployabilityState": {
"type": "string",
"enum": [
"informational_only",
"collateral_only",
"funding_eligible",
"settlement_linked",
"infra_allocatable",
"fully_deployable"
]
},
"evidenceRefs": { "type": "array", "items": { "type": "string" } },
"custodianId": { "type": "string" },
"infraHostId": { "type": "string" },
"infraBundleId": { "type": "string" },
"riskTier": { "type": "integer", "minimum": 1, "maximum": 5 },
"createdAt": { "type": "string" },
"updatedAt": { "type": "string" }
},
"additionalProperties": true
}

View File

@@ -0,0 +1,83 @@
{
"schemaVersion": "1.0.0",
"updatedAt": "2026-04-24T00:00:00Z",
"description": "Canonical in-repo store for universal resource activation (SKR, server funds, infra). Replace example-* rows in production; keep valid JSON and run scripts/validate/validate-universal-resource-activation.mjs in CI.",
"policyProfileRefs": [
{ "id": "institutional_custody_skr_v1", "version": "1" },
{ "id": "server_funds_treasury_v1", "version": "1" },
{ "id": "infra_capacity_ops_v1", "version": "1" }
],
"resources": [
{
"resourceId": "ura:example:skr-pilot-placeholder",
"schemaVersion": 1,
"displayName": "Example SKR / custody position (pilot template)",
"description": "Replace with a real safekeeping or strategic evidence-backed record. Not production.",
"family": "SKR_SAFEKEEPING",
"subType": "CUSTODY_STATEMENT",
"ownerParticipantId": "0x0000000000000000000000000000000000000000000000000000000000000000",
"jurisdiction": "TBD",
"policyProfileId": "institutional_custody_skr_v1",
"tokenizationMode": "NONE",
"quantity": "0",
"unitOfMeasure": "USD",
"valuationMethod": "NOTIONAL",
"encumbranceState": "unencumbered",
"lifecycleState": "draft",
"deployabilityState": "informational_only",
"evidenceRefs": []
},
{
"resourceId": "ura:example:server-funds-pilot",
"schemaVersion": 1,
"displayName": "Example server funds pool (pilot template)",
"description": "Logical funding resource; bind to OMNL/Fineract and server-funds-sidecar when SoR is frozen. Not a wallet balance.",
"family": "SERVER_FUNDS",
"subType": "TREASURY_POOL",
"ownerParticipantId": "0x0000000000000000000000000000000000000000000000000000000000000000",
"jurisdiction": "TBD",
"policyProfileId": "server_funds_treasury_v1",
"tokenizationMode": "NONE",
"quantity": "0",
"unitOfMeasure": "USD",
"valuationMethod": "NOTIONAL",
"encumbranceState": "unencumbered",
"lifecycleState": "draft",
"deployabilityState": "funding_eligible",
"evidenceRefs": []
},
{
"resourceId": "ura:example:infra-r630-01-capacity",
"schemaVersion": 1,
"displayName": "Example R630-01 capacity slice (pilot template)",
"description": "Operational capacity record; not a tradable security. See reports/storage and ALL_VMIDS_ENDPOINTS for live inventory.",
"family": "INFRA_CAPACITY",
"subType": "BUNDLE",
"ownerParticipantId": "0x0000000000000000000000000000000000000000000000000000000000000000",
"jurisdiction": "LAN",
"policyProfileId": "infra_capacity_ops_v1",
"tokenizationMode": "NONE",
"infraHostId": "r630-01",
"infraBundleId": "api_small",
"encumbranceState": "unencumbered",
"lifecycleState": "active",
"deployabilityState": "infra_allocatable",
"evidenceRefs": []
}
],
"evidencePackages": [
{
"evidencePackageId": "ura:example:evidence-ura-bootstrap",
"resourceIds": [
"ura:example:skr-pilot-placeholder",
"ura:example:server-funds-pilot",
"ura:example:infra-r630-01-capacity"
],
"actionType": "REGISTER",
"initiator": "repo_bootstrap",
"timestamp": "2026-04-24T00:00:00Z",
"reconciliationStatus": "matched",
"explanation": "Bootstrap example package linking the three template resources; replace with real packages per UNIVERSAL_RESOURCE_PILOT_PLAN.md"
}
]
}

View File

@@ -0,0 +1,10 @@
# XDC parent endpoint stack for Chain 138 pair
# Deployed 2026-04-16 from /home/intlc/projects/XDC-Zero/endpoint
# Operator-local record only; gitignored by default.
ETHEREUM_TRIE_DB=0x99B3511A2d315A497C8112C1fdd8D508d4B1E506
MERKLE_PATRICIA=0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
ENDPOINT=0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e
# Parent-side CSC for Chain 138 roots is still pending.
# Do not treat this file as a completed pair registration artifact yet.

View File

@@ -0,0 +1,12 @@
# Chain 138 XDC Zero Endpoint stack
# Deployed 2026-04-01 from /home/intlc/projects/XDC-Zero/endpoint
# Operator-local record only; gitignored by default.
ETHEREUM_TRIE_DB=0xB7A32E86Fa1533ebb0Ed1D41Ce502110E739E54A
MERKLE_PATRICIA=0xAF12F73f0BCa1E52559Db807A2B438BD14de6B09
ENDPOINT=0x43F435cDC82e415500c0abcf48261176052CadcA
# Final coherent tx set for the linked stack above:
ETHEREUM_TRIE_DB_TX=0x09d5549b877dbb17e82d6998328e914abd1f98000a9af73b4ebf6f6f251a40b3
MERKLE_PATRICIA_TX=0x70bf28a946510c5bd7077b8acf1ccbf5fba76706dfbd5d1405ec5bad70aea844
ENDPOINT_TX=0x98bccdc032e178e109b1472c7d00248523692a054f11aa01744d1a5753fe5e55

View File

@@ -0,0 +1,13 @@
{
"chain138": {
"endpoint": "0x43F435cDC82e415500c0abcf48261176052CadcA",
"registers": [
{
"chainId": 50,
"csc": "0x3cf12c78b5E52EB802aD4f3b4653c616786b792c",
"endpoint": "0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
}
],
"applications": []
}
}

View File

@@ -0,0 +1,7 @@
[
{
"chainId": 138,
"csc": "0x105F8A15b819948a89153505762444Ee9f324684",
"endpoint": "0x43F435cDC82e415500c0abcf48261176052CadcA"
}
]

View File

@@ -0,0 +1,148 @@
# AAVE Chain 138 and Marionette TsunamiSwap Plan
**Last Updated:** 2026-04-23
**Status:** Active planning / operator runbook
**Purpose:** Canonical repo-local reference for the TsunamiSwap DEX footprint in this workspace, including deployment target, current endpoint, and the operator flow to bring the VM online.
---
## Scope
This document covers the TsunamiSwap deployment target currently reserved in the Proxmox operational template:
- **VMID:** `5010`
- **Hostname:** `tsunamiswap`
- **IPv4:** `192.168.11.91`
- **Preferred node:** `r630-01`
- **Category:** `defi`
- **Published port in template:** `80`
Canonical sources:
- [docs/00-meta/OPERATOR_READY_CHECKLIST.md](OPERATOR_READY_CHECKLIST.md) section `5c`
- [docs/02-architecture/DBIS_NODE_ROLE_MATRIX.md](../02-architecture/DBIS_NODE_ROLE_MATRIX.md)
- [docs/04-configuration/ALL_VMIDS_ENDPOINTS.md](../04-configuration/ALL_VMIDS_ENDPOINTS.md)
- [`config/proxmox-operational-template.json`](../../config/proxmox-operational-template.json)
- [`scripts/deployment/tsunamiswap-vm-5010-provision.sh`](../../scripts/deployment/tsunamiswap-vm-5010-provision.sh)
---
## Current URLs
The canonical public TsunamiSwap URLs are:
- **Landing page:** `https://tsunamiswap.com`
- **Working application:** `https://app.tsunamiswap.com`
The VM service target on port `80` remains the backend origin:
- **Origin / backend target:** `http://192.168.11.91/`
Important notes:
- `https://tsunamiswap.com` is the canonical public landing page.
- `https://app.tsunamiswap.com` is the canonical working application URL.
- `http://192.168.11.91/` remains the internal service origin for VM `5010`.
- Both hostnames are currently recorded against VM `5010`; if the landing page and app split onto different upstreams later, update this document and the Proxmox operational template together.
---
## Deployment State
Current known state in this repo:
- VM `5010` exists in inventory and architecture docs.
- The helper script [`scripts/deployment/tsunamiswap-vm-5010-provision.sh`](../../scripts/deployment/tsunamiswap-vm-5010-provision.sh) is **inventory only** and explicitly says provisioning is still informational.
- The operator checklist expects follow-up scripts such as `create-tsunamiswap-vm.sh`, `setup-tsunamiswap-vm-5010.sh`, and `deploy-tsunamiswap-to-5010.sh`, but those scripts are **not present in this workspace** today.
- Because of that, TsunamiSwap should currently be treated as **planned / partially documented infrastructure**, not a fully repo-automated deployment.
---
## Operator Flow
### 1. Check VM inventory status
```bash
./scripts/deployment/tsunamiswap-vm-5010-provision.sh
```
Expected behavior:
- Confirms whether VMID `5010` exists on the target Proxmox host.
- If missing, prints the intended sizing and placement.
### 2. Target VM profile
From the operator checklist, the intended baseline is:
- `8` vCPU
- `16 GB` RAM
- `~160 GB` disk
- default host `r630-01`
- default IP `192.168.11.91`
### 3. Planned post-create steps
The checklist indicates this intended flow:
```bash
./scripts/create-tsunamiswap-vm.sh --dry-run
./scripts/create-tsunamiswap-vm.sh
./scripts/setup-tsunamiswap-vm-5010.sh --dry-run
./scripts/setup-tsunamiswap-vm-5010.sh
./scripts/deploy-tsunamiswap-to-5010.sh --dry-run
./scripts/deploy-tsunamiswap-to-5010.sh
```
Current repo reality:
- These commands are referenced operationally.
- The underlying scripts are not present in this workspace right now.
- If automation is needed, those scripts should be added in a future pass and then linked back here.
---
## Publish Checklist
Before calling TsunamiSwap publicly live, complete all of the following:
1. Confirm VM `5010` exists and serves HTTP on `192.168.11.91:80`.
2. Confirm `tsunamiswap.com` and `app.tsunamiswap.com` are present under VM `5010` `fqdns` in `config/proxmox-operational-template.json`.
3. Add both hostnames to the canonical endpoint inventory docs.
4. Publish the NPMplus proxy mappings:
`tsunamiswap.com` for the landing page and `app.tsunamiswap.com` for the working application, both currently targeting `192.168.11.91:80`.
5. Verify end-to-end routing with the standard E2E verifier.
Suggested canonical follow-up files to update once a public hostname exists:
- [docs/04-configuration/ALL_VMIDS_ENDPOINTS.md](../04-configuration/ALL_VMIDS_ENDPOINTS.md)
- [docs/04-configuration/FQDN_EXPECTED_CONTENT.md](../04-configuration/FQDN_EXPECTED_CONTENT.md)
- [docs/03-deployment/OPERATIONAL_RUNBOOKS.md](../03-deployment/OPERATIONAL_RUNBOOKS.md)
- [`config/proxmox-operational-template.json`](../../config/proxmox-operational-template.json)
---
## AAVE / Marionette Relationship
This workspace currently contains the TsunamiSwap infrastructure reservation and operator references, but it does **not** yet contain a fuller in-repo specification for:
- AAVE-specific market wiring
- Marionette-specific orchestration details
- TsunamiSwap backend architecture
- TsunamiSwap contract inventory
- TsunamiSwap public domain / branding decision
So this document should be read as the canonical **deployment placeholder + operator reference**, not a complete product architecture spec.
---
## Decision
The canonical public URLs for TsunamiSwap in this repo are:
- `https://tsunamiswap.com`
- `https://app.tsunamiswap.com`
The corresponding internal service origin is:
- `http://192.168.11.91/`

View File

@@ -1,17 +1,19 @@
# Your next steps — one place
**Last Updated:** 2026-03-02
**Last Updated:** 2026-04-23
**Purpose:** Single list of what **you** need to do next (no infra/automation). Everything else the repo can do has been completed or documented.
**Completed (next steps run):** `run-completable-tasks-from-anywhere.sh` — config OK, on-chain 59/59, validation OK, reconcile-env. `preflight-chain138-deploy.sh` — passed. `run-all-next-steps-chain138.sh` — preflight passed; TransactionMirror and cUSDT/cUSDC pool already present; all 12 c* already GRU-registered; verification 59/59. `validate-config-files.sh` — passed. `run-e2e-flow-tasks-full-parallel.sh --dry-run` — waves E0E7 listed.
**Completed (latest repo-local pass, 2026-04-23):** `run-completable-tasks-from-anywhere.sh --dry-run --json-out reports/status/run-completable-tasks-latest.json` now emits machine-readable step summaries. `run-all-validation.sh --skip-genesis --json-out reports/status/run-all-validation-latest.json` passed and refreshed advisory non-EVM status (Solana, Tron, XRPL). `run-e2e-flow-tasks-full-parallel.sh`, `run-all-next-steps-chain138.sh`, and `run-all-operator-tasks-from-lan.sh` also now support optional `--json-out` summaries. Canonical docs were synchronized to the current 61-address on-chain check and five-step no-LAN runner flow.
**Continue and complete (2026-02-27):** Re-ran `run-completable-tasks-from-anywhere.sh`all 4 steps passed (config, on-chain 59/59, validation, reconcile-env). Re-ran `run-all-operator-tasks-from-lan.sh --skip-backup` — dotenv loaded automatically; Blockscout verification completed (W0-1 NPMplus failed off-LAN as expected). Docs: REMAINING_SUMMARY "Continue and complete" section added; TODOS_CONSOLIDATED and NEXT_STEPS_FOR_YOU updated for operator script loading dotenv.
**Completed (next steps run):** `run-completable-tasks-from-anywhere.sh` — config OK, on-chain 61/61, validation OK, non-EVM status refresh, reconcile-env. `preflight-chain138-deploy.sh` — passed. `run-all-next-steps-chain138.sh` — preflight passed; TransactionMirror and cUSDT/cUSDC pool already present; all 12 c* already GRU-registered; verification 61/61. `validate-config-files.sh` — passed. `run-e2e-flow-tasks-full-parallel.sh --dry-run` — waves E0E7 listed.
**Completed 2026-03-02:** Documentation consolidation: [MASTER_INDEX.md](../MASTER_INDEX.md), [README.md](../README.md), [RUNBOOKS_MASTER_INDEX.md](../RUNBOOKS_MASTER_INDEX.md) created; deprecated content (ALL_IMPROVEMENTS_AND_GAPS_INDEX) marked redirect-only. `run-completable-tasks-from-anywhere.sh` run: config OK, on-chain 59/59, validation OK, reconcile-env. **Preflight** and **run-all-next-steps-chain138.sh** run: preflight passed; mirror/pool already deployed; all 12 c* already registered as GRU; verification 59/59. Next steps index and TODOS_CONSOLIDATED updated.
**Continue and complete (2026-02-27):** Re-ran `run-completable-tasks-from-anywhere.sh` — the runner has since expanded to the current five-step flow (config, on-chain, validation, non-EVM status, reconcile-env). Re-ran `run-all-operator-tasks-from-lan.sh --skip-backup` — dotenv loaded automatically; Blockscout verification completed (W0-1 NPMplus failed off-LAN as expected). Docs: REMAINING_SUMMARY "Continue and complete" section added; TODOS_CONSOLIDATED and NEXT_STEPS_FOR_YOU updated for operator script loading dotenv.
**Completed 2026-03-02:** Documentation consolidation: [MASTER_INDEX.md](../MASTER_INDEX.md), [README.md](../README.md), [RUNBOOKS_MASTER_INDEX.md](../RUNBOOKS_MASTER_INDEX.md) created; deprecated content (ALL_IMPROVEMENTS_AND_GAPS_INDEX) marked redirect-only. `run-completable-tasks-from-anywhere.sh` run: config OK, on-chain 59/59 at the time, validation OK, reconcile-env. **Preflight** and **run-all-next-steps-chain138.sh** run: preflight passed; mirror/pool already deployed; all 12 c* already registered as GRU; verification 59/59 at the time. Next steps index and TODOS_CONSOLIDATED updated.
**Completed 2026-02-27:** Chain 138 "run all next steps" script added: `./scripts/deployment/run-all-next-steps-chain138.sh` (preflight → mirror+pool → register c* as GRU → verify). Docs updated: NEXT_STEPS_INDEX, DEPLOYMENT_ORDER_OF_OPERATIONS, TODOS_CONSOLIDATED, CONTRACT_NEXT_STEPS_LIST.
**Completed 2026-03-01:** Recommended next steps: `run-completable-tasks-from-anywhere.sh` (config OK, on-chain 59/59, validation OK, reconcile-env). Progress indicators added (Step 1/44/4). E2E flow tasks script: `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run] [--wave E1]`. CONTRACT_ADDRESSES_REFERENCE and RECOMMENDATIONS_OPERATOR_CHECKLIST updated to use ADDRESS_MATRIX_AND_STATUS for correlated address matrix.
**Completed 2026-03-01:** Recommended next steps: `run-completable-tasks-from-anywhere.sh` (config OK, on-chain 59/59 at the time, validation OK, reconcile-env). Progress indicators added, later expanded to the current five-step runner flow with elapsed-time summaries. E2E flow tasks script: `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run] [--wave E1]`. CONTRACT_ADDRESSES_REFERENCE and RECOMMENDATIONS_OPERATOR_CHECKLIST updated to use ADDRESS_MATRIX_AND_STATUS for correlated address matrix.
**Completed 2026-02-23:** Optional and next steps: `run-completable-tasks-from-anywhere.sh` run (config OK, on-chain 36/36, run-all-validation --skip-genesis OK, reconcile-env). Shellcheck with `--optional` now non-fatal (CI and validate pass). Validate via Proxmox SSH: `bash scripts/run-via-proxmox-ssh.sh validate [--host IP]` runs full shellcheck + genesis validation; jq/shellcheck installed on host when missing. TODOS_CONSOLIDATED and OPERATOR_AND_EXTERNAL_COMPLETION_CHECKLIST updated.
@@ -27,7 +29,7 @@
## 1. Submit Ledger Live request — ✅ Done
The Ledger Live integration request for **Chain 138 (Defi Oracle Meta Mainnet)** has been submitted (Tally form). Await Ledgers response and follow their process (agreement + integration steps).
The Ledger Live integration request for **Chain 138 (DeFi Oracle Meta Mainnet)** has been submitted (Tally form). Await Ledgers response and follow their process (agreement + integration steps).
**Full guide:** [docs/04-configuration/ADD_CHAIN138_TO_LEDGER_LIVE.md](../04-configuration/ADD_CHAIN138_TO_LEDGER_LIVE.md)
@@ -39,9 +41,9 @@ These can be run from your current machine (dev, WSL, CI) without Proxmox or Led
| Step | Command / action |
|------|------------------|
| **Run all “from anywhere” checks** | `./scripts/run-completable-tasks-from-anywhere.sh` — config validation, on-chain check (SKIP_EXIT=1 if RPC unreachable), run-all-validation --skip-genesis, reconcile-env --print |
| **Chain 138 next steps (all in one)** | `./scripts/deployment/run-all-next-steps-chain138.sh` — preflight → mirror+pool (or `--skip-mirror`) → register c* as GRU → verify. Use `--dry-run`; set `TRANSACTION_MIRROR_ADDRESS` if mirror exists. See [TRANSACTION_MIRROR_CHAIN138_COLLISION_FIX](../03-deployment/TRANSACTION_MIRROR_CHAIN138_COLLISION_FIX.md) if CreateCollision. |
| **E2E flows (full parallel)** | `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run] [--wave E1]` — run E2E flow tasks by wave; see [TASKS_TO_INCREASE_ALL_E2E_FLOWS](TASKS_TO_INCREASE_ALL_E2E_FLOWS.md). |
| **Run all “from anywhere” checks** | `./scripts/run-completable-tasks-from-anywhere.sh [--json-out reports/status/run-completable-tasks-latest.json]` — config validation, on-chain check (SKIP_EXIT=1 if RPC unreachable), run-all-validation --skip-genesis, non-EVM status refresh, reconcile-env --print |
| **Chain 138 next steps (all in one)** | `./scripts/deployment/run-all-next-steps-chain138.sh [--json-out reports/status/run-all-next-steps-chain138-latest.json]` — preflight → mirror+pool (or `--skip-mirror`) → register c* as GRU → verify. Use `--dry-run`; set `TRANSACTION_MIRROR_ADDRESS` if mirror exists. See [TRANSACTION_MIRROR_CHAIN138_COLLISION_FIX](../03-deployment/TRANSACTION_MIRROR_CHAIN138_COLLISION_FIX.md) if CreateCollision. |
| **E2E flows (full parallel)** | `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run] [--wave E1] [--json-out reports/status/run-e2e-flow-tasks-latest.json]` — run E2E flow tasks by wave; see [TASKS_TO_INCREASE_ALL_E2E_FLOWS](TASKS_TO_INCREASE_ALL_E2E_FLOWS.md). |
| **On-chain address list (no RPC)** | `./scripts/verify/check-contracts-on-chain-138.sh --dry-run` — lists addresses only (no RPC) |
| **Config validation** | `./scripts/validation/validate-config-files.sh` or `... --dry-run` (print only) |
| **Bridge deploy dry-run** | `./scripts/deploy-and-configure-weth9-bridge-chain138.sh --dry-run` (no keys/network) |
@@ -49,7 +51,7 @@ These can be run from your current machine (dev, WSL, CI) without Proxmox or Led
| **Validate via Proxmox SSH** | `bash scripts/run-via-proxmox-ssh.sh validate [--host 192.168.11.10]` — full shellcheck + genesis validation on host; installs jq/shellcheck if missing |
| **CCIP checklist (dry)** | `bash scripts/ccip/ccip-deploy-checklist.sh` — validates env and prints deploy order (no deploy) |
| **Tests** | `cd smom-dbis-138 && forge test` (e2e/integration subset if full suite slow); `cd alltra-lifi-settlement && forge test && npm run test:e2e -- --forceExit` |
| **Quick wins (code)** | Add progress indicators to scripts; add `--dry-run` to scripts that lack it; extend config validation (see [IMPLEMENTATION_CHECKLIST](../10-best-practices/IMPLEMENTATION_CHECKLIST.md)) |
| **Quick wins (code)** | Canonical wrapper-script quick wins are complete in this workspace: progress/timing, `--json-out` summaries, and stricter arg validation are in place on the main runners. Use [REPO_LOCAL_RECOMMENDATIONS_STATUS.md](REPO_LOCAL_RECOMMENDATIONS_STATUS.md) to distinguish remaining operator/external work from future maintenance. |
| **Placeholders (code)** | All done or documented — see [REQUIRED_FIXES_UPDATES_GAPS](../REQUIRED_FIXES_UPDATES_GAPS.md) §4 (canonical addresses, AlltraAdapter setBridgeFee, smart accounts env, quote FABRIC_CHAIN_ID, .bak BAK_FILES_DEPRECATION). |
| **API keys** | Sign up at URLs in [reports/API_KEYS_REQUIRED.md](../../reports/API_KEYS_REQUIRED.md); add any new keys to `.env` |

View File

@@ -1,11 +1,12 @@
# Next Steps — Index
**Last Updated:** 2026-03-28
**Last Updated:** 2026-04-23
**Purpose:** Single entry point for "what to do next." Pick by audience and granularity.
**Latest automation run (2026-03-28):** `./scripts/run-completable-tasks-from-anywhere.sh` completed (config validation, 61/61 on-chain, validation, reconcile print). `./scripts/run-all-operator-tasks-from-lan.sh --skip-backup` completed (NPMplus 40 hosts updated, Blockscout verification batch submitted). **Besu node lists:** push canonical `config/besu-node-lists/*` with `bash scripts/deploy-besu-node-lists-to-all.sh`; reload with `bash scripts/besu/restart-besu-reload-node-lists.sh` during a maintenance window if peers do not pick up static nodes without restart.
**Latest automation run (2026-04-23):** `./scripts/run-completable-tasks-from-anywhere.sh --dry-run --json-out reports/status/run-completable-tasks-latest.json` completed and `bash scripts/verify/run-all-validation.sh --skip-genesis --json-out reports/status/run-all-validation-latest.json` passed, refreshing the current 61/61 on-chain-aware no-LAN flow plus advisory Solana/Tron/XRPL status. `./scripts/run-all-operator-tasks-from-lan.sh --skip-backup` remains the LAN/operator follow-on when secrets and host access are available. **Besu node lists:** push canonical `config/besu-node-lists/*` with `bash scripts/deploy-besu-node-lists-to-all.sh`; reload with `bash scripts/besu/restart-besu-reload-node-lists.sh` during a maintenance window if peers do not pick up static nodes without restart.
**Documentation index:** [../MASTER_INDEX.md](../MASTER_INDEX.md) — canonical docs, deprecated list, and navigation.
**Repo-local recommendation tracker:** [REPO_LOCAL_RECOMMENDATIONS_STATUS.md](REPO_LOCAL_RECOMMENDATIONS_STATUS.md) — current slice of recommendations that can be advanced directly in this workspace.
**Continue and complete (operator/LAN):** (1) `./scripts/run-completable-tasks-from-anywhere.sh` then (2) `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if `NPM_PASSWORD` not set). Operator scripts load dotenv automatically.
@@ -15,7 +16,7 @@
| # | Action | Command / doc | Status |
|---|--------|----------------|--------|
| 1 | From anywhere: config + on-chain + validation | `./scripts/run-completable-tasks-from-anywhere.sh` | Done 2026-03-02 |
| 1 | From anywhere: config + on-chain + validation | `./scripts/run-completable-tasks-from-anywhere.sh [--json-out reports/status/run-completable-tasks-latest.json]` | Done 2026-04-23 |
| 2 | Before Chain 138 deploy: preflight (RPC, dotenv, nonce, cost) | `./scripts/deployment/preflight-chain138-deploy.sh [--cost]` | Done 2026-03-02 |
| 3 | **Chain 138 next steps (all in one):** preflight → mirror+pool → register c* as GRU → verify | `./scripts/deployment/run-all-next-steps-chain138.sh [--dry-run] [--skip-mirror] [--skip-register-gru] [--skip-verify]` | Done 2026-03-02 |
| 4 | Full deployment order (Phase 06) | [DEPLOYMENT_ORDER_OF_OPERATIONS.md](../03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md) | Remaining (Operator) |

View File

@@ -243,7 +243,7 @@ From **LAN** (SSH to Proxmox + reach NPMplus):
## After running "complete all next steps"
1. **Automated (workspace):** `bash scripts/run-all-next-steps.sh` — report in `docs/04-configuration/verification-evidence/NEXT_STEPS_RUN_*.md`.
2. **Validators + tx-pool:** `bash scripts/fix-all-validators-and-txpool.sh` (requires SSH to .10, .11).
2. **Validators + tx-pool:** `bash scripts/fix-all-validators-and-txpool.sh` then `bash scripts/maintenance/apply-chain138-strict-future-tx-pool.sh` then `bash scripts/clear-all-transaction-pools.sh` (requires SSH to .11, .12, .13, .14).
3. **Flush stuck tx (if any):** `bash scripts/flush-stuck-tx-rpc-and-validators.sh --full` (clears RPC 2101 + validators 10001004).
4. **Verify from LAN:** From a host on 192.168.11.x run `bash scripts/monitoring/monitor-blockchain-health.sh` and `bash scripts/skip-stuck-transactions.sh`. See [NEXT_STEPS_COMPLETION_RUN_20260208.md](../04-configuration/verification-evidence/NEXT_STEPS_COMPLETION_RUN_20260208.md) § Verify from LAN.

View File

@@ -19,6 +19,7 @@
| **RPC_URL_138** (Chain 138 Core) | Deploy, verify, on-chain check | e.g. `http://192.168.11.211:8545` in `.env` |
| **NPM_PASSWORD** | NPMplus backup, proxy host updates (502 fix) | `smom-dbis-138/.env` or root `.env`; from NPMplus UI |
| **SSH to Proxmox** (e.g. root@192.168.11.10) | run-all-maintenance-via-proxmox-ssh, VM/CT creation, token-aggregation fix | SSH key or password to Proxmox host |
| **SSH to dev VM** (CT 5700, `192.168.11.59`) | Gitea runner, `phoenix-deploy-api`, remote operator / automation (e.g. Devin) | LAN, VPN, UDM `76.53.10.40:22` allowlist, or [Cloudflare Tunnel + Access](../04-configuration/DEV_VM_SSH_REMOTE_ACCESS.md) |
| **LINK** (on Chain 138 for bridge) | sendCrossChain (real); CCIP fees | Deployer wallet must hold LINK and approve bridge |
| **Native gas (ETH/138)** | All Chain 138 deploys and txs | Deployer `0x4A66...` funded on 138 |
| **Per-chain RPC + gas (Celo, Wemix, Gnosis)** | CCIP bridges deploy | CELO ~0.1, WEMIX ~0.4; RPC URLs in .env |

View File

@@ -0,0 +1,80 @@
# Operator Handoff — 2026-04-24
Purpose: concise handoff for the Chain 138 Besu hardening, repo cleanup, and Git/Gitea recovery work completed on 2026-04-24.
## What changed
- Chain 138 block production and validator peer health were restored and hardened.
- Strict future-txpool handling is now part of the standard incident path.
- Duplicate legacy Besu RPC CTs were first retired, then destroyed after the canonical fleet was verified healthy.
- Besu inventory was reconciled across all 5 Proxmox nodes, including `r630-03` and `r630-04`.
- `1509` and `1510` were promoted into the canonical Besu inventory and checked-in allowlists/templates.
- A cluster-wide Besu inventory audit was added so host-placement ambiguity is caught mechanically.
- Surgical repo cleanup was completed, nested repos were cleaned and pushed, and the parent repo was reconciled across Gitea and GitHub.
- `gitea.d-bis.org` TLS was repaired after an expired certificate blocked HTTPS pushes.
## Current live status
As of the final 2026-04-24 checks:
- `bash scripts/monitoring/monitor-blockchain-health.sh`
- block production active
- all 5 validators active
- RPC peer count healthy
- global txpool empty
- overall status `HEALTHY`
- `bash scripts/verify/check-cluster-besu-inventory.sh --json`
- all 5 Proxmox nodes online
- `missing_canonical_vmids = []`
- `unexpected_besu_resources = []`
## Canonical Chain 138 incident sequence
Use this exact sequence when block production stalls, pending hashes keep reappearing, or future-nonce residue survives a normal txpool clear:
```bash
bash scripts/fix-all-validators-and-txpool.sh
bash scripts/maintenance/apply-chain138-strict-future-tx-pool.sh
bash scripts/clear-all-transaction-pools.sh
bash scripts/monitoring/monitor-blockchain-health.sh
```
## Gitea TLS follow-up
The immediate HTTPS push blocker was an expired certificate on `gitea.d-bis.org`. The certificate was renewed and reattached through NPMplus #4, and the endpoint now verifies cleanly again.
Root cause of the short warning window: the live NPMplus certbot renewal config for `npm-7` included `required_profile = shortlived`, which forced a 7-day Let's Encrypt certificate instead of the normal 90-day issuance.
That live config was corrected on 2026-04-24 and `gitea.d-bis.org` was reissued successfully. The current live certificate now expires on `2026-07-24`.
Use this to check expiry before it becomes an outage:
```bash
bash scripts/verify/check-gitea-certificate-expiry.sh
WARN_DAYS=30 bash scripts/verify/check-gitea-certificate-expiry.sh
bash scripts/maintenance/schedule-gitea-cert-check-cron.sh --install
```
## Checkpoint commits
Key parent-repo commits in the final reconciliation chain:
- `a4738c1` merge of `gitea/master` into cleaned local `master`
- `c23fdf4` explorer submodule alignment to a remote-backed commit
- `7e2d9c5` the-order hook fix pointer update
- `a1eacd3` duplicate Besu CT destruction + cluster inventory audit
- `780648a` thirdweb sentries added to checked-in allowlists/templates
- `219247b` Besu verifier gaps and monitor noise cleanup
Key nested-repo commits:
- `cross-chain-pmm-lps` `1cf845c`
- `explorer-monorepo` remote already contained the equivalent live deploy workflow
- `smom-dbis-138` `f3d2961`
- `the-order` `702a836`
## Recommended operator habits
- Run `bash scripts/verify/check-cluster-besu-inventory.sh --json` after major topology or host-placement changes.
- Run `bash scripts/verify/check-gitea-certificate-expiry.sh` periodically or wire it into a cron/monitoring path.
- Keep parent-repo submodule pointer pushes behind successful child-repo pushes so no local-only hashes leak into the parent history.

View File

@@ -1,6 +1,6 @@
# Operator Ready Checklist — Copy-Paste Commands
**Last Updated:** 2026-03-28
**Last Updated:** 2026-04-22
**Purpose:** Single page with exact commands to complete every pending todo. Run from **repo root** on a host with **LAN** access (and `smom-dbis-138/.env` with `PRIVATE_KEY`, `NPM_PASSWORD` where noted).
**Do you have all necessary creds?** See [OPERATOR_CREDENTIALS_CHECKLIST.md](OPERATOR_CREDENTIALS_CHECKLIST.md) — per-task list of LAN, PRIVATE_KEY, NPM_PASSWORD, RPC_URL_138, SSH, LINK, gas, token balance.
@@ -15,6 +15,10 @@
**Current live execution path:** [LIVE_SESSION_CRONOS_AND_TIER1_PHASE_C.md](../03-deployment/LIVE_SESSION_CRONOS_AND_TIER1_PHASE_C.md) — close Cronos config + LINK, then activate Tier 1 Phase C on Gnosis, Polygon, and BSC. **Current priority docs:** [FULLY_OPERATIONAL_EXECUTION_CHECKLIST.md](FULLY_OPERATIONAL_EXECUTION_CHECKLIST.md), [PHASE_C_PROFIT_FIRST_PRIORITY.md](../03-deployment/PHASE_C_PROFIT_FIRST_PRIORITY.md), [PHASE_C_TIER1_EXECUTION_TASK_SHEET.md](../03-deployment/PHASE_C_TIER1_EXECUTION_TASK_SHEET.md).
**Chain 138 txpool incident standard path:** `bash scripts/fix-all-validators-and-txpool.sh` then `bash scripts/maintenance/apply-chain138-strict-future-tx-pool.sh` then `bash scripts/clear-all-transaction-pools.sh` then `bash scripts/monitoring/monitor-blockchain-health.sh`. Use this sequence when block production stalls, pending hashes keep reappearing, or future-nonce residue survives a normal txpool clear.
**Gitea HTTPS push safeguard:** `bash scripts/verify/check-gitea-certificate-expiry.sh` (optional: `WARN_DAYS=30 bash scripts/verify/check-gitea-certificate-expiry.sh`). Use this when Git over HTTPS starts failing, or run it proactively before major push/deploy windows. To keep it checked automatically: `bash scripts/maintenance/schedule-gitea-cert-check-cron.sh --install`.
---
## Completed in this session (2026-03-26)
@@ -106,6 +110,20 @@ Single contract retry: `./scripts/verify/run-contract-verification-with-proxy.sh
---
## 4b. LAN: Proxmox fleet vzdump, retention, cluster check
**Ref:** [STORAGE_GROWTH_AND_HEALTH.md](../04-configuration/STORAGE_GROWTH_AND_HEALTH.md)
- **Check corosync / nodes after any `pve-cluster` change:**
`./scripts/maintenance/verify-pve-cluster-health.sh`
Expect: **Quorate: Yes** and all expected nodes **online** in the JSON.
- **Deploy weekly vzdump file retention (all PVE nodes):**
`./scripts/maintenance/deploy-vzdump-prune-cron-to-proxmox-nodes.sh` (optional `--dry-run`). **Env:** `VZDUMP_PRUNE_KEEP=2` (default) when re-deploying.
- **R630-01 daily all-running-CT backup** lives on the node as **`/usr/local/bin/proxmox-backup.sh`**, sourced from the repo: **`scripts/maintenance/proxmox-backup-all-running-ct.sh`**. Re-install after editing: `scp` + `chmod 755` (see file header for cron and **`VZDUMP_SKIP_VMIDS`** / **`VZDUMP_COMPRESS`**).
- **Stuck `vzdump` or snap:** stop via **Proxmox UI task stop** if possible. If a **`task` worker** blocks **`/etc/pve`**, only then consider **`systemctl restart pve-cluster`** on that node, then re-run `verify-pve-cluster-health.sh`.
---
## 5. LAN: Run all operator tasks (backup + verify ± deploy ± create-vms)
```bash
@@ -276,7 +294,7 @@ This is intentionally deferred with the rest of the Wemix path. If the chain is
---
## 10. DBIS Chain 138 — phased production path (matrix-driven)
## 10. DeFi Oracle Meta Mainnet (Chain 138) — phased production path (matrix-driven)
**Ref:** [dbis_chain_138_technical_master_plan.md](../../dbis_chain_138_technical_master_plan.md), [DBIS_NODE_ROLE_MATRIX.md](../02-architecture/DBIS_NODE_ROLE_MATRIX.md)

View File

@@ -75,8 +75,8 @@
| GET /health | ✅ Implemented | Returns { status, service } |
| Gitea commit status | ✅ Implemented | pending/success/failure via GITEA_TOKEN |
| HMAC webhook validation | ✅ Done | server.js: HMAC-SHA256 of raw body vs X-Gitea-Signature |
| Deploy completion callback | ✅ Done (stub) | setGiteaCommitStatus success on /api/deploy accept; replace when real deploy runs |
| Full deploy logic (Proxmox SSH) | ⏳ Planned | Next step doc |
| Deploy completion callback | ✅ Done | success/failure posted after real target command and optional health check |
| Full deploy logic (Proxmox SSH / target commands) | ✅ Done | `phoenix-deploy-api` resolves `deploy-targets.json` and executes mapped commands |
| Sankofa Phoenix API (VMID 8600) integration | ⏳ Planned | Next step doc |
### OMNL Fineract API (omnl.hybxfinance.io)
@@ -118,7 +118,7 @@
## Completed in this pass (2026-02-10 / 2026-02-11)
- **Phoenix Deploy API:** HMAC-SHA256 webhook validation (X-Gitea-Signature); deploy completion callback (stub reports success). Full deploy logic and Sankofa integration remain planned.
- **Phoenix Deploy API:** HMAC-SHA256 webhook validation (X-Gitea-Signature); real target execution via `deploy-targets.json`; commit status updated after deploy success/failure; Sankofa API integration still planned.
- **OMNL:** GL accounts (1000, 1050, 2000, 2100, 3000) created via `omnl-gl-accounts-create.sh`; ledger allocation T-001T-008 posted via `omnl-ledger-post.sh`; discovery via `omnl-discovery.sh`; single-deposit helper `omnl-deposit-one.sh` (bulk = loop over discovery/CSV). See `scripts/omnl/README.md` and verification-evidence/OMNL_SCRIPTS_RUN_20260211.md.
**Still require operator/LAN/creds or external systems:** W0 (NPMplus, sendCrossChain, backup), Mifos 5800 access, Explorer DB, W2/W3 deploy, dbis_core TS bulk fix.

View File

@@ -24,7 +24,7 @@
| Question | Answer |
|----------|--------|
| **What is it?** | Chain 138 (Defi Oracle Meta Mainnet) added to Ledger Lives supported networks so users see balances and send/receive on 138 in the app. |
| **What is it?** | Chain 138 (DeFi Oracle Meta Mainnet) added to Ledger Lives supported networks so users see balances and send/receive on 138 in the app. |
| **Prerequisites** | Form already submitted (Tally). Nothing else you can do until Ledger replies. |
| **Who** | You (point of contact). After Ledger responds, you or dev follow their 8-step process. |
| **Steps to complete** | 1. **Now:** Wait for Ledgers reply to the Tally form. 2. **When they reply:** Sign any agreement they send; follow their “Adding your blockchain to Ledger Wallet” steps (currency registration, device app, explorer, etc.). 3. **If they ask for PR/code:** Push materials from `~/projects/LedgerLive`, share link. 4. **After chain is live in Ledger Live:** Run Step 8 manual test plan (sync, receive, balance, broadcast) from `~/projects/LedgerLive/step-08-manual-tests/test-plan.md`. |

View File

@@ -0,0 +1,70 @@
# Repo-Local Recommendations Status
**Purpose:** Track the recommendations that can be advanced directly in this repo without requiring LAN-only access, private credentials, or third-party approvals.
**Canonical sources:** [ALL_RECOMMENDATIONS_AND_IMPROVEMENTS_LIST.md](ALL_RECOMMENDATIONS_AND_IMPROVEMENTS_LIST.md), [ADDITIONAL_RECOMMENDATIONS_TABLE.md](ADDITIONAL_RECOMMENDATIONS_TABLE.md), [RECOMMENDATIONS_AND_SUGGESTIONS.md](../10-best-practices/RECOMMENDATIONS_AND_SUGGESTIONS.md).
**Interpretation rule:** This page is only for **repo-local execution**. Operator/LAN tasks and external/vendor tasks stay in their own runbooks and checklists.
---
## Recently advanced in this workspace
| Area | Recommendation thread | Repo-local progress |
|---|---|---|
| Script UX | Progress indicators / execution visibility | `scripts/run-completable-tasks-from-anywhere.sh` and `scripts/verify/run-all-validation.sh` now print start time, per-step timing, and total elapsed time. |
| Metrics collection | Machine-readable run summaries | `scripts/lib/run-summary.sh` now backs optional `--json-out` summaries for the two main no-LAN runners, writing per-step status/timing JSON under `reports/status/` when requested. |
| Wrapper consistency | Shared summary coverage on orchestration entry points | The E2E, Chain 138 next-steps, and LAN operator wrappers now also expose optional `--json-out` summaries using the same shared helper. |
| Monitoring / health checks | Public non-EVM reachability + lane status | Added `scripts/verify/check-non-evm-network-health.sh`, `scripts/verify/build-non-evm-lane-status.py`, and generated outputs under `reports/status/`. |
| Documentation accuracy | Keep docs aligned with current runner behavior | Stale `Step 1/44/4` references were refreshed to the current five-step runner behavior. |
| Documentation discoverability | Cross-links from canonical entry points | Added non-EVM health/lane references to `MASTER_INDEX.md`, `NEXT_STEPS_INDEX.md`, and `scripts/verify/README.md`. |
---
## Repo-local recommendation buckets
### 1. In progress now
| Recommendation | Status | Current repo state |
|---|---|---|
| Progress indicators in scripts | Completed for canonical high-use wrappers | Main no-LAN runners plus the E2E, Chain 138 orchestration, and LAN operator wrappers now show clear execution progress and timing. |
| Improve troubleshooting and quick-reference discoverability | Advanced | Existing quick-reference and troubleshooting docs are present; index coverage is being improved incrementally instead of creating duplicates. |
| Script header consistency | Partially addressed | New scripts follow the header pattern; older scripts still vary. Use [SCRIPT_HEADER_TEMPLATE.md](../10-best-practices/SCRIPT_HEADER_TEMPLATE.md) when touching them. |
| Documentation accuracy review | Ongoing | Current pass fixed runner-step drift and added new reference links; broader stale-status review remains ongoing. |
### 2. Ready for more repo-local work
| Recommendation | Why it is still repo-local | Suggested next move |
|---|---|---|
| Script header/template normalization | Completed for touched canonical wrappers | High-use wrapper scripts edited in this pass now follow the current header/help/argument-validation pattern. |
| Input validation in scripts | Completed for touched canonical wrappers | The main wrapper scripts now reject unknown args and validate `--wave` / `--json-out` input rather than silently accepting drift. |
| Structured logging for scripts | Advanced | Shared timing/summary behavior is centralized in `scripts/lib/run-summary.sh`; deeper log-level normalization outside the canonical wrappers is no longer part of the active repo-local backlog. |
| Developer documentation / standards | Completed for current canonical flows | Canonical docs now reflect current five-step/no-LAN flow, current 61-address on-chain checks, and summary JSON support. |
| Metrics collection for script execution | Completed for canonical wrappers | Main no-LAN, E2E, Chain 138, and LAN operator wrappers now support optional `--json-out` summaries with per-step status/timing. |
### 3. Not repo-local in this workspace
| Recommendation | Reason |
|---|---|
| Blockscout verification settlement, Proxmox firewall changes, SSH hardening, validator key permissions | Requires LAN/host access and sometimes secrets. |
| CoinGecko / CMC / Ledger / Trust Wallet / Consensys / Chainlist submissions | Requires external accounts, outreach, or third-party review. |
| Real bridge sends, operator backups, Proxmox VM provisioning | Requires private keys, LAN, or live infrastructure changes. |
---
## Current repo-local completion state
The currently identified **repo-local** recommendation backlog in the canonical trackers has been advanced to completion for the main wrapper scripts, validation runners, and index docs. What remains is either:
1. operator/LAN execution,
2. secrets-required live actions,
3. third-party/vendor follow-through,
4. or future maintenance when script behavior changes again.
---
## Pointers
- For **all** recommendations: [ALL_RECOMMENDATIONS_AND_IMPROVEMENTS_LIST.md](ALL_RECOMMENDATIONS_AND_IMPROVEMENTS_LIST.md)
- For **operator / LAN** actions: [RECOMMENDATIONS_OPERATOR_CHECKLIST.md](RECOMMENDATIONS_OPERATOR_CHECKLIST.md)
- For **next-step routing**: [NEXT_STEPS_INDEX.md](NEXT_STEPS_INDEX.md)

View File

@@ -52,6 +52,16 @@ git remote add origin https://gitea.d-bis.org/d-bis/explorer-monorepo.git
---
## atomic-swap-dapp bootstrap remote
`atomic-swap-dapp` was scaffolded first as a standalone local repository and then mounted into the parent as a submodule. Its current `.gitmodules` URL may point at a local bare repository during bootstrap.
That is acceptable for initial local development, but before other operators rely on the parent repo for cloning, replace the local URL with the canonical hosted remote and then commit the updated `.gitmodules` plus submodule pointer.
See [ATOMIC_SWAP_DAPP_SUBMODULE.md](../03-deployment/ATOMIC_SWAP_DAPP_SUBMODULE.md) for the submodule purpose and manifest-sync workflow.
---
## gru-docs branch
`gru-docs` may track **`docs-review-fixes`** (not `main`) while documentation review is open. The parent submodule pointer is intentional until upstream merges to `main` and the pointer is updated.

View File

@@ -2,7 +2,7 @@
> Historical note (2026-03-26): this report preserves an earlier PMM status snapshot. The current canonical Chain 138 PMM stack is `DODOPMMIntegration=0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` and `DODOPMMProvider=0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381`.
**Date:** 2026-03-02
**Date:** 2026-03-02 (counts refreshed 2026-04-21 for on-chain list)
**Purpose:** For each remaining task, verify current state before marking complete or executing. Use this report to decide what still needs to be run by Operator/LAN vs what is already satisfied.
---
@@ -11,7 +11,7 @@
| Check | Result |
|-------|--------|
| **run-completable-tasks-from-anywhere.sh** | Passed — config OK, 59/59 on-chain (Chain 138), validation OK, reconcile-env printed |
| **run-completable-tasks-from-anywhere.sh** | Passed — config OK, 61/61 on-chain (Chain 138; per `check-contracts-on-chain-138.sh`), validation OK, reconcile-env printed |
| **preflight-chain138-deploy.sh** | Passed — dotenv exists, RPC Core (chainId 138), nonce consistent, no stuck txs |
---
@@ -23,7 +23,7 @@
| Item | Status | Notes |
|------|--------|-------|
| Phase 0 (prereqs) | Satisfied | Preflight passed; .env and RPC OK |
| Phase 1 (Chain 138 core) | Done | 59/59 contracts present |
| Phase 1 (Chain 138 core) | Done | 61/61 contracts present (current address list in check-contracts-on-chain-138.sh) |
| Phase 2 (TransactionMirror + PMM pools) | Done | Mirror deployed; all three pools created (cUSDT/cUSDC, cUSDT/USDT, cUSDC/USDC) |
| Phase 3 (Liquidity + DODOPMMProvider) | Partially done | DODOPMMProvider deployed at `0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381`; corrected canonical stack aligned. **Remaining:** add liquidity (optional per doc) via `AddLiquidityPMMPoolsChain138.s.sol` or cast |
| Phase 46 | Not run | Optional / other chains; Operator |

View File

@@ -1,16 +1,18 @@
# TODOs — Consolidated Task List
**Last Updated:** 2026-03-28
**Last Updated:** 2026-04-23
**Last verification run:** 2026-03-28 — completable ✅ (61/61 on-chain), operator `--skip-backup` ✅ (NPMplus 40 hosts updated, Blockscout verify batch). Prior 2026-03-06 run: validate-config ✅, check-contracts, PMM pool balances ✅ (Pool 1: 2M/2M), preflight ✅, token-aggregation build ✅, E2E routing ✅ (37 domains, 0 failed). **Mint + add-liquidity** 2026-03-06: 1M each minted, 500k each added. **Next-steps check:** [NEXT_STEPS_LIST.md](NEXT_STEPS_LIST.md); B.1/B.2/B.3 partially blocked (WEMIX tabled; LINK relay runbook pending).
**Purpose:** Single checklist of all next steps and remaining tasks. **Indonesia / HYBX-BATCH-001 zip (4.995 ship-ready):** [HYBX-BATCH-001 — transaction package ship-ready](#hybx-batch-001--transaction-package-ship-ready-4995) below. **Full execution order (multiple routes + liquidity):** [EXECUTION_CHECKLIST_MULTIPLE_ROUTES_AND_LIQUIDITY.md](EXECUTION_CHECKLIST_MULTIPLE_ROUTES_AND_LIQUIDITY.md). **Additional paths (registry, LiFi/Jumper, Etherlink, 13×13):** [ADDITIONAL_PATHS_AND_EXTENSIONS.md](../04-configuration/ADDITIONAL_PATHS_AND_EXTENSIONS.md). **Dotenv/markdown audit (required info, gaps, recommendations):** [DOTENV_AND_MARKDOWN_AUDIT_GAPS_AND_RECOMMENDATIONS.md](DOTENV_AND_MARKDOWN_AUDIT_GAPS_AND_RECOMMENDATIONS.md). Source of truth for the full list: [NEXT_STEPS_AND_REMAINING_TODOS.md](NEXT_STEPS_AND_REMAINING_TODOS.md). **Token deployments remaining:** [TOKEN_CONTRACT_DEPLOYMENTS_REMAINING.md](../11-references/TOKEN_CONTRACT_DEPLOYMENTS_REMAINING.md). **Routing / swap / cross-chain:** [TASKS_ROUTING_SWAP_CROSSCHAIN.md](TASKS_ROUTING_SWAP_CROSSCHAIN.md) (A1A5, B1B8, C1C8, D1D3, E1E2). **Verified list (LAN/Operator):** [REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md](REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md) — run bash/curl to confirm; doc updated 2026-03-03.
**Quick run:** From anywhere (no LAN): `./scripts/run-completable-tasks-from-anywhere.sh`. Before Chain 138 deploy: `./scripts/deployment/preflight-chain138-deploy.sh [--cost]`. **Chain 138 next steps (all in one):** `./scripts/deployment/run-all-next-steps-chain138.sh [--dry-run] [--skip-mirror] [--skip-register-gru] [--skip-verify]` — preflight → mirror+pool → register c* as GRU → verify. From LAN with secrets: `./scripts/run-all-operator-tasks-from-lan.sh [--deploy] [--create-vms]`. **E2E flows (full parallel):** `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run]` — [TASKS_TO_INCREASE_ALL_E2E_FLOWS](TASKS_TO_INCREASE_ALL_E2E_FLOWS.md).
**Quick run:** From anywhere (no LAN): `./scripts/run-completable-tasks-from-anywhere.sh [--json-out reports/status/run-completable-tasks-latest.json]`. Before Chain 138 deploy: `./scripts/deployment/preflight-chain138-deploy.sh [--cost]`. **Chain 138 next steps (all in one):** `./scripts/deployment/run-all-next-steps-chain138.sh [--dry-run] [--skip-mirror] [--skip-register-gru] [--skip-verify] [--json-out reports/status/run-all-next-steps-chain138-latest.json]` — preflight → mirror+pool → register c* as GRU → verify. From LAN with secrets: `./scripts/run-all-operator-tasks-from-lan.sh [--deploy] [--create-vms] [--json-out reports/status/run-all-operator-tasks-latest.json]`. **E2E flows (full parallel):** `./scripts/run-e2e-flow-tasks-full-parallel.sh [--dry-run] [--json-out reports/status/run-e2e-flow-tasks-latest.json]` — [TASKS_TO_INCREASE_ALL_E2E_FLOWS](TASKS_TO_INCREASE_ALL_E2E_FLOWS.md).
**Full deployment order:** [DEPLOYMENT_ORDER_OF_OPERATIONS.md](../03-deployment/DEPLOYMENT_ORDER_OF_OPERATIONS.md) — Phase 06. **Remaining for full network coverage:** [REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md](../03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md) — A: mint + add liquidity (138) → BD. **Status to continue (before Phase A mint):** [REMAINING_DEPLOYMENTS § Status to continue](../03-deployment/REMAINING_DEPLOYMENTS_FOR_FULL_NETWORK_COVERAGE.md) and [CORE_RPC_2101_2102_TXPOOL_ADMIN_STATUS §7](../04-configuration/CORE_RPC_2101_2102_TXPOOL_ADMIN_STATUS.md) — restart validator 1004, clear tx pool, then mint. **Phase execution 2026-03-04:** A.1 attempted (tx timeout); A.2 pending; B.1 Celo ✅; B.2 Wemix blocked; B.3 fund-ccip ready; Phase C/D runbooks. **Full plan:** [COMPLETE_REQUIRED_OPTIONAL_RECOMMENDED_INDEX.md](COMPLETE_REQUIRED_OPTIONAL_RECOMMENDED_INDEX.md).
**Last completable run (2026-03-02):** Config validation OK; on-chain 59/59; run-all-validation --skip-genesis OK; reconcile-env. **Preflight** and **run-all-next-steps-chain138.sh** run: preflight passed; mirror/pool present; 12 c* already GRU-registered; verification 59/59. Documentation: MASTER_INDEX, README, RUNBOOKS_MASTER_INDEX created; deprecated list and consolidation plan updated. Progress indicators (Step 1/44/4) in run-completable-tasks-from-anywhere.sh. E2E flow tasks script and doc updates (ADDRESS_MATRIX_AND_STATUS, RECOMMENDATIONS R2, NEXT_STEPS_FOR_YOU) completed. **Optional completed (2026-02-27 / 2026-03-01):** DeployCompliantFiatTokens (10 tokens); Blockscout verification; MCP allowlist-138; add-liquidity runbook; token-aggregation fallbacks + ENV_EXAMPLE_CONTENT; E2E routing verification; PMM_DEX_ROUTING_STATUS + REQUIRED_FIXES_AND_DEPLOYMENTS_STATUS updated; cCADT line (commented) in DeployCompliantFiatTokens.s.sol. **Within-scope list (2026-02-27):** CompliantWrappedToken.sol; DeployCompliantFiatTokensForChain.s.sol (c* any chain); DeployCWTokens.s.sol (cWUSDT/cWUSDC); deploy-tokens-and-weth-all-chains-skip-canonical.sh extended with --deploy-c, --deploy-cw, 651940 env validation; TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS §6 implemented; ENV_EXAMPLE_CONTENT c*/cW*/651940 vars. **2026-02-27:** Deployment order doc, preflight script, deployment safety added; todos synced.
**Latest repo-local automation refresh (2026-04-23):** `run-all-validation.sh --skip-genesis --json-out reports/status/run-all-validation-latest.json` passed; advisory non-EVM reachability refreshed (Solana slot 415173228, Tron block 82099136 / chain id 728126428, XRPL validated ledger 103760578). The canonical wrapper scripts now support optional machine-readable run summaries via `--json-out`: `run-completable-tasks-from-anywhere.sh`, `run-e2e-flow-tasks-full-parallel.sh`, `run-all-next-steps-chain138.sh`, and `run-all-operator-tasks-from-lan.sh`.
**Verified (LAN/Operator) 2026-03-06:** Preflight ✅; Core RPC 192.168.11.211:8545 ✅; deployer balance script ✅ (native ETH OK; WETH/cUSDT/cUSDC = 0 → add liquidity blocked); on-chain 59/59 ✅; config validation ✅; token-aggregation build ✅; E2E 502s fixed (address-all-remaining-502s + NPM; E2E 37 domains 0 failed); operator script run ✅ (NPMplus RPC fix, Blockscout verify). **Earlier:** 2026-03-0304 deployer balance, on-chain, DODOPMMIntegration canonical cUSDT/cUSDC — [EXPLORER_TOKEN_LIST_CROSSCHECK](../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) §8.
**Last completable run (current canonical flow):** Config validation OK; on-chain 61/61; run-all-validation --skip-genesis OK; non-EVM status refresh OK; reconcile-env. **Preflight** and **run-all-next-steps-chain138.sh** run: preflight passed; mirror/pool present; 12 c* already GRU-registered; verification 61/61. Documentation: MASTER_INDEX, README, RUNBOOKS_MASTER_INDEX created; deprecated list and consolidation plan updated. Progress indicators and summary JSON support were added across the canonical wrapper scripts. **Optional completed (2026-02-27 / 2026-03-01):** DeployCompliantFiatTokens (10 tokens); Blockscout verification; MCP allowlist-138; add-liquidity runbook; token-aggregation fallbacks + ENV_EXAMPLE_CONTENT; E2E routing verification; PMM_DEX_ROUTING_STATUS + REQUIRED_FIXES_AND_DEPLOYMENTS_STATUS updated; cCADT line (commented) in DeployCompliantFiatTokens.s.sol. **Within-scope list (2026-02-27):** CompliantWrappedToken.sol; DeployCompliantFiatTokensForChain.s.sol (c* any chain); DeployCWTokens.s.sol (cWUSDT/cWUSDC); deploy-tokens-and-weth-all-chains-skip-canonical.sh extended with --deploy-c, --deploy-cw, 651940 env validation; TOKENS_DEPLOYER_DEPLOYED_ON_OTHER_CHAINS §6 implemented; ENV_EXAMPLE_CONTENT c*/cW*/651940 vars. **2026-02-27:** Deployment order doc, preflight script, deployment safety added; todos synced.
**Verified (LAN/Operator) 2026-03-06:** Preflight ✅; Core RPC 192.168.11.211:8545 ✅; deployer balance script ✅ (native ETH OK; WETH/cUSDT/cUSDC = 0 → add liquidity blocked); on-chain 59/59 at the time ✅; config validation ✅; token-aggregation build ✅; E2E 502s fixed (address-all-remaining-502s + NPM; E2E 37 domains 0 failed); operator script run ✅ (NPMplus RPC fix, Blockscout verify). **Current canonical on-chain check:** 61/61. **Earlier:** 2026-03-0304 deployer balance, on-chain, DODOPMMIntegration canonical cUSDT/cUSDC — [EXPLORER_TOKEN_LIST_CROSSCHECK](../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) §8.
**Operator copy-paste commands:** [OPERATOR_READY_CHECKLIST.md](OPERATOR_READY_CHECKLIST.md) — one page with exact commands for every pending todo.
@@ -65,7 +67,7 @@
## First (before any Chain 138 deploy)
Verified 2026-03-06: preflight ✅, 0a balance check ✅ (script runs; WETH/cUSDT/cUSDC = 0), config validation ✅, on-chain 59/59 . Re-run 0a/0/0c before each deploy.
Verified 2026-03-06: preflight ✅, 0a balance check ✅ (script runs; WETH/cUSDT/cUSDC = 0), config validation ✅, on-chain 59/59 at the time ✅. Current canonical on-chain check: 61/61. Re-run 0a/0/0c before each deploy.
| # | Task | Owner | Ref |
|---|------|--------|-----|

View File

@@ -177,7 +177,7 @@
## 12. DBIS RTGS / HYBX / Hyperledger E2E stack
**Purpose:** Track everything required for a true end-to-end RTGS stack across DBIS Chain 138, HYBX sidecars, OMNL / Fineract, and the external banking / interoperability integrations we currently have access to.
**Purpose:** Track everything required for a true end-to-end RTGS stack across DeFi Oracle Meta Mainnet (Chain 138), HYBX sidecars, OMNL / Fineract, and the external banking / interoperability integrations we currently have access to.
### 12.1 Participant / treasury / GL model

View File

@@ -22,7 +22,7 @@
2. Click network dropdown (top of MetaMask)
3. Click "Add Network" → "Add a network manually"
4. Enter the following:
- **Network Name**: `Defi Oracle Meta Mainnet` or `SMOM-DBIS-138`
- **Network Name**: `DeFi Oracle Meta Mainnet` or `SMOM-DBIS-138`
- **RPC URL**: `https://rpc-http-pub.d-bis.org` ⚠️ **Important: Must be public endpoint**
- **Chain ID**: `138` (must be decimal, not hex)
- **Currency Symbol**: `ETH`

View File

@@ -0,0 +1,147 @@
# Client And Division Terminology
**Last Updated:** 2026-04-22
**Status:** Canonical terminology baseline for Phoenix, Sankofa, and Gitea alignment
**Related:** [PUBLIC_SECTOR_TENANCY_MARKETPLACE_AND_DEPLOYMENT_BASELINE.md](PUBLIC_SECTOR_TENANCY_MARKETPLACE_AND_DEPLOYMENT_BASELINE.md), [EXPECTED_WEB_CONTENT.md](EXPECTED_WEB_CONTENT.md), [SERVICE_DESCRIPTIONS.md](SERVICE_DESCRIPTIONS.md), [../04-configuration/PHOENIX_DEPLOY_API_GITEA_INTEGRATION.md](../04-configuration/PHOENIX_DEPLOY_API_GITEA_INTEGRATION.md)
---
## Purpose
Define the canonical vocabulary for the **commercial / governance layer** and keep it distinct from:
- **technical tenancy**
- **identity provider terminology**
- **network / infrastructure placement terminology**
- **Mifos / Fineract business-model terminology**
Use these terms consistently in docs, APIs, config, and UI copy unless a client requires a more specific business label.
---
## Canonical mappings
| Canonical term | Equivalent / current implementation | Use |
|----------------|--------------------------------------|-----|
| **Client** | GitHub **Enterprise**; Azure **billing profile**; current Gitea **Organization** | Top-level commercial / governance account |
| **Division** | Client-specific subdivision | Generic umbrella term below Client |
| **Division type** | `realm`, `nexus`, `department`, `program`, `legal_entity`, `region`, `office`, `workspace`, etc. | Technical normalization of how a client structures divisions |
| **Tenant** | Phoenix / Kubernetes / app isolation unit | Technical tenancy only |
| **Site** | Proxmox / network / physical location | Infrastructure placement only |
**Rule:** when the repo needs a neutral term, prefer **Client** and **Division**.
---
## Current clients
These are the canonical Phoenix client records and should be treated as the top governance / commercial layer:
- `DBIS`
- `ICCC`
- `OMNL`
- `XOM`
- `AR`
- `EI`
- `PANDA`
- `SAID`
In current Gitea implementation, each of these maps to an **Organization**.
In Phoenix product language, each of these maps to a **Client**.
---
## Division model
Each client may implement subdivisions differently. Phoenix must remain flexible enough to support:
- business labels that are client-specific
- multiple subdivision types under one client
- optional mapping from business divisions to technical tenants
Recommended normalized model:
```text
Client
Division
Repository / App / Service / Workspace / Environment
```
Examples:
- `AR`
- divisions labeled **Realms**
- divisions labeled **Nexus**
- `OMNL`
- divisions labeled **legal entities**
- divisions labeled **programs**
- divisions labeled **regional offices**
- `DBIS`
- divisions labeled **departments**
- divisions labeled **member institutions**
- divisions labeled **programs**
---
## Reserved words and collision policy
The following words already carry specific meanings in the repo and should **not** be used as the global neutral replacement for Division.
| Term | Reserved meaning | Why it is not the generic business term |
|------|------------------|------------------------------------------|
| **Realm** | Keycloak / OIDC identity boundary; also AR-specific business label | Would collide with both identity and AR business language |
| **Tenant** | Technical isolation boundary in Phoenix / Kubernetes / app models | Already used for namespaces, RBAC, and multi-tenant platform semantics |
| **Site** | Physical / infrastructure placement (Proxmox, network, datacenter) | Already means location / topology |
| **Office** | Org-chart / Fineract / institutional office structure | Too domain-specific for use as the global subdivision primitive |
| **Nexus** | Sankofa / Phoenix branding and AR-specific division label | Strong branding meaning; not stable as a generic structural term |
---
## Implementation guidance
### Docs
- Use **Client** for the top account layer.
- Use **Division** when discussing subdivisions generically.
- Use the client-native label only when the business context needs it.
- Example: “AR division type: `realm`
- Example: “Keycloak realm”
### UI
- Internal platform/admin UI may display:
- `Client`
- `Division`
- Client-facing UI may replace `Division` with the clients native label.
- Example: `Realm`
- Example: `Program Office`
- Example: `Legal Entity`
### API / config
- Prefer normalized fields such as:
- `clientId`
- `divisionId`
- `divisionType`
- `tenantId`
- `siteId`
- Avoid overloading:
- `realm`
- `tenant`
- `site`
unless that exact platform-specific meaning is intended.
---
## Interpretation guide
When reading older docs in this repo:
- “organization” in Gitea context usually means **Client**
- “tenant” in Phoenix platform context usually means **technical tenant**, not client
- “realm” in identity docs means **Keycloak realm**
- “site” means **infrastructure location**
If a document mixes these layers, update it toward this terminology baseline.

View File

@@ -183,7 +183,7 @@ This document reconciles **expected intent**, **current deployment state**, and
## 8b. public-2138.defi-oracle.io & rpc.public-2138.defi-oracle.io (testnet)
**Role:** Public explorer UI and JSON-RPC for **Defi Oracle Meta Testnet** (chain ID **2138**, hex `0x85a`). Not the Chain 138 explorer (`explorer.d-bis.org`).
**Role:** Public explorer UI and JSON-RPC for **DeFi Oracle Meta Testnet** (chain ID **2138**, hex `0x85a`). Not the Chain 138 explorer (`explorer.d-bis.org`).
### Intended function
- Explorer: `https://public-2138.defi-oracle.io` (per `pr-workspace/chains/_data/chains/eip155-2138.json`)

View File

@@ -2,7 +2,7 @@
**Last Updated:** 2026-03-25
**Status:** Canonical baseline (reconciles assurance, Phoenix intent, and repo boundaries)
**Related:** [NON_GOALS.md](NON_GOALS.md), [EXPECTED_WEB_CONTENT.md](EXPECTED_WEB_CONTENT.md), [SERVICE_DESCRIPTIONS.md](SERVICE_DESCRIPTIONS.md), [BRAND_RELATIONSHIP.md](BRAND_RELATIONSHIP.md), [../11-references/COMPLETE_CREDENTIAL_EIDAS_PROGRAM_REPOS.md](../11-references/COMPLETE_CREDENTIAL_EIDAS_PROGRAM_REPOS.md), [config/public-sector-program-manifest.json](../../config/public-sector-program-manifest.json)
**Related:** [CLIENT_DIVISION_TERMINOLOGY.md](CLIENT_DIVISION_TERMINOLOGY.md), [NON_GOALS.md](NON_GOALS.md), [EXPECTED_WEB_CONTENT.md](EXPECTED_WEB_CONTENT.md), [SERVICE_DESCRIPTIONS.md](SERVICE_DESCRIPTIONS.md), [BRAND_RELATIONSHIP.md](BRAND_RELATIONSHIP.md), [../11-references/COMPLETE_CREDENTIAL_EIDAS_PROGRAM_REPOS.md](../11-references/COMPLETE_CREDENTIAL_EIDAS_PROGRAM_REPOS.md), [config/public-sector-program-manifest.json](../../config/public-sector-program-manifest.json)
---
@@ -30,6 +30,41 @@ It does **not** replace legal advice, DPIAs, or national eID supervision require
---
## Client and division terminology
For Phoenix and Sankofa architecture, the repo now uses the following canonical mapping:
| Canonical term | Equivalent |
|----------------|------------|
| **Client** | GitHub **Enterprise**; Azure **billing profile**; current Gitea **Organization** |
| **Division** | Flexible, client-specific subdivision under a Client |
| **Tenant** | Technical tenancy / isolation boundary only |
| **Site** | Physical or infrastructure placement only |
Current canonical clients:
- `DBIS`
- `ICCC`
- `OMNL`
- `XOM`
- `AR`
- `EI`
- `PANDA`
- `SAID`
Use **Division** as the neutral umbrella term below Client.
Reserve client-native labels such as **Realm** and **Nexus** for the specific client that uses them.
**Collision policy:**
- **Realm** is not the generic subdivision term because the repo already uses **Keycloak realm** semantics.
- **Tenant** is not the generic business term because Phoenix already uses it for technical isolation.
- **Site** is not the generic business term because Proxmox and network layers already use it for placement/topology.
See [CLIENT_DIVISION_TERMINOLOGY.md](CLIENT_DIVISION_TERMINOLOGY.md) for the full reserved-words policy and implementation guidance.
---
## Deployment profiles (flexibility bridge)
| Profile | Use when | Isolation |

View File

@@ -10,6 +10,7 @@ This directory contains core architecture and design documents.
## Documents
- **[CLIENT_DIVISION_TERMINOLOGY.md](CLIENT_DIVISION_TERMINOLOGY.md)** ⭐⭐⭐ - Canonical Phoenix / Sankofa / Gitea client and division terminology; reserved-word policy for `realm`, `tenant`, and `site`
- **[NETWORK_ARCHITECTURE.md](NETWORK_ARCHITECTURE.md)** ⭐⭐⭐ - Complete network architecture with 6×/28 blocks, VLANs, NAT pools
- **[ORCHESTRATION_DEPLOYMENT_GUIDE.md](ORCHESTRATION_DEPLOYMENT_GUIDE.md)** ⭐⭐⭐ - Enterprise-grade deployment orchestration guide
- **[VMID_ALLOCATION_FINAL.md](VMID_ALLOCATION_FINAL.md)** ⭐⭐⭐ - Complete VMID allocation registry (11,000 VMIDs)
@@ -26,10 +27,15 @@ This directory contains core architecture and design documents.
- CCIP fleet deployment matrix (41-43 nodes)
- Proxmox cluster orchestration
**Client / Division Model:**
- `Client` = GitHub Enterprise = Azure billing profile = current Gitea Organization
- `Division` = generic subdivision below Client
- `Tenant` = technical isolation only
- `Site` = infrastructure location only
## Related Documentation
- **[../03-deployment/](../03-deployment/)** - Deployment guides
- **[../04-configuration/](../04-configuration/)** - Configuration guides
- **[../05-network/](../05-network/)** - Network infrastructure details
- **[../07-ccip/](../07-ccip/)** - CCIP deployment specification

View File

@@ -2,7 +2,7 @@
> Historical note (2026-03-26): this runbook originated during the earlier three-pool PMM phase. Current canonical Chain 138 PMM addresses are `DODOPMMIntegration=0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` and `DODOPMMProvider=0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381`.
**Purpose:** Add base/quote liquidity to the three DODO PMM pools on Chain 138 (cUSDT/cUSDC, cUSDT/USDT, cUSDC/USDC).
**Purpose:** Add base/quote liquidity to the canonical DODO PMM pools on Chain 138, including the live stable/WETH pools.
**Prerequisites:**
- Deployer is **owner** of cUSDT and cUSDC contracts (to mint), or already has balance.
@@ -37,17 +37,20 @@ Deployer must be the **owner** of both cUSDT and cUSDC contracts (onlyOwner can
Add or set in `smom-dbis-138/.env`:
```bash
# Pool addresses (from PRE_DEPLOYMENT_CHECKLIST / create-all-pmm-pools-chain138.sh)
POOL_CUSDTCUSDC=0xff8d3b8fDF7B112759F076B69f4271D4209C0849
POOL_CUSDTUSDT=0x6fc60DEDc92a2047062294488539992710b99D71
POOL_CUSDCUSDC=0x9f74Be42725f2Aa072a9E0CdCce0E7203C510263
# Pool addresses
POOL_CUSDTCUSDC=0x9e89bAe009adf128782E19e8341996c596ac40dC
POOL_CUSDTUSDT=0x866Cb44b59303d8dc5f4F9E3E7A8e8b0bf238d66
POOL_CUSDCUSDC=0xc39B7D0F40838cbFb54649d327f49a6DAC964062
POOL_CUSDTWETH=0xaE38a008Ba4Dbf8D9F141D03e9dC8f7Dbe0ce17c
POOL_CUSDCWETH=0xAAE68830a55767722618E869882c6Ed064Cc1eb2
POOL_CEURTWETH=0x4a64c886cedF00db42ea5B946D6b304121ad9529
# Amounts in base units (6 decimals): 1M tokens = 1000000000000
ADD_LIQUIDITY_BASE_AMOUNT=1000000000000
ADD_LIQUIDITY_QUOTE_AMOUNT=1000000000000
```
Optional per-pool overrides: `ADD_LIQUIDITY_CUSDTCUSDC_BASE`, `ADD_LIQUIDITY_CUSDTCUSDC_QUOTE`, etc.
Optional per-pool overrides: `ADD_LIQUIDITY_CUSDTCUSDC_BASE`, `ADD_LIQUIDITY_CUSDTCUSDC_QUOTE`, `ADD_LIQUIDITY_CUSDTWETH_BASE`, `ADD_LIQUIDITY_CUSDTWETH_QUOTE`, `ADD_LIQUIDITY_CUSDCWETH_BASE`, `ADD_LIQUIDITY_CUSDCWETH_QUOTE`, `ADD_LIQUIDITY_CEURTWETH_BASE`, `ADD_LIQUIDITY_CEURTWETH_QUOTE`, etc.
---

View File

@@ -0,0 +1,70 @@
# Atomic Swap dApp Submodule
**Last Updated:** 2026-04-19
**Purpose:** Defines the dedicated submodule for an ecosystem-wide swap + bridge dApp that can orchestrate atomic swap flows across the supported networks and assets.
---
## Location
- Submodule path: `atomic-swap-dapp/`
- Parent registration: `.gitmodules`
- Current bootstrap remote: local bare repo at `/home/intlc/projects/atomic-swap-dapp.git`
> Operational note: the current URL is a local bootstrap remote created to establish the submodule boundary and initial commit. Replace it with the canonical hosted remote before expecting other operators to clone it directly from the parent repo.
---
## What the submodule contains
- `README.md` — scope and usage
- `docs/ATOMIC_SWAP_EXECUTION_MODEL.md` — execution model for swap -> bridge -> destination swap flows
- `scripts/sync-ecosystem.mjs` — generates the dApp manifest from the parent repo's canonical machine-readable inventories
- `scripts/validate-manifest.mjs` — lightweight integrity check for the generated manifest
- `config/ecosystem-manifest.json` — generated coverage snapshot
---
## Canonical parent sources
The submodule intentionally derives coverage from the parent repo instead of maintaining a second source of truth:
- `config/aggregator-route-matrix.json`
- `config/routing-registry.json`
- `token-lists/lists/dbis-138.tokenlist.json`
- `cross-chain-pmm-lps/config/chains.json`
- `cross-chain-pmm-lps/config/token-map.json`
- `cross-chain-pmm-lps/config/deployment-status.json`
This lets the dApp surface:
- Chain 138 live same-chain swap routes
- bridge lanes across the routed ecosystem
- cW* and anchor-asset inventory on the public-chain mesh
- non-EVM network metadata where interoperability is modeled separately
---
## Working in the submodule
From the parent repo root:
```bash
cd atomic-swap-dapp
npm run sync:ecosystem
npm run validate:manifest
```
If the submodule is checked out outside the parent repo, set:
```bash
export PROXMOX_REPO_ROOT=/path/to/proxmox
```
---
## Immediate next build steps
1. Add the canonical hosted remote for the submodule and update `.gitmodules`.
2. Layer in a quote API and execution adapters for DODO PMM, CCIP, Alltra, and future non-EVM connectors.
3. Build UI surfaces on top of `config/ecosystem-manifest.json` so chain and asset coverage stays synced with repo-backed inventories.

View File

@@ -0,0 +1,83 @@
# Chain 138 → Solana — GRU Token Deployment Lineup
**Last updated:** 2026-04-19
**Current status:** `partial_live_causdt_lane_confirmed_lineup_and_mints_still_outstanding` — see [config/solana-gru-bridge-lineup.json](../../config/solana-gru-bridge-lineup.json).
**Purpose:** Line up deployment of **all canonical GRU base-money assets** from Chain 138 to Solana as **bridge-backed SPL representations**, using the agreed model: **custom relay** (per `token-mapping-multichain.json` notes), **SPL mints**, **hub stables on Solana**, and **execution / edge liquidity** as a separate phase (CLMM + bot, CLOB MM, or future PMM-class program). The Solana lane now also has a confirmed live send/confirm for the **`cAUSDT -> cWAUSDT`** corridor, which serves as the first repo-recorded proof that the adapter path is functioning end-to-end.
**Machine-readable manifest:** [config/solana-gru-bridge-lineup.json](../../config/solana-gru-bridge-lineup.json) (fill `solanaMint` as mints exist).
---
## 1. Scope — which tokens
| Role | Count | Notes |
|------|-------|--------|
| **Canonical `c*` on Chain 138** | **12** | Addresses: [EXPLORER_TOKEN_LIST_CROSSCHECK.md](../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) §2 |
| **WETH** | **1** | Aligns with [config/non-evm-bridge-framework.json](../../config/non-evm-bridge-framework.json) `solanaInitialLiveSet` |
On Solana, fiat-stable GRU assets use the **`cW*`** symbol set per `config/token-mapping-multichain.json``nonEvmNetworks.Solana.approvedMirroredSymbols`.
### Live-confirmed Solana lane
The broader canonical lineup is still in rollout, but the **AUSDT corridor is no longer only planned**:
| Item | Value |
|------|-------|
| Chain 138 source token | `cAUSDT` |
| Solana destination symbol | `cWAUSDT` |
| Minted on Chain 138 | `22,000,000` raw units |
| Bridged to Solana | `9,000,000` raw units |
| Bridge request | `0x69035dfb7c0af5447da6104a8c09aa6bac7b19695517441014dda3c687d4550d` |
| Final status | `2` (`Confirmed`) |
| Solana adapter | `0x8244a5c27C0eA32fb8cB324131a04dC9F4E433f7` |
| Mint tx | `0x8d18b8df7024418bf167cc80d11e0425b0c81507ace13326973951f3dfd0f6f8` |
| Bridge tx | `0x4f6368754a5b55a43f8dae4e645bf67e9cf6c9c64bfdadb4625508c351d64319` |
| Confirm tx | `0x6cce9a740d170278c95e494052e1b031b394d1d807df05ba3bad55030a36fc68` |
This confirms that the Solana adapter path is live for at least one GRU-style corridor even though the full canonical `c* -> cW*` lineup and SPL mint inventory remain incomplete.
---
## 2. Repo anchors
| Item | Location |
|------|----------|
| Non-EVM rollout + initial symbol set | [config/non-evm-bridge-framework.json](../../config/non-evm-bridge-framework.json) |
| CAIP-2, relay mode, approved symbols | [config/token-mapping-multichain.json](../../config/token-mapping-multichain.json) `nonEvmNetworks.Solana` |
| Solana adapter (Chain 138) | `smom-dbis-138/contracts/bridge/adapters/non-evm/SolanaAdapter.sol` |
| Relay worker stub | `smom-dbis-138/services/solana-relay/src/SolanaRelayService.ts` |
| Hub-stable note | [cross-chain-pmm-lps/config/chains.json](../../cross-chain-pmm-lps/config/chains.json) `nonEvm[]` |
---
## 3. Phased deployment sequence
### Phase A — Chain 138 bridge surface
Deploy/register `SolanaAdapter`, define lock/mint messaging and replay/refund paths.
### Phase B — Solana SPL mints
Create SPL tokens; record **`solanaMint`** per asset in `solana-gru-bridge-lineup.json`.
### Phase C — Relay implementation
Replace relay stub with production path; fund SOL signers; E2E both directions on mainnet-beta when ready. As of **2026-04-16**, the repo now has a confirmed live `cAUSDT -> cWAUSDT` send/confirm through the deployed Solana adapter, so this phase should be treated as **partially validated in production** rather than only stubbed.
### Phase D — Execution on Solana
Resolve SPL USDC/USDT hubs; add pools/markets per chosen venue strategy.
### Phase E — Public exposure
After verifiers and E2E gates pass; align [GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md](../04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md).
---
## 4. Verification
```bash
bash scripts/verify/check-gru-non-evm-readiness.sh
bash scripts/verify/check-contracts-on-chain-138.sh
```

View File

@@ -0,0 +1,183 @@
# Chain 138 -> Wemix 1111 Bridge Completion Checklist
**Last Updated:** 2026-04-20
**Purpose:** Strict operator checklist to move WEMIX `1111` from repo-deferred state into a live bridge path, with an explicit split between:
- **inbound-only activation** for `138 -> 1111`
- **full bidirectional activation** for `138 <-> 1111`
## 1. Current Repo State
| Item | Current State |
|---|---|
| Destination chain | `1111` / Wemix |
| Destination selector | `5142893604156789321` |
| Activation state | `planned_gas_scaffold` |
| Bridge available | `false` |
| Recorded `cW*` assets | `cWBTC` |
| Recorded anchor addresses | `USDC=0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D` |
The repo currently shows WEMIX as **not yet live**. Native WEMIX gas and bridge deployment are already in good shape; the remaining blockers depend on the target mode:
- **inbound-only activation**: proof transfer plus machine-readable promotion
- **full bidirectional activation**: proof transfer, machine-readable promotion, and outbound fee coverage on the WEMIX-side bridges
### Current runtime blocker
As of `2026-04-21`, the source-side Chain 138 CCIP bridge still cannot quote the Wemix lane:
```bash
cast call "$CCIPWETH9_BRIDGE_CHAIN138" \
'calculateFee(uint64,uint256)(uint256)' \
5142893604156789321 1000000000000000 \
--rpc-url "$RPC_URL_138"
```
Current result:
- reverts with `CCIPRouter: chain not supported`
That means the blocker is stronger than “proof transfer not yet recorded”:
- the peer bridge wiring is present on both sides
- but the current Chain 138 CCIP router does not yet support the Wemix selector for source-side sends
Until that router-level support exists, `138 -> 1111` cannot be promoted from scaffold to live.
## 2. Exact Environment Surface
| Variable | Current Value |
|---|---|
| `CCIP_ROUTER_WEMIX` | `0x7798b795Fde864f4Cd1b124a38Ba9619B7F8A442` |
| `LINK_TOKEN_WEMIX` | `0x80f1FcdC96B55e459BF52b998aBBE2c364935d69` |
| `WETH9_WEMIX` | `0x7D72b22a74A216Af4a002a1095C8C707d6eC1C5f` |
| `WETH10_WEMIX` | `0x7D72b22a74A216Af4a002a1095C8C707d6eC1C5f` |
| `CCIPWETH9_BRIDGE_WEMIX` | `0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04` |
| `CCIPWETH10_BRIDGE_WEMIX` | `0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08` |
| `LINK_GAS_AVAILABLE_1111` | `0` |
| `LINK_GAS_UNAVAILABLE_CHAIN_IDS` | `25,1111` |
| `WEMIX_RPC` | `https://api.wemix.com` |
| `CHAIN138_SELECTOR` | `138` |
| `CCIPWETH9_BRIDGE_CHAIN138` | `0xcacfd227A040002e49e2e01626363071324f820a` |
| `CCIPWETH10_BRIDGE_CHAIN138` | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` |
## 3. Activation Paths
### Path A: Inbound-only activation on WEMIX
Use this when the immediate goal is to make `138 -> 1111` receipt operational.
#### Step A1: Preflight WEMIX
```bash
cd smom-dbis-138
./scripts/deployment/preflight-config-ready-chains.sh wemix
```
Success means:
- `WEMIX_RPC` responds
- deployer has native WEMIX gas
- `CCIP_ROUTER_WEMIX`, `LINK_TOKEN_WEMIX`, `WETH9_WEMIX`, and `WETH10_WEMIX` are present
#### Step A2: Confirm bridge deployments on 1111
Status: completed in the current operator environment. Both bridge addresses above return deployed bytecode on Wemix.
```bash
cd smom-dbis-138
./scripts/deployment/deploy-bridges-config-ready-chains.sh wemix
```
After deployment, persist the returned addresses into:
- `CCIPWETH9_BRIDGE_WEMIX`
- `CCIPWETH10_BRIDGE_WEMIX`
#### Step A3: Confirm bidirectional wiring
```bash
cd smom-dbis-138
./scripts/deployment/complete-config-ready-chains.sh
```
Required result:
- Chain `138` WETH9 bridge includes selector `5142893604156789321` -> `CCIPWETH9_BRIDGE_WEMIX`
- Chain `138` WETH10 bridge includes selector `5142893604156789321` -> `CCIPWETH10_BRIDGE_WEMIX`
- WEMIX WETH9 bridge includes `CHAIN138_SELECTOR` -> `CCIPWETH9_BRIDGE_CHAIN138`
- WEMIX WETH10 bridge includes `CHAIN138_SELECTOR` -> `CCIPWETH10_BRIDGE_CHAIN138`
Status: destination wiring is already present in the current environment.
#### Step A4: Run proof transfer for `138 -> 1111`
```bash
cast call "$CCIPWETH9_BRIDGE_WEMIX" 'getDestinationChains()(uint64[])' --rpc-url "$WEMIX_RPC"
cast call "$CCIPWETH10_BRIDGE_WEMIX" 'getDestinationChains()(uint64[])' --rpc-url "$WEMIX_RPC"
```
Then run a small test transfer for `WETH9` or `WETH10` from `138 -> 1111` and confirm receipt.
Precondition:
- the Chain 138 CCIP router must stop reverting `calculateFee(...)` with `CCIPRouter: chain not supported`
Important note:
- the WEMIX-side bridges do **not** need LINK just to receive `138 -> 1111` messages
- CCIP fees are paid on the source-side `sendCrossChain(...)`, not on the destination-side `ccipReceive(...)`
### Path B: Full bidirectional activation on WEMIX
Use this when `1111 -> 138` or `1111 -> other-chain` sending must also be live.
Path B includes all inbound-only steps above, plus the outbound fee steps below.
#### Step B1: Fund outbound fee coverage on the WEMIX bridges
```bash
cd smom-dbis-138
./scripts/deployment/check-link-balance-config-ready-chains.sh wemix
./scripts/deployment/fund-ccip-bridges-with-link.sh
```
Target:
- at least `10 LINK` on each bridge
- `LINK_GAS_AVAILABLE_1111` becomes non-zero
Bridge-specific note:
- `CCIPWETH9Bridge` can alternatively be reconfigured to use native WEMIX for outbound fees by setting `feeToken = address(0)`.
- `CCIPWETH10Bridge` cannot use native-fee mode in the current implementation and still requires LINK for outbound sends.
#### Step B2: Run proof transfer from `1111`
After outbound funding is available, run and record a small outbound test transfer from `1111`.
## 4. Prepare GRU v2 `cW*` assets for 1111
This step is **after** the WETH bridge path is proven live.
Current repo state only scaffolds:
- `cWBTC`
Before GRU v2 can be promoted on `1111`, the operator still needs to:
- confirm the intended destination `cW*` asset set
- deploy or confirm destination token contracts on `1111`
- wire bridge or mint authority for those assets
- only then enable DODO PMM / Uniswap V2 / other venue rollout on WEMIX
## 5. Promotion Conditions
### Promotion to inbound-only live
WEMIX `1111` can move to inbound-only live only after all of the following are true:
1. `CCIPWETH9_BRIDGE_WEMIX` and `CCIPWETH10_BRIDGE_WEMIX` are deployed and stored in `.env`.
2. Chain `138` and chain `1111` each list the other as a valid bridge destination.
3. A small `138 -> 1111` bridge test succeeds in both configuration and receipt.
### Promotion to full bidirectional live
WEMIX `1111` can move to full bidirectional live only after all of the following are true:
1. All inbound-only promotion conditions are satisfied.
2. The WEMIX outbound fee path is funded:
- `WETH9`: LINK or native WEMIX
- `WETH10`: LINK
3. A small outbound bridge test from `1111` succeeds in both configuration and receipt.
4. The GRU v2 asset rollout plan for `1111` is explicitly wired, not just implied.

View File

@@ -0,0 +1,26 @@
# Comprehensive Capital Baseline
- Generated: `2026-04-17T15:11:49Z`
- Additional inventory: `config/extraction/additional-wallet-inventory.json`
- Source-to-CEX policy: `config/extraction/source-to-cex-production-policy.json`
- Production enabled: `False`
- Mainnet funding posture: `dual-rail` via `cWUSDC, cWUSDT`
## Snapshot
- Immediate bucket USD: `17777520.488172`
- Same-day corridor USD: `1381462148.370564`
## Off-Chain Sink Validation
- Validation ready: `False`
- Included sink count: `0`
## Source Artifacts
- `immediate_and_same_day_corridor_assets`: `reports/extraction/immediate-and-same-day-corridor-assets-latest.json`
- `source_to_cex_execution_plan`: `reports/extraction/source-to-cex-execution-plan-latest.json`
- `source_to_cex_production_readiness`: `reports/extraction/source-to-cex-production-readiness-latest.json`
- `source_to_cex_offchain_sink_validation`: `reports/extraction/source-to-cex-offchain-sink-validation-latest.json`
- `source_to_cex_production_policy`: `config/extraction/source-to-cex-production-policy.json`
- `additional_wallet_inventory`: `config/extraction/additional-wallet-inventory.json`

View File

@@ -0,0 +1,70 @@
# CROMERO Dapp — Phoenix Deploy
Deploys [`d-bis/CROMERO`](https://gitea.d-bis.org/d-bis/CROMERO) (a
Vite + React + thirdweb v5 dapp) to
`https://d-bis.org/ecosystem/cromero/`.
## Pipeline
1. Push to `main` on `d-bis/CROMERO` triggers
`.gitea/workflows/deploy-to-phoenix.yml`, which POSTs
`{repo, sha, branch, target: "default"}` to the Phoenix Deploy API.
2. Phoenix runs the registered target (see
`phoenix-deploy-api/deploy-targets.json`):
`bash scripts/deployment/phoenix-deploy-cromero-from-workspace.sh`.
3. The script builds the staged workspace (`npm ci && npm run build`)
and rsyncs `dist/` to
`${IP_NPMPLUS:-192.168.11.167}:/var/www/ecosystem/cromero/`.
4. Healthcheck: `https://d-bis.org/ecosystem/cromero/` must return
HTTP 200 with `<div id="root">` in the body.
## One-time nginx setup on the NPMplus host
The deploy script does **not** modify nginx config — install the
location block once, then redeploys land static files only.
Add the following to whichever nginx server block terminates
`d-bis.org` (or the NPMplus advanced-config tab for the d-bis.org
proxy host):
```nginx
location /ecosystem/cromero/ {
alias /var/www/ecosystem/cromero/;
try_files $uri $uri/ /ecosystem/cromero/index.html;
}
```
Then `nginx -t && nginx -s reload` (or restart the NPMplus
container).
The Vite app already builds with `base: "/ecosystem/cromero/"` so
hashed asset URLs resolve under that subpath.
## Required Actions secrets/vars on `d-bis/CROMERO`
| Name | Type | Value |
| --- | --- | --- |
| `PHOENIX_DEPLOY_URL` | secret | `http://192.168.11.59:4001/api/deploy` |
| `PHOENIX_DEPLOY_TOKEN` | secret | matches `PHOENIX_DEPLOY_SECRET` on the Phoenix host |
| `VITE_THIRDWEB_CLIENT_ID` | secret | thirdweb publishable Client ID |
| `VITE_PROJECT_WALLET_ADDRESS` | var | recipient `0x…` address |
| `VITE_CHAIN_138_RPC` | var (optional) | overrides default `https://rpc.d-bis.org` |
| `VITE_CHAIN_138_EXPLORER` | var (optional) | overrides default `https://explorer.d-bis.org` |
## Manual trigger from a LAN box with `phoenix-deploy-api` access
```bash
curl -sSf -X POST "http://192.168.11.59:4001/api/deploy" \
-H "Authorization: Bearer ${PHOENIX_DEPLOY_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"repo":"d-bis/CROMERO","branch":"main","target":"default"}'
```
## Dry run
From this repo:
```bash
PHOENIX_DEPLOY_WORKSPACE=/path/to/staged/CROMERO \
bash scripts/deployment/phoenix-deploy-cromero-from-workspace.sh --dry-run
```

View File

@@ -0,0 +1,80 @@
# Crypto.com OTC Before Vs After Operator Matrix
**Last Updated:** 2026-04-17
**Purpose:** Strict operator comparison of the current ecosystem state versus the state after a real `Crypto.com OTC` destination is connected as the off-chain execution sink.
## Scope
- This matrix is grounded in the current repo-generated artifacts, especially:
- `reports/extraction/comprehensive-capital-baseline-latest.json`
- `reports/extraction/source-to-cex-execution-plan-latest.json`
- `reports/extraction/source-to-cex-production-readiness-latest.json`
- `reports/extraction/immediate-and-same-day-corridor-assets-latest.json`
- It does **not** assume any undocumented `Crypto.com OTC` limits, settlement terms, or acceptance rules.
- “After” means: a real off-chain sink row exists, it is enabled for production handoff, the deposit asset and address are configured, and production is intentionally promoted.
## Strict Matrix
| Dimension | Before Crypto.com OTC | After Crypto.com OTC |
|---|---|---|
| Terminal sink model | Public Mainnet cW-to-canonical pools | Mainnet normalization plus external OTC execution |
| True size absorber | `cWUSDC -> USDC` pool | `Crypto.com OTC` books / negotiated execution |
| Strongest verified direct public normalization depth | About `$213.10` via `cWUSDC -> USDC` | Still about `$213.10` on-chain, but no longer the system-wide economic cap |
| Direct `cWUSDT -> USDT` depth | About `$2.18` | Still about `$2.18`; remains weak unless separately improved |
| Immediate bucket (`cWUSDC`, `cWUSDT`) | About `$17.78M`, but operationally constrained by shallow public exits | About `$17.78M`, now potentially executable through bounded normalization and OTC handoff |
| Same-day corridor bucket (`cUSDC`, `cUSDT`, stable LP feeders) | About `$1.381B`, structurally ready but terminally constrained | About `$1.381B`, now becomes a credible same-day institutional feeder set if OTC handoff is live |
| `cUSDC` operating path | `cUSDC -> bridge -> cWUSDC -> USDC`, then stalls on shallow public sink | `cUSDC -> bridge -> cWUSDC -> USDC -> Crypto.com OTC` |
| `cUSDT` operating path | `cUSDT -> bridge -> cWUSDT -> cWUSDC -> USDC`, still bottlenecked by public sink | `cUSDT -> bridge -> cWUSDT -> cWUSDC -> USDC -> Crypto.com OTC` |
| Stable LP role | LPs are strong feeder-prep assets, but not meaningful exits on their own | LPs become materially more useful because unwind can feed a real external execution rail |
| On-chain Mainnet role | Expected to absorb trade size | Reduced to a bounded conversion handshake before OTC handoff |
| Main system bottleneck | Terminal public liquidity concentration | Off-chain execution onboarding, deposit correctness, operational governance, and settlement workflow |
| Planner posture | `multi-path -> single shallow sink` | `multi-path -> normalized settlement asset -> OTC sink` |
| Readiness blocker | No real off-chain sink included; production disabled | Remaining blocker becomes real-world OTC setup quality, not architecture |
| Risk concentration | DEX liquidity and slippage | Counterparty, deposit rail, packet policy, reconciliation, and execution controls |
| Operator dependency | Public PMM liquidity | OTC account activation, accepted asset, deposit address, and operating limits |
| Repo readiness state | `offchain_sink_defined = blocked`; `live_production_enabled = blocked` | Can become `ready` after sink row + enablement + production promotion |
## Practical Reclassification
If `Crypto.com OTC` is connected as a real sink, the ecosystem does **not** become richer in nominal terms. It becomes more executable.
- Before:
- large corridor inventory
- tiny public terminal sink
- strong routing structure but weak external realization
- After:
- same inventory
- same bridge and normalization structure
- materially improved ability to hand same-day corridor assets into external institutional liquidity
## What Changes Operationally
| Asset Group | Before | After |
|---|---|---|
| `cWUSDC` | Immediate in mechanics, but shallow public exit | Immediate normalization asset for OTC deposit preparation |
| `cWUSDT` | Immediate in mechanics, but direct USDT path is too shallow | Usually normalize through USDC, then hand to OTC |
| `cUSDC` | Best same-day corridor feeder, but ends at weak public sink | Best same-day corridor feeder into OTC |
| `cUSDT` | Same-day feeder, but practically dependent on USDC normalization | Same-day feeder into OTC after USDC normalization |
| Stable LP claims | Preparation only | Preparation plus real external execution path |
| Non-promoted assets | Still not standard feeders | Still not standard feeders unless separately promoted |
## Readiness Gate
The repo should still treat the system as **not live** until all of the following are true:
1. A real `Crypto.com OTC` row exists in `config/extraction/additional-wallet-inventory.json`.
2. `include_in_baseline` is `true`.
3. `enabled_for_production_handoff` is `true`.
4. `operational_status` is `enabled`.
5. Deposit asset, chain, and address are populated.
6. `config/extraction/source-to-cex-production-policy.json` is intentionally set to `production_enabled: true`.
## Bottom Line
Before `Crypto.com OTC`, the ecosystem is best described as:
`large inventory + good corridor structure + shallow public terminal sink`
After `Crypto.com OTC`, it becomes:
`large inventory + good corridor structure + bounded Mainnet normalization + real external execution destination`

View File

@@ -0,0 +1,31 @@
# CurrenciCombo Phoenix Deployment
**Status:** Deployed on `2026-04-22`
**Target host:** `r630-01` (`192.168.11.11`)
**Container:** VMID `8604`
**CT hostname:** `currencicombo-phoenix-1`
**Network:** VLAN `160` / `10.160.0.14`
## Runtime
- Web: `http://10.160.0.14:3000/`
- API health: `http://10.160.0.14:8080/health`
- Public web: `https://curucombo.曼李.com/` (`curucombo.xn--vov0g.com`)
- systemd units:
- `currencicombo-webapp`
- `currencicombo-orchestrator`
## Deploy path
- Script: `scripts/deployment/deploy-currencicombo-8604.sh`
- Phoenix target file: `phoenix-deploy-api/deploy-targets.json`
- Repo target tuple:
- repo: `d-bis/CurrenciCombo`
- branch: `main`
- target: `default`
## Notes
- The deployment currently uses local PostgreSQL and Redis inside the same CT.
- The webapp build is temporarily configured to ignore TypeScript build errors in `webapp/next.config.ts` so deployment can proceed while the remaining Next 16 migration issues are cleaned up.
- Public ingress was wired through the primary NPMplus (`192.168.11.167`) with a proxied Cloudflare DNS record in the `曼李.com` zone and TLS enabled in NPMplus.

View File

@@ -0,0 +1,159 @@
# cW Public Network Prices
- Generated: `2026-04-20T00:49:38Z`
- Deployment inventory: `/home/intlc/projects/proxmox/cross-chain-pmm-lps/config/deployment-status.json`
- Uniswap discovery snapshot: `/home/intlc/projects/proxmox/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json`
- Price convention: USD per 1 token.
- `not found` means the generator could not reach the token from a live USDC/USDT anchor using the current public-pair snapshot plus live PMM mid-price reads.
| Chain | Token | Price (USD) | Derived From | Source | Notes |
|---|---|---:|---|---|---|
| `1` Ethereum Mainnet | `cWAUDC` | `0.65569108` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x6c1bD4F43c5f330E50B61DE81066dA7C61a9b5b4; midPrice=0.65569107650773755 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.73441926` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xE0F35b5736FDd0a2F4B618621b0A08F8D8A3f92A; midPrice=0.734419257773319959 |
| | `cWCHFC` | `1.10444563` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x776Ca556deD3245984F504F4bef8Eeec55C50190; midPrice=1.104445634708087841 |
| | `cWEURC` | `1.15145921` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x0bC750F9c6DbDcd76B205695A356491b1B9ef098; midPrice=1.15145920590785613 |
| | `cWEURT` | `1.08000050` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x9cF3DeDAaC0984c530801b9b4881c8f99Bb329c3; midPrice=1.080000496800228528 |
| | `cWGBPC` | `1.29980755` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x5488042dF882893a3e7074453E2005CaDE4101b0; midPrice=1.299807549490125931 |
| | `cWGBPT` | `1.27000012` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xA42566bb730AD6D551Db32d50c0877132fc07c32; midPrice=1.270000120650011461 |
| | `cWJPYC` | `0.00827694` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x8A4187dF0A8FE855cC53A4F7B2D8346588Ee9794; midPrice=0.008276940018827374 |
| | `cWUSDC` | `0.24519859` | `cWUSDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x69776fc607e9edA8042e320e7e43f54d06c68f0E; midPrice=0.245198594926143744 |
| | `cWUSDT` | `0.24377078` | `cWUSDT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x27f3aE7EE71Be3d77bAf17d4435cF8B895DD25D2; midPrice=0.243770782727164331 |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xf6470219ce7749f8860dEABe9c347Ef2c1075E08; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x1D51a38C924382287d770AbB61deb9C39ACa96E9; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `10` Optimism | `cWAUDC` | `0.66000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x4B452800f6cD50326F14a6f089f4bB04e8079250; midPrice=0.66 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x19e1fdd037F1651AcEE11c5A5Aa246b85FA63f8e; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xA97D7dfB93CBf0C10243931d93FFEda745222ec6; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x78C6aC6D7CbFcd85A3291D656F2154979a92c00B; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x631DfC86A03cB05319d7165198f8099dacF78e56; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x79BE2b70A94E954d095f9F537FAf0741D15dfA31; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x5D6b5d7CA165c39c350083255774DdBf1c858e12; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x68C1c8a945ddCF3482b73aC09b6B5D4177D564AF; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xCE25c324e41049D75abfB81c23257984A2A97a79; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xb3Ee650019d7F756ce0F79b69614Fa2761871775; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `25` Cronos | `cWAUDC` | `0.66000000` | `cWAUDC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x5b5fA8664FC1eb630b2D76deAf57Dd35ef326eAE; midPrice=0.66 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xFFe56BE4628f2863Cd7c38d3fFa70d6A3255FBD3; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x937E86f21007C15F28081DBD419ea39ef5bc87F2; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xbe68d6ae47049ce0EA5B6a82AB1c388f4023aec8; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xE3bb64f8F05dB65C9bb1103f5D7C445C402161Ec; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xDa60b22cDb3D3Ec67c309457Bd50C4e67D4611a4; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x1935d14D513E158D630488f2D20Cd28CFe23aAe6; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x97fD4E88490D8c4bcbe1930Cece12e8DD22529bE; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xAA450B4Cf4EEc28C440850665546D85C67b4B2A6; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x8B11f71C0ABF2f8031c47cFd20d22b2ab2799183; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `56` BSC (BNB Chain) | `cWAUDC` | `0.66000000` | `cWAUDC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x85E2C97a931D1e5Ed31F4D6cb4094fB036AE4ED4; midPrice=0.66 |
| | `cWAUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xE193bd2f602CaC833330c6835f934f3958a7785b; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x02F70D646B57439faF5dF1B16d2B174Ee2A9F373; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xaF1EA2c0105C90C819849FBFE931D61a11De4793; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x6b97090c974eCAf77dC4e390B044F87Ec71f5fA1; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x5e19913eDaAcaB436AbF635e58f2453323cB2CB3; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0x439C447b4FDa58fcAF587F0A042662A46029dC7c; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xBEceD3b25448F648a36Fa9dd6D17a68CB6e61f36; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDW` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xe9306557758c19cb8FbeEb4777dc7b14f251f67c; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xfB094EC50d932bCD004E4136EfB62119c0f576E1; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `100` Gnosis Chain | `cWAUDC` | `1.00000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xeb5A688dF70be2F790719872Be9Ecc5648aEE460; midPrice=1 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x45177D998F4022aeaa046C60e734aEf8c18aCb70; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x9ff24E16c5687330c271a52655971c7C2498FaC8; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x8c8d6cc14111443Ef8572D58Df387a1E497b7C43; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xB73e4C13757EE99540A1F0e973980E423987De19; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xf060E1B29FF714f5Ac89F8Bd3869cF300C5b387f; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x3adB3fB8451727fDEBe3D00617170dAF3725F6B4; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xe11936EcE13B5f04156898a510B86493F2862042; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x02BE3C506FD5541c8225dB43C6FFC5a39ADd803E; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x7069d10A0E4496D0CEa08Ff27EaE9de0BB7D0d23; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `137` Polygon | `cWAUDC` | `1.00000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xbD34966FE5Eed81AFffF8081e9BB527Fc8066783; midPrice=1 |
| | `cWAUSDT` | `0.66666667` | `cWUSDC/USDC -> cWAUSDT/cWUSDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x8F1038dE06d799a30D16d8B0b0ADEe629e7d4547; midPrice=1 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xc79da1E8B33E580d53C683923685B26FFC653650; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x30dAeF9a8Dd4aEc2949013Fe18b5Ab3C2505D825; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x0c6F5D3d8d52cBC52849327F6eC6aE52C8497A8D; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x36aB6bef2B3335ebf6a762665978bf5e845FDEC0; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x7a95f67E31f271A6a83219d8368D963Ee2fC106B; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xC3645c7153b7B72556e322aA1E72D77536d9A3DE; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x09658d8d81aa8fa7a21eD973787638f245bc3fe0; midPrice=0.0067 |
| | `cWUSDC` | `1.00000000` | `cWUSDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x8F1038dE06d799a30D16d8B0b0ADEe629e7d4547; midPrice=1 |
| | `cWUSDT` | `1.00000000` | `cWUSDT/USDT` | `dodo_pmm` | USDT anchored at 1 USD; DODO PMM 0xFCB0b0Ac36d67EDBA91100c75C27De945357CD62; midPrice=1 |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x3c3b9Bd130fB3aBcC0E0CE6552795DD56BCCc55c; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x37D5587Bbe17571cDe96DAB7b2e7EA234C87f525; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `1111` Wemix | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | | | | | Activation state: `deferred`; RPC configured: `False` |
| `8453` Base | `cWAUDC` | `0.66000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xE450F94Dc06036aa80055Db298948C6692819545; midPrice=0.66 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x5E7448AA0e3172AEFE79439E14F7E59bc1C858E0; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x0673Fa737f813Af2e37A0ae2CBCf7E225498ed6a; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x72E6D93E9aF317321DF763a34068178c773FdA50; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x51c2C4Dd1fc54E20207D0732f12802B33e0E2251; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x5b8B474659A5BA675E74Ef364CcF559C53071B5b; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xD035e0a6b82cDd9653261DC8259a3dbA1cF02C14; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x64D91B738026fE1577773F3F36063d16C834F042; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xb47776505B8E2bFC63197Cf2133857CD91e7abBb; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xE1C2bC36438B29E3b5092C0cB80531199874080D; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `42161` Arbitrum One | `cWAUDC` | `0.66000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x97f78713f5899a652d955B996BAb99E2CbbEcC5c; midPrice=0.66 |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x6D3b55935F58b9433fc26743cd9E0F8963a4F6D8; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x88437Cd15CB6b07Fd8cC9830f1b8fFf50275e691; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x34c3Ae728a985Fd27f1887474bCf4e52847Cbb2c; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xEEE8C51107aE64824c4a08a502202fA3E6213702; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xFBa6D6d1471302Bf28CE7d94Be33f034b95d9AD0; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xDcA29dfa59C8faF90e4437DEAe74474F78735cDe; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xB6eaF7cEB4A6e9Bc6A57fEb51011B6Bb01632C1F; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x41e67b8b5929e44C2b7A0D772E151FAD8D5303cd; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xB6b15Ba233C95d164504e24209C1fAc3304059C7; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `42220` Celo | `cWAUDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWAUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCHFC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWEURC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWEURT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWGBPC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWGBPT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWJPYC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDW` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | | | | | Activation state: `active`; RPC configured: `True` |
| `43114` Avalanche C-Chain | `cWAUDC` | `1.00000000` | `cWAUDC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x287edaBDA35195592d7CACe2C1A75eC66caF1D70; midPrice=1 |
| | `cWAUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWBTC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWCADC` | `0.74000000` | `cWCADC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x75Ec85467927512b01C9e0481Fb1902d2d7210dC; midPrice=0.74 |
| | `cWCHFC` | `1.11000000` | `cWCHFC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x3a224eae91ac813a03E15d0c37B641bC6c2237d7; midPrice=1.11 |
| | `cWEURC` | `1.08000000` | `cWEURC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xEE2742Fa6f70A40aB16c9b613c5cF6933bA92Cc3; midPrice=1.08 |
| | `cWEURT` | `1.08000000` | `cWEURT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x8507F3F3cB121072c1e3f2D912d269CA9829eEF8; midPrice=1.08 |
| | `cWGBPC` | `1.27000000` | `cWGBPC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x73542F7B1CBd4552Eb8FeFEB3D1884527424da58; midPrice=1.27 |
| | `cWGBPT` | `1.27000000` | `cWGBPT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0xa07dEe884555f2E9D04d0039FEF0b746987a8441; midPrice=1.27 |
| | `cWJPYC` | `0.00670000` | `cWJPYC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x6175D065c602dab71A03753987D1ebEc99eFcC2e; midPrice=0.0067 |
| | `cWUSDC` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDT` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWUSDW` | `not found` | `not found` | `not_found` | No live direct or bridged price path was found from USDC/USDT anchors. |
| | `cWXAUC` | `3200.00000000` | `cWXAUC/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x5d3a4A3Dae9FEcFe979A784F55d994c9a9fBeAfB; midPrice=3200 |
| | `cWXAUT` | `3200.00000000` | `cWXAUT/USDC` | `dodo_pmm` | USDC anchored at 1 USD; DODO PMM 0x1392bb9f23F938E6c1cDaAAE5c45d29BE5f8C828; midPrice=3200 |
| | | | | | Activation state: `active`; RPC configured: `True` |

View File

@@ -0,0 +1,460 @@
# cW Public Network Repeg Plan
- Generated: `2026-04-20T00:49:46Z`
- Price report: `/home/intlc/projects/proxmox/reports/status/cw-public-prices-latest.json`
- Deployment inventory: `/home/intlc/projects/proxmox/cross-chain-pmm-lps/config/deployment-status.json`
- Uniswap discovery: `/home/intlc/projects/proxmox/reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json`
- Scope: current off-peg or unreadable public-network `cW*` pools only.
- PMM rule: if current price is below target, fund quote and buy base; if current price is above target, fund base and sell base.
- Uniswap rule: remove bad LP or ignore stale LP, then reseed at the target reserve ratio.
## Off-Peg DODO PMM Pools
| Chain | Pair | Pool | Current | Target | Deviation | Repair Path |
|---|---|---|---:|---:|---:|---|
| `1` Ethereum Mainnet | `cWEURC/USDC` | `0x0bC750F9c6DbDcd76B205695A356491b1B9ef098` | `1.15145921` | `1.08000000` | `+6.62%` | Fund base side and sell base into `cWEURC/USDC` until `getMidPrice()` returns target. |
| `1` Ethereum Mainnet | `cWGBPC/USDC` | `0x5488042dF882893a3e7074453E2005CaDE4101b0` | `1.29980755` | `1.27000000` | `+2.35%` | Fund base side and sell base into `cWGBPC/USDC` until `getMidPrice()` returns target. |
| `1` Ethereum Mainnet | `cWJPYC/USDC` | `0x8A4187dF0A8FE855cC53A4F7B2D8346588Ee9794` | `0.00827694` | `0.00670000` | `+23.54%` | Fund base side and sell base into `cWJPYC/USDC` until `getMidPrice()` returns target. |
| `1` Ethereum Mainnet | `cWUSDC/USDC` | `0x69776fc607e9edA8042e320e7e43f54d06c68f0E` | `0.24519859` | `1.00000000` | `-75.48%` | Fund quote side and buy base through `cWUSDC/USDC` until `getMidPrice()` returns target. |
| `1` Ethereum Mainnet | `cWUSDT/USDC` | `0x27f3aE7EE71Be3d77bAf17d4435cF8B895DD25D2` | `0.24377078` | `1.00000000` | `-75.62%` | Fund quote side and buy base through `cWUSDT/USDC` until `getMidPrice()` returns target. |
| `100` Gnosis Chain | `cWAUDC/USDC` | `0xeb5A688dF70be2F790719872Be9Ecc5648aEE460` | `1.00000000` | `0.66000000` | `+51.52%` | Fund base side and sell base into `cWAUDC/USDC` until `getMidPrice()` returns target. |
| `137` Polygon | `cWAUDC/USDC` | `0xbD34966FE5Eed81AFffF8081e9BB527Fc8066783` | `1.00000000` | `0.66000000` | `+51.52%` | Fund base side and sell base into `cWAUDC/USDC` until `getMidPrice()` returns target. |
| `43114` Avalanche C-Chain | `cWAUDC/USDC` | `0x287edaBDA35195592d7CACe2C1A75eC66caF1D70` | `1.00000000` | `0.66000000` | `+51.52%` | Fund base side and sell base into `cWAUDC/USDC` until `getMidPrice()` returns target. |
## Broken Uniswap Pairs
| Chain | Pair | Pool | Current Ratio | Target | Deviation | Repair Path |
|---|---|---|---:|---:|---:|---|
| `56` BSC (BNB Chain) | `cWAUSDT/cWUSDC` | `0x639D7e64C6f1fC676226f20a0C42aEcDD66545E8` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDC` through the chain router at target ratio `1` with balanced reserves. |
| `56` BSC (BNB Chain) | `cWAUSDT/cWUSDT` | `0xe9b082bAa73Fa4DEc7CB3CbD99B19D30BbfE1523` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDT` through the chain router at target ratio `1` with balanced reserves. |
| `137` Polygon | `cWAUSDT/cWUSDC` | `0xe6a5Cb164D4AF7E9794AEd09EC373392D0E7216c` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDC` through the chain router at target ratio `1` with balanced reserves. |
| `137` Polygon | `cWAUSDT/cWUSDT` | `0x8cD2Cb42B81F894eb10D15446DB22A3B31d6fB2E` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDT` through the chain router at target ratio `1` with balanced reserves. |
| `42220` Celo | `cWAUSDT/cWUSDC` | `0xd3B55d6d7C08fDbF5F201e486992643cfF410d91` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDC` through the chain router at target ratio `1` with balanced reserves. |
| `42220` Celo | `cWAUSDT/cWUSDT` | `0xEe9eEBf89C1424e63eFc888929E43a9423357D39` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDT` through the chain router at target ratio `1` with balanced reserves. |
| `43114` Avalanche C-Chain | `cWAUSDT/cWUSDC` | `0xaaD6aed8d28B0195D19B4d17F8ee9A1837ff2DCE` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDC` through the chain router at target ratio `1` with balanced reserves. |
| `43114` Avalanche C-Chain | `cWAUSDT/cWUSDT` | `0x418322F48D857277ec4BCc96Bc1580aCCB7EA253` | `0.66666667` | `1.00000000` | `-33.33%` | Withdraw or ignore bad LP, then reseed `cWAUSDT/cWUSDT` through the chain router at target ratio `1` with balanced reserves. |
## Unpriced Targets
| Chain | Token | Target | Status |
|---|---|---:|---|
| `10` Optimism | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `10` Optimism | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `25` Cronos | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `25` Cronos | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `56` BSC (BNB Chain) | `cWAUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `56` BSC (BNB Chain) | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `56` BSC (BNB Chain) | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `56` BSC (BNB Chain) | `cWUSDW` | `1.00000000` | no live price path found from current public snapshot |
| `100` Gnosis Chain | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `100` Gnosis Chain | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `8453` Base | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `8453` Base | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `42161` Arbitrum One | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `42161` Arbitrum One | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWAUDC` | `0.66000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWAUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWCADC` | `0.74000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWCHFC` | `1.11000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWEURC` | `1.08000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWEURT` | `1.08000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWGBPC` | `1.27000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWGBPT` | `1.27000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWJPYC` | `0.00670000` | no live price path found from current public snapshot |
| `42220` Celo | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWUSDW` | `1.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWXAUC` | `3200.00000000` | no live price path found from current public snapshot |
| `42220` Celo | `cWXAUT` | `3200.00000000` | no live price path found from current public snapshot |
| `43114` Avalanche C-Chain | `cWAUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `43114` Avalanche C-Chain | `cWUSDC` | `1.00000000` | no live price path found from current public snapshot |
| `43114` Avalanche C-Chain | `cWUSDT` | `1.00000000` | no live price path found from current public snapshot |
| `43114` Avalanche C-Chain | `cWUSDW` | `1.00000000` | no live price path found from current public snapshot |
### `1` Ethereum Mainnet `cWEURC/USDC`
- Suggested funding side: `cWEURC`
- Suggested trade raw: `82716`
- Suggested trade units: `0.082716`
- Gap fraction: `0.066166`
- Deployer balance on funding side: `0.004987` `cWEURC`
- Deployer shortfall: `0.077729` `cWEURC`
- Covered: `False`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ETHEREUM_MAINNET_RPC}"
export INTEGRATION="0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84"
export POOL="0x0bC750F9c6DbDcd76B205695A356491b1B9ef098"
export BASE_TOKEN="0xD4aEAa8cD3fB41Dc8437FaC7639B6d91B60A5e8d"
export QUOTE_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `1` Ethereum Mainnet `cWGBPC/USDC`
- Suggested funding side: `cWGBPC`
- Suggested trade raw: `2939`
- Suggested trade units: `0.002939`
- Gap fraction: `0.023471`
- Deployer balance on funding side: `0.000478` `cWGBPC`
- Deployer shortfall: `0.002461` `cWGBPC`
- Covered: `False`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ETHEREUM_MAINNET_RPC}"
export INTEGRATION="0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84"
export POOL="0x5488042dF882893a3e7074453E2005CaDE4101b0"
export BASE_TOKEN="0xc074007dc0bfb384b1cf6426a56287ed23fe4d52"
export QUOTE_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `1` Ethereum Mainnet `cWJPYC/USDC`
- Suggested funding side: `cWJPYC`
- Suggested trade raw: `26502`
- Suggested trade units: `0.026502`
- Gap fraction: `0.235364`
- Deployer balance on funding side: `0` `cWJPYC`
- Deployer shortfall: `0.026502` `cWJPYC`
- Covered: `False`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ETHEREUM_MAINNET_RPC}"
export INTEGRATION="0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84"
export POOL="0x8A4187dF0A8FE855cC53A4F7B2D8346588Ee9794"
export BASE_TOKEN="0x07EEd0D7dD40984e47B9D3a3bdded1c536435582"
export QUOTE_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `1` Ethereum Mainnet `cWUSDC/USDC`
- Suggested funding side: `USDC`
- Suggested trade raw: `665998742`
- Suggested trade units: `665.998742`
- Gap fraction: `0.754801`
- Deployer balance on funding side: `52.51225` `USDC`
- Deployer shortfall: `613.486492` `USDC`
- Covered: `False`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ETHEREUM_MAINNET_RPC}"
export INTEGRATION="0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84"
export POOL="0x69776fc607e9edA8042e320e7e43f54d06c68f0E"
export BASE_TOKEN="0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a"
export QUOTE_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
export QUOTE_IN_RAW=REPLACE_QUOTE_IN_RAW
export MIN_BASE_OUT_RAW=REPLACE_MIN_BASE_OUT_RAW
cast send "$QUOTE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$QUOTE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$QUOTE_TOKEN" "$QUOTE_IN_RAW" "$MIN_BASE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `1` Ethereum Mainnet `cWUSDT/USDC`
- Suggested funding side: `USDC`
- Suggested trade raw: `7071662`
- Suggested trade units: `7.071662`
- Gap fraction: `0.756229`
- Deployer balance on funding side: `52.51225` `USDC`
- Deployer shortfall: `0` `USDC`
- Covered: `True`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ETHEREUM_MAINNET_RPC}"
export INTEGRATION="0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84"
export POOL="0x27f3aE7EE71Be3d77bAf17d4435cF8B895DD25D2"
export BASE_TOKEN="0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE"
export QUOTE_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
export QUOTE_IN_RAW=REPLACE_QUOTE_IN_RAW
export MIN_BASE_OUT_RAW=REPLACE_MIN_BASE_OUT_RAW
cast send "$QUOTE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$QUOTE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$QUOTE_TOKEN" "$QUOTE_IN_RAW" "$MIN_BASE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `100` Gnosis Chain `cWAUDC/USDC`
- Suggested funding side: `cWAUDC`
- Suggested trade raw: `0`
- Suggested trade units: `0`
- Gap fraction: `0.515152`
- Deployer balance on funding side: `0` `cWAUDC`
- Deployer shortfall: `0` `cWAUDC`
- Covered: `True`
- Reserve snapshot: `baseRaw=0 quoteRaw=0`
- Sizing note: `Pool reports zero vault reserves; heuristic trade size is informational only.`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${GNOSIS_RPC_URL}"
export INTEGRATION="0x5866c2CeAfcdB36375A731532B434c370885678a"
export POOL="0xeb5A688dF70be2F790719872Be9Ecc5648aEE460"
export BASE_TOKEN="0xddc4063f770f7c49d00b5a10fb552e922aa39b2c"
export QUOTE_TOKEN="0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `137` Polygon `cWAUDC/USDC`
- Suggested funding side: `unknown`
- Suggested trade raw: `unknown`
- Suggested trade units: `unknown`
- Gap fraction: `unknown`
- Deployer balance on funding side: `unknown` ``
- Deployer shortfall: `unknown` ``
- Covered: `unknown`
- Sizing note: `Error: contract 0xc21223249ca28397b4b6541dffaecc539bff0c59 does not have any code`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${POLYGON_MAINNET_RPC}"
export INTEGRATION="0x84353eD1f0C7a703a17aBAd19b0dB15Bc9A5e3e5"
export POOL="0xbD34966FE5Eed81AFffF8081e9BB527Fc8066783"
export BASE_TOKEN="0xFb4B6Cc81211F7d886950158294A44C312abCA29"
export QUOTE_TOKEN="0xc21223249CA28397B4B6541dfFaEcC539BfF0c59"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `43114` Avalanche C-Chain `cWAUDC/USDC`
- Suggested funding side: `cWAUDC`
- Suggested trade raw: `0`
- Suggested trade units: `0`
- Gap fraction: `0.515152`
- Deployer balance on funding side: `0` `cWAUDC`
- Deployer shortfall: `0` `cWAUDC`
- Covered: `True`
- Reserve snapshot: `baseRaw=0 quoteRaw=0`
- Sizing note: `Pool reports zero vault reserves; heuristic trade size is informational only.`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export INTEGRATION="0xf1B771c95573113E993374c0c7cB2dc1a7908B12"
export POOL="0x287edaBDA35195592d7CACe2C1A75eC66caF1D70"
export BASE_TOKEN="0x04e1e22b0d41e99f4275bd40a50480219bc9a223"
export QUOTE_TOKEN="0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
export BASE_IN_RAW=REPLACE_BASE_IN_RAW
export MIN_QUOTE_OUT_RAW=REPLACE_MIN_QUOTE_OUT_RAW
cast send "$BASE_TOKEN" 'approve(address,uint256)(bool)' "$INTEGRATION" "$BASE_IN_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$INTEGRATION" 'swapExactIn(address,address,uint256,uint256)' "$POOL" "$BASE_TOKEN" "$BASE_IN_RAW" "$MIN_QUOTE_OUT_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `56` BSC (BNB Chain) `cWAUSDT/cWUSDC`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export PAIR="0x639D7e64C6f1fC676226f20a0C42aEcDD66545E8"
export TOKEN_A="0xe1a51Bc037a79AB36767561B147eb41780124934"
export TOKEN_B="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `56` BSC (BNB Chain) `cWAUSDT/cWUSDT`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export PAIR="0xe9b082bAa73Fa4DEc7CB3CbD99B19D30BbfE1523"
export TOKEN_A="0xe1a51Bc037a79AB36767561B147eb41780124934"
export TOKEN_B="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `137` Polygon `cWAUSDT/cWUSDC`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${POLYGON_MAINNET_RPC}"
export ROUTER="0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff"
export PAIR="0xe6a5Cb164D4AF7E9794AEd09EC373392D0E7216c"
export TOKEN_A="0xf12e262F85107df26741726b074606CaFa24AAe7"
export TOKEN_B="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `137` Polygon `cWAUSDT/cWUSDT`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${POLYGON_MAINNET_RPC}"
export ROUTER="0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff"
export PAIR="0x8cD2Cb42B81F894eb10D15446DB22A3B31d6fB2E"
export TOKEN_A="0xf12e262F85107df26741726b074606CaFa24AAe7"
export TOKEN_B="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `42220` Celo `cWAUSDT/cWUSDC`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_RPC_URL}"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export PAIR="0xd3B55d6d7C08fDbF5F201e486992643cfF410d91"
export TOKEN_A="0xC158b6cD3A3088C52F797D41f5Aa02825361629e"
export TOKEN_B="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `42220` Celo `cWAUSDT/cWUSDT`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_RPC_URL}"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export PAIR="0xEe9eEBf89C1424e63eFc888929E43a9423357D39"
export TOKEN_A="0xC158b6cD3A3088C52F797D41f5Aa02825361629e"
export TOKEN_B="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `43114` Avalanche C-Chain `cWAUSDT/cWUSDC`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export PAIR="0xaaD6aed8d28B0195D19B4d17F8ee9A1837ff2DCE"
export TOKEN_A="0xff3084410A732231472Ee9f93F5855dA89CC5254"
export TOKEN_B="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```
### `43114` Avalanche C-Chain `cWAUSDT/cWUSDT`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export PAIR="0x418322F48D857277ec4BCc96Bc1580aCCB7EA253"
export TOKEN_A="0xff3084410A732231472Ee9f93F5855dA89CC5254"
export TOKEN_B="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export AMOUNT_A_RAW=REPLACE_AMOUNT_A_RAW
export AMOUNT_B_RAW=REPLACE_AMOUNT_B_RAW
export DEADLINE="$(( $(date +%s) + 3600 ))"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
# Optional: remove bad LP first if you control LP tokens for this pair.
cast send "$TOKEN_A" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_A_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$TOKEN_B" 'approve(address,uint256)(bool)' "$ROUTER" "$AMOUNT_B_RAW" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
cast send "$ROUTER" 'addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)' \
"$TOKEN_A" "$TOKEN_B" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$AMOUNT_A_RAW" "$AMOUNT_B_RAW" "$SIGNER" "$DEADLINE" \
--private-key "$PRIVATE_KEY" --rpc-url "$RPC_URL"
```

View File

@@ -0,0 +1,60 @@
# cW Token USD Pricing (Ethereum Mainnet)
This runbook explains how to attach **USD context** to wrapped basket tokens (`cW*`) when block explorers show **balance** but **$0 value** (no listed market price).
## Tooling
From the repo root:
```bash
./scripts/deployment/price-cw-token-mainnet.sh
./scripts/deployment/price-cw-token-mainnet.sh --json | jq .
```
The script sources `scripts/lib/load-project-env.sh` when present so addresses match your `smom-dbis-138/.env` (or overrides).
**Dependencies:** `cast` (Foundry), `python3`, and `jq` (for `--json`).
## What the script reports
1. **Accounting assumption (1 cWUSDT ≈ 1 USD)**
Use only if your policy treats the wrapper as tracking the underlying stable 1:1. Appropriate for internal books and dashboards where you need a **single consistent mark** without relying on DEX liquidity.
2. **DODO PMM integration — `getPoolPriceOrOracle` / `getPoolPrice`**
Reads `DODO_PMM_INTEGRATION_MAINNET` for the configured pool (`POOL_CWUSDT_USDC_MAINNET`). The integration returns a `uint256` scaled by **1e18** in the project docs when the oracle is aligned with “USD.”
**Important:** For stable/stable pools, the raw integration mid can disagree with **reserve-implied** prices depending on base/quote orientation and PMM parameters. Treat this as one signal, not the only mark.
3. **Implied from vault reserves**
Uses `getPoolReserves` on the same integration for **base** and **quote** raw balances, then applies **token `decimals()`** for cWUSDT and **mainnet canonical USDC** (`USDC_MAINNET`, default `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`).
Computes **USDC per 1 cWUSDT** when base/quote order matches the pool (cWUSDT vs USDC). This is a strong **sanity check** for deep stable pools; thin or imbalanced pools skew the ratio.
4. **Chainlink ETH/USD (macro only)**
Optional reference to the standard ETH/USD feed (`CHAINLINK_ETH_USD_FEED`). This is **not** a direct cW* price; it is useful for macro context or cross-checking RPC health.
## Environment overrides
| Variable | Role |
|----------|------|
| `ETHEREUM_MAINNET_RPC` | Mainnet JSON-RPC endpoint |
| `DODO_PMM_INTEGRATION_MAINNET` | DODO PMM integration contract |
| `POOL_CWUSDT_USDC_MAINNET` | cWUSDT/USDC pool address |
| `CWUSDT_MAINNET` | cWUSDT token |
| `USDC_MAINNET` | Mainnet canonical USDC (do not substitute Chain 138 `OFFICIAL_USDC_ADDRESS` for this script) |
| `CHAINLINK_ETH_USD_FEED` | Chainlink ETH/USD aggregator |
## Etherscan and “$0 value”
Explorers derive the **Value** column from **external** price feeds (Etherscan relies heavily on **CoinGecko** / similar for Ethereum Mainnet ERC-20 USD). Custom `cW*` tokens usually have **no** listing for that contract on chain ID **1**, so **USD shows as zero** even when balances and pools are real.
- **Internal / treasury marks:** use this scripts **accounting line**, **reserve-implied** USDC ratio, or policy—not Etherscans Value column.
- **Actually changing Etherscans Value:** requires **off-chain** listing so aggregators publish a USD price for the **Mainnet** contract. Step-by-step: [ETHERSCAN_USD_VALUE_MAINNET_TOKENS.md](../04-configuration/coingecko/ETHERSCAN_USD_VALUE_MAINNET_TOKENS.md) (CoinGecko/CMC submission ties to [CMC_COINGECKO_SUBMISSION_RUNBOOK.md](../04-configuration/coingecko/CMC_COINGECKO_SUBMISSION_RUNBOOK.md)).
## Broader cW* price table
A generated multi-chain table (mid prices from PMM where available) lives in:
`docs/03-deployment/CW_PUBLIC_NETWORK_PRICES.md`
## Extending to other tokens
The shell script is parameterized by env vars for **cWUSDT** and its **USDC** pool. For other `cW*` assets, point `CWUSDT_MAINNET`, `POOL_*`, and (if needed) quote token at the correct mainnet addresses and re-run. For portfolio-level marks (CoinGecko, OTC, fund admin), use your **external** pricing process; this repo script stays **on-chain** and **policy-transparent**.

View File

@@ -1,11 +1,11 @@
# DBIS Chain 138 — Phases 1-3 Production Gate
# DeFi Oracle Meta Mainnet (Chain 138) — Phases 1-3 Production Gate
**Last updated:** 2026-03-28
**Purpose:** Convert the DBIS master plan into an operational production gate. This document records which Phase 1-3 conditions are currently satisfied, which are partially satisfied, and which still block an honest production declaration.
## Overall status
**Current conclusion:** DBIS Chain 138 has a healthy Besu production base and a working Phase 3 liveness slice, but it is **not yet fully production-complete across the broader DBIS Hyperledger stack**.
**Current conclusion:** DeFi Oracle Meta Mainnet (Chain 138) has a healthy Besu production base and a working Phase 3 liveness slice, but it is **not yet fully production-complete across the broader DBIS Hyperledger stack**.
### What is genuinely production-capable now
@@ -82,7 +82,7 @@
## Production blockers
The following items still prevent a full “DBIS Chain 138 production complete” declaration:
The following items still prevent a full “DeFi Oracle Meta Mainnet (Chain 138) production complete” declaration:
1. `6201` is not a verified active secondary FireFly node and is currently treated as retired / standby until rebuilt.
2. Fabric `6000-6002` are not active peer/orderer workloads; current evidence showed placeholder CTs only, and they have now been stopped and retained as reserve inventory.

View File

@@ -64,7 +64,7 @@ The orchestrator:
| **Chain 138** | If token-aggregation has no c*→WETH pool: fund deployer via **genesis alloc** or **validator transfer**. See [FUNDING_AND_DEPLOYMENT_CHECKLIST.md](FUNDING_AND_DEPLOYMENT_CHECKLIST.md). |
| **Protocolink (public chains)** | Use the quote/output from `protocolink-swap-to-gas.cjs`. Build transaction via [Protocolink API](https://docs.protocolink.com/protocolink-api/overview) (estimate router data, build tx); sign with deployer key and submit. |
| **Cronos (25)** | **Manual (multiple routes):** Protocolink does not support Cronos. Use any aggregator from [config/cro-wemix-swap-routes.json](../../config/cro-wemix-swap-routes.json) (SwapSpace, ChangeNOW, SimpleSwap, StealthEX) to swap ETH/BNB/USDT/USDC → CRO; send to deployer on Cronos. Required ~15 CRO. List all routes: `./scripts/deployment/acquire-cro-and-wemix-gas.sh` or `--list`. |
| **Wemix (1111)** | **Manual (multiple routes):** Use any aggregator from [config/cro-wemix-swap-routes.json](../../config/cro-wemix-swap-routes.json) (SwapSpace, ChangeNOW, SimpleSwap, StealthEX) to swap ETH/BNB/POL → WEMIX; send to deployer on chain 1111. Required ~0.4 WEMIX. List all routes: `./scripts/deployment/acquire-cro-and-wemix-gas.sh` or `--list`. Then run `deploy-bridges-config-ready-chains.sh wemix` and complete-config. See [WEMIX_ACQUISITION_TABLED.md](WEMIX_ACQUISITION_TABLED.md). |
| **Wemix (1111)** | **Manual (multiple routes, only if gas needs a top-up):** Use any aggregator from [config/cro-wemix-swap-routes.json](../../config/cro-wemix-swap-routes.json) (SwapSpace, ChangeNOW, SimpleSwap, StealthEX) to swap ETH/BNB/POL → WEMIX; send to deployer on chain 1111. Current blocker is no longer native gas by default; the live gap is LINK funding on the deployed WEMIX bridge contracts plus a proof transfer. See [WEMIX_ACQUISITION_TABLED.md](WEMIX_ACQUISITION_TABLED.md). |
---

View File

@@ -0,0 +1,37 @@
# External Dependency Blockers
**Purpose:** Canonical list of delivery items that cannot be resolved by repo-only changes and must be satisfied by external implementation, deployment, or infrastructure provisioning.
**Action checklist to clear every blocker:** [REMOVE_ALL_BLOCKERS_CHECKLIST.md](REMOVE_ALL_BLOCKERS_CHECKLIST.md)
## Current blockers
| Blocker ID | External dependency | Pass condition | Repo-side signal |
|---|---|---|---|
| `EXT-DBIS-CORE` | `dbis_core` deployment | `DBIS_CORE_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-CC-PAYMENT-ADAPTERS` | `cc-payment-adapters` implementation and hosting | `CC_PAYMENT_ADAPTERS_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-CC-AUDIT-LEDGER` | `cc-audit-ledger` implementation and hosting | `CC_AUDIT_LEDGER_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-CC-SHARED-EVENTS` | `cc-shared-events` implementation and hosting | `CC_SHARED_EVENTS_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-CC-SHARED-SCHEMAS` | `cc-shared-schemas` implementation and hosting | `CC_SHARED_SCHEMAS_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-FIN-GATEWAY` | FIN / Alliance Access gateway | `FIN_GATEWAY_URL` or `ALLIANCE_ACCESS_URL` is set and reachable | `scripts/verify/check-external-dependencies.sh` |
| `EXT-CHAIN138-CI-RPC` | Chain 138 node reachable from CI runners | `CHAIN138_CI_RPC_URL` or `RPC_URL_138_PUBLIC` returns a block number | `scripts/verify/check-external-dependencies.sh` |
## How to check
Strict mode:
```bash
bash scripts/verify/check-external-dependencies.sh
```
Advisory mode:
```bash
bash scripts/verify/check-external-dependencies.sh --advisory
```
## Notes
- These blockers are expected to remain unresolved until external systems are deployed or pointed at live instances.
- Repo-side readiness scripts now surface these blockers explicitly instead of failing with generic env or connectivity errors.
- `dbis_core` source exists in this workspace, but that does not satisfy `EXT-DBIS-CORE`; the blocker closes only when a live reachable instance exists.

View File

@@ -0,0 +1,5 @@
# Immediate And Same-Day Corridor Assets
Immediate bucket: Mainnet `cWUSDC` and `cWUSDT` with `17777520.488172` USD nominally near-immediate but still constrained by shallow verified public exits.
Same-day corridor bucket: Chain 138 `cUSDC`, `cUSDT`, and stable LP claims totaling `1381462148.370564` USD under the current corridor model.

View File

@@ -0,0 +1,11 @@
# Immediate Live Production Task List: Source To CEX Execution
This task list is now backed by repo-native policy and readiness artifacts:
- `config/extraction/source-to-cex-production-policy.json`
- `config/extraction/additional-wallet-inventory.json`
- `reports/extraction/source-to-cex-offchain-sink-validation-latest.json`
- `docs/03-deployment/SOURCE_TO_CEX_EXECUTION_PLAN.md`
- `docs/03-deployment/SOURCE_TO_CEX_PRODUCTION_READINESS.md`
Immediate repo-completable phases are done: policy, planning, inventory schema, and readiness reporting. The remaining blockers are live off-chain sink details and operator promotion of `production_enabled`.

View File

@@ -14,6 +14,8 @@ This document provides a master index of all operational runbooks and procedures
**Proxmox VE hosts, peering, FQDN/NPMplus summary, deployment gates (human + JSON):** [PROXMOX_VE_OPERATIONAL_DEPLOYMENT_TEMPLATE.md](PROXMOX_VE_OPERATIONAL_DEPLOYMENT_TEMPLATE.md).
**Chain 138 txpool incident standard recovery:** `bash scripts/fix-all-validators-and-txpool.sh` then `bash scripts/maintenance/apply-chain138-strict-future-tx-pool.sh` then `bash scripts/clear-all-transaction-pools.sh` then `bash scripts/monitoring/monitor-blockchain-health.sh`. This is the default path when pending hashes keep reappearing, future-nonce junk survives a clear, or block production is affected by txpool residue.
---
## Quick Reference
@@ -202,6 +204,7 @@ If an RPC node returns wrong chain ID or block 0 / no block: use the dedicated r
- **[QBFT_TROUBLESHOOTING.md](../09-troubleshooting/QBFT_TROUBLESHOOTING.md)** - QBFT consensus troubleshooting
- **Block Production Issues** - [BLOCK_PRODUCTION_FIX_RUNBOOK.md](../08-monitoring/BLOCK_PRODUCTION_FIX_RUNBOOK.md) — restore block production (permissioning TOML, tx-pool, restart validators 10001004)
- **Validator Recognition** - Validator not being recognized
- **Chain 138 txpool incidents** - Run `bash scripts/fix-all-validators-and-txpool.sh`, then `bash scripts/maintenance/apply-chain138-strict-future-tx-pool.sh`, then `bash scripts/clear-all-transaction-pools.sh`, then `bash scripts/monitoring/monitor-blockchain-health.sh`. The strict future-queue step normalizes `tx-pool-max-future-by-sender=1` fleet-wide so far-future thirdweb or automation residue does not repopulate the mesh after restart.
---
@@ -213,6 +216,13 @@ If an RPC node returns wrong chain ID or block 0 / no block: use the dedicated r
---
## TsunamiSwap
- **[../00-meta/AAVE_CHAIN138_AND_MARIONETTE_TSUNAMISWAP_PLAN.md](../00-meta/AAVE_CHAIN138_AND_MARIONETTE_TSUNAMISWAP_PLAN.md)** — Canonical TsunamiSwap VM `5010` plan, current repo-authoritative DEX link, and publish checklist.
- **Inventory helper:** [`../../scripts/deployment/tsunamiswap-vm-5010-provision.sh`](../../scripts/deployment/tsunamiswap-vm-5010-provision.sh)
---
## GRU M1 Listing Operations
### GRU M1 Listing Dry-Run

View File

@@ -0,0 +1,227 @@
# Mr. Promod GRU v2 Full Mesh Gap Report
- Generated: `2026-04-18T11:53:36Z`
- Program: `promod-gru-v2-full-mesh-gap-report`
- Purpose: strict per-network report for the remaining GRU v2 `cW*` mesh across DODO PMM, Uniswap V2, Balancer, Curve, and related venue surfaces.
## Accounting Rule
- Source balance fraction to move: `75%`
- Destination network count: `10`
- Per-chain fraction of current source balance: `7.5%`
- Base unit rule: `amount_75 = balance * 75 // 100; per_chain = amount_75 // 10; remainder stays on Chain 138 or is adjusted on the last transfer`
## Repo Reality
- Chain 138 generic source-to-all-destinations bridge: `not_available_as_single_generic_bridge_button`
- Supported pattern: destination cW deployment plus lock/mint bridge or destination-side minting through the CW bridge program where selectors, mappings, and destination receivers are actually configured
- Venue summary:
- DODO PMM: live cW asset pools are recorded across the public network set
- Uniswap V2: live core rail is recorded in deployment-status; live wave-1 wrapped mesh completion is tracked separately in the phase-2 completion report
- Balancer: currently modeled as reference or planned venue surface, not a live cW asset mesh deployment set
- Curve: currently modeled as reference or planned venue surface, not a live cW asset mesh deployment set
- Uniswap V3: currently modeled as reference surface in deployment-status gasReferenceVenues
- 1inch: aggregator visibility surface only, not a pool deployment venue
## Network Summary
- DODO PMM live chain count: `10` / `10`
- Uniswap V2 wave-1 complete chain count: `10` / `10`
- Balancer live chain count: `0` / `10`
- Curve live chain count: `0` / `10`
- Uniswap V3 live chain count: `0` / `10`
| Chain | Network | Bridge | DODO PMM | Uniswap V2 | Balancer | Curve | Remaining Mesh Assets After Wave 1 |
|---|---|---|---|---|---|---|---|
| `1` | Ethereum Mainnet | `True` | `15 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `10` | Optimism | `True` | `12 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `25` | Cronos | `True` | `12 live` | `6 wave-1 pairs` | `unsupported` | `unsupported` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `56` | BSC (BNB Chain) | `True` | `10 live` | `6 wave-1 pairs` | `unsupported` | `unsupported` | `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` |
| `100` | Gnosis Chain | `True` | `10 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `137` | Polygon | `True` | `12 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `8453` | Base | `True` | `10 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `42161` | Arbitrum One | `True` | `10 live` | `6 wave-1 pairs` | `reference_only` | `reference_only` | `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` |
| `42220` | Celo | `True` | `10 live` | `6 wave-1 pairs` | `unsupported` | `reference_only` | `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` |
| `43114` | Avalanche C-Chain | `True` | `10 live` | `6 wave-1 pairs` | `unsupported` | `reference_only` | `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` |
## Per-Network Detail
### Chain `1` — Ethereum Mainnet
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `15`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWUSDC/USDC`, `cWUSDC/USDT`, `cWUSDT/USDC`, `cWUSDT/USDT`, `cWUSDT/cWUSDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `10` — Optimism
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `12`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWUSDC/USDC`, `cWUSDT/USDT`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `25` — Cronos
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `12`
- `cWAUDC/USDT`, `cWCADC/USDT`, `cWCHFC/USDT`, `cWEURC/USDT`, `cWEURT/USDT`, `cWGBPC/USDT`, `cWGBPT/USDT`, `cWJPYC/USDT`, `cWUSDC/USDC`, `cWUSDT/USDT`, `cWXAUC/USDT`, `cWXAUT/USDT`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `unsupported`
- Curve status: `unsupported`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `56` — BSC (BNB Chain)
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDT`, `cWCADC/USDT`, `cWCHFC/USDT`, `cWEURC/USDT`, `cWEURT/USDT`, `cWGBPC/USDT`, `cWGBPT/USDT`, `cWJPYC/USDT`, `cWXAUC/USDT`, `cWXAUT/USDT`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `unsupported`
- Curve status: `unsupported`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWUSDW/cWUSDC`, `cWUSDW/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `100` — Gnosis Chain
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `137` — Polygon
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `12`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWUSDC/USDC`, `cWUSDT/USDT`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `8453` — Base
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `42161` — Arbitrum One
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `reference_only`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `42220` — Celo
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `unsupported`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWUSDW/cWUSDC`, `cWUSDW/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`
### Chain `43114` — Avalanche C-Chain
- Bridge available: `True`
- cW assets: `cWAUDC`, `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDC`, `cWUSDT`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- DODO PMM live pairs: `10`
- `cWAUDC/USDC`, `cWCADC/USDC`, `cWCHFC/USDC`, `cWEURC/USDC`, `cWEURT/USDC`, `cWGBPC/USDC`, `cWGBPT/USDC`, `cWJPYC/USDC`, `cWXAUC/USDC`, `cWXAUT/USDC`
- Uniswap V2 core pairs: `1`
- `cWUSDT/cWUSDC`
- Uniswap V2 wave-1 pairs: `6`
- `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT`, `cWGBPC/cWUSDC`, `cWGBPC/cWUSDT`
- Balancer status: `unsupported`
- Curve status: `reference_only`
- Uniswap V3 status: `reference_only`
- 1inch status: `reference_only`
- Remaining wrapped mesh assets after wave 1: `cWAUSDT`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURT`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT`
- Recommended next wrapped mesh pairs: `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURT/cWUSDC`, `cWEURT/cWUSDT`, `cWGBPT/cWUSDC`, `cWGBPT/cWUSDT`, `cWJPYC/cWUSDC`, `cWJPYC/cWUSDT`, `cWUSDW/cWUSDC`, `cWUSDW/cWUSDT`, `cWXAUC/cWUSDC`, `cWXAUC/cWUSDT`, `cWXAUT/cWUSDC`, `cWXAUT/cWUSDT`

View File

@@ -0,0 +1,27 @@
# Mr. Promod Uniswap V2 First Deployment Target Matrix
- Generated: `2026-04-17T17:47:29Z`
- Program: Mr. Promod Uniswap V2 cW Deep Liquidity Program
- Mainnet funding posture: `triple-rail-support` via `cWUSDC, cWUSDT, cWAUSDT`
- Purpose: choose the first pair per chain so the first live pool rollout is concrete rather than generic.
| Chain | Network | First Pair | Why It Should Be First | Required Tokens | Other GRU v2 cW* Tokens | Next Wrapped Expansion Pairs | Post-Deploy Commands |
|---|---|---|---|---|---|---|---|
| `1` | Ethereum Mainnet | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `10` | Optimism | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `25` | Cronos | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `56` | BSC | `cWUSDT/cWUSDC` | Core wrapped support rail and the one we are standardizing on first; it creates transferable depth between the two settlement-adjacent cW rails before any canonical stable exit pool. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `100` | Gnosis | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `137` | Polygon | `cWUSDT/cWUSDC` | Core wrapped support rail and the one we are standardizing on first; it creates transferable depth between the two settlement-adjacent cW rails before any canonical stable exit pool. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `8453` | Base | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `42161` | Arbitrum One | `cWUSDT/cWUSDC` | Core wrapped support rail and the fixed first deployment target where cWUSDT and cWUSDC are already documented. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `42220` | Celo | `cWUSDT/cWUSDC` | Core wrapped support rail and the one we are standardizing on first; it creates transferable depth between the two settlement-adjacent cW rails before any canonical stable exit pool. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
| `43114` | Avalanche C-Chain | `cWUSDT/cWUSDC` | Core wrapped support rail and the one we are standardizing on first; it creates transferable depth between the two settlement-adjacent cW rails before any canonical stable exit pool. | `cWUSDT`, `cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`<br>`python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`<br>`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`<br>`bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh` |
## Selection Rule
- First choice is always `cWUSDT/cWUSDC` when both rails are documented on the chain.
- If `cWUSDT/cWUSDC` is unavailable, prefer a wrapped-first fallback before opening a canonical settlement rail.
- The other documented GRU v2 `cW*` assets expand next as wrapped pairs against `cWUSDC` and `cWUSDT`.
- Canonical settlement rails such as `cWUSDC/USDC` or `cWUSDT/USDT` become the first target only when the chain cannot open with the wrapped support rail.
- `cWAUSDT` remains a wrapped-depth support asset, not the default first target, unless it is required as the only viable wrapped-first fallback.

View File

@@ -0,0 +1,40 @@
# Mr. Promod Uniswap V2 Liquidity Program
- Generated: `2026-04-17T17:47:28Z`
- Program: Mr. Promod Uniswap V2 cW Deep Liquidity Program
- Strict note: this is a repo-native desired-state rollout package for Uniswap V2 or Uniswap-V2-compatible pools. It does not claim live deployment unless factory/router addresses and pool addresses are recorded.
- Mainnet funding posture: `triple-rail-support` via `cWUSDC, cWUSDT, cWAUSDT`
## Deployment Model
- Phase 1: build wrapped-depth support first when canonical USDC or USDT is scarce.
- Phase 2: add or deepen canonical settlement rails once enough hub-stable inventory exists.
- Promotion gate: do not treat any Uniswap V2 rail as live until its factory/router env, pool address, and indexer visibility are all recorded.
## Wrapped-Depth Policy
- Preferred wrapped pairs: `cWAUSDT/cWUSDC, cWAUSDT/cWUSDT, cWUSDT/cWUSDC`
- Allocation split: flagship `50%`, second `30%`, third `20%`
## Operator Matrix
| Chain | Network | Tier | Hub Stable | Core Wrapped Pairs | Additional GRU v2 cW* Tokens | Next Wrapped Expansion Pairs | Settlement Phase Pairs | Existing PMM Analogs |
|---|---|---|---|---|---|---|---|---|
| `1` | Ethereum Mainnet | `tier_1` | `USDC` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWUSDT/cWUSDC` |
| `10` | Optimism | `tier_1` | `USDC` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` | `cWUSDC/USDC` |
| `25` | Cronos | `tier_2` | `USDT` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDT`, `cWUSDT/USDT` | `cWUSDT/USDT` |
| `56` | BSC | `tier_2` | `USDT` | `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDT`, `cWUSDT/USDT`, `cWAUSDT/USDT` | — |
| `100` | Gnosis | `tier_2` | `USDC` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` | — |
| `137` | Polygon | `tier_1` | `USDC` | `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` | `cWUSDC/USDC` |
| `8453` | Base | `tier_1` | `USDC` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` | — |
| `42161` | Arbitrum One | `tier_1` | `USDC` | `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` | — |
| `42220` | Celo | `tier_2` | `USDC` | `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` | — |
| `43114` | Avalanche C-Chain | `tier_2` | `USDC` | `cWAUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWUSDT/cWUSDC` | `cWAUDC`, `cWBTC`, `cWCADC`, `cWCHFC`, `cWEURC`, `cWEURT`, `cWGBPC`, `cWGBPT`, `cWJPYC`, `cWUSDW`, `cWXAUC`, `cWXAUT` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` | — |
## Readiness Rules
- Use `cWAUSDT` as a wrapped-depth support asset, not as a full replacement for `USDC` or `USDT` settlement.
- Keep `cWUSDT/cWUSDC` available everywhere both core wrapped rails are documented.
- After the first rail is live, expand the other documented GRU v2 `cW*` assets against `cWUSDC` and `cWUSDT` before opening broad canonical settlement exits.
- Prefer `cWUSDC/USDC`, `cWUSDT/USDT`, or `cWAUSDT/USDC|USDT` only after canonical hub inventory is deep enough to matter.
- For every promoted chain, add the new pools to `deployment-status.json`, Uniswap V2 env config, and token-aggregation indexing.

View File

@@ -0,0 +1,19 @@
# Mr. Promod Uniswap V2 Live Pair Discovery
- Generated: `2026-04-22T04:59:28Z`
- Live pairs discovered: `19`
- Healthy live pairs: `10`
- Write mode: `False`
| Chain | Network | Env Ready | Live Pairs Found | Healthy Live Pairs |
|---|---|---|---|---|
| `1` | Ethereum Mainnet | `True` | `cWUSDC/USDC`, `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `10` | Optimism | `True` | `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `25` | Cronos | `True` | `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `56` | BSC (BNB Chain) | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `100` | Gnosis Chain | `True` | `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `137` | Polygon | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `42220` | Celo | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `43114` | Avalanche C-Chain | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `8453` | Base | `True` | `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `42161` | Arbitrum One | `True` | `cWUSDT/cWUSDC` | `cWUSDT/cWUSDC` |

View File

@@ -0,0 +1,112 @@
# Mr. Promod Uniswap V2 Phase 1 Bridge 3x Matrix
- Generated: `2026-04-17T18:22:33Z`
- Purpose: strict triple-sized Chain 138 bridge funding plan for the remaining phase-1 pool rollout.
- Bridge multiplier: `3x`
- Total cUSDT to bridge from Chain 138: `21000`
- Total cUSDC to bridge from Chain 138: `21002.4`
| Chain | Network | Base cUSDT Need | Base cUSDC Need | 3x cUSDT To Bridge | 3x cUSDC To Bridge | Bridge Env |
|---|---|---:|---:|---:|---:|---|
| `1` | Ethereum Mainnet | `0` | `0` | `0` | `0` | `CW_BRIDGE_MAINNET` |
| `10` | Optimism | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_OPTIMISM` |
| `25` | Cronos | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_CRONOS` |
| `56` | BSC | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_BSC` |
| `100` | Gnosis | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_GNOSIS` |
| `137` | Polygon | `0` | `0` | `0` | `0` | `CW_BRIDGE_POLYGON` |
| `8453` | Base | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_BASE` |
| `42161` | Arbitrum One | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_ARBITRUM` |
| `42220` | Celo | `1000` | `1000` | `3000` | `3000` | `CW_BRIDGE_CELO` |
| `43114` | Avalanche | `0` | `0.8` | `0` | `2.4` | `CW_BRIDGE_AVALANCHE` |
## Notes
### Chain `1` — Ethereum Mainnet
- Recommended action: `seed_now`
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `0`
- Bridge env: `CW_BRIDGE_MAINNET`
- Bridge present: `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.
### Chain `10` — Optimism
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_OPTIMISM`
- Bridge present: `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.
### Chain `25` — Cronos
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_CRONOS`
- Bridge present: `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.
### Chain `56` — BSC
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_BSC`
- Bridge present: `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.
### Chain `100` — Gnosis
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_GNOSIS`
- Bridge present: `true`
- Bridge note: Bridge path is structurally available for chain `100` via `CW_BRIDGE_GNOSIS` 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.
### Chain `137` — Polygon
- Recommended action: `seed_now`
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `0`
- Bridge env: `CW_BRIDGE_POLYGON`
- Bridge present: `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.
### Chain `8453` — Base
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_BASE`
- Bridge present: `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.
### Chain `42161` — Arbitrum One
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_ARBITRUM`
- Bridge present: `true`
- Bridge note: Bridge path is structurally available for chain `42161` via `CW_BRIDGE_ARBITRUM` 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.
### Chain `42220` — Celo
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- Bridge env: `CW_BRIDGE_CELO`
- Bridge present: `true`
- Bridge note: Bridge path is structurally available for chain `42220` via `CW_BRIDGE_CELO` 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.
### Chain `43114` — Avalanche
- Recommended action: `bridge_or_mint_missing_side_then_seed`
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `2.4`
- Bridge env: `CW_BRIDGE_AVALANCHE`
- Bridge present: `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.

View File

@@ -0,0 +1,420 @@
# Mr. Promod Uniswap V2 Phase 1 Bridge 3x Operator Packet
- Generated: `2026-04-17T18:23:46Z`
- Purpose: strict operator packet for `3x` bridge sizing and post-funding pool deployment.
- Bridge multiplier: `3x`
| Chain | Network | 3x cUSDT | 3x cUSDC | Destination cW Addresses | CW_BRIDGE Env |
|---|---|---:|---:|---|---|
| `1` | Ethereum Mainnet | `0` | `0` | `cWUSDT=0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE`, `cWUSDC=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` | `CW_BRIDGE_MAINNET` |
| `10` | Optimism | `3000` | `3000` | `cWUSDT=0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`, `cWUSDC=0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105` | `CW_BRIDGE_OPTIMISM` |
| `25` | Cronos | `3000` | `3000` | `cWUSDT=0x72948a7a813B60b37Cd0c920C4657DbFF54312b8`, `cWUSDC=0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec` | `CW_BRIDGE_CRONOS` |
| `56` | BSC | `3000` | `3000` | `cWUSDT=0x9a1D0dBEE997929ED02fD19E0E199704d20914dB`, `cWUSDC=0x5355148C4740fcc3D7a96F05EdD89AB14851206b` | `CW_BRIDGE_BSC` |
| `100` | Gnosis | `3000` | `3000` | `cWUSDT=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`, `cWUSDC=0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4` | `CW_BRIDGE_GNOSIS` |
| `137` | Polygon | `0` | `0` | `cWUSDT=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`, `cWUSDC=0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4` | `CW_BRIDGE_POLYGON` |
| `8453` | Base | `3000` | `3000` | `cWUSDT=0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`, `cWUSDC=0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105` | `CW_BRIDGE_BASE` |
| `42161` | Arbitrum One | `3000` | `3000` | `cWUSDT=0x73ADaF7dBa95221c080db5631466d2bC54f6a76B`, `cWUSDC=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF` | `CW_BRIDGE_ARBITRUM` |
| `42220` | Celo | `3000` | `3000` | `cWUSDT=0x73376eB92c16977B126dB9112936A20Fa0De3442`, `cWUSDC=0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3` | `CW_BRIDGE_CELO` |
| `43114` | Avalanche | `0` | `2.4` | `cWUSDT=0x8142BA530B08f3950128601F00DaaA678213DFdf`, `cWUSDC=0x0C242b513008Cd49C89078F5aFb237A3112251EB` | `CW_BRIDGE_AVALANCHE` |
## Post-Funding Deploy Blocks
### Chain `1` — Ethereum Mainnet
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `0`
- CW_BRIDGE env: `CW_BRIDGE_MAINNET`
- Recommended action: `seed_now`
```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
```
### Chain `10` — Optimism
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_OPTIMISM`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${OPTIMISM_MAINNET_RPC}"
export FACTORY="0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf"
export ROUTER="0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `25` — Cronos
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_CRONOS`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CRONOS_RPC_URL}"
export FACTORY="0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15"
export ROUTER="0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae"
export CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `56` — BSC
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_BSC`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export FACTORY="0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `100` — Gnosis
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_GNOSIS`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${GNOSIS_MAINNET_RPC}"
export FACTORY="0xc35DADB65012eC5796536bD9864eD8773aBc74C4"
export ROUTER="0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"
export CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `137` — Polygon
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `0`
- CW_BRIDGE env: `CW_BRIDGE_POLYGON`
- Recommended action: `seed_now`
```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
```
### Chain `8453` — Base
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_BASE`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BASE_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42161` — Arbitrum One
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_ARBITRUM`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ARBITRUM_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42220` — Celo
- 3x cUSDT to bridge: `3000`
- 3x cUSDC to bridge: `3000`
- CW_BRIDGE env: `CW_BRIDGE_CELO`
- Recommended action: `bridge_or_mint_destination_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_MAINNET_RPC}"
export FACTORY="0x62d5b84bE28a183aBB507E125B384122D2C25fAE"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `43114` — Avalanche
- 3x cUSDT to bridge: `0`
- 3x cUSDC to bridge: `2.4`
- CW_BRIDGE env: `CW_BRIDGE_AVALANCHE`
- Recommended action: `bridge_or_mint_missing_side_then_seed`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export FACTORY="0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="2400000"
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
```

View File

@@ -0,0 +1,112 @@
# Mr. Promod Uniswap V2 Phase 1 Bridge-From-138 Matrix
- Generated: `2026-04-17T18:20:51Z`
- Signer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8`
- Purpose: strict destination funding matrix from Chain 138 GRU v2 feeder inventory for the remaining phase-1 pool rollout.
- Total cUSDT needed from Chain 138: `7000`
- Total cUSDC needed from Chain 138: `7000.8`
| Chain | Network | cUSDT Needed | cUSDC Needed | Bridge Env | Bridge Present | Recommended Action |
|---|---|---:|---:|---|---|---|
| `1` | Ethereum Mainnet | `0` | `0` | `CW_BRIDGE_MAINNET` | `true` | `seed_now` |
| `10` | Optimism | `1000` | `1000` | `CW_BRIDGE_OPTIMISM` | `true` | `bridge_or_mint_destination_then_seed` |
| `25` | Cronos | `1000` | `1000` | `CW_BRIDGE_CRONOS` | `true` | `bridge_or_mint_destination_then_seed` |
| `56` | BSC | `1000` | `1000` | `CW_BRIDGE_BSC` | `true` | `bridge_or_mint_destination_then_seed` |
| `100` | Gnosis | `1000` | `1000` | `CW_BRIDGE_GNOSIS` | `true` | `bridge_or_mint_destination_then_seed` |
| `137` | Polygon | `0` | `0` | `CW_BRIDGE_POLYGON` | `true` | `seed_now` |
| `8453` | Base | `1000` | `1000` | `CW_BRIDGE_BASE` | `true` | `bridge_or_mint_destination_then_seed` |
| `42161` | Arbitrum One | `1000` | `1000` | `CW_BRIDGE_ARBITRUM` | `true` | `bridge_or_mint_destination_then_seed` |
| `42220` | Celo | `1000` | `1000` | `CW_BRIDGE_CELO` | `true` | `bridge_or_mint_destination_then_seed` |
| `43114` | Avalanche | `0` | `0.8` | `CW_BRIDGE_AVALANCHE` | `true` | `bridge_or_mint_missing_side_then_seed` |
## Notes
### Chain `1` — Ethereum Mainnet
- Tokens missing on destination: `none`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_MAINNET`
- Bridge present: `true`
- Recommended action: `seed_now`
- 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.
### Chain `10` — Optimism
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `true`
- Bridge config env: `CW_BRIDGE_OPTIMISM`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 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.
### Chain `25` — Cronos
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_CRONOS`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 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.
### Chain `56` — BSC
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_BSC`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 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.
### Chain `100` — Gnosis
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_GNOSIS`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- Bridge note: Bridge path is structurally available for chain `100` via `CW_BRIDGE_GNOSIS` 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.
### Chain `137` — Polygon
- Tokens missing on destination: `none`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_POLYGON`
- Bridge present: `true`
- Recommended action: `seed_now`
- 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.
### Chain `8453` — Base
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `true`
- Bridge config env: `CW_BRIDGE_BASE`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 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.
### Chain `42161` — Arbitrum One
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_ARBITRUM`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- Bridge note: Bridge path is structurally available for chain `42161` via `CW_BRIDGE_ARBITRUM` 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.
### Chain `42220` — Celo
- Tokens missing on destination: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_CELO`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_destination_then_seed`
- Bridge note: Bridge path is structurally available for chain `42220` via `CW_BRIDGE_CELO` 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.
### Chain `43114` — Avalanche
- Tokens missing on destination: `cWUSDC`
- Minimum gas issue: `false`
- Bridge config env: `CW_BRIDGE_AVALANCHE`
- Bridge present: `true`
- Recommended action: `bridge_or_mint_missing_side_then_seed`
- 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.

View File

@@ -0,0 +1,760 @@
# Mr. Promod Uniswap V2 Phase 1 Bridge-Or-Mint Execution Runbook
- Generated: `2026-04-17T18:42:43Z`
- Purpose: strict bridge-or-mint runbook matched to the `3x` operator packet.
- Source chain: `138` / Chain 138
- Source cUSDT: `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22`
- Source cUSDC: `0xf22258f57794CC8E06237084b353Ab30fFfa640b`
## Operating Rule
1. If the chain is already funded, seed the pool directly.
2. If the chain has a documented selector env and `CW_BRIDGE_<CHAIN>`, prefer bridge preflight and then follow the cW bridge runbooks.
3. If the bridge path is not fully parameterized in repo env, use the exact destination mint fallback block.
4. After funding lands, execute the post-funding deploy block and then refresh discovery and promotion gates.
| Chain | Network | Preferred Path | 3x cUSDT | 3x cUSDC | CW_BRIDGE Env | Selector Env |
|---|---|---|---:|---:|---|---|
| `1` | Ethereum Mainnet | `seed_now` | `0` | `0` | `CW_BRIDGE_MAINNET` | `ETH_MAINNET_SELECTOR` |
| `10` | Optimism | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_OPTIMISM` | `OPTIMISM_SELECTOR` |
| `25` | Cronos | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_CRONOS` | `CRONOS_SELECTOR` |
| `56` | BSC | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_BSC` | `BSC_SELECTOR` |
| `100` | Gnosis | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_GNOSIS` | `GNOSIS_SELECTOR` |
| `137` | Polygon | `seed_now` | `0` | `0` | `CW_BRIDGE_POLYGON` | `POLYGON_SELECTOR` |
| `8453` | Base | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_BASE` | `BASE_SELECTOR` |
| `42161` | Arbitrum One | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_ARBITRUM` | `ARBITRUM_SELECTOR` |
| `42220` | Celo | `mint_then_seed` | `3000` | `3000` | `CW_BRIDGE_CELO` | `missing` |
| `43114` | Avalanche | `bridge_then_seed` | `0` | `2.4` | `CW_BRIDGE_AVALANCHE` | `AVALANCHE_SELECTOR` |
## Per-Chain Runbook
### Chain `1` — Ethereum Mainnet
- Preferred path: `seed_now`
- Recommended action: `seed_now`
- 3x cUSDT from 138: `0`
- 3x cUSDC from 138: `0`
- Destination cWUSDT: `0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE`
- Destination cWUSDC: `0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a`
- CW_BRIDGE env: `CW_BRIDGE_MAINNET`
- Selector env: `ETH_MAINNET_SELECTOR`
Post-funding deploy block:
```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
```
### Chain `10` — Optimism
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`
- Destination cWUSDC: `0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105`
- CW_BRIDGE env: `CW_BRIDGE_OPTIMISM`
- Selector env: `OPTIMISM_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${OPTIMISM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_OPTIMISM}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${OPTIMISM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- Mint `cWUSDC` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${OPTIMISM_MAINNET_RPC}"
export FACTORY="0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf"
export ROUTER="0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `25` — Cronos
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x72948a7a813B60b37Cd0c920C4657DbFF54312b8`
- Destination cWUSDC: `0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec`
- CW_BRIDGE env: `CW_BRIDGE_CRONOS`
- Selector env: `CRONOS_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CRONOS_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CRONOS}"
export DEST_CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export DEST_CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${CRONOS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```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`:
```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
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CRONOS_RPC_URL}"
export FACTORY="0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15"
export ROUTER="0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae"
export CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `56` — BSC
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x9a1D0dBEE997929ED02fD19E0E199704d20914dB`
- Destination cWUSDC: `0x5355148C4740fcc3D7a96F05EdD89AB14851206b`
- CW_BRIDGE env: `CW_BRIDGE_BSC`
- Selector env: `BSC_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BSC_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BSC}"
export DEST_CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export DEST_CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BSC_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```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`:
```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
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export FACTORY="0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `100` — Gnosis
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`
- Destination cWUSDC: `0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4`
- CW_BRIDGE env: `CW_BRIDGE_GNOSIS`
- Selector env: `GNOSIS_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${GNOSIS_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_GNOSIS}"
export DEST_CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export DEST_CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${GNOSIS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- Mint `cWUSDC` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${GNOSIS_MAINNET_RPC}"
export FACTORY="0xc35DADB65012eC5796536bD9864eD8773aBc74C4"
export ROUTER="0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"
export CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `137` — Polygon
- Preferred path: `seed_now`
- Recommended action: `seed_now`
- 3x cUSDT from 138: `0`
- 3x cUSDC from 138: `0`
- Destination cWUSDT: `0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`
- Destination cWUSDC: `0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4`
- CW_BRIDGE env: `CW_BRIDGE_POLYGON`
- Selector env: `POLYGON_SELECTOR`
Post-funding deploy block:
```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
```
### Chain `8453` — Base
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`
- Destination cWUSDC: `0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105`
- CW_BRIDGE env: `CW_BRIDGE_BASE`
- Selector env: `BASE_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BASE_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BASE}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BASE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- Mint `cWUSDC` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BASE_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42161` — Arbitrum One
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x73ADaF7dBa95221c080db5631466d2bC54f6a76B`
- Destination cWUSDC: `0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`
- CW_BRIDGE env: `CW_BRIDGE_ARBITRUM`
- Selector env: `ARBITRUM_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${ARBITRUM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_ARBITRUM}"
export DEST_CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export DEST_CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${ARBITRUM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73ADaF7dBa95221c080db5631466d2bC54f6a76B" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- Mint `cWUSDC` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ARBITRUM_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42220` — Celo
- Preferred path: `mint_then_seed`
- Recommended action: `bridge_or_mint_destination_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- Destination cWUSDT: `0x73376eB92c16977B126dB9112936A20Fa0De3442`
- Destination cWUSDC: `0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3`
- CW_BRIDGE env: `CW_BRIDGE_CELO`
- Selector env: `missing`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CELO_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CELO}"
export DEST_CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export DEST_CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
# DEST_SELECTOR env is not currently documented for this chain in smom-dbis-138/.env
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDT` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73376eB92c16977B126dB9112936A20Fa0De3442" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- Mint `cWUSDC` `1000`:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_MAINNET_RPC}"
export FACTORY="0x62d5b84bE28a183aBB507E125B384122D2C25fAE"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `43114` — Avalanche
- Preferred path: `bridge_then_seed`
- Recommended action: `bridge_or_mint_missing_side_then_seed`
- 3x cUSDT from 138: `0`
- 3x cUSDC from 138: `2.4`
- Destination cWUSDT: `0x8142BA530B08f3950128601F00DaaA678213DFdf`
- Destination cWUSDC: `0x0C242b513008Cd49C89078F5aFb237A3112251EB`
- CW_BRIDGE env: `CW_BRIDGE_AVALANCHE`
- Selector env: `AVALANCHE_SELECTOR`
Bridge preflight block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${AVALANCHE_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_AVALANCHE}"
export DEST_CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export DEST_CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="0"
export BRIDGE_CUSDC_HUMAN="2.4"
export BRIDGE_CUSDT_RAW="0"
export BRIDGE_CUSDC_RAW="2400000"
export DEST_SELECTOR="${AVALANCHE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback blocks:
- Mint `cWUSDC` `0.8`:
```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" \
--rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy block:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export FACTORY="0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="2400000"
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
```

View File

@@ -0,0 +1,195 @@
# Mr. Promod Uniswap V2 Phase 1 Execution Checklist
- Generated: `2026-04-17T17:55:54Z`
- Program: Mr. Promod Uniswap V2 cW Deep Liquidity Program
- Mainnet funding posture: `triple-rail-support` via `cWUSDC, cWUSDT, cWAUSDT`
- Purpose: exact chain-by-chain checklist for the first full phase 1 rollout of `cWUSDT/cWUSDC`.
## Global Rule
- Do not advance to the next chain until the current chain's `cWUSDT/cWUSDC` pair is discoverable on-chain and recordable in `deployment-status.json`.
| Chain | Network | Phase 1 Pair | Required Env | RPC Keys | Required Token Addresses |
|---|---|---|---|---|---|
| `1` | Ethereum Mainnet | `cWUSDT/cWUSDC` | `CHAIN_1_UNISWAP_V2_FACTORY`, `CHAIN_1_UNISWAP_V2_ROUTER`, `CHAIN_1_UNISWAP_V2_START_BLOCK` | `ETHEREUM_MAINNET_RPC` | `cWUSDT=0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE`, `cWUSDC=0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a` |
| `10` | Optimism | `cWUSDT/cWUSDC` | `CHAIN_10_UNISWAP_V2_FACTORY`, `CHAIN_10_UNISWAP_V2_ROUTER`, `CHAIN_10_UNISWAP_V2_START_BLOCK` | `OPTIMISM_RPC_URL`, `OPTIMISM_MAINNET_RPC` | `cWUSDT=0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`, `cWUSDC=0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105` |
| `25` | Cronos | `cWUSDT/cWUSDC` | `CHAIN_25_UNISWAP_V2_FACTORY`, `CHAIN_25_UNISWAP_V2_ROUTER`, `CHAIN_25_UNISWAP_V2_START_BLOCK` | `CRONOS_RPC_URL`, `CRONOS_MAINNET_RPC` | `cWUSDT=0x72948a7a813B60b37Cd0c920C4657DbFF54312b8`, `cWUSDC=0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec` |
| `56` | BSC | `cWUSDT/cWUSDC` | `CHAIN_56_UNISWAP_V2_FACTORY`, `CHAIN_56_UNISWAP_V2_ROUTER`, `CHAIN_56_UNISWAP_V2_START_BLOCK` | `BSC_RPC_URL`, `BSC_MAINNET_RPC` | `cWUSDT=0x9a1D0dBEE997929ED02fD19E0E199704d20914dB`, `cWUSDC=0x5355148C4740fcc3D7a96F05EdD89AB14851206b` |
| `100` | Gnosis | `cWUSDT/cWUSDC` | `CHAIN_100_UNISWAP_V2_FACTORY`, `CHAIN_100_UNISWAP_V2_ROUTER`, `CHAIN_100_UNISWAP_V2_START_BLOCK` | `GNOSIS_RPC_URL`, `GNOSIS_MAINNET_RPC`, `GNOSIS_RPC` | `cWUSDT=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`, `cWUSDC=0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4` |
| `137` | Polygon | `cWUSDT/cWUSDC` | `CHAIN_137_UNISWAP_V2_FACTORY`, `CHAIN_137_UNISWAP_V2_ROUTER`, `CHAIN_137_UNISWAP_V2_START_BLOCK` | `POLYGON_MAINNET_RPC`, `POLYGON_RPC_URL` | `cWUSDT=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF`, `cWUSDC=0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4` |
| `8453` | Base | `cWUSDT/cWUSDC` | `CHAIN_8453_UNISWAP_V2_FACTORY`, `CHAIN_8453_UNISWAP_V2_ROUTER`, `CHAIN_8453_UNISWAP_V2_START_BLOCK` | `BASE_RPC_URL`, `BASE_MAINNET_RPC` | `cWUSDT=0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6`, `cWUSDC=0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105` |
| `42161` | Arbitrum One | `cWUSDT/cWUSDC` | `CHAIN_42161_UNISWAP_V2_FACTORY`, `CHAIN_42161_UNISWAP_V2_ROUTER`, `CHAIN_42161_UNISWAP_V2_START_BLOCK` | `ARBITRUM_RPC_URL`, `ARBITRUM_MAINNET_RPC` | `cWUSDT=0x73ADaF7dBa95221c080db5631466d2bC54f6a76B`, `cWUSDC=0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF` |
| `42220` | Celo | `cWUSDT/cWUSDC` | `CHAIN_42220_UNISWAP_V2_FACTORY`, `CHAIN_42220_UNISWAP_V2_ROUTER`, `CHAIN_42220_UNISWAP_V2_START_BLOCK` | `CELO_RPC_URL`, `CELO_MAINNET_RPC`, `CELO_RPC` | `cWUSDT=0x73376eB92c16977B126dB9112936A20Fa0De3442`, `cWUSDC=0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3` |
| `43114` | Avalanche C-Chain | `cWUSDT/cWUSDC` | `CHAIN_43114_UNISWAP_V2_FACTORY`, `CHAIN_43114_UNISWAP_V2_ROUTER`, `CHAIN_43114_UNISWAP_V2_START_BLOCK` | `AVALANCHE_RPC_URL`, `AVALANCHE_MAINNET_RPC` | `cWUSDT=0x8142BA530B08f3950128601F00DaaA678213DFdf`, `cWUSDC=0x0C242b513008Cd49C89078F5aFb237A3112251EB` |
## Execution Steps
### Chain `1` — Ethereum Mainnet
1. Confirm `CHAIN_1_UNISWAP_V2_FACTORY`, `CHAIN_1_UNISWAP_V2_ROUTER`, and `CHAIN_1_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `1`: `ETHEREUM_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_1_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a --rpc-url "${ETHEREUM_MAINNET_RPC}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_1_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE 0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_1_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `10` — Optimism
1. Confirm `CHAIN_10_UNISWAP_V2_FACTORY`, `CHAIN_10_UNISWAP_V2_ROUTER`, and `CHAIN_10_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `10`: `OPTIMISM_RPC_URL`, `OPTIMISM_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_10_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6 0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105 --rpc-url "${OPTIMISM_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_10_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6 0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105 --rpc-url "${OPTIMISM_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_10_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `25` — Cronos
1. Confirm `CHAIN_25_UNISWAP_V2_FACTORY`, `CHAIN_25_UNISWAP_V2_ROUTER`, and `CHAIN_25_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `25`: `CRONOS_RPC_URL`, `CRONOS_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_25_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x72948a7a813B60b37Cd0c920C4657DbFF54312b8 0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec --rpc-url "${CRONOS_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_25_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x72948a7a813B60b37Cd0c920C4657DbFF54312b8 0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec --rpc-url "${CRONOS_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_25_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `56` — BSC
1. Confirm `CHAIN_56_UNISWAP_V2_FACTORY`, `CHAIN_56_UNISWAP_V2_ROUTER`, and `CHAIN_56_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `56`: `BSC_RPC_URL`, `BSC_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_56_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x9a1D0dBEE997929ED02fD19E0E199704d20914dB 0x5355148C4740fcc3D7a96F05EdD89AB14851206b --rpc-url "${BSC_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_56_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x9a1D0dBEE997929ED02fD19E0E199704d20914dB 0x5355148C4740fcc3D7a96F05EdD89AB14851206b --rpc-url "${BSC_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_56_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `100` — Gnosis
1. Confirm `CHAIN_100_UNISWAP_V2_FACTORY`, `CHAIN_100_UNISWAP_V2_ROUTER`, and `CHAIN_100_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `100`: `GNOSIS_RPC_URL`, `GNOSIS_MAINNET_RPC`, `GNOSIS_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_100_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF 0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4 --rpc-url "${GNOSIS_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_100_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF 0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4 --rpc-url "${GNOSIS_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_100_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `137` — Polygon
1. Confirm `CHAIN_137_UNISWAP_V2_FACTORY`, `CHAIN_137_UNISWAP_V2_ROUTER`, and `CHAIN_137_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `137`: `POLYGON_MAINNET_RPC`, `POLYGON_RPC_URL`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_137_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF 0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4 --rpc-url "${POLYGON_MAINNET_RPC}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_137_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF 0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4 --rpc-url "${POLYGON_MAINNET_RPC}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_137_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `8453` — Base
1. Confirm `CHAIN_8453_UNISWAP_V2_FACTORY`, `CHAIN_8453_UNISWAP_V2_ROUTER`, and `CHAIN_8453_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `8453`: `BASE_RPC_URL`, `BASE_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_8453_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6 0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105 --rpc-url "${BASE_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_8453_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6 0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105 --rpc-url "${BASE_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_8453_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `42161` — Arbitrum One
1. Confirm `CHAIN_42161_UNISWAP_V2_FACTORY`, `CHAIN_42161_UNISWAP_V2_ROUTER`, and `CHAIN_42161_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `42161`: `ARBITRUM_RPC_URL`, `ARBITRUM_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_42161_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x73ADaF7dBa95221c080db5631466d2bC54f6a76B 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF --rpc-url "${ARBITRUM_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_42161_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x73ADaF7dBa95221c080db5631466d2bC54f6a76B 0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF --rpc-url "${ARBITRUM_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_42161_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `42220` — Celo
1. Confirm `CHAIN_42220_UNISWAP_V2_FACTORY`, `CHAIN_42220_UNISWAP_V2_ROUTER`, and `CHAIN_42220_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `42220`: `CELO_RPC_URL`, `CELO_MAINNET_RPC`, `CELO_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_42220_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x73376eB92c16977B126dB9112936A20Fa0De3442 0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3 --rpc-url "${CELO_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_42220_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x73376eB92c16977B126dB9112936A20Fa0De3442 0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3 --rpc-url "${CELO_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_42220_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`
### Chain `43114` — Avalanche C-Chain
1. Confirm `CHAIN_43114_UNISWAP_V2_FACTORY`, `CHAIN_43114_UNISWAP_V2_ROUTER`, and `CHAIN_43114_UNISWAP_V2_START_BLOCK` are set in `smom-dbis-138/.env`.
2. Confirm one RPC env is usable for chain `43114`: `AVALANCHE_RPC_URL`, `AVALANCHE_MAINNET_RPC`.
3. Verify token addresses for `cWUSDT` and `cWUSDC` in `cross-chain-pmm-lps/config/deployment-status.json` before sending any transaction.
4. Probe the factory first: `cast call "${CHAIN_43114_UNISWAP_V2_FACTORY}" "getPair(address,address)(address)" 0x8142BA530B08f3950128601F00DaaA678213DFdf 0x0C242b513008Cd49C89078F5aFb237A3112251EB --rpc-url "${AVALANCHE_RPC_URL}"`.
5. If the pair is absent, create it: `cast send "${CHAIN_43114_UNISWAP_V2_FACTORY}" "createPair(address,address)(address)" 0x8142BA530B08f3950128601F00DaaA678213DFdf 0x0C242b513008Cd49C89078F5aFb237A3112251EB --rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY"`.
6. Approve both phase-1 tokens to the router and seed initial liquidity on `cWUSDT/cWUSDC` with `addLiquidity(...)` through `"${CHAIN_43114_UNISWAP_V2_ROUTER}"`.
7. Rebuild live pair discovery and write the discovered pair into `deployment-status.json`.
8. Re-run promotion gates and do not move to the next chain until the current one is discoverable and recorded.
Post-phase-1 commands:
- `bash scripts/verify/build-promod-uniswap-v2-live-pair-discovery.sh`
- `python3 scripts/lib/promod_uniswap_v2_live_pair_discovery.py --write-discovered`
- `node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs cross-chain-pmm-lps/config/deployment-status.json`
- `bash scripts/verify/build-promod-uniswap-v2-promotion-gates.sh`

View File

@@ -0,0 +1,284 @@
# Mr. Promod Uniswap V2 Phase 1 Funding Actions
- Generated: `2026-04-17T18:13: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` |
| `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` |
| `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` |
## Per-Chain Actions
### Chain `1` — Ethereum Mainnet
- Action: `seed_now`
- 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 `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:
```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
```
### Chain `10` — Optimism
- Action: `mint_destination_then_seed`
- Tokens missing: `cWUSDT`, `cWUSDC`
- Gas issue: `true`
- 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.
Mint steps:
- Mint `cWUSDT` `1000` with:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --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 "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
### Chain `25` — Cronos
- 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 `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`
- 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
- 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 `100` via `CW_BRIDGE_GNOSIS` 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 "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --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 "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
### Chain `137` — Polygon
- Action: `seed_now`
- 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 `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:
```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
```
### Chain `8453` — Base
- Action: `mint_destination_then_seed`
- Tokens missing: `cWUSDT`, `cWUSDC`
- Gas issue: `true`
- 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.
Mint steps:
- Mint `cWUSDT` `1000` with:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --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 "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
### Chain `42161` — Arbitrum One
- 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 `42161` via `CW_BRIDGE_ARBITRUM` 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 "0x73ADaF7dBa95221c080db5631466d2bC54f6a76B" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --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 "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
### Chain `42220` — Celo
- 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 `42220` via `CW_BRIDGE_CELO` 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 "0x73376eB92c16977B126dB9112936A20Fa0De3442" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --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 "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
### Chain `43114` — Avalanche
- Action: `mint_missing_side_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 `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:
```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" \
--rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```

View File

@@ -0,0 +1,100 @@
# Mr. Promod Uniswap V2 Phase 1 Funding Bundle
- Generated: `2026-04-17T20:05:59Z`
- Signer: `0x4A666F96fC8764181194447A7dFdb7d471b301C8`
- Purpose: strict per-chain funding bundle for `cWUSDT/cWUSDC` phase-1 rollout.
| Chain | Network | Tokens Missing | Minimum Gas Issue | Max Equal Seed | Funding Ready Now |
|---|---|---|---|---:|---|
| `1` | Ethereum Mainnet | `cWUSDC` | `false` | `0` | `false` |
| `10` | Optimism | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
| `25` | Cronos | `none` | `false` | `1000` | `false` |
| `56` | BSC | `none` | `false` | `1000` | `false` |
| `100` | Gnosis | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
| `137` | Polygon | `cWUSDC` | `false` | `0` | `false` |
| `8453` | Base | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
| `42161` | Arbitrum One | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
| `42220` | Celo | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
| `43114` | Avalanche | `cWUSDT`, `cWUSDC` | `false` | `0` | `false` |
## Exact Post-Funding Deploy Blocks
### Chain `1` — Ethereum Mainnet
- Tokens missing: `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `10` — Optimism
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `25` — Cronos
- Tokens missing: `none`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `1000`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `56` — BSC
- Tokens missing: `none`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `1000`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `100` — Gnosis
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `137` — Polygon
- Tokens missing: `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `8453` — Base
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `42161` — Arbitrum One
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `42220` — Celo
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.
### Chain `43114` — Avalanche
- Tokens missing: `cWUSDT`, `cWUSDC`
- Minimum gas issue: `false`
- Max equal seed after funding snapshot: `0`
Post-funding deploy block becomes executable once the missing token and gas blockers are cleared. Use the chain-specific execution checklist plus this chain's env and token addresses.

View File

@@ -0,0 +1,89 @@
# Mr. Promod Uniswap V2 Phase 1 Funding Readiness
- Generated: `2026-04-17T20:05:54Z`
- 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`
- Ready now: none
- Needs funding: none
| 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` |
## Blockers
### Chain `1` — Ethereum Mainnet
- execution status: `completed`
- pair seeded live: `true`
- cWUSDC balance is zero
### Chain `10` — Optimism
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero
### Chain `25` — Cronos
- execution status: `completed`
- pair seeded live: `true`
- no funding blockers
### Chain `56` — BSC
- execution status: `completed`
- pair seeded live: `true`
- no funding blockers
### Chain `100` — Gnosis
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero
### Chain `137` — Polygon
- execution status: `completed`
- pair seeded live: `true`
- cWUSDC balance is zero
### Chain `8453` — Base
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero
### Chain `42161` — Arbitrum One
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero
### Chain `42220` — Celo
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero
### Chain `43114` — Avalanche
- execution status: `completed`
- pair seeded live: `true`
- cWUSDT balance is zero
- cWUSDC balance is zero

View File

@@ -0,0 +1,634 @@
# Mr. Promod Uniswap V2 Phase 1 Remaining 8 Operator Paste Pack
- Generated: `2026-04-17T18:51:53Z`
- Purpose: one flat paste-ready pack for the remaining eight phase-1 chains after `1` and `137`.
| Order | Chain | Network | Preferred Path | 3x cUSDT | 3x cUSDC | CW_BRIDGE Env | Selector Env |
|---|---|---|---|---:|---:|---|---|
| `1` | `10` | Optimism | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_OPTIMISM` | `OPTIMISM_SELECTOR` |
| `2` | `25` | Cronos | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_CRONOS` | `CRONOS_SELECTOR` |
| `3` | `56` | BSC | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_BSC` | `BSC_SELECTOR` |
| `4` | `100` | Gnosis | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_GNOSIS` | `GNOSIS_SELECTOR` |
| `5` | `8453` | Base | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_BASE` | `BASE_SELECTOR` |
| `6` | `42161` | Arbitrum One | `bridge_then_seed` | `3000` | `3000` | `CW_BRIDGE_ARBITRUM` | `ARBITRUM_SELECTOR` |
| `7` | `42220` | Celo | `mint_then_seed` | `3000` | `3000` | `CW_BRIDGE_CELO` | `missing` |
| `8` | `43114` | Avalanche | `bridge_then_seed` | `0` | `2.4` | `CW_BRIDGE_AVALANCHE` | `AVALANCHE_SELECTOR` |
## Flat Paste Pack
### Chain `10` — Optimism
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_OPTIMISM`
- Selector env: `OPTIMISM_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${OPTIMISM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_OPTIMISM}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${OPTIMISM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- `cWUSDC` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${OPTIMISM_MAINNET_RPC}"
export FACTORY="0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf"
export ROUTER="0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `25` — Cronos
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_CRONOS`
- Selector env: `CRONOS_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CRONOS_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CRONOS}"
export DEST_CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export DEST_CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${CRONOS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```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
```
- `cWUSDC` `1000`
```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
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CRONOS_RPC_URL}"
export FACTORY="0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15"
export ROUTER="0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae"
export CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `56` — BSC
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_BSC`
- Selector env: `BSC_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BSC_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BSC}"
export DEST_CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export DEST_CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BSC_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```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
```
- `cWUSDC` `1000`
```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
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export FACTORY="0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `100` — Gnosis
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_GNOSIS`
- Selector env: `GNOSIS_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${GNOSIS_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_GNOSIS}"
export DEST_CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export DEST_CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${GNOSIS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- `cWUSDC` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${GNOSIS_MAINNET_RPC}"
export FACTORY="0xc35DADB65012eC5796536bD9864eD8773aBc74C4"
export ROUTER="0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"
export CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `8453` — Base
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_BASE`
- Selector env: `BASE_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BASE_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BASE}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BASE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- `cWUSDC` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BASE_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42161` — Arbitrum One
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_ARBITRUM`
- Selector env: `ARBITRUM_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${ARBITRUM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_ARBITRUM}"
export DEST_CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export DEST_CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${ARBITRUM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73ADaF7dBa95221c080db5631466d2bC54f6a76B" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- `cWUSDC` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ARBITRUM_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `42220` — Celo
- Preferred path: `mint_then_seed`
- 3x cUSDT from 138: `3000`
- 3x cUSDC from 138: `3000`
- CW_BRIDGE env: `CW_BRIDGE_CELO`
- Selector env: `missing`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CELO_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CELO}"
export DEST_CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export DEST_CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
# DEST_SELECTOR env is not currently documented for this chain in smom-dbis-138/.env
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDT` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73376eB92c16977B126dB9112936A20Fa0De3442" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
- `cWUSDC` `1000`
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_MAINNET_RPC}"
export FACTORY="0x62d5b84bE28a183aBB507E125B384122D2C25fAE"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
```
### Chain `43114` — Avalanche
- Preferred path: `bridge_then_seed`
- 3x cUSDT from 138: `0`
- 3x cUSDC from 138: `2.4`
- CW_BRIDGE env: `CW_BRIDGE_AVALANCHE`
- Selector env: `AVALANCHE_SELECTOR`
Bridge preflight:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${AVALANCHE_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_AVALANCHE}"
export DEST_CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export DEST_CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="0"
export BRIDGE_CUSDC_HUMAN="2.4"
export BRIDGE_CUSDT_RAW="0"
export BRIDGE_CUSDC_RAW="2400000"
export DEST_SELECTOR="${AVALANCHE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
```
Mint fallback:
- `cWUSDC` `0.8`
```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" \
--rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
```
Post-funding deploy:
```bash
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export FACTORY="0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="2400000"
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
```

View File

@@ -0,0 +1,458 @@
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${OPTIMISM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_OPTIMISM}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${OPTIMISM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${OPTIMISM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${OPTIMISM_MAINNET_RPC}"
export FACTORY="0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf"
export ROUTER="0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CRONOS_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CRONOS}"
export DEST_CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export DEST_CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${CRONOS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
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
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CRONOS_RPC_URL}"
export FACTORY="0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15"
export ROUTER="0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae"
export CWUSDT="0x72948a7a813B60b37Cd0c920C4657DbFF54312b8"
export CWUSDC="0x932566E5bB6BEBF6B035B94f3DE1f75f126304Ec"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BSC_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BSC}"
export DEST_CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export DEST_CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BSC_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
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
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BSC_RPC_URL}"
export FACTORY="0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73"
export ROUTER="0x10ED43C718714eb63d5aA57B78B54704E256024E"
export CWUSDT="0x9a1D0dBEE997929ED02fD19E0E199704d20914dB"
export CWUSDC="0x5355148C4740fcc3D7a96F05EdD89AB14851206b"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${GNOSIS_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_GNOSIS}"
export DEST_CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export DEST_CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${GNOSIS_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${GNOSIS_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${GNOSIS_MAINNET_RPC}"
export FACTORY="0xc35DADB65012eC5796536bD9864eD8773aBc74C4"
export ROUTER="0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"
export CWUSDT="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export CWUSDC="0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${BASE_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_BASE}"
export DEST_CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export DEST_CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${BASE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${BASE_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${BASE_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x04B2AE3c3bb3d70Df506FAd8717b0FBFC78ED7E6"
export CWUSDC="0x377a5FaA3162b3Fc6f4e267301A3c817bAd18105"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${ARBITRUM_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_ARBITRUM}"
export DEST_CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export DEST_CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
export DEST_SELECTOR="${ARBITRUM_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73ADaF7dBa95221c080db5631466d2bC54f6a76B" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${ARBITRUM_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${ARBITRUM_MAINNET_RPC}"
export FACTORY="0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E"
export ROUTER="0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
export CWUSDT="0x73ADaF7dBa95221c080db5631466d2bC54f6a76B"
export CWUSDC="0x0cb0192C056aa425C557BdeAD8E56C7eEabf7acF"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${CELO_MAINNET_RPC}"
export DEST_CW_BRIDGE="${CW_BRIDGE_CELO}"
export DEST_CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export DEST_CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="3000"
export BRIDGE_CUSDC_HUMAN="3000"
export BRIDGE_CUSDT_RAW="3000000000"
export BRIDGE_CUSDC_RAW="3000000000"
# DEST_SELECTOR env is not currently documented for this chain in smom-dbis-138/.env
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x73376eB92c16977B126dB9112936A20Fa0De3442" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "1000000000" \
--rpc-url "${CELO_MAINNET_RPC}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${CELO_MAINNET_RPC}"
export FACTORY="0x62d5b84bE28a183aBB507E125B384122D2C25fAE"
export ROUTER="0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121"
export CWUSDT="0x73376eB92c16977B126dB9112936A20Fa0De3442"
export CWUSDC="0x4C38F9A5ed68A04cd28a72E8c68C459Ec34576f3"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="3000000000"
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
source smom-dbis-138/scripts/load-env.sh >/dev/null
export SOURCE_RPC_URL="${CHAIN138_RPC}"
export DEST_RPC_URL="${AVALANCHE_RPC_URL}"
export DEST_CW_BRIDGE="${CW_BRIDGE_AVALANCHE}"
export DEST_CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export DEST_CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SOURCE_CUSDT="0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"
export SOURCE_CUSDC="0xf22258f57794CC8E06237084b353Ab30fFfa640b"
export BRIDGE_CUSDT_HUMAN="0"
export BRIDGE_CUSDC_HUMAN="2.4"
export BRIDGE_CUSDT_RAW="0"
export BRIDGE_CUSDC_RAW="2400000"
export DEST_SELECTOR="${AVALANCHE_SELECTOR}"
cast call "$DEST_CW_BRIDGE" 'feeToken()(address)' --rpc-url "$DEST_RPC_URL"
cast call "$DEST_CW_BRIDGE" 'calculateFee(uint64,uint256)(uint256)' "$DEST_SELECTOR" "$BRIDGE_CUSDC_RAW" --rpc-url "$DEST_RPC_URL"
echo "Bridge execution stays runbook-driven: follow docs/07-ccip/CW_DEPLOY_AND_WIRE_RUNBOOK.md and docs/07-ccip/CW_BRIDGE_APPROACH.md with the env exported above."
source smom-dbis-138/scripts/load-env.sh >/dev/null
cast send "0x0C242b513008Cd49C89078F5aFb237A3112251EB" 'mint(address,uint256)' "$(cast wallet address --private-key "$PRIVATE_KEY")" "800000" \
--rpc-url "${AVALANCHE_RPC_URL}" --private-key "$PRIVATE_KEY" --legacy --gas-limit 100000
source smom-dbis-138/scripts/load-env.sh >/dev/null
export RPC_URL="${AVALANCHE_RPC_URL}"
export FACTORY="0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10"
export ROUTER="0x60aE616a2155Ee3d9A68541Ba4544862310933d4"
export CWUSDT="0x8142BA530B08f3950128601F00DaaA678213DFdf"
export CWUSDC="0x0C242b513008Cd49C89078F5aFb237A3112251EB"
export SIGNER="$(cast wallet address --private-key "$PRIVATE_KEY")"
export AMOUNT_RAW="2400000"
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

Some files were not shown because too many files have changed in this diff Show More