Compare commits

...

8 Commits

Author SHA1 Message Date
devin-ai-integration[bot]
dcaa0c7f11 docs(coingecko): explorer-verification + external-listing checklist
Some checks failed
AI Code Review / claude-review (pull_request) Failing after 34s
Contract-by-contract credibility tracker for Chain 138 (44 contracts).
Probes Blockscout source verification, Blockscout token pages, CoinGecko,
CoinMarketCap, and DexScreener. Raw probe results checked in as
reports/status/explorer-verification-latest.json; probe script at
scripts/verify/explorer-verification-probe.py (read-only, no LAN).

Headline findings:
- CoinGecko asset-platform defi-oracle-meta-mainnet is already registered;
  token submissions can proceed without creating an asset platform.
- Blockscout source verification: 2 of 44 verified
  (MerchantSettlementRegistry, WithdrawalEscrow). 42 need verification.
- All 15 canonical tokens resolve on the Blockscout token page.
- DexScreener does not currently index Chain 138; indexer onboarding
  is a separate track gated on DexScreener.
- CMC probe gated on CMC_PRO_API_KEY; endpoint documented for re-run.

Ordered 'fastest remaining wins' section prioritises cUSDT/cUSDC
source verification + CoinGecko submission first.
2026-04-19 23:34:02 +00: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
242 changed files with 177423 additions and 18655 deletions

View File

@@ -97,10 +97,41 @@ PRIVATE_KEY=
RPC_URL_138=
RPC_URL_138_PUBLIC=
ETHEREUM_MAINNET_RPC=
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
CHAIN_651940_RPC_URL=
ETHERLINK_RPC_URL=
TEZOS_RPC_URL=
ETHERSCAN_API_KEY=
WEMIXSCAN_API_KEY=
ETHERLINK_CCIP_SELECTOR=
TEZOS_BRIDGE_ENABLED=
ETHERLINK_BRIDGE_ENABLED=

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)

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,53 @@
{
"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,
"quoteAmountByDeviationBps": [
{
"minDeviationBps": 150,
"flashQuoteAmountRaw": 250000000
},
{
"minDeviationBps": 75,
"flashQuoteAmountRaw": 100000000
}
]
},
"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."
]
}

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

@@ -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

@@ -0,0 +1,133 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Operator lineup: Chain 138 canonical GRU assets → 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-18",
"status": "lineup_defined_relay_and_mints_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"
},
"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": "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

