Files
proxmox/scripts/verify/plan-mainnet-usdt-usdc-via-cw-paths.sh
defiQUG dbd517b279 Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains
- Omit embedded publish git dirs and empty placeholders from index

Made-with: Cursor
2026-04-12 06:12:20 -07:00

118 lines
5.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Legitimate USDT <-> USDC routing on Ethereum mainnet through public cW* PMM rails.
#
# Direct cWUSDT/cWUSDC PMM is recorded in deployment-status.json (vault 0xe944…68DB; one pool, both directions).
# Top up with deploy-mainnet-cwusdt-cwusdc-pool.sh / add-mainnet-public-dodo-cw-liquidity.sh --pair=cwusdt-cwusdc.
# Official stables connect to both wraps via four pools (3 bps LP fee each on the public rails).
# Any USDT<->USDC conversion is at least two swaps (two integration txs unless batched elsewhere).
#
# Usage:
# source scripts/lib/load-project-env.sh
# bash scripts/verify/plan-mainnet-usdt-usdc-via-cw-paths.sh
# bash scripts/verify/plan-mainnet-usdt-usdc-via-cw-paths.sh --with-examples 1000000
#
# Operator policy (recommended):
# - One treasury EOA or named contract; no sybil wallet farms.
# - Document purpose (inventory rebalance, peg support, testing); retain logs and tx hashes.
# - Per-leg --dry-run first; set --min-out from quoted outputs; cap daily notional internally.
# - "0.16" style budgets: define explicitly (e.g. 16 bps max implied loss vs mid, or $0.16 absolute).
#
# See also:
# scripts/deployment/plan-mainnet-cw-stabilization.sh
# scripts/deployment/run-mainnet-public-dodo-cw-swap.sh
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
# shellcheck disable=SC1091
source "$ROOT/scripts/lib/load-project-env.sh" 2>/dev/null || true
WITH_EXAMPLES=0
EXAMPLE_RAW="1000000"
for arg in "$@"; do
case "$arg" in
--with-examples)
WITH_EXAMPLES=1
;;
--with-examples=*)
WITH_EXAMPLES=1
EXAMPLE_RAW="${arg#*=}"
;;
-h | --help)
sed -n '1,35p' "$0"
exit 0
;;
*)
echo "[fail] unknown arg: $arg (use --help)" >&2
exit 2
;;
esac
done
echo "=== Mainnet USDT <-> USDC via cW* PMM (planning) ==="
echo
echo "Canonical pools (cross-chain-pmm-lps/config/deployment-status.json, chains[\"1\"].pmmPools):"
echo " cWUSDT/USDT 0x79156F6B7bf71a1B72D78189B540A89A6C13F6FC"
echo " cWUSDC/USDC 0x69776fc607e9edA8042e320e7e43f54d06c68f0E"
echo " cWUSDT/USDC 0x27f3aE7EE71Be3d77bAf17d4435cF8B895DD25D2"
echo " cWUSDC/USDT 0xCC0fd27A40775c9AfcD2BBd3f7c902b0192c247A"
echo " cWUSDT/cWUSDC 0xe944b7Cb012A0820c07f54D51e92f0e1C74168DB (direct wrap↔wrap; one vault, both directions)"
echo
echo "Tokens:"
echo " USDT 0xdAC17F958D2ee523a2206206994597C13D831ec7"
echo " USDC 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
echo " cWUSDT ${CWUSDT_MAINNET:-0xaF5017d0163ecb99D9B5D94e3b4D7b09Af44D8AE}"
echo " cWUSDC ${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}"
echo
echo "Economics:"
echo " - Two hops at 3 bps each => roughly 6 bps fee drag before slippage and gas (not compound-precise)."
echo " - Compare both paths off-chain; pick the better quoted out-amount for your size."
echo
echo "--- Path A (USDT -> cWUSDC -> USDC) ---"
echo " Leg 1: pair=cwusdc-usdt direction=quote-to-base (USDT in -> cWUSDC out)"
echo " Leg 2: pair=cwusdc-usdc direction=base-to-quote (cWUSDC in -> USDC out)"
echo
echo "--- Path B (USDT -> cWUSDT -> USDC) ---"
echo " Leg 1: pair=cwusdt-usdt direction=quote-to-base (USDT in -> cWUSDT out)"
echo " Leg 2: pair=cwusdt-usdc direction=base-to-quote (cWUSDT in -> USDC out)"
echo
echo "--- Path A' (USDC -> cWUSDC -> USDT) ---"
echo " Leg 1: pair=cwusdc-usdc direction=quote-to-base (USDC in -> cWUSDC out)"
echo " Leg 2: pair=cwusdc-usdt direction=base-to-quote (cWUSDC in -> USDT out)"
echo
echo "--- Path B' (USDC -> cWUSDT -> USDT) ---"
echo " Leg 1: pair=cwusdt-usdc direction=quote-to-base (USDC in -> cWUSDT out)"
echo " Leg 2: pair=cwusdt-usdt direction=base-to-quote (cWUSDT in -> USDT out)"
echo
echo "--- Path C (USDT -> USDC via direct cW leg, 3 hops) ---"
echo " Leg 1: pair=cwusdt-usdt direction=quote-to-base (USDT -> cWUSDT)"
echo " Leg 2: pair=cwusdt-cwusdc direction=base-to-quote (cWUSDT -> cWUSDC)"
echo " Leg 3: pair=cwusdc-usdc direction=base-to-quote (cWUSDC -> USDC)"
echo
echo "--- Path C' (USDC -> USDT via direct cW leg, 3 hops) ---"
echo " Leg 1: pair=cwusdc-usdc direction=quote-to-base (USDC -> cWUSDC)"
echo " Leg 2: pair=cwusdt-cwusdc direction=quote-to-base (cWUSDC -> cWUSDT)"
echo " Leg 3: pair=cwusdt-usdt direction=base-to-quote (cWUSDT -> USDT)"
echo
if [[ "$WITH_EXAMPLES" -eq 1 ]]; then
echo "=== Example dry-run commands (amount raw 6dp = ${EXAMPLE_RAW}) ==="
echo "USDT -> USDC path A:"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdc-usdt --direction=quote-to-base --amount=${EXAMPLE_RAW} --dry-run"
echo " # then use printed out-amount as --amount for leg 2:"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdc-usdc --direction=base-to-quote --amount=<leg1_out_raw> --dry-run"
echo
echo "USDT -> USDC path B:"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdt-usdt --direction=quote-to-base --amount=${EXAMPLE_RAW} --dry-run"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdt-usdc --direction=base-to-quote --amount=<leg1_out_raw> --dry-run"
echo
echo "USDT -> USDC path C (three legs; chain outputs leg2/leg3 amounts):"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdt-usdt --direction=quote-to-base --amount=${EXAMPLE_RAW} --dry-run"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdt-cwusdc --direction=base-to-quote --amount=<leg1_out_raw> --dry-run"
echo " bash scripts/deployment/run-mainnet-public-dodo-cw-swap.sh --pair=cwusdc-usdc --direction=base-to-quote --amount=<leg2_out_raw> --dry-run"
echo
echo "Live sizing / micro tranches:"
echo " bash scripts/deployment/plan-mainnet-cw-stabilization.sh"
fi