158 lines
6.4 KiB
Bash
158 lines
6.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Deploy to all mainnets: CCIP Bridge, Trustless Bridge, Oracle, Mapper, PMM (anchored to ChainID 138).
|
||
|
|
# Run after check-balances-gas-and-deploy.sh. Requires .env with PRIVATE_KEY and per-chain RPC/CCIP vars.
|
||
|
|
# Usage: bash scripts/deployment/deploy-all-mainnets-with-mapper-oracle-pmm.sh [phase]
|
||
|
|
# phase: ccip | trustless | oracle | mapper | pmm | all (default: all)
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
|
|
cd "$PROJECT_ROOT"
|
||
|
|
|
||
|
|
# Load .env without strict unset (avoid init.sh pipefail on .env)
|
||
|
|
set +u
|
||
|
|
[ -f .env ] && source .env
|
||
|
|
set -u
|
||
|
|
[ -f "$SCRIPT_DIR/../lib/infura.sh" ] && source "$SCRIPT_DIR/../lib/infura.sh"
|
||
|
|
|
||
|
|
PHASE="${1:-all}"
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
require_env() {
|
||
|
|
local var="$1"
|
||
|
|
if [ -z "${!var:-}" ]; then
|
||
|
|
echo -e "${RED}ERROR: $var not set in .env${NC}" >&2
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
ensure_rpc() {
|
||
|
|
local rpc="$1"
|
||
|
|
type ensure_infura_rpc_url &>/dev/null && [ -n "$rpc" ] && rpc=$(ensure_infura_rpc_url "$rpc")
|
||
|
|
echo "$rpc"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- CCIP: DeployAll to BSC, Polygon, Base, Optimism, Gnosis ---
|
||
|
|
run_ccip_remaining_mainnets() {
|
||
|
|
echo -e "${YELLOW}=== CCIP Bridges (DeployAll) to BSC, Polygon, Base, Optimism, Gnosis ===${NC}"
|
||
|
|
require_env PRIVATE_KEY || return 1
|
||
|
|
local chains="BSC:56:BSC_RPC_URL POLYGON:137:POLYGON_MAINNET_RPC BASE:8453:BASE_MAINNET_RPC OPTIMISM:10:OPTIMISM_MAINNET_RPC GNOSIS:100:GNOSIS_MAINNET_RPC"
|
||
|
|
for entry in $chains; do
|
||
|
|
local name="${entry%%:*}"; entry="${entry#*:}"
|
||
|
|
local chain_id="${entry%%:*}"; entry="${entry#*:}"
|
||
|
|
local rpc_var="$entry"
|
||
|
|
local rpc="${!rpc_var:-}"
|
||
|
|
rpc=$(ensure_rpc "$rpc")
|
||
|
|
if [ -z "$rpc" ]; then
|
||
|
|
echo " Skip $name (no RPC)"
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
echo -e "${YELLOW}DeployAll to $name (chain $chain_id)...${NC}"
|
||
|
|
forge script script/DeployAll.s.sol:DeployAll \
|
||
|
|
--rpc-url "$rpc" --chain-id "$chain_id" --private-key "$PRIVATE_KEY" \
|
||
|
|
--broadcast --slow -vvv || echo -e "${RED}$name DeployAll failed${NC}"
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
echo -e "${GREEN}CCIP phase done.${NC}"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- Trustless Bridge: Chain 138 (Lockbox) + Ethereum (BondManager, etc.) ---
|
||
|
|
run_trustless() {
|
||
|
|
echo -e "${YELLOW}=== Trustless Bridge (Chain 138 + Ethereum) ===${NC}"
|
||
|
|
require_env PRIVATE_KEY RPC_URL_138 || return 1
|
||
|
|
echo "Deploying Trustless (Lockbox) on Chain 138..."
|
||
|
|
forge script script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge \
|
||
|
|
--rpc-url "$RPC_URL_138" --broadcast --via-ir --private-key "$PRIVATE_KEY" -vvv || true
|
||
|
|
require_env ETHEREUM_MAINNET_RPC || return 1
|
||
|
|
MAINNET_RPC=$(ensure_rpc "$ETHEREUM_MAINNET_RPC")
|
||
|
|
echo "Deploying Trustless (BondManager, ChallengeManager, LP, Inbox, SwapRouter, Coordinator) on Ethereum..."
|
||
|
|
forge script script/bridge/trustless/DeployTrustlessBridge.s.sol:DeployTrustlessBridge \
|
||
|
|
--rpc-url "$MAINNET_RPC" --broadcast --via-ir --private-key "$PRIVATE_KEY" \
|
||
|
|
${ETHERSCAN_API_KEY:+--verify --etherscan-api-key "$ETHERSCAN_API_KEY"} -vvv || true
|
||
|
|
echo -e "${GREEN}Trustless phase done.${NC}"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- Oracle: Chain 138 ---
|
||
|
|
run_oracle() {
|
||
|
|
echo -e "${YELLOW}=== Oracle (Chain 138) ===${NC}"
|
||
|
|
require_env PRIVATE_KEY RPC_URL_138 || return 1
|
||
|
|
forge script script/DeployOracle.s.sol:DeployOracle \
|
||
|
|
--rpc-url "$RPC_URL_138" --broadcast --private-key "$PRIVATE_KEY" \
|
||
|
|
--with-gas-price "${GAS_PRICE_138:-1000000000}" --legacy -vvv || true
|
||
|
|
echo -e "${GREEN}Oracle phase done.${NC}"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- Mapper: Chain 138 (full) + others (empty) ---
|
||
|
|
run_mapper() {
|
||
|
|
echo -e "${YELLOW}=== Mapper (Chain 138 = AddressMapper; others = AddressMapperEmpty) ===${NC}"
|
||
|
|
require_env PRIVATE_KEY || return 1
|
||
|
|
if [ -n "${RPC_URL_138:-}" ]; then
|
||
|
|
echo "Deploying AddressMapper on Chain 138..."
|
||
|
|
forge script script/DeployAddressMapper.s.sol:DeployAddressMapper \
|
||
|
|
--rpc-url "$RPC_URL_138" --broadcast --private-key "$PRIVATE_KEY" \
|
||
|
|
--with-gas-price "${GAS_PRICE_138:-1000000000}" --legacy -vvv || true
|
||
|
|
fi
|
||
|
|
local chains="ETHEREUM_MAINNET_RPC:1 BSC_RPC_URL:56 POLYGON_MAINNET_RPC:137 BASE_MAINNET_RPC:8453 ARBITRUM_MAINNET_RPC:42161 OPTIMISM_MAINNET_RPC:10 AVALANCHE_RPC_URL:43114 CRONOS_RPC_URL:25 GNOSIS_MAINNET_RPC:100"
|
||
|
|
for entry in $chains; do
|
||
|
|
local rpc_var="${entry%%:*}"; local chain_id="${entry#*:}"
|
||
|
|
local rpc="${!rpc_var:-}"
|
||
|
|
[ -z "$rpc" ] && continue
|
||
|
|
rpc=$(ensure_rpc "$rpc")
|
||
|
|
echo "Deploying AddressMapperEmpty on chain $chain_id..."
|
||
|
|
forge script script/DeployAddressMapperOtherChain.s.sol:DeployAddressMapperOtherChain \
|
||
|
|
--rpc-url "$rpc" --chain-id "$chain_id" --broadcast --private-key "$PRIVATE_KEY" -vvv || true
|
||
|
|
done
|
||
|
|
echo -e "${GREEN}Mapper phase done.${NC}"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- PMM (DODO) on Chain 138 ---
|
||
|
|
run_pmm() {
|
||
|
|
echo -e "${YELLOW}=== PMM Liquidity Pools (Chain 138) ===${NC}"
|
||
|
|
require_env PRIVATE_KEY RPC_URL_138 || return 1
|
||
|
|
if [ -z "${DODO_PMM_INTEGRATION:-}" ] && [ -n "${DODO_VENDING_MACHINE_ADDRESS:-}" ]; then
|
||
|
|
echo "Deploying DODOPMMIntegration on Chain 138..."
|
||
|
|
forge script script/dex/DeployDODOPMMIntegration.s.sol:DeployDODOPMMIntegration \
|
||
|
|
--rpc-url "$RPC_URL_138" --broadcast --private-key "$PRIVATE_KEY" \
|
||
|
|
--with-gas-price "${GAS_PRICE_138:-1000000000}" --legacy -vvv || true
|
||
|
|
else
|
||
|
|
echo " DODOPMMIntegration already set or DODO_VENDING_MACHINE_ADDRESS not set; skip deploy."
|
||
|
|
fi
|
||
|
|
if [ -n "${DODO_PMM_INTEGRATION:-}" ] && [ -n "${XAU_ADDRESS:-}" ]; then
|
||
|
|
echo "Creating XAU-anchored pools..."
|
||
|
|
forge script script/dex/DeployPrivatePoolRegistryAndPools.s.sol:DeployPrivatePoolRegistryAndPools \
|
||
|
|
--rpc-url "$RPC_URL_138" --broadcast --private-key "$PRIVATE_KEY" \
|
||
|
|
--with-gas-price "${GAS_PRICE_138:-1000000000}" --legacy -vvv || true
|
||
|
|
fi
|
||
|
|
echo -e "${GREEN}PMM phase done.${NC}"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- Main ---
|
||
|
|
echo -e "${GREEN}========================================${NC}"
|
||
|
|
echo -e "${GREEN}All Mainnets: CCIP, Trustless, Oracle, Mapper, PMM${NC}"
|
||
|
|
echo -e "${GREEN}========================================${NC}"
|
||
|
|
echo "Phase: $PHASE"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
case "$PHASE" in
|
||
|
|
ccip) run_ccip_remaining_mainnets ;;
|
||
|
|
trustless) run_trustless ;;
|
||
|
|
oracle) run_oracle ;;
|
||
|
|
mapper) run_mapper ;;
|
||
|
|
pmm) run_pmm ;;
|
||
|
|
all)
|
||
|
|
run_ccip_remaining_mainnets
|
||
|
|
run_trustless
|
||
|
|
run_oracle
|
||
|
|
run_mapper
|
||
|
|
run_pmm
|
||
|
|
;;
|
||
|
|
*) echo "Usage: $0 [ccip|trustless|oracle|mapper|pmm|all]"; exit 1 ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}Done. Update .env and config/smart-contracts-master.json with any new addresses.${NC}"
|