@@ -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,64 @@
# Chain 138 → Solana — GRU Token Deployment Lineup
**Last updated:** 2026-04-18
**Current status:** `lineup_defined_relay_and_mints_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).
**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`.
---
## 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.
### 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,116 @@
# Chain 138 -> Wemix 1111 Bridge Completion Checklist
**Last Updated:** 2026-04-18
**Purpose:** Strict operator checklist to move WEMIX `1111` from repo-deferred state into a live `138 -> 1111` bridge path for `WETH9` / `WETH10`, then prepare GRU v2 `cW*` assets for rollout.
## 1. Current Repo State
| Item | Current State |
|---|---|
| Destination chain | `1111` / Wemix |
| Destination selector | `5142893604156789321` |
| Activation state | `deferred` |
| Bridge available | `false` |
| Recorded `cW*` assets | `cWBTC` |
| Recorded anchor addresses | `USDC=0xcebA9300f2b948710d2653dD7B07f33A8B32118C` |
The repo currently shows WEMIX as **deferred**, not live. Native WEMIX gas is the only part that is already in good shape; the missing bridge deployment and LINK funding are the actual blockers.
## 2. Exact Environment Surface
| Variable | Current Value |
|---|---|
| `CCIP_ROUTER_WEMIX` | `0x7798b795Fde864f4Cd1b124a38Ba9619B7F8A442` |
| `LINK_TOKEN_WEMIX` | `0x80f1FcdC96B55e459BF52b998aBBE2c364935d69` |
| `WETH9_WEMIX` | `0x7D72b22a74A216Af4a002a1095C8C707d6eC1C5f` |
| `WETH10_WEMIX` | `0x7D72b22a74A216Af4a002a1095C8C707d6eC1C5f` |
| `CCIPWETH9_BRIDGE_WEMIX` | `(unset)` |
| `CCIPWETH10_BRIDGE_WEMIX` | `(unset)` |
| `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. Completion Steps
### Step 1: 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 2: Deploy `CCIPWETH9Bridge` and `CCIPWETH10Bridge` on 1111
```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 3: Wire destinations in both directions
```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`
### Step 4: Fund LINK 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
### Step 5: Verify bridge readiness
```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.
### Step 6: 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
## 4. Promotion Conditions
WEMIX `1111` can move out of deferred state 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. Both WEMIX bridges hold enough LINK for operational CCIP fees.
4. A small bridge test succeeds in both configuration and receipt.
5. 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,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,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

@@ -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-18T17:04:47Z`
- Live pairs discovered: `19`
- Healthy live pairs: `7`
- Write mode: `False`
| Chain | Network | Env Ready | Live Pairs Found | Healthy Live Pairs |
|---|---|---|---|---|
| `1` | Ethereum Mainnet | `True` | `cWUSDC/USDC`, `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` | — |
| `42220` | Celo | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/cWUSDC` | `cWUSDT/cWUSDC` |
| `43114` | Avalanche C-Chain | `True` | `cWUSDT/cWUSDC`, `cWAUSDT/cWUSDT`, `cWAUSDT/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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,83 @@
# Promod Uniswap V2 Phase 2 Wave 1 Completion Status
**Generated:** 2026-04-18T02:30:39.167860+00:00
**Overall Status:** `complete`
**Completed Chains:** `1, 10, 25, 56, 100, 137, 8453, 42161, 42220, 43114`
## Reserve Verification
| Chain | Network | Pair | Pair Address | Reserves | Status |
|---|---|---|---|---|---|
| `1` | Ethereum Mainnet | `cWAUDC/cWUSDC` | `0x135812ec5E714De8400B47856A8210eE9c4B19bb` | `(1000000000 [1e9], 1000000000 [1e9], 1776459491 [1.776e9])` | `complete` |
| `1` | Ethereum Mainnet | `cWAUDC/cWUSDT` | `0xaC36C0De0A6E94fa21718217c9eccEa4dC2680cF` | `(1000000000 [1e9], 1000000000 [1e9], 1776459503 [1.776e9])` | `complete` |
| `1` | Ethereum Mainnet | `cWEURC/cWUSDC` | `0xaF10c00226DD1Bb28d7e93C21c904B7072b8076D` | `(1000000000 [1e9], 1000000000 [1e9], 1776459899 [1.776e9])` | `complete` |
| `1` | Ethereum Mainnet | `cWEURC/cWUSDT` | `0x58a68B0c4Fc090d63014eA9E1D9D291377EE15Ce` | `(1000000000 [1e9], 1000000000 [1e9], 1776459911 [1.776e9])` | `complete` |
| `1` | Ethereum Mainnet | `cWGBPC/cWUSDC` | `0x43fc09d5d619D43DFE764F39B193900D54992718` | `(1000000000 [1e9], 1000000000 [1e9], 1776459923 [1.776e9])` | `complete` |
| `1` | Ethereum Mainnet | `cWGBPC/cWUSDT` | `0x122781a70764f958D231ea06E3EA3F4F2a324Da9` | `(1000000000 [1e9], 1000000000 [1e9], 1776459935 [1.776e9])` | `complete` |
| `10` | Optimism | `cWAUDC/cWUSDC` | `0xdf58b085EE6Db9Cc0569e8f7FF21877b44645eA8` | `(1000000000 [1e9], 1000000000 [1e9], 1776460061 [1.776e9])` | `complete` |
| `10` | Optimism | `cWAUDC/cWUSDT` | `0xe3093934531459110c37f728C7f4e8557236A677` | `(1000000000 [1e9], 1000000000 [1e9], 1776460065 [1.776e9])` | `complete` |
| `10` | Optimism | `cWEURC/cWUSDC` | `0x8324cDEcE2618FA2b94469165353829819Caaf19` | `(1000000000 [1e9], 1000000000 [1e9], 1776460067 [1.776e9])` | `complete` |
| `10` | Optimism | `cWEURC/cWUSDT` | `0x255BC955CBD24528B83Ce971641A80b75389Fc65` | `(1000000000 [1e9], 1000000000 [1e9], 1776460071 [1.776e9])` | `complete` |
| `10` | Optimism | `cWGBPC/cWUSDC` | `0x16BdD425Be56080b670925AF880bAC599C9346ca` | `(1000000000 [1e9], 1000000000 [1e9], 1776460073 [1.776e9])` | `complete` |
| `10` | Optimism | `cWGBPC/cWUSDT` | `0x3052541a82d02348Bbe7f9Ce1927992ADb9Bd259` | `(1000000000 [1e9], 1000000000 [1e9], 1776460077 [1.776e9])` | `complete` |
| `25` | Cronos | `cWAUDC/cWUSDC` | `0xef0Dd59421024053102b9A29A71D07d4838ef0a5` | `(1000000000 [1e9], 1000000000 [1e9], 1776477932 [1.776e9])` | `complete` |
| `25` | Cronos | `cWAUDC/cWUSDT` | `0x480f7Cf816AEBD62EC60A738635FD6363e004709` | `(1000000000 [1e9], 1000000000 [1e9], 1776477936 [1.776e9])` | `complete` |
| `25` | Cronos | `cWEURC/cWUSDC` | `0x55dF42030A9780F51E3f479Ae28E63ee9049627a` | `(1000000000 [1e9], 1000000000 [1e9], 1776477974 [1.776e9])` | `complete` |
| `25` | Cronos | `cWEURC/cWUSDT` | `0xC3A19A41096265A4137F8346aAcFd5d26568cb97` | `(1000000000 [1e9], 1000000000 [1e9], 1776477978 [1.776e9])` | `complete` |
| `25` | Cronos | `cWGBPC/cWUSDC` | `0x673dFF7d10DbF2Cd6e1F495e53a6AeDb291Df1a7` | `(1000000000 [1e9], 1000000000 [1e9], 1776477981 [1.776e9])` | `complete` |
| `25` | Cronos | `cWGBPC/cWUSDT` | `0xf6314aCBAaC3EE2F8CCc48C8Ca00525824a35C26` | `(1000000000 [1e9], 1000000000 [1e9], 1776477984 [1.776e9])` | `complete` |
| `56` | BSC | `cWAUDC/cWUSDC` | `0x03B5b4bDb04A7D94A8d5D170fE84772756DB912F` | `(1000000000 [1e9], 1000000000 [1e9], 1776478046 [1.776e9])` | `complete` |
| `56` | BSC | `cWAUDC/cWUSDT` | `0x8FA9f96f6E5785ea98A51C97E3d1A05AaafB406e` | `(1000000000 [1e9], 1000000000 [1e9], 1776478049 [1.776e9])` | `complete` |
| `56` | BSC | `cWEURC/cWUSDC` | `0xa07b120e21bc80333AF35C951150a5F983cf12D9` | `(1000000000 [1e9], 1000000000 [1e9], 1776478052 [1.776e9])` | `complete` |
| `56` | BSC | `cWEURC/cWUSDT` | `0xBA9a873BC6cA8885E7E0975247B304cFed2f01E6` | `(1000000000 [1e9], 1000000000 [1e9], 1776478055 [1.776e9])` | `complete` |
| `56` | BSC | `cWGBPC/cWUSDC` | `0x43447275C56be6fd30e74cF3368CFDE561fC2fe7` | `(1000000000 [1e9], 1000000000 [1e9], 1776478116 [1.776e9])` | `complete` |
| `56` | BSC | `cWGBPC/cWUSDT` | `0xd8ac668D812dC7bB86ea66f8e86824a575bf0ed0` | `(1000000000 [1e9], 1000000000 [1e9], 1776478093 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWAUDC/cWUSDC` | `0x65C533F4520816e91303747aFAED84B5B58154d5` | `(1000000000 [1e9], 1000000000 [1e9], 1776457100 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWAUDC/cWUSDT` | `0x41078C1DB4Ed26ecF19142feBaA9dCdE0b04e210` | `(1000000000 [1e9], 1000000000 [1e9], 1776457105 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWEURC/cWUSDC` | `0xFcf9feEF2bcF708cE2193fE8Ee33dA205610480D` | `(1000000000 [1e9], 1000000000 [1e9], 1776457110 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWEURC/cWUSDT` | `0x24B9F12D143d16DdFC6D4eA135b8aC08009367a1` | `(1000000000 [1e9], 1000000000 [1e9], 1776457115 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWGBPC/cWUSDC` | `0x86ee10F889dBAA74b640cFD318A07787DBDaaC9b` | `(1000000000 [1e9], 1000000000 [1e9], 1776457120 [1.776e9])` | `complete` |
| `100` | Gnosis | `cWGBPC/cWUSDT` | `0x67f36f25Af15910B5bAE08B1b9B6273158E8eA77` | `(1000000000 [1e9], 1000000000 [1e9], 1776457125 [1.776e9])` | `complete` |
| `137` | Polygon | `cWAUDC/cWUSDC` | `0x6ffa939d75bd6affe019705f2c9240f97975ffa0` | `(1000000000 [1e9], 1000000000 [1e9], 1776460210 [1.776e9])` | `complete` |
| `137` | Polygon | `cWAUDC/cWUSDT` | `0x526a3a38b77d199e8fd07f37597f9ca0fa5a87cd` | `(1000000000 [1e9], 1000000000 [1e9], 1776460214 [1.776e9])` | `complete` |
| `137` | Polygon | `cWEURC/cWUSDC` | `0xd5907a692f7e8f650fc5feb8ebb3196fea2069a3` | `(1000000000 [1e9], 1000000000 [1e9], 1776460220 [1.776e9])` | `complete` |
| `137` | Polygon | `cWEURC/cWUSDT` | `0x3292c0ed9eec0443635367717047876fe3cdb514` | `(1000000000 [1e9], 1000000000 [1e9], 1776460224 [1.776e9])` | `complete` |
| `137` | Polygon | `cWGBPC/cWUSDC` | `0x52786e752be5fb1b18e86959f87b7a59e2c6de6d` | `(1000000000 [1e9], 1000000000 [1e9], 1776460228 [1.776e9])` | `complete` |
| `137` | Polygon | `cWGBPC/cWUSDT` | `0x1b6e8484db0cd9c00d39e457c2d126c8983f5390` | `(1000000000 [1e9], 1000000000 [1e9], 1776460232 [1.776e9])` | `complete` |
| `8453` | Base | `cWAUDC/cWUSDC` | `0x8e0C0Fa5F7227799bf0cFc9E4129f2c9133230f6` | `(1000000000 [1e9], 1000000000 [1e9], 1776478205 [1.776e9])` | `complete` |
| `8453` | Base | `cWAUDC/cWUSDT` | `0xB191eC6D99CeA5aAf557193224b32453F27BBB9f` | `(1000000000 [1e9], 1000000000 [1e9], 1776478249 [1.776e9])` | `complete` |
| `8453` | Base | `cWEURC/cWUSDC` | `0x71C979435fDdF15EaF84df4C5191e1b285387758` | `(1000000000 [1e9], 1000000000 [1e9], 1776478207 [1.776e9])` | `complete` |
| `8453` | Base | `cWEURC/cWUSDT` | `0x56b54646C559569060435EAC2C3c70346Fa7D849` | `(1000000000 [1e9], 1000000000 [1e9], 1776478253 [1.776e9])` | `complete` |
| `8453` | Base | `cWGBPC/cWUSDC` | `0x9b40B0a5EEC3B510d3CdeAe186F9ed27A22BF88a` | `(1000000000 [1e9], 1000000000 [1e9], 1776478187 [1.776e9])` | `complete` |
| `8453` | Base | `cWGBPC/cWUSDT` | `0xe5Cf1c4d333992D5a4ceed65d83123398D78594c` | `(1000000000 [1e9], 1000000000 [1e9], 1776478209 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWAUDC/cWUSDC` | `0x51fB15df509a8F1dA3813CA810c1d667DeC119f6` | `(1000000000 [1e9], 1000000000 [1e9], 1776478295 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWAUDC/cWUSDT` | `0x2Bfd8A45852Bd81cd787a4081A6528b00cf00A79` | `(1000000000 [1e9], 1000000000 [1e9], 1776478296 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWEURC/cWUSDC` | `0x443FC120dB180265cF36A30f6eAbB7459106e570` | `(1000000000 [1e9], 1000000000 [1e9], 1776478298 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWEURC/cWUSDT` | `0xd55ECf3eB5680351e0f78bB305E67BFb4875B966` | `(1000000000 [1e9], 1000000000 [1e9], 1776478299 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWGBPC/cWUSDC` | `0x907a97eAD9B490208fCB1d43ddB8C2D1015581dC` | `(1000000000 [1e9], 1000000000 [1e9], 1776478300 [1.776e9])` | `complete` |
| `42161` | Arbitrum One | `cWGBPC/cWUSDT` | `0x65dF46603cDCd5862Caf5935DE5ee44B3756B749` | `(1000000000 [1e9], 1000000000 [1e9], 1776478301 [1.776e9])` | `complete` |
| `42220` | Celo | `cWAUDC/cWUSDC` | `0x2d9D8e2E0642C01B600BA9F953ca5D49abFC391E` | `(1000000000 [1e9], 1000000000 [1e9], 1776478385 [1.776e9])` | `complete` |
| `42220` | Celo | `cWAUDC/cWUSDT` | `0x4a1ED0471f1832264A704D0998703d1da3E6cb84` | `(1000000000 [1e9], 1000000000 [1e9], 1776478388 [1.776e9])` | `complete` |
| `42220` | Celo | `cWEURC/cWUSDC` | `0xFF0bFD8A374Eb1Ec24F27500a76104Ae3B463D80` | `(1000000000 [1e9], 1000000000 [1e9], 1776478392 [1.776e9])` | `complete` |
| `42220` | Celo | `cWEURC/cWUSDT` | `0xF93EBA21A0672835415f873e119789Ff27A21ebF` | `(1000000000 [1e9], 1000000000 [1e9], 1776478395 [1.776e9])` | `complete` |
| `42220` | Celo | `cWGBPC/cWUSDC` | `0xb3dDd766CE76d07435B197E0857ea80661d20Ed7` | `(1000000000 [1e9], 1000000000 [1e9], 1776478399 [1.776e9])` | `complete` |
| `42220` | Celo | `cWGBPC/cWUSDT` | `0xc6187BEfbC1b8cC827049AC4a5Cb05BC023c48De` | `(1000000000 [1e9], 1000000000 [1e9], 1776478402 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWAUDC/cWUSDC` | `0xc3d2eAE75b859c151825A49481187885c6c4C424` | `(1000000000 [1e9], 1000000000 [1e9], 1776478469 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWAUDC/cWUSDT` | `0x971881b0BCd3ec4C051f8316e22Ad31E8Af291C4` | `(1000000000 [1e9], 1000000000 [1e9], 1776478472 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWEURC/cWUSDC` | `0x640e566c107Ca4f6A10a2bD37E919aD011e7627e` | `(1000000000 [1e9], 1000000000 [1e9], 1776478475 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWEURC/cWUSDT` | `0x633A3686a5b99E04C0363aA9233a2FD83554589c` | `(1000000000 [1e9], 1000000000 [1e9], 1776478477 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWGBPC/cWUSDC` | `0x94090e498dC3cdA064039fe26Ede0dB19e6a1EC3` | `(1000000000 [1e9], 1000000000 [1e9], 1776478480 [1.776e9])` | `complete` |
| `43114` | Avalanche C-Chain | `cWGBPC/cWUSDT` | `0xF9A545fF323fbe8c78c21BDeA191D187854F8Ed1` | `(1000000000 [1e9], 1000000000 [1e9], 1776478483 [1.776e9])` | `complete` |
## Explorer Publication
**Status:** `blocked`
Deployment and liquidity rollout is complete, but explorer publication is not fully complete.
- Current local CompliantWrappedToken artifact does not exactly match deployed runtime bytecode.
- forge verify-contract cannot use the historical deploy profile directly in this environment.
- Some explorer backends require paid API access or manual submission paths.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
# Mr. Promod Uniswap V2 Phase Order
- Generated: `2026-04-18T02:19:49Z`
- Program: Mr. Promod Uniswap V2 cW Deep Liquidity Program
- Mainnet funding posture: `triple-rail-support` via `cWUSDC, cWUSDT, cWAUSDT`
- Purpose: strict rollout order for each chain: phase 1 core rail -> phase 2 full cW* wrapped mesh -> phase 3 settlement rails.
| Chain | Network | Phase 1 Core Rail | Phase 2 Full cW* Wrapped Mesh | Phase 3 Settlement Rails |
|---|---|---|---|---|
| `1` | Ethereum Mainnet | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` |
| `10` | Optimism | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` |
| `25` | Cronos | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDT`, `cWUSDT/USDT` |
| `56` | BSC | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDT`, `cWUSDT/USDT`, `cWAUSDT/USDT` |
| `100` | Gnosis | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` |
| `137` | Polygon | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` |
| `8453` | Base | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` |
| `42161` | Arbitrum One | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC` |
| `42220` | Celo | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` |
| `43114` | Avalanche C-Chain | `cWUSDT/cWUSDC` | `cWAUDC/cWUSDC`, `cWAUDC/cWUSDT`, `cWBTC/cWUSDC`, `cWBTC/cWUSDT`, `cWCADC/cWUSDC`, `cWCADC/cWUSDT`, `cWCHFC/cWUSDC`, `cWCHFC/cWUSDT`, `cWEURC/cWUSDC`, `cWEURC/cWUSDT` | `cWUSDC/USDC`, `cWUSDT/USDC`, `cWAUSDT/USDC` |
## Phase Rules
- Phase 1 opens the network with the standardized core rail `cWUSDT/cWUSDC` when available.
- Phase 2 expands the rest of the documented GRU v2 `cW*` assets into wrapped pairs against `cWUSDC` and `cWUSDT`.
- Phase 3 adds canonical settlement rails only after the wrapped mesh exists and the chain is ready to expose deeper stable exits.

View File

@@ -0,0 +1,34 @@
# Mr. Promod Uniswap V2 Promotion Gates
- Generated: `2026-04-18T02:19:49Z`
- Purpose: exact per-chain env vars and registry records required before the first live Uniswap V2 pool can be promoted.
- Mainnet funding posture: `triple-rail-support` via `cWUSDC, cWUSDT, cWAUSDT`
- Chains in scope: `10`
- Currently blocked: `6`
## Global Rule
- Promotion requires all of the following on the target chain: Uniswap V2 factory/router/start-block env set, indexer code support present, a live pair discoverable on-chain, and the pool address recorded in `deployment-status.json`.
## Operator Table
| Chain | Network | Code Support | Exact Env Vars To Fill | Registry Records To Fill |
|---|---|---|---|---|
| `1` | Ethereum Mainnet | `ready` | `CHAIN_1_UNISWAP_V2_FACTORY`, `CHAIN_1_UNISWAP_V2_ROUTER`, `CHAIN_1_UNISWAP_V2_START_BLOCK` | `chains[1].cwTokens.cWUSDC`, `chains[1].cwTokens.cWUSDT`, `chains[1].anchorAddresses.USDC` |
| `10` | Optimism | `ready` | `CHAIN_10_UNISWAP_V2_FACTORY`, `CHAIN_10_UNISWAP_V2_ROUTER`, `CHAIN_10_UNISWAP_V2_START_BLOCK` | `chains[10].cwTokens.cWUSDC`, `chains[10].cwTokens.cWUSDT`, `chains[10].anchorAddresses.USDC` |
| `25` | Cronos | `ready` | `CHAIN_25_UNISWAP_V2_FACTORY`, `CHAIN_25_UNISWAP_V2_ROUTER`, `CHAIN_25_UNISWAP_V2_START_BLOCK` | `chains[25].cwTokens.cWUSDC`, `chains[25].cwTokens.cWUSDT`, `chains[25].anchorAddresses.USDT` |
| `56` | BSC | `ready` | `CHAIN_56_UNISWAP_V2_FACTORY`, `CHAIN_56_UNISWAP_V2_ROUTER`, `CHAIN_56_UNISWAP_V2_START_BLOCK` | `chains[56].cwTokens.cWAUSDT`, `chains[56].cwTokens.cWUSDC`, `chains[56].cwTokens.cWUSDT` |
| `100` | Gnosis | `ready` | `CHAIN_100_UNISWAP_V2_FACTORY`, `CHAIN_100_UNISWAP_V2_ROUTER`, `CHAIN_100_UNISWAP_V2_START_BLOCK` | `chains[100].cwTokens.cWUSDC`, `chains[100].cwTokens.cWUSDT`, `chains[100].anchorAddresses.USDC` |
| `137` | Polygon | `ready` | `CHAIN_137_UNISWAP_V2_FACTORY`, `CHAIN_137_UNISWAP_V2_ROUTER`, `CHAIN_137_UNISWAP_V2_START_BLOCK` | `chains[137].cwTokens.cWAUSDT`, `chains[137].cwTokens.cWUSDC`, `chains[137].cwTokens.cWUSDT` |
| `8453` | Base | `ready` | `CHAIN_8453_UNISWAP_V2_FACTORY`, `CHAIN_8453_UNISWAP_V2_ROUTER`, `CHAIN_8453_UNISWAP_V2_START_BLOCK` | `chains[8453].cwTokens.cWUSDC`, `chains[8453].cwTokens.cWUSDT`, `chains[8453].anchorAddresses.USDC` |
| `42161` | Arbitrum One | `ready` | `CHAIN_42161_UNISWAP_V2_FACTORY`, `CHAIN_42161_UNISWAP_V2_ROUTER`, `CHAIN_42161_UNISWAP_V2_START_BLOCK` | `chains[42161].cwTokens.cWUSDC`, `chains[42161].cwTokens.cWUSDT`, `chains[42161].anchorAddresses.USDC` |
| `42220` | Celo | `ready` | `CHAIN_42220_UNISWAP_V2_FACTORY`, `CHAIN_42220_UNISWAP_V2_ROUTER`, `CHAIN_42220_UNISWAP_V2_START_BLOCK` | `chains[42220].cwTokens.cWAUSDT`, `chains[42220].cwTokens.cWUSDC`, `chains[42220].cwTokens.cWUSDT` |
| `43114` | Avalanche C-Chain | `ready` | `CHAIN_43114_UNISWAP_V2_FACTORY`, `CHAIN_43114_UNISWAP_V2_ROUTER`, `CHAIN_43114_UNISWAP_V2_START_BLOCK` | `chains[43114].cwTokens.cWAUSDT`, `chains[43114].cwTokens.cWUSDC`, `chains[43114].cwTokens.cWUSDT` |
## First Live Pool Minimum Checklist
1. Add `CHAIN_<id>_UNISWAP_V2_FACTORY`, `CHAIN_<id>_UNISWAP_V2_ROUTER`, and `CHAIN_<id>_UNISWAP_V2_START_BLOCK` for the target chain.
2. Extend token-aggregation code support for that chain if `code_support_status` is `blocked`.
3. Create the pool on-chain and record its `base`, `quote`, and `poolAddress` in `cross-chain-pmm-lps/config/deployment-status.json`.
4. Rebuild live-pair discovery and promotion-gate artifacts so the new pair is visible to operator tooling.
5. Only then promote the pair as live in operator-facing docs or routing artifacts.

View File

@@ -0,0 +1,190 @@
# Provider-Facing Package: Source To CEX / OTC Execution
**Last Updated:** 2026-04-17
**Purpose:** Strict provider-facing package for `Crypto.com OTC`, a DCE, or another institutional execution venue. This is written as an onboarding and commercial brief, not an internal architecture memo.
## 1. Executive Summary
We operate a structured digital-asset corridor with:
- a promoted immediate bucket of Mainnet `cWUSDC` / `cWUSDT`
- a much larger same-day corridor feeder set built around Chain 138 `cUSDC`, `cUSDT`, and stable LP unwind paths
- a deployer wallet funding posture that should maintain both Mainnet `cWUSDC` and `cWUSDT`
- a preferred settlement target of `USDC`
- a preferred operating model of:
`Chain 138 inventory -> canonical bridge -> Mainnet normalization -> provider handoff`
The current repo-modeled operator state shows:
- immediate bucket: about `$17.78M`
- same-day corridor bucket: about `$1.381B`
- strongest verified direct public normalization sink: about `$213.10` via `cWUSDC -> USDC`
- direct `cWUSDT -> USDT` path: about `$2.18`
The practical implication is that we are not seeking a provider to discover our flow. We are seeking a provider to absorb clean normalized settlement flow at institutional scale after bridge and Mainnet normalization.
## Funding Posture
The deployer wallet should maintain both:
- `cWUSDC` for the primary Mainnet `USDC` normalization rail
- `cWUSDT` for `cUSDT` landing, fallback handling, and support-rail normalization into `cWUSDC`
This means the provider-facing package should describe the Mainnet wrapped funding posture as **dual-rail**, even though the preferred final settlement asset remains `USDC`.
## 2. What We Expect From The Provider
| Category | Expectation |
|---|---|
| Onboarding | Clear KYB / KYC / entity onboarding path |
| Settlement rail | Accepted deposit assets, chains, address rules, memo/tag rules if any |
| Execution model | Clear distinction between OTC RFQ, streamed quotes, exchange-book routing, or hybrid handling |
| Size guidance | Minimum clip, normal clip, escalation threshold, and preferred block workflow |
| Operational support | Named contacts, escalation path, failed deposit handling, reconciliation contact |
| Commercial clarity | Clear fee / spread framework and expected relationship model |
| Reliability | Stable intake process for repeatable `USDC`-oriented flow |
## 3. What The Provider Should Expect From Us
| Category | Commitment |
|---|---|
| Flow shape | Clean, normalized settlement-oriented flow, primarily `USDC` |
| Route discipline | We do not treat public on-chain pools as the final absorber of institutional size |
| Operational clarity | One default operating path, one packetization policy, one settlement preference |
| Funding posture | The deployer wallet maintains both `cWUSDC` and `cWUSDT` for Mainnet funding and normalization support |
| Treasury control | Clear control over feeder wallets and corridor assets |
| Source narrative | Source-of-funds and wallet-control narrative available for onboarding |
| Escalation discipline | Named operators and reproducible reconciliation process |
| Volume ramp | Small canaries first, then repeatable production clips, then larger negotiated size |
## 4. Current Flow Presentation
### Preferred Flow
| Source Asset | Path To Provider |
|---|---|
| `cUSDC` | `cUSDC -> bridge -> cWUSDC -> USDC -> provider` |
| `cUSDT` | `cUSDT -> bridge -> cWUSDT -> cWUSDC -> USDC -> provider` |
| `LP:cUSDT/cUSDC` | `withdraw -> cUSDT/cUSDC -> bridge -> normalize -> USDC -> provider` |
| `cWUSDC` | `cWUSDC -> USDC -> provider` |
| `cWUSDT` | `cWUSDT -> cWUSDC -> USDC -> provider` |
### Mainnet Funding Requirement
The deployer wallet should be treated as funded across both Mainnet wrapped settlement rails:
- `cWUSDC`
- `cWUSDT`
This is not a contradiction of the `USDC`-first settlement policy. It is the funding requirement that keeps both the primary normalization rail and the `cUSDT` support rail operational.
### Default Settlement Preference
1. `USDC`
2. `USDT` only if the provider explicitly prefers it and the route is operationally superior
### Current Constraint
Without a provider, the system remains terminally concentrated on a shallow public sink. With a provider, the on-chain Mainnet leg becomes a bounded normalization handshake, not the final execution destination.
## 5. How We Present Volume
We should present volume in terms of **repeatable flow bands**, not only maximum theoretical inventory.
### Recommended Provider-Facing Framing
| Layer | How To Describe It |
|---|---|
| Immediate inventory | Mainnet normalized-or-near-normalized stable-adjacent assets available for rapid handoff |
| Same-day corridor inventory | Chain 138 feeder assets that can be bridged and normalized into `USDC` within the same operational day |
| Execution target | Repeatable institutional settlement flow rather than one-off retail-sized swaps |
| Growth profile | Initial controlled packets, then increasing clip size after successful canaries and reconciliation |
### What Not To Do
- Do not lead with nominal long-tail balances that do not yet have promoted terminal exits
- Do not imply that public DEX depth is the true execution capacity
- Do not promise production volume before the provider rail is fully enabled
## 6. How We Drive Traffic / Volume
| Stage | Objective | Provider Narrative |
|---|---|---|
| Stage 1 | Prove clean onboarding and settlement | “We can deliver clean `USDC` packets with low operational friction.” |
| Stage 2 | Prove repeatable canaries | “We can repeat successful flows with consistent routing and reconciliation.” |
| Stage 3 | Increase packet size | “We can move from small clips into desk-appropriate institutional blocks.” |
| Stage 4 | Increase cadence | “We can supply repeatable same-day flow, not one-off opportunistic transactions.” |
| Stage 5 | Expand provider trust | “We can route more of the corridor inventory into the provider because the process is stable.” |
### Traffic-Driving Rules
1. Standardize flow into one settlement asset.
2. Use predictable packet sizes.
3. Keep reconciliation clean.
4. Minimize failed deposits and exception handling.
5. Start with canaries and graduate by evidence.
6. Expand cadence before claiming unlimited size.
## 7. First 30-Day Volume Ramp Plan
### Days 17: Onboarding + Zero-Error Setup
- complete provider onboarding
- confirm accepted asset, chain, and deposit instructions
- validate operator contacts and exception path
- confirm packet policy internally
### Days 814: Canary Execution
- send smallest operationally meaningful packets
- verify:
- normalization correctness
- provider receipt
- reconciliation speed
- operator handoff discipline
### Days 1521: Controlled Repetition
- repeat successful clips
- keep the same asset and route shape
- avoid unnecessary route experimentation
### Days 2230: Graduated Ramp
- widen packet sizes only after zero-error repetition
- establish an initial weekly or daily cadence
- document observed provider preferences and execution quality
## 8. Provider Questions We Should Be Ready To Answer
| Question | Prepared Answer Shape |
|---|---|
| What asset will you settle in? | Primarily `USDC` |
| What chain will you deliver on? | Ethereum Mainnet unless another provider-accepted route is cleaner |
| What is your feeder system? | Chain 138 `cUSDC`, `cUSDT`, and stable LP unwind paths, with Mainnet `cW*` immediate assets |
| What funding assets do you maintain on Mainnet? | Both `cWUSDC` and `cWUSDT`, with `USDC` as the preferred final settlement target |
| Why not execute fully on-chain? | Public normalization pools are shallow; we use on-chain only for bounded preparation before institutional execution |
| What size do you expect? | Start with controlled packets, then graduate based on successful settlement and reconciliation |
| How do you control source assets? | Treasury-controlled wallets and documented corridor model |
| How do you manage risk? | Bounded normalization usage, packet limits, settlement preference, and operator-controlled promotion gates |
## 9. What We Should Ask The Provider Directly
1. Which deposit assets do you prefer for repeat institutional flow?
2. Which chain(s) are best operationally for your settlement workflow?
3. At what clip sizes do you prefer OTC desk handling versus exchange-book handling?
4. What packet cadence do you prefer from a new flow source?
5. What is your escalation process for failed or delayed deposits?
6. Do you support pre-negotiated RFQ / desk routing for normalized `USDC` flow?
7. What reconciliation data will you provide back to our operators?
## 10. Strict Bottom Line
The correct provider-facing story is not:
`we have many assets and many routes`
It is:
`we control a large same-day corridor feeder system, we normalize into clean settlement assets, and we want a reliable institutional execution partner for repeatable flow`

View File

@@ -0,0 +1,22 @@
# Source To CEX Execution Plan
- Generated: `2026-04-17T15:11:49Z`
- Strategy frame: Chain 138 inventory -> canonical bridge -> Mainnet normalization -> CEX handoff
- Mainnet funding posture: `dual-rail` via `cWUSDC, cWUSDT`
## Operator Table
| Source Asset | Bridge Output | Preferred Normalization | CEX Deposit Asset | Fallback Path |
|---|---|---|---|---|
| `cUSDC` | cWUSDC on Ethereum Mainnet | cWUSDC -> USDC | `USDC` | bridge cUSDC -> cWUSDC, then use best available Mainnet USDC normalization route with capped public-pool usage |
| `cUSDT` | cWUSDT on Ethereum Mainnet | cWUSDT -> cWUSDC -> USDC | `USDC` | use direct cWUSDT -> USDT only for tiny packets or explicit override; otherwise route through USDC normalization |
| `LP:cUSDT/cUSDC` | cUSDT and cUSDC after LP withdrawal | withdraw LP -> prefer cUSDC feeder -> bridge -> cWUSDC -> USDC | `USDC` | withdraw LP, split outputs by best feeder path, avoid forcing whole ticket through direct USDT sink |
| `cWUSDC` | none | cWUSDC -> USDC | `USDC` | split size, cap pool usage, treat on-chain conversion strictly as deposit preparation |
| `cWUSDT` | none | cWUSDT -> cWUSDC -> USDC | `USDC` | direct USDT path is last-resort and tiny; practical size should flow through USDC-normalization |
## Notes
- `cUSDC` is the cleanest same-day corridor feeder.
- `cUSDT` should usually normalize through USDC until direct USDT depth improves.
- Stable LP claims are feeder-preparation assets.
- Mainnet `cWUSDC` and `cWUSDT` are immediate in mechanics, but not deep enough to absorb large tickets on-chain.

View File

@@ -0,0 +1,24 @@
# Source To CEX Production Readiness
- Generated: `2026-04-17T15:11:49Z`
- Ready for immediate live production: `False`
- Policy production enabled: `False`
- Mainnet funding posture: `dual-rail` via `cWUSDC, cWUSDT`
## Blocking Issues
- no real off-chain sink is currently included in baseline scope
- source-to-cex production policy remains disabled
## Off-Chain Sink Validation
- Validation ready: `False`
- Included sink count: `0`
## Next Live Inputs Required
- at least one real off-chain sink row with include_in_baseline=true
- enabled_for_production_handoff=true on the real sink
- real deposit address and chain for the chosen sink
- operational_status=enabled for the chosen sink
- operator decision to set production_enabled=true after live canaries succeed

View File

@@ -0,0 +1,3 @@
# Terminal Liquidity Diversification Build Program
This repo-native program treats terminal-liquidity diversification as the next operator priority: deepen Mainnet USDC normalization, add real off-chain sinks, and only then promote broader same-day exits.

View File

@@ -0,0 +1,51 @@
# WEMIX Bridge Verification Status
**Last Updated:** 2026-04-18
## Current State
The WEMIX bridge contracts are:
- deployed live
- wired bidirectionally with Chain 138
- **not yet confirmed as explorer-verified/published**
Contracts:
- `CCIPWETH9_BRIDGE_WEMIX=0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04`
- `CCIPWETH10_BRIDGE_WEMIX=0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08`
## Verified Blockers
1. The repo did not previously have a WEMIX-specific verification helper.
2. WEMIX public explorer pages are behind bot protection, so direct scripted page checks are unreliable.
3. WEMIX explorer verification needs an `api-key`, and the repo did not previously expose a dedicated `WEMIXSCAN_API_KEY`.
4. The WEMIX deploy required a `paris` EVM target, so verification must use that same build profile.
## Repo-Native Verification Command
```bash
cd smom-dbis-138
./scripts/deployment/verify-wemix-bridges.sh
```
Required env:
- `WEMIXSCAN_API_KEY`
- `WEMIX_RPC`
- `CCIPWETH9_BRIDGE_WEMIX`
- `CCIPWETH10_BRIDGE_WEMIX`
- `CCIP_ROUTER_WEMIX`
- `WETH9_WEMIX`
- `WETH10_WEMIX`
- `LINK_TOKEN_WEMIX`
## Important Build Assumption
Verification must use:
- Solidity `0.8.20`
- optimizer enabled
- optimizer runs `200`
- `viaIR=true`
- `evmVersion=paris`

View File

@@ -1,7 +1,7 @@
# Add Chain 138 (Defi Oracle Meta Mainnet) to Trust Wallet
**Last Updated:** 2026-02-12
**Status:** User workaround available; official support via Wallet Core PR
**Last Updated:** 2026-04-17
**Status:** User workaround available; official support via Wallet Core PR; token/logo submissions use Assets App; new chain business workflow may still require Trust review outside the repo path
---
@@ -47,6 +47,8 @@ Trust Wallet allows adding custom EVM networks in the app. Because **Chain 138 i
To have Chain 138 appear in Trust Wallets **built-in** chain list (no manual add), the chain must be added to **Trust Wallet Core** via a PR.
Important: Trusts current asset-listing docs separate **new token/logo submissions** from **new chain requests**. The token/logo path goes through the Assets App, while new-chain review may still involve their Business Development / partner process even if Wallet Core code changes are technically prepared.
### Prerequisites (for Chain 138)
| Item | Value |
@@ -132,7 +134,7 @@ Defi Oracle Meta Mainnet (Chain ID 138) — EVM-compatible chain for Trust Walle
## Optional: Token / chain logos (Trust Wallet Assets)
- **Token logos:** Your app already uses Trust Wallets public asset URLs for Ethereum mainnet tokens (e.g. `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/<address>/logo.png`). For **Chain 138native tokens**, you can submit logos via [assets.trustwallet.com](https://assets.trustwallet.com) (see [Trust Listing new assets](https://developer.trustwallet.com/developer/new-asset)); fees and rules apply.
- **Chain icon:** If Trusts app shows a chain icon from their assets repo, adding a chain folder under `blockchains/` (e.g. for `dfiometa` or `eip155-138`) would follow their assets repo structure; check [trustwallet/assets](https://github.com/trustwallet/assets) for current layout.
- **Chain icon:** Treat chain-icon work as secondary to Wallet Core support. Trusts public docs currently direct new token/logo submissions through the Assets App and new chain requests through their business workflow. If a chain-assets repo addition becomes necessary, use the packaged Chain 138 bundle in [pr-ready/eip155-138-package](./pr-ready/eip155-138-package/).
---

View File

@@ -0,0 +1,124 @@
# Chain 138 — Contract Verification & External-Listing Checklist
**Generated:** 2026-04-19 · read-only probes against public endpoints. No LAN required.
**What this is:** a contract-by-contract credibility tracker. Each row has four axes:
| Axis | Question | Source |
|---|---|---|
| **deployed** | Is there bytecode at the address on Chain 138? | `eth_getCode` / `/api/v2/addresses/{addr}` |
| **blockscout-verified** | Is the source code verified on Blockscout? | `/api?module=contract&action=getsourcecode` |
| **blockscout-token-page** | Does the Blockscout token page render with name/symbol/holders? | `/api/v2/tokens/{addr}` |
| **coingecko** | Is the token listed on CoinGecko under the `defi-oracle-meta-mainnet` asset platform? | `/api/v3/coins/defi-oracle-meta-mainnet/contract/{addr}` |
| **cmc** | Is the token listed on CoinMarketCap? | CMC Pro API `/v2/cryptocurrency/info` |
| **dexscreener** | Does DexScreener index any Chain 138 pair for this token? | `/latest/dex/tokens/{addr}` |
---
## Headline findings
1. **CoinGecko asset-platform `defi-oracle-meta-mainnet` is registered.** The `/api/v3/coins/defi-oracle-meta-mainnet/contract/{addr}` endpoint returns 200 for known addresses (e.g. WETH9 address auto-matches the CG mainnet `weth` coin because the address is canonical). This means Chain 138 tokens can be submitted to CoinGecko without first creating an asset platform — that step is already done. Submissions can begin immediately.
2. **Blockscout source verification is the longest pole.** 2/44 contracts are source-verified (`MerchantSettlementRegistry`, `WithdrawalEscrow`). 42 need verification, including every `c*` stablecoin, every PMM pool, every CCIP bridge, every Vault component, every governance contract. This is the single biggest credibility gap.
3. **All 15 canonical tokens resolve on the Blockscout token page** with name, symbol, decimals, holders, and total supply. No work needed there.
4. **DexScreener does not index Chain 138.** `/latest/dex/tokens/{addr}` returns 0 pairs for every Chain 138 token, including the live PMM pool tokens. DexScreener onboarding is a separate track and may require reaching out to DexScreener directly or waiting for them to add Chain 138 as a supported chain.
5. **CMC probe gated on API key.** The checklist documents the endpoint so it can be re-run with `CMC_PRO_API_KEY` set; `/v2/cryptocurrency/info?address=...` returns listing status in one call.
---
## Fastest remaining wins (ordered by effort × impact)
1. **Verify `cUSDT` and `cUSDC` on Blockscout.** Both have the most holders (cUSDT: 4 599, cUSDC: see row). Verifying these first makes every PMM pool page render the symbol correctly on Blockscout. Source: `smom-dbis-138/contracts/tokens/CompliantFiatToken.sol`. Estimated effort: 12 hours per token (upload source + metadata).
2. **Submit `cUSDT` + `cUSDC` to CoinGecko.** The asset platform exists; submission is form-only. No on-chain work needed. Estimated effort: 30 minutes per token.
3. **Verify `DODOPMMIntegration` on Blockscout.** This gives every PMM pool a parent-contract reference and is the one contract most likely to get cited by a third-party auditor. Source: `smom-dbis-138/contracts/pmm/DODOPMMIntegration.sol`.
4. **Verify `PMM_POOL1` / `POOL2` / `POOL3` on Blockscout.** DODO proxy pools; once verified the Blockscout pool page will show the true pair metadata instead of raw bytecode. May be non-trivial if pools are DODO `DPP`/`DVM` style deployed via the DODO factory — may need to link to DODO's reference source.
5. **Submit the remaining 11 `c*` tokens to CoinGecko** in a single batch. Content is repetitive; 30 min × 11 = ~5 hours; can split across submitters.
6. **Verify `CCIPWETH9Bridge`, `CCIPWETH10Bridge`, `CCIPRouter`, `CCIPSender` on Blockscout.** These are the contracts most relevant to cross-chain credibility. Source: Chainlink CCIP reference + `smom-dbis-138/contracts/ccip/`.
7. **Blockscout verification of Vault components** (`RegulatedEntityRegistry`, `VaultFactory`, `Ledger`, `Liquidation`, `XAU_Oracle`). These are the contracts an auditor will inspect for the XAU-as-unit-of-account policy (see `EXPLORER_TOKEN_LIST_CROSSCHECK §5.1`). Source: `smom-dbis-138/contracts/vault/`.
8. **CMC submission** once a CMC Pro API key is available to re-probe. Most c* tokens with repo addresses can be submitted together.
9. **DexScreener support** — file a request with DexScreener for Chain 138 indexer support. This is gated on them, not us.
---
## 4.1 Token checklist — 15 tokens
| Symbol | Address | Blockscout verified | BS token page | CoinGecko | CMC | DexScreener | Holders | Notes |
|---|---|---|---|---|---|---|---|---|
| `WETH9` | [`0xC02a…6Cc2`](https://explorer.d-bis.org/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) | ☐ | ✓ (holders=36) | ✓ (id=weth) | ? (need API key) | ☐ | 36 | Genesis; WETH9 canonical mainnet address. Source verification may need `Wrapped Ether` v9 reference code. · CG hit is the *mainnet* WETH token at the same canonical address; needs a Chain-138-specific coin page. |
| `WETH10` | [`0xf4BB…8A9f`](https://explorer.d-bis.org/token/0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f) | ☐ | ✓ (holders=4) | ☐ | ? (need API key) | ☐ | 4 | Genesis |
| `LINK` | [`0xb772…2b03`](https://explorer.d-bis.org/token/0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03) | ☐ | ✓ (holders=44) | ☐ | ? (need API key) | ☐ | 44 | Chainlink Token (Chain 138 deployment of reference LINK) |
| `cUSDT` | [`0x93E6…7f22`](https://explorer.d-bis.org/token/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22) | ☐ | ✓ (holders=4599) | ☐ | ? (need API key) | ☐ | 4599 | |
| `cUSDC` | [`0xf222…640b`](https://explorer.d-bis.org/token/0xf22258f57794CC8E06237084b353Ab30fFfa640b) | ☐ | ✓ (holders=60) | ☐ | ? (need API key) | ☐ | 60 | |
| `cEURC` | [`0x8085…266a`](https://explorer.d-bis.org/token/0x8085961F9cF02b4d800A3c6d386D31da4B34266a) | ☐ | ✓ (holders=10) | ☐ | ? (need API key) | ☐ | 10 | |
| `cEURT` | [`0xdf4b…9d72`](https://explorer.d-bis.org/token/0xdf4b71c61E5912712C1Bdd451416B9aC26949d72) | ☐ | ✓ (holders=12) | ☐ | ? (need API key) | ☐ | 12 | |
| `cGBPC` | [`0x0039…4aD2`](https://explorer.d-bis.org/token/0x003960f16D9d34F2e98d62723B6721Fb92074aD2) | ☐ | ✓ (holders=9) | ☐ | ? (need API key) | ☐ | 9 | |
| `cGBPT` | [`0x350f…D97c`](https://explorer.d-bis.org/token/0x350f54e4D23795f86A9c03988c7135357CCaD97c) | ☐ | ✓ (holders=9) | ☐ | ? (need API key) | ☐ | 9 | |
| `cAUDC` | [`0xD514…069D`](https://explorer.d-bis.org/token/0xD51482e567c03899eecE3CAe8a058161FD56069D) | ☐ | ✓ (holders=8) | ☐ | ? (need API key) | ☐ | 8 | |
| `cJPYC` | [`0xEe26…6770`](https://explorer.d-bis.org/token/0xEe269e1226a334182aace90056EE4ee5Cc8A6770) | ☐ | ✓ (holders=8) | ☐ | ? (need API key) | ☐ | 8 | |
| `cCHFC` | [`0x8739…3885`](https://explorer.d-bis.org/token/0x873990849DDa5117d7C644f0aF24370797C03885) | ☐ | ✓ (holders=8) | ☐ | ? (need API key) | ☐ | 8 | |
| `cCADC` | [`0x54dB…5679`](https://explorer.d-bis.org/token/0x54dBd40cF05e15906A2C21f600937e96787f5679) | ☐ | ✓ (holders=8) | ☐ | ? (need API key) | ☐ | 8 | |
| `cXAUC` | [`0x290E…EC6b`](https://explorer.d-bis.org/token/0x290E52a8819A4fbD0714E517225429aA2B70EC6b) | ☐ | ✓ (holders=15) | ☐ | ? (need API key) | ☐ | 15 | 1 token = 1 troy oz Au |
| `cXAUT` | [`0x94e4…C96E`](https://explorer.d-bis.org/token/0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E) | ☐ | ✓ (holders=10) | ☐ | ? (need API key) | ☐ | 10 | 1 token = 1 troy oz Au |
---
## 4.2 Core contract checklist — 29 contracts
| Contract | Address | Blockscout verified | Notes |
|---|---|---|---|
| `DODOPMMIntegration` | [`0x5BDc…e72d`](https://explorer.d-bis.org/address/0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d) | ☐ | |
| `DODOPMMProvider` | [`0x5CAe…B381`](https://explorer.d-bis.org/address/0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381) | ☐ | |
| `PMM_POOL1_cUSDT_cUSDC` | [`0xff8d…0849`](https://explorer.d-bis.org/address/0xff8d3b8fDF7B112759F076B69f4271D4209C0849) | ☐ | |
| `PMM_POOL2_cUSDT_USDT` | [`0x6fc6…9D71`](https://explorer.d-bis.org/address/0x6fc60DEDc92a2047062294488539992710b99D71) | ☐ | |
| `PMM_POOL3_cUSDC_USDC` | [`0x9f74…0263`](https://explorer.d-bis.org/address/0x9f74Be42725f2Aa072a9E0CdCce0E7203C510263) | ☐ | |
| `CCIPRouter` | [`0x42DA…4817`](https://explorer.d-bis.org/address/0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817) | ☐ | |
| `CCIPSender` | [`0x105F…4684`](https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684) | ☐ | |
| `CCIPWETH9Bridge` | [`0xcacf…820a`](https://explorer.d-bis.org/address/0xcacfd227A040002e49e2e01626363071324f820a) | ☐ | |
| `CCIPWETH10Bridge` | [`0xe0E9…35D0`](https://explorer.d-bis.org/address/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) | ☐ | |
| `UniversalCCIPBridge_proxy_phased` | [`0xCd42…56F8`](https://explorer.d-bis.org/address/0xCd42e8eD79Dc50599535d1de48d3dAFa0BE156F8) | ☐ | |
| `UniversalCCIPBridge_proxy_det` | [`0x532D…f6a3`](https://explorer.d-bis.org/address/0x532DE218b94993446Be30eC894442f911499f6a3) | ☐ | |
| `BridgeOrchestrator_proxy` | [`0x89aB…eD6c`](https://explorer.d-bis.org/address/0x89aB428c437f23bAB9781ff8Db8D3848e27EeD6c) | ☐ | |
| `CCIPReceiver_2026_02_13` | [`0xC122…430F`](https://explorer.d-bis.org/address/0xC12236C03b28e675d376774FCE2C2C052488430F) | ☐ | |
| `Multicall_2026_02_13` | [`0xF4AA…96f7`](https://explorer.d-bis.org/address/0xF4AA429BE277d1a1a1A744C9e5B3aD821a9b96f7) | ☐ | |
| `OracleAggregator_2026_02_13` | [`0xaFd9…58CE`](https://explorer.d-bis.org/address/0xaFd9E25ff301a79feaBcc56F46969F34808358CE) | ☐ | |
| `OracleProxy_2026_02_13` | [`0x9056…2E92`](https://explorer.d-bis.org/address/0x90563867F2ba94ed277303e200f4311c00982E92) | ☐ | |
| `MultiSig_2026_02_13` | [`0xb9E2…3965`](https://explorer.d-bis.org/address/0xb9E29cFa1f89d369671E640d0BB3aD94Cab43965) | ☐ | |
| `Voting_2026_02_13` | [`0x0222…cD93`](https://explorer.d-bis.org/address/0x022267b26400114aF01BaCcb92456Fe36cfccD93) | ☐ | |
| `UniversalAssetRegistry_proxy_phased` | [`0xAEE4…8575`](https://explorer.d-bis.org/address/0xAEE4b7fBe82E1F8295951584CBc772b8BBD68575) | ☐ | |
| `UniversalAssetRegistry_proxy_det` | [`0xC986…870f`](https://explorer.d-bis.org/address/0xC98602aa574F565b5478E8816BCab03C9De0870f) | ☐ | |
| `GovernanceController_proxy` | [`0xA689…0E0e`](https://explorer.d-bis.org/address/0xA6891D5229f2181a34D4FF1B515c3Aa37dd90E0e) | ☐ | |
| `RegulatedEntityRegistry` | [`0xEA4C…0b4B`](https://explorer.d-bis.org/address/0xEA4C892D6c1253797c5D95a05BF3863363080b4B) | ☐ | |
| `VaultFactory` | [`0xB2Ac…2336`](https://explorer.d-bis.org/address/0xB2Ac70f35A81481B005067ed6567a5043BA32336) | ☐ | |
| `Ledger` | [`0x67b3…B7af`](https://explorer.d-bis.org/address/0x67b3831dc64C14FB9352B2a45C6Dd69b3C86B7af) | ☐ | |
| `Liquidation` | [`0x3aCd…AB72`](https://explorer.d-bis.org/address/0x3aCdbCB749d6037a02F0ef6ea2E5Fb89D31fAB72) | ☐ | |
| `XAU_Oracle` | [`0xf23E…77A8`](https://explorer.d-bis.org/address/0xf23E1eDa304082ab7a81531dFE6020E6105e77A8) | ☐ | |
| `MerchantSettlementRegistry` | [`0x16D9…8800`](https://explorer.d-bis.org/address/0x16D9A2cB94A0b92721D93db4A6Cd8023D3338800) | ✓ `MerchantSettlementRegistry` | |
| `WithdrawalEscrow` | [`0xe77c…E46D`](https://explorer.d-bis.org/address/0xe77cb26eA300e2f5304b461b0EC94c8AD6A7E46D) | ✓ `WithdrawalEscrow` | |
| `CREATE2Factory` | [`0x750E…0825`](https://explorer.d-bis.org/address/0x750E4a8adCe9f0e67A420aBE91342DC64Eb90825) | ☐ | |
---
## Evidence
- Probe script: `/home/ubuntu/verification-probe/probe.py` (committed to repo as `scripts/verify/explorer-verification-probe.py`).
- Raw probe results: `/home/ubuntu/verification-probe/results.json` (44 entries; schema: `{sym, addr, kind, blockscout_source, blockscout_token, coingecko, cmc, dexscreener}`).
- CoinGecko asset-platform probe: `GET https://api.coingecko.com/api/v3/coins/defi-oracle-meta-mainnet/contract/0xC02a…6Cc2` → 200 (coin_id=weth). Proves the CG slug is already registered.
- Blockscout API base: `https://explorer.d-bis.org/api` (Module API) and `https://explorer.d-bis.org/api/v2` (REST API).
## How to re-run
```bash
python3 scripts/verify/explorer-verification-probe.py > reports/status/explorer-verification-latest.json
# With CMC Pro key for the CMC column:
CMC_PRO_API_KEY=... python3 scripts/verify/explorer-verification-probe.py > reports/status/explorer-verification-latest.json
```
The script is read-only, takes ~15 seconds (8 worker threads), and does not require LAN access or a signing key.
---
## Out of scope (tracked elsewhere)
- **Cross-chain `cW*` verification on Ethereum / Polygon / Base / Optimism / BSC / Avalanche / Arbitrum / Cronos / Celo / Gnosis.** Needs a per-chain probe script aimed at each chain's block explorer. Tracked in `PR #6 / STATUS_VOCABULARY.md` under the `verified-on-explorer` axis.
- **LINK on Chain 138 — is the contract at `0xb77…2b03` actually Chainlink's reference source?** If yes, source verification should point to the audited LINK source. If Chain 138 uses a redeployed variant, flag as a credibility risk.
- **The two non-canonical LINK / cUSDT / cUSDC addresses flagged in `EXPLORER_TOKEN_LIST_CROSSCHECK §2`** — out of scope for the credibility checklist but worth a separate cleanup so external explorers don't index them.

