85 lines
3.4 KiB
Bash
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."
|