Files
smom-dbis-138/scripts/deployment/deploy-official-dvm-chain138.sh
2026-03-02 12:14:09 -08:00

85 lines
3.4 KiB
Bash

#!/usr/bin/env bash
# Deploy official DODO DVM (DVMFactory + deps) to Chain 138 via DODOEX/contractV2 Truffle,
# then deploy DVMFactoryAdapter (createDVM -> createDODOVendingMachine) via Forge and update .env.
# Requires: smom-dbis-138/.env with PRIVATE_KEY, RPC_URL_138
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
DODO_DIR="$PROJECT_ROOT/lib/dodo-contractV2"
cd "$PROJECT_ROOT"
if [[ ! -f .env ]]; then
echo "ERROR: .env not found" >&2
exit 1
fi
set -a
source .env
set +a
if [[ -z "${PRIVATE_KEY:-}" ]]; then
echo "ERROR: PRIVATE_KEY not set" >&2
exit 1
fi
if [[ -z "${RPC_URL_138:-}" ]]; then
echo "ERROR: RPC_URL_138 not set" >&2
exit 1
fi
# Ensure DODO submodule has deps and compiles
if [[ ! -d "$DODO_DIR/node_modules" ]]; then
echo "Installing DODO contractV2 dependencies..."
(cd "$DODO_DIR" && npm install)
fi
# Export for Truffle (privKey without 0x for HDWalletProvider if needed)
export privKey="${PRIVATE_KEY#0x}"
export RPC_URL_138
export GAS_PRICE_138="${GAS_PRICE_138:-1000000000}"
# Deploy Migrations (required for Truffle), then DVM stack only
echo "=== Running Truffle migration 1 (Migrations) on Chain 138 ==="
(cd "$DODO_DIR" && npx truffle migrate -f 1 --to 1 --network chain138) || true
echo "=== Running Truffle migration 9 (DVM stack) on Chain 138 ==="
(cd "$DODO_DIR" && npx truffle migrate -f 9 --to 9 --network chain138)
# Parse DVMFactory address from Truffle build (network id 138 as string or number)
DVM_FACTORY_ADDRESS=$(cd "$DODO_DIR" && node -e "
const fs = require('fs');
const path = require('path');
const buildPath = path.join(__dirname, 'build', 'contracts', 'DVMFactory.json');
if (!fs.existsSync(buildPath)) process.exit(1);
const j = JSON.parse(fs.readFileSync(buildPath, 'utf8'));
const n = j.networks || {};
const addr = n['138']?.address || n[138]?.address;
if (!addr) process.exit(1);
console.log(addr);
" 2>/dev/null) || true
if [[ -z "$DVM_FACTORY_ADDRESS" ]]; then
echo "Could not read DVMFactory from build. If you already deployed, set DODO_DVM_FACTORY and run:" >&2
echo " DODO_DVM_FACTORY=<dvm_factory_address> forge script script/dex/DeployDVMFactoryAdapter.s.sol:DeployDVMFactoryAdapter --rpc-url \$RPC_URL_138 --broadcast --private-key \$PRIVATE_KEY --legacy" >&2
exit 1
fi
echo "DVMFactory deployed at: $DVM_FACTORY_ADDRESS"
echo "=== Deploying DVMFactoryAdapter (createDVM wrapper) via Forge ==="
export DODO_DVM_FACTORY="$DVM_FACTORY_ADDRESS"
forge script script/dex/DeployDVMFactoryAdapter.s.sol:DeployDVMFactoryAdapter \
--rpc-url "$RPC_URL_138" --broadcast --private-key "$PRIVATE_KEY" --legacy
# Extract adapter address from broadcast (or script output)
ADAPTER_ADDRESS=$(grep -o '"contractAddress":"0x[^"]*"' "$PROJECT_ROOT/broadcast/DeployDVMFactoryAdapter.s.sol/138/"*run-latest.json 2>/dev/null | tail -1 | sed 's/.*"0x/0x/;s/".*//') || true
if [[ -z "$ADAPTER_ADDRESS" ]]; then
echo "Set DODO_VENDING_MACHINE_ADDRESS to the DVMFactoryAdapter address printed above."
exit 0
fi
echo "DVMFactoryAdapter at: $ADAPTER_ADDRESS"
echo "Updating .env DODO_VENDING_MACHINE_ADDRESS=$ADAPTER_ADDRESS"
if grep -q '^DODO_VENDING_MACHINE_ADDRESS=' .env; then
sed -i "s|^DODO_VENDING_MACHINE_ADDRESS=.*|DODO_VENDING_MACHINE_ADDRESS=$ADAPTER_ADDRESS|" .env
else
echo "DODO_VENDING_MACHINE_ADDRESS=$ADAPTER_ADDRESS" >> .env
fi
echo "Done. Run scripts/deployment/run-pmm-and-pools.sh to deploy DODOPMMIntegration with the official DVM."