View File

@@ -10,6 +10,7 @@
**Action:** Add or update `_data/chains/eip155-138.json`.
**File:** [eip155-138.json](./eip155-138.json) — lists only **public** RPC nodes (Core and Private RPC nodes are excluded).
**Packaged copy:** [eip155-138-package/eip155-138.chainlist.json](./eip155-138-package/eip155-138.chainlist.json)
**Steps:**
1. Fork https://github.com/ethereum-lists/chains
@@ -21,22 +22,53 @@
---
## 2. Trust Wallet (trustwallet/wallet-core)
## 2. Trust Wallet
**Repo:** https://github.com/trustwallet/wallet-core
**Action:** Add Chain 138 to the chain registry (e.g. `registry.json` or current path per their docs).
There are two different Trust Wallet paths:
**File:** [trust-wallet-registry-chain138.json](./trust-wallet-registry-chain138.json)
1. **Wallet Core / built-in chain support**
Repo: https://github.com/trustwallet/wallet-core
Action: add Chain 138 to the chain registry (e.g. `registry.json` or current path per their docs).
2. **Assets / token logos**
Use the Assets App: https://assets.trustwallet.com
Action: submit token logos and metadata for supported chains.
3. **New chain business workflow**
Trusts current assets docs say new chain requests should go through their Business Development contact path, even when Wallet Core technical work is also needed.
**Steps:**
**Wallet Core file:** [trust-wallet-registry-chain138.json](./trust-wallet-registry-chain138.json)
**Packaged copy:** [eip155-138-package/trust-wallet-registry-chain138.json](./eip155-138-package/trust-wallet-registry-chain138.json)
**Wallet Core steps:**
1. Clone trustwallet/wallet-core and follow [Trust New EVM chain](https://developer.trustwallet.com/developer/wallet-core/newblockchain/newevmchain)
2. Add the JSON entry from `trust-wallet-registry-chain138.json` to the registry file (path may be `registry.json` or under `registry/`; check repo)
3. Run codegen: `./tools/new-evmchain dfiometa` (use registry **id**, not chainId 138; requires Rust/cargo)
4. Extend derivation tests if required
5. Build and test, then open PR with registry change + generated files
**Assets / logo path:** Use `assets.trustwallet.com` for token/logo submissions on supported networks.
**Full guide:** [ADD_CHAIN138_TO_TRUST_WALLET.md](../ADD_CHAIN138_TO_TRUST_WALLET.md)
## 2a. Packaged Submission Directory
**Directory:** [eip155-138-package/](./eip155-138-package/)
This folder is the operator-friendly handoff bundle for Defi Oracle Meta Mainnet (`eip155-138`). It contains:
- a Chainlist-ready JSON copy
- a Trust Wallet Wallet Core registry entry copy
- a manifest with canonical source paths
The canonical editable files remain:
- [eip155-138.json](./eip155-138.json)
- [trust-wallet-registry-chain138.json](./trust-wallet-registry-chain138.json)
Rebuild the package after updates with:
```bash
bash scripts/verify/build-chain138-pr-ready-package.sh
```
---
## 3. Ledger (after they respond)

View File

@@ -0,0 +1,66 @@
# Chain 138 Asset Submission Package
**Chain:** Defi Oracle Meta Mainnet
**Chain ID:** 138
**CAIP-2:** `eip155:138`
This package is for **token asset submissions** on Chain 138.
It is intentionally separate from the Wallet Core chain-support PR because those are different review surfaces:
- **Wallet Core**: chain metadata, coin type, address derivation, explorer URL patterns
- **Wallet / assets apps**: token logos and token metadata
- **Listing sites**: token pages and market metadata
## Important scope boundary
`wallet-core` does **not** carry:
- bridge route listings
- liquidity pool listings
- DEX pool inventories
- market / venue listings
Those belong to other systems such as token assets apps, token lists, aggregators, explorers, or market-data platforms.
## Contents
| File | Purpose |
| --- | --- |
| `manifest.json` | Package metadata and scope notes |
| `wallet-token-submissions.chain138.json` | Wallet-facing token asset submission set |
| `listing-token-submissions.chain138.json` | Listing-surface token submission set |
## Included assets
### Wallet-facing
- `WETH9` representation on Chain 138
Note: canonical Chain 138 token lists currently use symbol `WETH`; this package includes a `WETH9` alias view only for surfaces that explicitly expect that branding.
- GRU v2 canonical forward assets verified in repo sources:
- `cUSDT V2`
- `cUSDC V2`
- `cEURC V2`
- `cEURT V2`
- `cGBPC V2`
- `cGBPT V2`
- `cAUDC V2`
- `cJPYC V2`
- `cCHFC V2`
- `cCADC V2`
- `cXAUC V2`
- `cXAUT V2`
### Not included
- bridges
- pools
- cW public-network wrappers
- unsupported or unverified V2 candidates not confirmed in the current repo snapshot
## Suggested submission order
1. Wallet assets / wallet token metadata surfaces
2. Explorer token metadata alignment
3. Market-listing surfaces after market-eligibility evidence exists

View File

@@ -0,0 +1,71 @@
{
"chainId": 138,
"chainName": "Defi Oracle Meta Mainnet",
"submissionType": "listing_surfaces",
"surfaceNotes": {
"walletCore": "Chain metadata only. No token assets, bridge listings, or pool listings.",
"trustWalletAssetsApp": "Suitable for token metadata / logos on supported surfaces.",
"coingecko": "Token pages require platform support and market eligibility evidence.",
"coinmarketcap": "Token pages require market/listing eligibility evidence.",
"explorers": "Suitable for token metadata enrichment and display labels."
},
"priorityAssets": [
{
"priority": 1,
"symbol": "cUSDC",
"name": "USD Coin (Compliant V2)",
"address": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d",
"decimals": 6,
"listingRationale": [
"forward canonical",
"x402 ready",
"active GRU v2 settlement candidate"
]
},
{
"priority": 2,
"symbol": "cUSDT",
"name": "Tether USD (Compliant V2)",
"address": "0x9FBfab33882Efe0038DAa608185718b772EE5660",
"decimals": 6,
"listingRationale": [
"forward canonical",
"x402 ready",
"active GRU v2 settlement candidate"
]
},
{
"priority": 3,
"symbol": "WETH9",
"name": "Wrapped Ether (WETH9)",
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"decimals": 18,
"listingRationale": [
"useful wallet-recognition alias",
"canonical token list currently uses symbol WETH"
]
}
],
"secondaryGruV2Assets": [
"0x243e6581Dc8a98d98B92265858b322b193555C81",
"0x2bAFA83d8fF8BaE9505511998987D0659791605B",
"0x707508D223103f5D2d9EFBc656302c9d48878b29",
"0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281",
"0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb",
"0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98",
"0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c",
"0xe799033c87fE0CE316DAECcefBE3134CC74b76a9",
"0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647",
"0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1"
],
"exclusions": [
{
"symbol": "cUSDW",
"reason": "Repo-native hub asset is present on Chain 138, but a separate V2 token candidate is not verified in the current source snapshot."
},
{
"symbol": "bridges_and_pools",
"reason": "Bridge routes and pool listings are not token asset submissions and should not be bundled with wallet-core or token-listing metadata."
}
]
}

View File

@@ -0,0 +1,23 @@
{
"name": "Chain 138 Asset Submission Package",
"chainName": "Defi Oracle Meta Mainnet",
"chainId": 138,
"caip2": "eip155:138",
"purpose": "Submission bundle for Chain 138 token assets across wallet and listing surfaces.",
"walletCoreScope": {
"supportsChainMetadata": true,
"supportsTokenAssets": false,
"includesBridgeListings": false,
"includesPoolListings": false
},
"artifacts": {
"walletSubmissions": "docs/04-configuration/pr-ready/chain138-asset-package/wallet-token-submissions.chain138.json",
"listingSubmissions": "docs/04-configuration/pr-ready/chain138-asset-package/listing-token-submissions.chain138.json"
},
"verifiedSourcePaths": [
"token-lists/lists/dbis-138.tokenlist.json",
"metamask-integration/config/token-list.json",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts",
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh"
]
}

View File

@@ -0,0 +1,201 @@
{
"chainId": 138,
"chainName": "Defi Oracle Meta Mainnet",
"submissionType": "wallet_assets",
"notes": [
"This file is for wallet-facing token asset metadata, not Wallet Core chain support.",
"Use the WETH9 alias only on surfaces that explicitly expect WETH9 branding. The canonical Chain 138 token list currently uses symbol WETH for the same address.",
"Bridge and pool metadata are out of scope for wallet-core and for this package."
],
"assets": [
{
"packageKey": "chain138-weth9-alias",
"canonicalSymbol": "WETH",
"submissionDisplaySymbol": "WETH9",
"name": "Wrapped Ether (WETH9)",
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"decimals": 18,
"logoURI": "https://ipfs.io/ipfs/Qma3FKtLce9MjgJgWbtyCxBiPjJ6xi8jGWUSKNS5Jc2ong",
"surfaceRecommendations": [
"wallet assets app",
"custom token metadata",
"explorer token metadata"
],
"verifiedSourcePaths": [
"token-lists/lists/dbis-138.tokenlist.json"
],
"notes": [
"Canonical Chain 138 token list symbol is WETH.",
"Use WETH9 only where the receiving surface specifically distinguishes WETH9 from other wrapped Ether forms."
]
},
{
"packageKey": "gru-v2-cusdt",
"canonicalSymbol": "cUSDT",
"submissionDisplaySymbol": "cUSDT",
"name": "Tether USD (Compliant V2)",
"address": "0x9FBfab33882Efe0038DAa608185718b772EE5660",
"decimals": 6,
"logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png",
"gruVersion": "v2",
"verifiedSourcePaths": [
"metamask-integration/config/token-list.json"
]
},
{
"packageKey": "gru-v2-cusdc",
"canonicalSymbol": "cUSDC",
"submissionDisplaySymbol": "cUSDC",
"name": "USD Coin (Compliant V2)",
"address": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d",
"decimals": 6,
"logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png",
"gruVersion": "v2",
"verifiedSourcePaths": [
"metamask-integration/config/token-list.json"
]
},
{
"packageKey": "gru-v2-ceurc",
"canonicalSymbol": "cEURC",
"submissionDisplaySymbol": "cEURC",
"name": "Euro Coin (Compliant V2)",
"address": "0x243e6581Dc8a98d98B92265858b322b193555C81",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-ceurt",
"canonicalSymbol": "cEURT",
"submissionDisplaySymbol": "cEURT",
"name": "Tether EUR (Compliant V2)",
"address": "0x2bAFA83d8fF8BaE9505511998987D0659791605B",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURT.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cgbpc",
"canonicalSymbol": "cGBPC",
"submissionDisplaySymbol": "cGBPC",
"name": "Pound Sterling (Compliant V2)",
"address": "0x707508D223103f5D2d9EFBc656302c9d48878b29",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cgbpt",
"canonicalSymbol": "cGBPT",
"submissionDisplaySymbol": "cGBPT",
"name": "Tether GBP (Compliant V2)",
"address": "0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPT.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-caudc",
"canonicalSymbol": "cAUDC",
"submissionDisplaySymbol": "cAUDC",
"name": "Australian Dollar (Compliant V2)",
"address": "0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cAUDC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cjpyc",
"canonicalSymbol": "cJPYC",
"submissionDisplaySymbol": "cJPYC",
"name": "Japanese Yen (Compliant V2)",
"address": "0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cJPYC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cchfc",
"canonicalSymbol": "cCHFC",
"submissionDisplaySymbol": "cCHFC",
"name": "Swiss Franc (Compliant V2)",
"address": "0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCHFC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-ccadc",
"canonicalSymbol": "cCADC",
"submissionDisplaySymbol": "cCADC",
"name": "Canadian Dollar (Compliant V2)",
"address": "0xe799033c87fE0CE316DAECcefBE3134CC74b76a9",
"decimals": 6,
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCADC.svg",
"gruVersion": "v2",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cxauc",
"canonicalSymbol": "cXAUC",
"submissionDisplaySymbol": "cXAUC",
"name": "Gold (Compliant V2)",
"address": "0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647",
"decimals": 6,
"logoURI": "https://explorer.d-bis.org/token-icons/cXAUC.png",
"gruVersion": "v2",
"unitOfAccount": "troy_ounce",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
},
{
"packageKey": "gru-v2-cxaut",
"canonicalSymbol": "cXAUT",
"submissionDisplaySymbol": "cXAUT",
"name": "Tether XAU (Compliant V2)",
"address": "0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1",
"decimals": 6,
"logoURI": "https://explorer.d-bis.org/token-icons/cXAUT.png",
"gruVersion": "v2",
"unitOfAccount": "troy_ounce",
"verifiedSourcePaths": [
"smom-dbis-138/scripts/mint-c-star-v2-wave1-138.sh",
"explorer-monorepo/frontend/src/services/api/gruExplorerData.ts"
]
}
]
}

View File

@@ -0,0 +1,30 @@
# Defi Oracle Meta Mainnet PR-Ready Package
**Chain:** Defi Oracle Meta Mainnet
**Chain ID:** 138
**CAIP-2:** `eip155:138`
This directory is the handoff bundle for external chain-listing and wallet-support work.
## Contents
| File | Purpose |
| --- | --- |
| `eip155-138.chainlist.json` | Chainlist / `ethereum-lists/chains` submission copy |
| `trust-wallet-registry-chain138.json` | Trust Wallet Wallet Core registry entry copy |
| `manifest.json` | Package metadata and canonical source paths |
## Canonical sources
The editable source files live one directory up:
- `../eip155-138.json`
- `../trust-wallet-registry-chain138.json`
Do not manually edit the copies in this package unless you are intentionally preparing a one-off external handoff. Prefer updating the canonical sources and rebuilding the package.
## Rebuild
```bash
bash scripts/verify/build-chain138-pr-ready-package.sh
```

View File

@@ -0,0 +1,52 @@
{
"name": "Defi Oracle Meta Mainnet",
"chain": "dfiometa",
"rpc": [
"https://rpc-http-pub.d-bis.org",
"wss://rpc-ws-pub.d-bis.org",
"https://rpc.d-bis.org",
"wss://rpc.d-bis.org",
"https://rpc2.d-bis.org",
"wss://ws.rpc.d-bis.org",
"wss://ws.rpc2.d-bis.org",
"https://rpc.public-0138.defi-oracle.io",
"wss://rpc.public-0138.defi-oracle.io",
"https://rpc.defi-oracle.io",
"wss://wss.defi-oracle.io"
],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
},
{
"name": "EIP2718"
},
{
"name": "EIP2930"
}
],
"faucets": [],
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"infoURL": "https://d-bis.org",
"shortName": "dfio-meta-main",
"chainId": 138,
"networkId": 138,
"slip44": 60,
"ens": {
"registry": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85"
},
"explorers": [
{
"name": "Blockscout",
"url": "https://explorer.d-bis.org",
"standard": "EIP3091"
}
]
}

