Files
smom-dbis-138/scripts/deployment/run-pmm-full-parity-all-phases.sh
2026-03-02 12:14:09 -08:00

144 lines
5.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run PMM full parity: Phase 1 (Chain 138) and Phase 2 (L2s) in full parallel where possible.
# Usage:
# ./scripts/deployment/run-pmm-full-parity-all-phases.sh # run all phases
# RUN_PHASE1=0 ./scripts/deployment/run-pmm-full-parity-all-phases.sh # skip Phase 1
# RUN_PHASE2=0 ./scripts/deployment/run-pmm-full-parity-all-phases.sh # skip Phase 2
# DRY_RUN=1 ./scripts/deployment/run-pmm-full-parity-all-phases.sh # print only
# ADD_LIQUIDITY_BASE_AMOUNT=1000000e6 ADD_LIQUIDITY_QUOTE_AMOUNT=1000000e6 ... # liquidity amounts (6 decimals)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$REPO_ROOT"
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
load_deployment_env
# Ensure .env is loaded (for PRIVATE_KEY, RPCs, etc.)
[[ -f ".env" ]] && set -a && source ".env" && set +a
RUN_PHASE1="${RUN_PHASE1:-1}"
RUN_PHASE2="${RUN_PHASE2:-1}"
DRY_RUN="${DRY_RUN:-}"
RPC_138="${RPC_URL_138:-${RPC_URL:-http://192.168.11.211:8545}}"
GAS_PRICE="${GAS_PRICE_138:-${GAS_PRICE:-1000000000}}"
INTEGRATION="${DODO_PMM_INTEGRATION_ADDRESS:-${DODO_PMM_INTEGRATION:-0x79cdbaFBaA0FdF9F55D26F360F54cddE5c743F7D}}"
POOL_CUSDTCUSDC="${POOL_CUSDTCUSDC:-0x9fcB06Aa1FD5215DC0E91Fd098aeff4B62fEa5C8}"
POOL_CUSDTUSDT="${POOL_CUSDTUSDT:-0xa3Ee6091696B28e5497b6F491fA1e99047250c59}"
POOL_CUSDCUSDC="${POOL_CUSDCUSDC:-0x90bd9Bf18Daa26Af3e814ea224032d015db58Ea5}"
export RPC_URL_138="$RPC_138"
export DODO_PMM_INTEGRATION_ADDRESS="$INTEGRATION"
export POOL_CUSDTCUSDC POOL_CUSDTUSDT POOL_CUSDCUSDC
log() { echo "[$(date +%H:%M:%S)] $*"; }
run_or_dry() {
if [[ -n "$DRY_RUN" ]]; then
log "[DRY RUN] $*"
return 0
fi
"$@"
}
# ---------- Phase 1: Chain 138 ----------
phase1() {
log "=== Phase 1: Chain 138 (verify pools, register, add liquidity) ==="
if [[ -z "${PRIVATE_KEY:-}" ]]; then
log "Skip Phase 1: PRIVATE_KEY not set"
return 0
fi
# 1a) Create all 3 pools in parallel (if not already created — scripts will fail if pool exists)
log "Creating PMM pools (parallel)..."
if [[ -z "$DRY_RUN" ]]; then
( forge script script/dex/CreateCUSDTCUSDCPool.s.sol:CreateCUSDTCUSDCPool \
--rpc-url "$RPC_138" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price "$GAS_PRICE" -vv 2>&1 | tee /tmp/pmm-create-cusdt-cusdc.log ) &
PID1=$!
( forge script script/dex/CreateCUSDTUSDTPool.s.sol:CreateCUSDTUSDTPool \
--rpc-url "$RPC_138" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price "$GAS_PRICE" -vv 2>&1 | tee /tmp/pmm-create-cusdt-usdt.log ) &
PID2=$!
( forge script script/dex/CreateCUSDCUSDCPool.s.sol:CreateCUSDCUSDCPool \
--rpc-url "$RPC_138" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price "$GAS_PRICE" -vv 2>&1 | tee /tmp/pmm-create-cusdc-usdc.log ) &
PID3=$!
wait $PID1 2>/dev/null || true
wait $PID2 2>/dev/null || true
wait $PID3 2>/dev/null || true
else
log "[DRY RUN] forge script CreateCUSDTCUSDCPool ..."
log "[DRY RUN] forge script CreateCUSDTUSDTPool ..."
log "[DRY RUN] forge script CreateCUSDCUSDCPool ..."
fi
# 1b) Register pools with DODOPMMProvider (requires DODO_PMM_PROVIDER_ADDRESS)
if [[ -n "${DODO_PMM_PROVIDER_ADDRESS:-}" ]]; then
log "Registering pools with DODOPMMProvider..."
run_or_dry forge script script/liquidity/RegisterDODOPools.s.sol:RegisterDODOPools \
--rpc-url "$RPC_138" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price "$GAS_PRICE" -vv
else
log "Skip register: DODO_PMM_PROVIDER_ADDRESS not set"
fi
# 1c) Add liquidity (optional: set ADD_LIQUIDITY_BASE_AMOUNT and ADD_LIQUIDITY_QUOTE_AMOUNT)
if [[ -n "${ADD_LIQUIDITY_BASE_AMOUNT:-}" && -n "${ADD_LIQUIDITY_QUOTE_AMOUNT:-}" ]]; then
log "Adding liquidity to PMM pools..."
run_or_dry forge script script/dex/AddLiquidityPMMPoolsChain138.s.sol:AddLiquidityPMMPoolsChain138 \
--rpc-url "$RPC_138" --broadcast --private-key "$PRIVATE_KEY" --with-gas-price "$GAS_PRICE" -vv
else
log "Skip add liquidity: set ADD_LIQUIDITY_BASE_AMOUNT and ADD_LIQUIDITY_QUOTE_AMOUNT (e.g. 1000000e6)"
fi
log "Phase 1 done."
}
# ---------- Phase 2: One chain (deploy cUSDT/cUSDC + DODOPMMIntegration) ----------
phase2_chain() {
local name="$1" chain_id="$2" rpc_var="$3"
local rpc="${!rpc_var:-}"
[[ -z "$rpc" ]] && return 0
log "[$name] Deploy cUSDT/cUSDC + DODOPMMIntegration (chain $chain_id)"
if [[ -n "$DRY_RUN" ]]; then
log "[DRY RUN] $name: deploy tokens + integration"
return 0
fi
local name_lower
name_lower=$(echo "$name" | tr '[:upper:]' '[:lower:]')
(
export DEPLOY_CUSDT_CUSDC_FILTER="$name"
export DEPLOY_PMM_L2S_FILTER="$name_lower"
cd "$REPO_ROOT"
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
load_deployment_env
./scripts/deployment/deploy-cusdt-cusdc-all-chains.sh 2>&1 | tee "/tmp/pmm-phase2-$name-tokens.log" || true
./scripts/deployment/deploy-pmm-all-l2s.sh --chain "$name_lower" 2>&1 | tee "/tmp/pmm-phase2-$name-pmm.log" || true
)
log "[$name] done."
}
# ---------- Phase 2: All L2s in parallel ----------
phase2() {
log "=== Phase 2: L2s (deploy cUSDT/cUSDC + DODOPMMIntegration per chain, parallel) ==="
CHAINS=(
"BSC:56:BSC_RPC_URL"
"POLYGON:137:POLYGON_MAINNET_RPC"
"BASE:8453:BASE_MAINNET_RPC"
"OPTIMISM:10:OPTIMISM_MAINNET_RPC"
"ARBITRUM:42161:ARBITRUM_MAINNET_RPC"
"AVALANCHE:43114:AVALANCHE_RPC_URL"
"CRONOS:25:CRONOS_RPC_URL"
"GNOSIS:100:GNOSIS_MAINNET_RPC"
)
PIDS=()
for entry in "${CHAINS[@]}"; do
IFS=: read -r name chain_id rpc_var <<< "$entry"
phase2_chain "$name" "$chain_id" "$rpc_var" &
PIDS+=($!)
done
for p in "${PIDS[@]}"; do wait "$p" 2>/dev/null || true; done
log "Phase 2 done."
}
# ---------- Main ----------
log "PMM full parity — Phase1=$RUN_PHASE1 Phase2=$RUN_PHASE2 DRY_RUN=$DRY_RUN"
[[ "$RUN_PHASE1" = "1" ]] && phase1
[[ "$RUN_PHASE2" = "1" ]] && phase2
log "All requested phases finished."