#!/usr/bin/env bash # Deploy DODOPMMIntegration on each L2 (BSC, Polygon, Base, Optimism, Arbitrum, Avalanche, Cronos, Gnosis). # Uses .env for RPC and token addresses. Chains via tag: --chain bsc polygon ... (or DEPLOY_PMM_L2S_FILTER in .env). # Usage: ./scripts/deployment/deploy-pmm-all-l2s.sh [--chain bsc polygon base] 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" source "$SCRIPT_DIR/../lib/deployment/prompts.sh" load_deployment_env parse_chain_filter "$@" if [[ ${#CHAIN_FILTER[@]} -eq 0 && -n "${DEPLOY_PMM_L2S_FILTER:-}" ]]; then CHAIN_FILTER=() for n in $DEPLOY_PMM_L2S_FILTER; do n="$(normalize_chain_name "$n")"; [[ -n "$n" ]] && CHAIN_FILTER+=("$n"); done fi 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" ) for entry in "${CHAINS[@]}"; do IFS=: read -r name chain_id rpc_var <<< "$entry" if [[ ${#CHAIN_FILTER[@]} -gt 0 ]] && [[ ! " ${CHAIN_FILTER[*]} " =~ " $name " ]]; then continue; fi rpc="${!rpc_var:-}" if [[ -z "$rpc" ]]; then echo "Skip $name (chain $chain_id): $rpc_var not set" continue fi # Prefer chain-prefixed DVM and tokens; fallback to global dvm_var="${name}_DODO_VENDING_MACHINE_ADDRESS" usdt_var="${name}_OFFICIAL_USDT_ADDRESS" usdc_var="${name}_OFFICIAL_USDC_ADDRESS" cusdt_var="${name}_COMPLIANT_USDT_ADDRESS" cusdc_var="${name}_COMPLIANT_USDC_ADDRESS" # Per-chain cUSDT/cUSDC (optional): CUSDT_ADDRESS_ / CUSDC_ADDRESS_ or POLYGON_COMPLIANT_USDT_ADDRESS etc. cusdt_chain="CUSDT_ADDRESS_${chain_id}" cusdc_chain="CUSDC_ADDRESS_${chain_id}" dvm="${!dvm_var:-$DODO_VENDING_MACHINE_ADDRESS}" usdt="${!usdt_var:-$OFFICIAL_USDT_ADDRESS}" usdc="${!usdc_var:-$OFFICIAL_USDC_ADDRESS}" compliant_usdt="${!cusdt_var:-${!cusdt_chain:-$usdt}}" compliant_usdc="${!cusdc_var:-${!cusdc_chain:-$usdc}}" if [[ -z "$dvm" ]] || [[ -z "$usdt" ]] || [[ -z "$usdc" ]]; then echo "Skip $name: set ${dvm_var} (or DODO_VENDING_MACHINE_ADDRESS), ${usdt_var}, ${usdc_var} (or OFFICIAL_USDT/USDC_ADDRESS)" continue fi echo "=== Deploying DODOPMMIntegration on $name (chain $chain_id) ===" DODO_VENDING_MACHINE_ADDRESS="$dvm" \ OFFICIAL_USDT_ADDRESS="$usdt" \ OFFICIAL_USDC_ADDRESS="$usdc" \ COMPLIANT_USDT_ADDRESS="$compliant_usdt" \ COMPLIANT_USDC_ADDRESS="$compliant_usdc" \ forge script script/dex/DeployDODOPMMIntegration.s.sol:DeployDODOPMMIntegration \ --rpc-url "$rpc" \ --chain-id "$chain_id" \ --broadcast \ --private-key "$PRIVATE_KEY" \ -vvv || true echo "" done echo "Done. Update .env with any new DODOPMM_INTEGRATION_ addresses."