View File

@@ -0,0 +1,14 @@
{
"name": "Defi Oracle Meta Mainnet PR-Ready Package",
"chainId": 138,
"caip2": "eip155:138",
"generatedBy": "scripts/verify/build-chain138-pr-ready-package.sh",
"canonicalSources": {
"chainlist": "docs/04-configuration/pr-ready/eip155-138.json",
"trustWalletRegistry": "docs/04-configuration/pr-ready/trust-wallet-registry-chain138.json"
},
"artifacts": {
"chainlist": "docs/04-configuration/pr-ready/eip155-138-package/eip155-138.chainlist.json",
"trustWalletRegistry": "docs/04-configuration/pr-ready/eip155-138-package/trust-wallet-registry-chain138.json"
}
}

View File

@@ -0,0 +1,28 @@
{
"id": "dfiometa",
"name": "Defi Oracle Meta Mainnet",
"coinId": 10000138,
"symbol": "ETH",
"decimals": 18,
"blockchain": "Ethereum",
"derivation": [
{ "path": "m/44'/60'/0'/0/0" }
],
"curve": "secp256k1",
"publicKeyType": "secp256k1Extended",
"chainId": "138",
"addressHasher": "keccak256",
"explorer": {
"url": "https://explorer.d-bis.org",
"txPath": "/tx/",
"accountPath": "/address/",
"sampleTx": "0xbc36c6050ea6b6f484009a1fcd8f8c6c2c2bd629661bc75fa5e84829c662a604",
"sampleAccount": "0x4A666F96fC8764181194447A7dFdb7d471b301C8"
},
"info": {
"url": "https://d-bis.org",
"source": "https://gitea.d-bis.org/d-bis",
"rpc": "https://rpc-http-pub.d-bis.org",
"documentation": "https://d-bis.org"
}
}

View File

@@ -20,6 +20,12 @@
},
{
"name": "EIP1559"
},
{
"name": "EIP2718"
},
{
"name": "EIP2930"
}
],
"faucets": [],
@@ -43,4 +49,4 @@
"standard": "EIP3091"
}
]
}
}

View File

@@ -22,6 +22,36 @@
| **Required / optional / recommended (full plan)** | [00-meta/COMPLETE_REQUIRED_OPTIONAL_RECOMMENDED_INDEX.md](00-meta/COMPLETE_REQUIRED_OPTIONAL_RECOMMENDED_INDEX.md) |
| **Single task list** | [00-meta/TODOS_CONSOLIDATED.md](00-meta/TODOS_CONSOLIDATED.md) |
| **Execution: multiple routes + liquidity (all + optional, suggested order)** | [00-meta/EXECUTION_CHECKLIST_MULTIPLE_ROUTES_AND_LIQUIDITY.md](00-meta/EXECUTION_CHECKLIST_MULTIPLE_ROUTES_AND_LIQUIDITY.md) |
| **Source to CEX execution plan** | [03-deployment/SOURCE_TO_CEX_EXECUTION_PLAN.md](03-deployment/SOURCE_TO_CEX_EXECUTION_PLAN.md) — operator bridge, normalization, and exchange-handoff plan |
| **Source to CEX production readiness** | [03-deployment/SOURCE_TO_CEX_PRODUCTION_READINESS.md](03-deployment/SOURCE_TO_CEX_PRODUCTION_READINESS.md) — repo-native readiness gate for immediate production |
| **Immediate live production task list: source to CEX** | [03-deployment/IMMEDIATE_LIVE_PRODUCTION_TASK_LIST_SOURCE_TO_CEX.md](03-deployment/IMMEDIATE_LIVE_PRODUCTION_TASK_LIST_SOURCE_TO_CEX.md) — task list with remaining live blockers called out |
| **Crypto.com OTC before vs after matrix** | [03-deployment/CRYPTO_COM_OTC_BEFORE_AFTER_OPERATOR_MATRIX.md](03-deployment/CRYPTO_COM_OTC_BEFORE_AFTER_OPERATOR_MATRIX.md) — strict operator comparison of the current ecosystem versus the state after a real Crypto.com OTC sink is connected |
| **Provider-facing source to CEX package** | [03-deployment/PROVIDER_FACING_PACKAGE_SOURCE_TO_CEX.md](03-deployment/PROVIDER_FACING_PACKAGE_SOURCE_TO_CEX.md) — strict provider-facing package covering expectations, flow presentation, questions, and a first 30-day ramp plan |
| **Mr. Promod Uniswap V2 liquidity program** | [03-deployment/PROMOD_UNISWAP_V2_LIQUIDITY_PROGRAM.md](03-deployment/PROMOD_UNISWAP_V2_LIQUIDITY_PROGRAM.md) — wrapped-depth-first Uniswap V2 rollout for cW* and cWAUSDT on bridged public networks |
| **Mr. Promod Uniswap V2 promotion gates** | [03-deployment/PROMOD_UNISWAP_V2_PROMOTION_GATES.md](03-deployment/PROMOD_UNISWAP_V2_PROMOTION_GATES.md) — exact per-chain env vars and registry records required before any live Uniswap V2 pool can be promoted |
| **Mr. Promod Uniswap V2 live pair discovery** | [03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md](03-deployment/PROMOD_UNISWAP_V2_LIVE_PAIR_DISCOVERY.md) — env-ready chain scan for live cW Uniswap V2-compatible pairs and the path to record them |
| **Mr. Promod Uniswap V2 first deployment target matrix** | [03-deployment/PROMOD_UNISWAP_V2_FIRST_DEPLOYMENT_TARGET_MATRIX.md](03-deployment/PROMOD_UNISWAP_V2_FIRST_DEPLOYMENT_TARGET_MATRIX.md) — exact first pair per chain, why it goes first, required tokens, and post-deploy commands |
| **Mr. Promod Uniswap V2 phase order** | [03-deployment/PROMOD_UNISWAP_V2_PHASE_ORDER.md](03-deployment/PROMOD_UNISWAP_V2_PHASE_ORDER.md) — strict rollout order: phase 1 core rail, phase 2 full cW* wrapped mesh, phase 3 settlement rails |
| **Mr. Promod Uniswap V2 phase 2 operator sequence** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_OPERATOR_SEQUENCE.md](03-deployment/PROMOD_UNISWAP_V2_PHASE2_OPERATOR_SEQUENCE.md) — exact chain-by-chain phase-2 cW* wrapped-mesh rollout with per-pair probe, create, and deploy blocks |
| **Mr. Promod Uniswap V2 phase 2 wave 2 operator sequence** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_OPERATOR_SEQUENCE.md](03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_OPERATOR_SEQUENCE.md) — exact chain-by-chain rollout for the remaining wrapped-mesh assets after wave 1 |
| **Mr. Promod Uniswap V2 phase 2 wave 2 operator paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_OPERATOR_PASTE_PACK.md](03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_OPERATOR_PASTE_PACK.md) — flat paste-ready operator pack for every remaining wrapped-mesh pair in wave 2 |
| **Mr. Promod Uniswap V2 phase 2 wave 2 shell paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_SHELL_PASTE_PACK.sh](03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE2_SHELL_PASTE_PACK.sh) — pure shell-only sequence for every remaining wrapped-mesh pair in wave 2 |
| **Mr. Promod Uniswap V2 phase 2 operator paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_OPERATOR_PASTE_PACK.md](03-deployment/PROMOD_UNISWAP_V2_PHASE2_OPERATOR_PASTE_PACK.md) — flat paste-ready operator pack for every phase-2 wrapped-mesh pair in execution order |
| **Mr. Promod Uniswap V2 phase 2 shell paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_SHELL_PASTE_PACK.sh](03-deployment/PROMOD_UNISWAP_V2_PHASE2_SHELL_PASTE_PACK.sh) — pure shell-only sequence for phase-2 wrapped-mesh pair creation and seeding |
| **Mr. Promod Uniswap V2 phase 2 wave 1 completion status** | [03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md](03-deployment/PROMOD_UNISWAP_V2_PHASE2_WAVE1_COMPLETION_STATUS.md) — live reserve-backed completion report for the six wave-1 wrapped pairs on all target networks, plus current explorer-publication blockers |
| **Mr. Promod GRU v2 full mesh gap report** | [03-deployment/PROMOD_GRU_V2_FULL_MESH_GAP_REPORT.md](03-deployment/PROMOD_GRU_V2_FULL_MESH_GAP_REPORT.md) — strict per-network gap report for the remaining cW mesh across DODO PMM, Uniswap V2, Balancer, Curve, and other venue surfaces |
| **Chain 138 -> Wemix 1111 bridge completion checklist** | [03-deployment/CHAIN_138_TO_WEMIX_1111_BRIDGE_COMPLETION_CHECKLIST.md](03-deployment/CHAIN_138_TO_WEMIX_1111_BRIDGE_COMPLETION_CHECKLIST.md) — exact operator checklist for deploying the WEMIX WETH bridges, wiring destinations, funding LINK, and promoting `1111` out of deferred state |
| **WEMIX bridge verification status** | [03-deployment/WEMIX_BRIDGE_VERIFICATION_STATUS.md](03-deployment/WEMIX_BRIDGE_VERIFICATION_STATUS.md) — current explorer-publication state for the deployed WEMIX bridges and the repo-native verification command |
| **Mr. Promod Uniswap V2 phase 1 execution checklist** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_EXECUTION_CHECKLIST.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_EXECUTION_CHECKLIST.md) — exact chain-by-chain operator checklist for the first full `cWUSDT/cWUSDC` rollout |
| **Mr. Promod Uniswap V2 phase 1 funding readiness** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_READINESS.md) — live deployer-wallet balances and max equal-sided seed size for each `cWUSDT/cWUSDC` target chain |
| **Mr. Promod Uniswap V2 phase 1 funding bundle** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_BUNDLE.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_BUNDLE.md) — per-chain missing-token/gas bundle and exact post-funding deploy block for phase 1 |
| **Mr. Promod Uniswap V2 phase 1 funding actions** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_FUNDING_ACTIONS.md) — strict per-chain mint-before-seed or seed-now action plan, with bridge-possible notes tied to the cW bridge runbooks |
| **Mr. Promod Uniswap V2 phase 1 bridge-from-138 matrix** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_FROM_138_MATRIX.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_FROM_138_MATRIX.md) — strict destination shortfall matrix showing how much cUSDT/cUSDC Chain 138 inventory could source for the remaining phase-1 rollout |
| **Mr. Promod Uniswap V2 phase 1 bridge 3x matrix** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_3X_MATRIX.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_3X_MATRIX.md) — strict 3x bridge sizing plan from Chain 138 for the remaining phase-1 destination shortfalls |
| **Mr. Promod Uniswap V2 phase 1 bridge 3x operator packet** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_3X_OPERATOR_PACKET.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_3X_OPERATOR_PACKET.md) — strict operator packet with 3x bridge amounts, destination cW addresses, bridge env, and post-funding deploy block per chain |
| **Mr. Promod Uniswap V2 phase 1 bridge-or-mint runbook** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_OR_MINT_RUNBOOK.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_BRIDGE_OR_MINT_RUNBOOK.md) — strict runbook that ties the 3x operator packet to bridge preflight, exact mint fallback blocks, and post-funding deploy blocks |
| **Mr. Promod Uniswap V2 phase 1 remaining 8 operator paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_REMAINING_8_OPERATOR_PASTE_PACK.md](03-deployment/PROMOD_UNISWAP_V2_PHASE1_REMAINING_8_OPERATOR_PASTE_PACK.md) — one flat paste-ready pack for the remaining eight phase-1 chains after `1` and `137` |
| **Mr. Promod Uniswap V2 phase 1 remaining 8 shell paste pack** | [03-deployment/PROMOD_UNISWAP_V2_PHASE1_REMAINING_8_SHELL_PASTE_PACK.sh](03-deployment/PROMOD_UNISWAP_V2_PHASE1_REMAINING_8_SHELL_PASTE_PACK.sh) — pure shell-only paste pack for the remaining eight phase-1 chains with no markdown headings |
| **All additional recommendations (table)** | [00-meta/ADDITIONAL_RECOMMENDATIONS_TABLE.md](00-meta/ADDITIONAL_RECOMMENDATIONS_TABLE.md) — consolidated table of every recommendation with description and command/doc |
| **Dotenv & markdown audit (gaps + recommendations)** | [00-meta/DOTENV_AND_MARKDOWN_AUDIT_GAPS_AND_RECOMMENDATIONS.md](00-meta/DOTENV_AND_MARKDOWN_AUDIT_GAPS_AND_RECOMMENDATIONS.md) — required env/markdown info, run results, gaps, recommendations |
| **Next steps (concise)** | [00-meta/NEXT_STEPS_LIST.md](00-meta/NEXT_STEPS_LIST.md) — bridge/swap/Phase C status, quick commands |

View File

@@ -0,0 +1,4 @@
{
"extends": "next/core-web-vitals",
"root": true
}

6
mission-control/.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
.next
node_modules
.data
*.tsbuildinfo
coverage
playwright-report

79
mission-control/README.md Normal file
View File

@@ -0,0 +1,79 @@
# Mission Control (unified operator console)
Next.js application in this monorepo: **launchpad** links to existing UIs, **guided runbooks** collect inputs and execute **allowlisted** repo scripts with **live SSE trace**, **graded touchpoints**, **compliance assertions**, and a **downloadable ZIP audit pack** (manifest, events, logs, checksums).
## Run locally
From the **monorepo root**:
```bash
pnpm install
pnpm mission-control:dev
```
Open **http://localhost:3010** (Proxmox helper site can stay on 3000).
### Runbook catalog
- **Hand-written specs:** `mission-control/runbooks/specs/*.json` (short ids like `health-self-check`).
- **All documentation runbooks:** `mission-control/runbooks/doc-manifest.json` is generated from every `docs/**/**RUNBOOK**.md` (excluding master index files). Each entry runs **real** `scripts/...` or `explorer-monorepo/scripts/...` paths extracted from that markdown (up to 14 steps), with **Proxmox host**, **RPC override**, and **Practice mode** inputs.
Regenerate the doc manifest after editing runbook markdown:
```bash
pnpm --filter mission-control run generate:runbooks
```
`pnpm mission-control:build` runs **prebuild**`generate:runbooks` automatically.
### Environment
| Variable | Purpose |
|----------|---------|
| `MISSION_CONTROL_PROJECT_ROOT` | Optional absolute monorepo root. If set but the path does not exist, Mission Control logs a warning and auto-detects from cwd instead (avoids a hard 500). |
| `GIT_BASH_PATH` | Windows: full path to `bash.exe` if not under default Git paths. |
| `NEXT_PUBLIC_HELPER_SCRIPTS_URL` | Launchpad link for helper site (default `http://localhost:3000`). |
| `NEXT_PUBLIC_EXPLORER_URL` | Launchpad link for explorer (default `https://explorer.d-bis.org`). |
| `NEXT_PUBLIC_PHOENIX_DEPLOY_API_URL` | Launchpad link for Phoenix Deploy API health (default `http://localhost:4001/health`). |
| `NEXT_PUBLIC_TESTNET_2138_RUNBOOK_URL` | Meta testnet 2138 runbook (Gitea markdown). |
| `NEXT_PUBLIC_ROUTE_MATRIX_URL` | Aggregator route matrix JSON in repo. |
| `NEXT_PUBLIC_DOCS_MASTER_URL` / `NEXT_PUBLIC_OPERATIONAL_RUNBOOKS_URL` | Override doc deep links on the launchpad. |
| `NEXT_PUBLIC_E2E_ENDPOINTS_DOC_URL` | Gitea markdown for `docs/04-configuration/E2E_ENDPOINTS_LIST.md` (routing verifier inventory). |
| `NEXT_PUBLIC_DOCS_SITE_URL` | Launchpad link for public docs site (default `https://docs.d-bis.org`). |
| `NEXT_PUBLIC_GITEA_URL` | Launchpad link for Gitea (default `https://gitea.d-bis.org`). |
| `NEXT_PUBLIC_CHAIN138_DAPP_URL` | Launchpad link for Chain 138 dapp (default `https://dapp.d-bis.org`). |
## Test
```bash
pnpm mission-control:test
```
Runs a real **health-self-check** (Node child process) against the allowlisted executor.
## Build / production
```bash
pnpm mission-control:build
pnpm mission-control:start
```
Use a **production process manager** (systemd, PM2, container) with `NODE_ENV=production`. The runner executes **only** scripts mapped in `src/lib/allowlist.ts`—no arbitrary shell from the UI.
## Security notes
- Treat this console as **privileged**: anyone who can POST `/api/runs` can trigger allowlisted automation on the host.
- Place **authentication / network restrictions** in front (reverse proxy, VPN, mTLS) for non-local use.
- Secrets in runbook forms: mark `sensitive: true` in JSON specs; values are redacted in `inputs.redacted.json` inside the audit bundle.
## Adding a runbook
**Option A — markdown in `docs/`:** Name the file with `RUNBOOK` in the filename. Reference scripts as `scripts/...` or `explorer-monorepo/scripts/...`. Run `pnpm --filter mission-control run generate:runbooks` and commit the updated `doc-manifest.json`.
**Option B — curated JSON:** Add `runbooks/specs/<id>.json` (see `src/lib/runbook-schema.ts`). Every spec must include an **`execution`** block with allowlisted script paths. Hand-written specs override doc-manifest entries if they share the same `id`.
Execution is allowlisted by path prefix only: **`scripts/`** and **`explorer-monorepo/scripts/`** (see `src/lib/execution-path-validator.ts`).
## Timeline
See [TIMELINE.md](./TIMELINE.md) for phased delivery and estimates.

View File

@@ -0,0 +1,17 @@
# Mission Control — delivery timeline
Estimates assume one engineer familiar with the monorepo. Parallel work (UI + runner hardening) can compress calendar time.
| Phase | Scope | Estimate | Status (this PR) |
|-------|--------|----------|-------------------|
| **P0** | Workspace package, routing, TARDIS-themed shell, launchpad links | 12 days | **Done** |
| **P1** | Runbook JSON schema, catalog UI, help tooltips, GO button, POST `/api/runs` | 23 days | **Done** |
| **P2** | Allowlisted executor (bash + node), job store, SSE stream, live panels | 34 days | **Done** |
| **P3** | Touchpoint grading, compliance assertions, audit ZIP + checksums | 23 days | **Done** |
| **P4** | Vitest smoke test, docs, env knobs for Windows/Git Bash | 1 day | **Done** |
| **P5** | AuthN/Z (OIDC/API key), rate limits, queue (Redis) for multi-instance | 12 weeks | *Future* |
| **P6** | Map remaining `docs/**` runbooks to specs + narrow allowlist expansion | Ongoing | *Future* |
**Total (P0P4):** roughly **913** engineering days for a production-capable v1 on a **trusted network**.
**Wall-clock if focused:** about **2 weeks** including review, hardening, and operator dry-runs on LAN.

6
mission-control/next-env.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference path="./.next/types/routes.d.ts" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

View File

@@ -0,0 +1,7 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
serverExternalPackages: ['archiver'],
};
export default nextConfig;

View File

@@ -0,0 +1,40 @@
{
"name": "mission-control",
"version": "1.0.0",
"private": true,
"description": "Unified console: launchpad, guided runbooks, live execution, compliance evidence, audit export",
"scripts": {
"generate:runbooks": "node ./scripts/generate-doc-runbook-manifest.mjs",
"prebuild": "pnpm run generate:runbooks",
"dev": "next dev -p 3010",
"build": "next build",
"start": "next start -p 3010",
"lint": "next lint",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest"
},
"dependencies": {
"archiver": "^7.0.1",
"clsx": "^2.1.1",
"lucide-react": "^0.561.0",
"next": "15.5.8",
"react": "19.2.3",
"react-dom": "19.2.3",
"tailwind-merge": "^3.4.1",
"zod": "^4.3.6"
},
"devDependencies": {
"@types/archiver": "^7.0.0",
"@types/node": "^22.19.3",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"autoprefixer": "^10.4.23",
"eslint": "^9.39.2",
"eslint-config-next": "15.5.8",
"postcss": "^8.5.6",
"tailwindcss": "^3.4.19",
"typescript": "^5.9.3",
"vitest": "^2.1.9"
}
}

View File

@@ -0,0 +1,9 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
export default config;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,67 @@
{
"id": "check-chain138-rpc-health",
"title": "Chain 138 RPC health (HTTP + peers + public probe)",
"summary": "Runs the repository script that checks Besu HTTP RPCs in parallel (head spread, peer counts) and probes public RPC capability against the documented matrix.",
"whyItMatters": "Catches silent RPC drift, split heads, or under-peered nodes before wallets and bridges fail in production.",
"audienceHelp": "You need bash (WSL, Git Bash, or Linux/macOS) and network reachability to the RPC IPs in config/ip-addresses.conf. Tunables: RPC_MAX_HEAD_SPREAD, RPC_MIN_PEERS, RPC_TIMEOUT_SEC, CHAIN138_PUBLIC_RPC_URL.",
"docPath": "scripts/verify/check-chain138-rpc-health.sh",
"prerequisites": [
"Bash and curl available on PATH.",
"Optional: config/ip-addresses.conf present for LAN IP overrides."
],
"steps": [
{
"title": "Parallel RPC checks",
"plainText": "The script queries each configured HTTP endpoint for block number and peer count, then compares head spread and minimum peers.",
"technicalNote": "See scripts/verify/check-chain138-rpc-health.sh header for env defaults."
},
{
"title": "Public capability probe",
"plainText": "Validates the public RPC URL against the documented support matrix (methods / capabilities).",
"technicalNote": "CHAIN138_PUBLIC_RPC_URL overrides https://rpc-http-pub.d-bis.org"
}
],
"inputs": [
{
"name": "proxmoxHost",
"label": "Proxmox host",
"type": "string",
"help": "Passed as PROXMOX_HOST for any downstream tooling that reads it (this script primarily uses RPC IPs).",
"example": "192.168.11.10",
"default": "192.168.11.10"
},
{
"name": "rpcUrlOverride",
"label": "RPC URL override (optional)",
"type": "string",
"help": "If non-empty, set as RPC_URL_138 in the environment for consistency with other runbooks.",
"example": "http://192.168.11.211:8545",
"default": ""
},
{
"name": "practiceMode",
"label": "Practice mode (--dry-run where supported)",
"type": "boolean",
"help": "This script does not implement --dry-run; leave off for a real check.",
"default": false
}
],
"touchpoints": [
{
"id": "exit_ok",
"label": "Script exit",
"description": "check-chain138-rpc-health.sh exited 0.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-CHAIN138-RPC-1",
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/verify/check-chain138-rpc-health.sh",
"args": []
}
]
}
}

View File

@@ -0,0 +1,43 @@
{
"id": "health-self-check",
"title": "Mission Control pipeline check",
"summary": "Runs a tiny built-in command to prove the console can start processes and record results.",
"whyItMatters": "If this fails, the problem is the console or Node on this machine—not your network or Proxmox.",
"audienceHelp": "You do not need to know what Node is. Press the button; green means the control room is working.",
"docPath": "mission-control/README.md",
"prerequisites": ["You are on the machine where Mission Control is installed."],
"steps": [
{
"title": "What happens",
"plainText": "The system runs one safe line of code that prints a short success message. Nothing on your network is changed.",
"technicalNote": "Executes scripts/mission-control/health-check.mjs",
"example": "Output line: MISSION_CONTROL_HEALTH_OK"
}
],
"inputs": [],
"touchpoints": [
{
"id": "stdout_marker",
"label": "Success marker in output",
"description": "Proves stdout was captured.",
"passCondition": "stdout_contains",
"pattern": "MISSION_CONTROL_HEALTH_OK"
},
{
"id": "clean_exit",
"label": "Process exit",
"description": "Proves the child process ended without error.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-INTERNAL-1",
"execution": {
"steps": [
{
"interpreter": "node",
"scriptRelative": "scripts/mission-control/health-check.mjs",
"args": []
}
]
}
}

View File

@@ -0,0 +1,42 @@
{
"id": "reconcile-env-canonical",
"title": "Print canonical Chain 138 environment lines",
"summary": "Emits the recommended contract address lines for smom-dbis-138/.env from the documentation source of truth.",
"whyItMatters": "Keeps deploy and tooling aligned with the same addresses your docs say are canonical—without opening large markdown files by hand.",
"audienceHelp": "You are not editing secrets here. The script only prints suggested lines; you copy them into your env file if your operator approves.",
"docPath": "scripts/verify/reconcile-env-canonical.sh",
"prerequisites": ["Bash available.", "docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md exists in the repo."],
"steps": [
{
"title": "Review output",
"plainText": "The console will show lines like COMPLIANT_USDT=0x… Compare them to your smom-dbis-138/.env with your team lead.",
"technicalNote": "Runs reconcile-env-canonical.sh --print"
}
],
"inputs": [],
"touchpoints": [
{
"id": "canonical_marker",
"label": "Canonical lines emitted",
"description": "Output includes known canonical variable names.",
"passCondition": "stdout_contains",
"pattern": "COMPLIANCE_REGISTRY="
},
{
"id": "exit_ok",
"label": "Script exit",
"description": "Script finished successfully.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-INTERNAL-1",
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/verify/reconcile-env-canonical.sh",
"args": ["--print"]
}
]
}
}

View File

@@ -0,0 +1,59 @@
{
"id": "run-completable-anywhere",
"title": "Run “completable from anywhere” validation suite",
"summary": "Runs config validation, optional on-chain checks, full validation (genesis skipped), and env reconciliation printout.",
"whyItMatters": "This is the same high-level health pass documented for machines that are not on the operator LAN.",
"audienceHelp": "Start with Practice mode. A full run can take several minutes and may try to reach Chain 138 RPC if your network allows it.",
"docPath": "scripts/run-completable-tasks-from-anywhere.sh",
"prerequisites": ["Bash available.", "Network access optional for some steps."],
"steps": [
{
"title": "Practice mode",
"plainText": "Lists the four steps without executing them.",
"example": "You should see “Completable from anywhere (--dry-run”"
},
{
"title": "Full run",
"plainText": "Executes all four steps. Some steps tolerate RPC failure; read the live log if anything is yellow or red.",
"technicalNote": "See MASTER_INDEX.md “completable from anywhere”"
}
],
"inputs": [
{
"name": "dryRun",
"label": "Practice mode (dry run)",
"type": "boolean",
"help": "Safe preview of what would run.",
"default": true
}
],
"touchpoints": [
{
"id": "done_banner",
"label": "Completion signal",
"description": "Detects section headers printed in both dry-run and full execution.",
"passCondition": "stdout_contains",
"pattern": "==="
},
{
"id": "exit_ok",
"label": "Exit code",
"description": "Process exited zero.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-INTERNAL-1",
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/run-completable-tasks-from-anywhere.sh",
"args": [],
"supportsDryRun": true,
"whenInputTrue": {
"dryRun": ["--dry-run"]
}
}
]
}
}

View File

@@ -0,0 +1,63 @@
{
"id": "validate-config-files",
"title": "Validate repository configuration files",
"summary": "Checks that key config files (IPs, token lists, mappings) exist and look structurally valid.",
"whyItMatters": "Broken or missing config causes silent failures later when you deploy or run operator scripts.",
"audienceHelp": "Use Practice mode first—it only shows what would be checked. Turn it off when you want a real check.",
"docPath": "scripts/validation/validate-config-files.sh",
"prerequisites": [
"Bash available (macOS/Linux, WSL, or Git for Windows).",
"Repository root is the monorepo (contains config/ and pnpm-workspace.yaml)."
],
"steps": [
{
"title": "Practice mode (recommended first)",
"plainText": "When Practice mode is on, the script lists what it would validate and exits successfully without touching files.",
"example": "You will see lines starting with === Validation (--dry-run"
},
{
"title": "Full check",
"plainText": "Turn Practice mode off to scan the repo. jq may be used if installed for JSON validation.",
"technicalNote": "Script: scripts/validation/validate-config-files.sh"
}
],
"inputs": [
{
"name": "dryRun",
"label": "Practice mode (dry run)",
"type": "boolean",
"help": "When enabled, no real file checks run—only a safe preview.",
"example": "Start with this ON, then run again with it OFF.",
"default": true
}
],
"touchpoints": [
{
"id": "exit_ok",
"label": "Script completed without crash",
"passCondition": "exit_zero",
"description": "Non-zero exit means validation reported errors."
},
{
"id": "signal_ok",
"label": "Expected log signal",
"description": "Detects either dry-run banner or success line.",
"passCondition": "stdout_contains",
"pattern": "Validation"
}
],
"complianceFramework": "DBIS-MC-INTERNAL-1",
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/validation/validate-config-files.sh",
"args": [],
"supportsDryRun": true,
"whenInputTrue": {
"dryRun": ["--dry-run"]
}
}
]
}
}

View File

@@ -0,0 +1,35 @@
{
"id": "verify-ws-rpc-chain138",
"title": "Verify WebSocket RPC (Chain 138)",
"summary": "Runs the repository script that checks WebSocket connectivity to the configured Chain 138 RPC endpoint.",
"whyItMatters": "Wallets and some services use WebSockets; HTTP-only checks are not enough.",
"audienceHelp": "You need network reachability to the RPC URL in your environment. If this fails, ask whether you are on the correct network or VPN.",
"docPath": "scripts/verify-ws-rpc-chain138.mjs",
"prerequisites": ["Node.js on PATH.", "RPC/WebSocket URL reachable from this machine (see root package.json verify:ws-chain138)."],
"steps": [
{
"title": "Run check",
"plainText": "The script prints connection results. Green in the live log usually means the socket answered.",
"technicalNote": "pnpm verify:ws-chain138 from repo root is equivalent."
}
],
"inputs": [],
"touchpoints": [
{
"id": "exit_ok",
"label": "Script exit",
"description": "verify-ws-rpc-chain138.mjs exited 0.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-INTERNAL-1",
"execution": {
"steps": [
{
"interpreter": "node",
"scriptRelative": "scripts/verify-ws-rpc-chain138.mjs",
"args": []
}
]
}
}

View File

@@ -0,0 +1,238 @@
#!/usr/bin/env node
/**
* Scans docs for markdown files whose names contain RUNBOOK.
* Writes mission-control/runbooks/doc-manifest.json with executable steps.
*/
import crypto from 'node:crypto';
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const MC_ROOT = path.resolve(__dirname, '..');
const REPO_ROOT = path.resolve(MC_ROOT, '..');
const OUT = path.join(MC_ROOT, 'runbooks', 'doc-manifest.json');
const EXCLUDE_NAMES = new Set([
'RUNBOOKS_MASTER_INDEX.md',
'OPERATIONAL_RUNBOOKS.md',
'TEZOS_CCIP_RUNBOOKS_INDEX.md',
'OMNL_OFFICE_MASTER_RUNBOOK_INDEX.md',
]);
const SCRIPT_RE =
/(?:^|[\s"'`(])\.?\/?((?:scripts|explorer-monorepo\/scripts)\/[a-zA-Z0-9_.\/-]+\.(?:sh|mjs))/g;
const MAX_STEPS = 14;
const FALLBACK_SCRIPT = 'scripts/validation/validate-config-files.sh';
/** Paths meant to be sourced (running them as a step is misleading). */
const SKIP_SCRIPT_PATHS = new Set([
'scripts/lib/load-project-env.sh',
'scripts/lib/load-contract-addresses.sh',
]);
const STANDARD_INPUTS = [
{
name: 'proxmoxHost',
label: 'Proxmox host',
type: 'string',
help: 'Used as PROXMOX_HOST in the environment for scripts that read it (e.g. 192.168.11.10).',
example: '192.168.11.10',
default: '192.168.11.10',
},
{
name: 'rpcUrlOverride',
label: 'RPC URL override (optional)',
type: 'string',
help: 'If non-empty, set as RPC_URL_138 for scripts that use Chain 138 RPC.',
example: 'http://192.168.11.211:8545',
default: '',
},
{
name: 'practiceMode',
label: 'Practice mode (--dry-run where supported)',
type: 'boolean',
help: 'When enabled, each step whose script advertises --dry-run receives that flag.',
default: false,
},
];
function walkDocs(dir, acc = []) {
if (!fs.existsSync(dir)) return acc;
for (const name of fs.readdirSync(dir, { withFileTypes: true })) {
const p = path.join(dir, name.name);
if (name.isDirectory()) walkDocs(p, acc);
else {
const up = name.name.toUpperCase();
if (!up.includes('RUNBOOK') || !name.name.toLowerCase().endsWith('.md')) continue;
if (EXCLUDE_NAMES.has(name.name)) continue;
acc.push(p);
}
}
return acc;
}
function relFromRepo(abs) {
return path.relative(REPO_ROOT, abs).split(path.sep).join('/');
}
function makeId(rel) {
const slug = rel
.replace(/^docs[/\\]/, '')
.replace(/\.md$/i, '')
.split(/[/\\]/)
.join('-')
.replace(/[^a-zA-Z0-9-]+/g, '-')
.toLowerCase()
.replace(/^-|-$/g, '');
const base = `doc-${slug}`.slice(0, 120);
const h = crypto.createHash('sha256').update(rel).digest('hex').slice(0, 8);
return `${base}-${h}`;
}
function extractTitle(content) {
const m = content.match(/^#\s+(.+)$/m);
return m ? m[1].trim() : 'Runbook';
}
function extractSummary(content) {
const lines = content.split('\n');
for (const line of lines) {
const t = line.trim();
if (!t || t.startsWith('#')) continue;
if (t.startsWith('```')) continue;
return t.slice(0, 400);
}
return 'Operational procedure from repository documentation.';
}
function normalizeScript(raw) {
let s = raw.replace(/^\.\//, '');
if (s.startsWith('/')) return null;
if (s.includes('..')) return null;
return s;
}
function extractScripts(content) {
const seen = new Set();
const ordered = [];
let m;
const re = new RegExp(SCRIPT_RE.source, 'g');
while ((m = re.exec(content)) !== null) {
const n = normalizeScript(m[1]);
if (!n || seen.has(n) || SKIP_SCRIPT_PATHS.has(n)) continue;
const abs = path.join(REPO_ROOT, n);
if (!fs.existsSync(abs)) continue;
seen.add(n);
ordered.push(n);
if (ordered.length >= MAX_STEPS) break;
}
return ordered;
}
function scriptSupportsDryRun(scriptRel) {
try {
const abs = path.join(REPO_ROOT, scriptRel);
const chunk = fs.readFileSync(abs, 'utf8').slice(0, 12000);
return /--dry-run\b/.test(chunk);
} catch {
return false;
}
}
function buildEntry(absPath) {
const rel = relFromRepo(absPath);
const content = fs.readFileSync(absPath, 'utf8');
const title = extractTitle(content);
const summary = extractSummary(content);
const scripts = extractScripts(content);
let usedFallback = false;
let steps = scripts.map((scriptRelative) => ({
interpreter: scriptRelative.endsWith('.mjs') ? 'node' : 'bash',
scriptRelative,
args: [],
supportsDryRun: scriptRelative.endsWith('.sh') && scriptSupportsDryRun(scriptRelative),
}));
if (steps.length === 0) {
usedFallback = true;
const fr = FALLBACK_SCRIPT;
if (fs.existsSync(path.join(REPO_ROOT, fr))) {
steps = [
{
interpreter: 'bash',
scriptRelative: fr,
args: [],
supportsDryRun: scriptSupportsDryRun(fr),
},
];
}
}
const id = makeId(rel);
const why = usedFallback
? 'No shell/Node script paths were detected in this markdown. Mission Control runs repository config validation so you still get an automated check; follow the documentation for the full manual procedure.'
: 'Automated steps are the scripts explicitly referenced in this runbook. Review the documentation for prerequisites (SSH, VPN, secrets) before running in production.';
const spec = {
id,
title,
summary,
whyItMatters:
'This links documentation to executable automation in the monorepo. Operators get repeatable runs and an audit trail.',
audienceHelp:
'Use Practice mode when a script supports it. Set Proxmox host and RPC override when your environment differs from defaults.',
docPath: rel,
prerequisites: [
'Read the linked markdown runbook for safety and ordering.',
'Bash (Linux, macOS, WSL, or Git Bash on Windows) for .sh steps; Node for .mjs.',
'Network, SSH, or API access as required by the underlying scripts.',
],
steps: [
{
title: 'Documentation',
plainText: `Open and follow: ${rel}`,
technicalNote: 'Automated steps below are derived from script paths mentioned in that file.',
},
],
inputs: STANDARD_INPUTS,
execution: { steps },
touchpoints: [
{
id: 'pipeline_exit',
label: 'All automated steps completed',
description: 'Aggregate exit status of the script chain.',
passCondition: 'exit_zero',
},
],
complianceFramework: 'DBIS-MC-DOC-RUNBOOK-1',
executionNote: why,
};
return spec;
}
function main() {
const docsRoot = path.join(REPO_ROOT, 'docs');
const files = walkDocs(docsRoot);
files.sort((a, b) => relFromRepo(a).localeCompare(relFromRepo(b)));
const entries = [];
const ids = new Set();
for (const f of files) {
const spec = buildEntry(f);
if (ids.has(spec.id)) {
spec.id = `${spec.id}-x${crypto.randomBytes(2).toString('hex')}`;
}
ids.add(spec.id);
entries.push(spec);
}
fs.mkdirSync(path.dirname(OUT), { recursive: true });
fs.writeFileSync(OUT, JSON.stringify({ generatedAt: new Date().toISOString(), runbooks: entries }, null, 2), 'utf8');
console.error(`Wrote ${entries.length} doc-derived runbooks to ${path.relative(REPO_ROOT, OUT)}`);
}
main();

View File

@@ -0,0 +1,17 @@
import { NextResponse } from 'next/server';
import { loadRunbookSpec } from '@/lib/load-specs';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
export async function GET(
_req: Request,
ctx: { params: Promise<{ id: string }> },
) {
const { id } = await ctx.params;
const spec = loadRunbookSpec(id);
if (!spec) {
return NextResponse.json({ error: 'Runbook not found' }, { status: 404 });
}
return NextResponse.json(spec);
}

View File

@@ -0,0 +1,15 @@
import { NextResponse } from 'next/server';
import { loadAllRunbookSpecs } from '@/lib/load-specs';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
export async function GET() {
try {
const runbooks = loadAllRunbookSpecs();
return NextResponse.json({ runbooks });
} catch (e) {
const msg = e instanceof Error ? e.message : String(e);
return NextResponse.json({ error: msg }, { status: 500 });
}
}

View File

@@ -0,0 +1,27 @@
import { buildAuditZipBuffer } from '@/lib/audit-zip';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
export async function GET(
_req: Request,
ctx: { params: Promise<{ id: string }> },
) {
const { id } = await ctx.params;
try {
const buf = await buildAuditZipBuffer(id);
return new Response(new Uint8Array(buf), {
headers: {
'Content-Type': 'application/zip',
'Content-Disposition': `attachment; filename="mission-control-audit-${id}.zip"`,
'Cache-Control': 'no-store',
},
});
} catch (e) {
const msg = e instanceof Error ? e.message : String(e);
return new Response(JSON.stringify({ error: msg }), {
status: msg.includes('not found') ? 404 : 500,
headers: { 'Content-Type': 'application/json' },
});
}
}

View File

@@ -0,0 +1,19 @@
import { NextResponse } from 'next/server';
import { getJobStore } from '@/lib/job-store';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
export async function GET(
_req: Request,
ctx: { params: Promise<{ id: string }> },
) {
const { id } = await ctx.params;
const store = getJobStore();
const meta = store.readMeta(id);
if (!meta) {
return NextResponse.json({ error: 'Run not found' }, { status: 404 });
}
const events = store.readEvents(id);
return NextResponse.json({ meta, events });
}

View File

@@ -0,0 +1,70 @@
import { getJobStore } from '@/lib/job-store';
import type { RunEvent } from '@/lib/run-events';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
export async function GET(
req: Request,
ctx: { params: Promise<{ id: string }> },
) {
const { id } = await ctx.params;
const store = getJobStore();
if (!store.readMeta(id)) {
return new Response(JSON.stringify({ error: 'Run not found' }), {
status: 404,
headers: { 'Content-Type': 'application/json' },
});
}
const encoder = new TextEncoder();
const bus = store.getRunBus(id);
const stream = new ReadableStream({
start(controller) {
const send = (ev: RunEvent) => {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(ev)}\n\n`));
};
for (const ev of store.readEvents(id)) {
send(ev);
}
const onEv = (ev: unknown) => send(ev as RunEvent);
bus.on('event', onEv);
let poll: ReturnType<typeof setInterval>;
const close = () => {
clearInterval(poll);
bus.off('event', onEv);
try {
controller.close();
} catch {
/* closed */
}
};
poll = setInterval(() => {
const meta = store.readMeta(id);
if (
meta?.status === 'succeeded' ||
meta?.status === 'failed' ||
meta?.status === 'error'
) {
clearInterval(poll);
setTimeout(close, 250);
}
}, 400);
req.signal.addEventListener('abort', close);
},
});
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-store, no-transform',
Connection: 'keep-alive',
},
});
}

View File

@@ -0,0 +1,43 @@
import { NextResponse } from 'next/server';
import { z, ZodError } from 'zod';
import { queueRun } from '@/lib/executor';
import { loadRunbookSpec } from '@/lib/load-specs';
import { coerceRunbookInputs } from '@/lib/coerce-inputs';
export const dynamic = 'force-dynamic';
export const runtime = 'nodejs';
const postBodySchema = z.object({
runbookId: z.string().min(1),
inputs: z.record(z.string(), z.unknown()).optional().default({}),
});
export async function POST(req: Request) {
try {
let json: unknown;
try {
json = await req.json();
} catch {
return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 });
}
const body = postBodySchema.parse(json);
const spec = loadRunbookSpec(body.runbookId);
if (!spec) {
return NextResponse.json({ error: 'Unknown runbook' }, { status: 404 });
}
const inputs = coerceRunbookInputs(spec, body.inputs);
const { runId } = queueRun(body.runbookId, inputs);
return NextResponse.json({
runId,
streamUrl: `/api/runs/${runId}/stream`,
auditUrl: `/api/runs/${runId}/audit`,
metaUrl: `/api/runs/${runId}`,
});
} catch (e) {
if (e instanceof ZodError) {
return NextResponse.json({ error: 'Invalid request', issues: e.issues }, { status: 400 });
}
const msg = e instanceof Error ? e.message : String(e);
return NextResponse.json({ error: msg }, { status: 500 });
}
}

View File

@@ -0,0 +1,29 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--tardis-glow: 0 180 216;
}
body {
@apply min-h-screen bg-gradient-to-b from-tardis-deep via-tardis-panel to-tardis-deep text-tardis-paper antialiased;
background-attachment: fixed;
}
/* Subtle “police box” corner accents */
.mc-panel {
@apply relative rounded-xl border border-tardis-glow/25 bg-tardis-panel/40 shadow-panel backdrop-blur-md;
box-shadow:
0 0 0 1px rgba(0, 180, 216, 0.12),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
.mc-panel::before {
content: '';
@apply pointer-events-none absolute inset-x-3 top-0 h-px bg-gradient-to-r from-transparent via-tardis-glow/60 to-transparent;
}
.mc-glow-text {
text-shadow: 0 0 12px rgba(0, 180, 216, 0.45);
}

View File

@@ -0,0 +1,20 @@
import type { Metadata } from 'next';
import './globals.css';
export const metadata: Metadata = {
title: 'Mission Control | DBIS Operator Console',
description:
'Unified console: launchpad, guided runbooks, live execution trace, compliance evidence, audit export.',
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className="font-display">{children}</body>
</html>
);
}

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