Files
proxmox/scripts/deployment/deploy-engine-x-v2-mainnet.sh
defiQUG dd02f4b59b
All checks were successful
Deploy to Phoenix / validate (push) Successful in 1m11s
Deploy to Phoenix / deploy (push) Successful in 43s
Deploy to Phoenix / deploy-atomic-swap-dapp (push) Successful in 1m32s
phoenix-deploy Deployed to cloudflare-sync
Deploy to Phoenix / cloudflare (push) Successful in 38s
Enhance .env configuration with Infura support and add new RPC endpoints for various networks. Update package.json with new deployment scripts for Engine X. Improve public LP compliance documentation in runbooks and scripts, including guidance for public pair repairs and funding strategies.
2026-05-07 18:19:37 -07:00

119 lines
5.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
# shellcheck source=/home/intlc/projects/proxmox/scripts/lib/load-project-env.sh
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh"
: "${ETHEREUM_MAINNET_RPC:?ETHEREUM_MAINNET_RPC is required}"
CWUSDC="${CWUSDC_MAINNET:-0x2de5F116bFcE3d0f922d9C8351e0c5Fc24b9284a}"
USDC="${USDC_MAINNET:-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48}"
XAUT="${XAUT_MAINNET:-0x68749665FF8D2d112Fa859AA293F07A622782F38}"
XAUT_USD_PRICE6="${ENGINE_X_XAUT_USD_PRICE6:-3226640000}"
LTV_BPS="${ENGINE_X_LTV_BPS:-8000}"
MAX_ROUND_TRIP_LOSS_BPS="${ENGINE_X_MAX_ROUND_TRIP_LOSS_BPS:-100}"
POOL_CWUSDC_RAW="${ENGINE_X_POOL_CWUSDC_RAW:-85763529}"
POOL_USDC_RAW="${ENGINE_X_POOL_USDC_RAW:-85763529}"
LENDER_USDC_RAW="${ENGINE_X_LENDER_USDC_RAW:-5000000}"
FLASH_FEE_BPS="${ENGINE_X_FLASH_FEE_BPS:-5}"
MAX_FLASH_LOAN_RAW="${ENGINE_X_MAX_FLASH_LOAN_RAW:-0}"
SEED_AFTER_DEPLOY="${SEED_AFTER_DEPLOY:-0}"
VERIFY="${VERIFY:-1}"
EXECUTE="${EXECUTE:-0}"
OWNER="${ENGINE_X_OWNER:-${DEPLOYER_ADDRESS:-}}"
if [[ -n "${PRIVATE_KEY:-}" ]]; then
OWNER="$(cast wallet address --private-key "${PRIVATE_KEY}")"
fi
SURPLUS_RECEIVER="${ENGINE_X_SURPLUS_RECEIVER:-${OWNER}}"
if [[ -z "${OWNER}" || -z "${SURPLUS_RECEIVER}" ]]; then
echo "Set PRIVATE_KEY, DEPLOYER_ADDRESS, ENGINE_X_OWNER, and/or ENGINE_X_SURPLUS_RECEIVER" >&2
exit 1
fi
if [[ "${EXECUTE}" == "1" && -z "${PRIVATE_KEY:-}" ]]; then
echo "PRIVATE_KEY is required when EXECUTE=1" >&2
exit 1
fi
VERIFY_ARGS=()
if [[ "${VERIFY}" == "1" ]]; then
VERIFY_ARGS+=(--verify)
fi
CREATE_CMD_EXEC=(
forge create
--broadcast
--rpc-url "${ETHEREUM_MAINNET_RPC}"
--private-key "${PRIVATE_KEY:-}"
"${VERIFY_ARGS[@]}"
contracts/flash/DBISEngineXVirtualBatchVault.sol:DBISEngineXVirtualBatchVault
--constructor-args
"${CWUSDC}" "${USDC}" "${XAUT}" "${OWNER}" "${SURPLUS_RECEIVER}"
"${XAUT_USD_PRICE6}" "${LTV_BPS}" "${MAX_ROUND_TRIP_LOSS_BPS}"
)
cat <<EOF
Engine X v2 Mainnet deployment plan
mode: ${EXECUTE}
owner: ${OWNER}
surplus receiver: ${SURPLUS_RECEIVER}
cWUSDC: ${CWUSDC}
USDC: ${USDC}
XAUt: ${XAUT}
XAUt price6: ${XAUT_USD_PRICE6}
LTV bps: ${LTV_BPS}
max round-trip loss bps: ${MAX_ROUND_TRIP_LOSS_BPS}
default seed: ${POOL_CWUSDC_RAW} cWUSDC raw / ${POOL_USDC_RAW} USDC raw
lender bucket: ${LENDER_USDC_RAW} USDC raw
flash fee bps: ${FLASH_FEE_BPS}
max flash loan raw: ${MAX_FLASH_LOAN_RAW}
EOF
if [[ "${EXECUTE}" != "1" ]]; then
cat <<EOF
Dry-run only. Review commands:
cd smom-dbis-138
forge create --broadcast --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY" ${VERIFY_ARGS[*]} contracts/flash/DBISEngineXVirtualBatchVault.sol:DBISEngineXVirtualBatchVault --constructor-args "${CWUSDC}" "${USDC}" "${XAUT}" "${OWNER}" "${SURPLUS_RECEIVER}" "${XAUT_USD_PRICE6}" "${LTV_BPS}" "${MAX_ROUND_TRIP_LOSS_BPS}"
After deploy, export the new address:
export DBIS_ENGINE_X_V2_VAULT=<deployed-vault-address>
Optional seed/fund/risk controls:
cast send "\$DBIS_ENGINE_X_V2_VAULT" 'setFlashFeeBps(uint256)' "${FLASH_FEE_BPS}" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
cast send "\$DBIS_ENGINE_X_V2_VAULT" 'setMaxFlashLoanAmount(uint256)' "${MAX_FLASH_LOAN_RAW}" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
cast send "${CWUSDC}" 'approve(address,uint256)' "\$DBIS_ENGINE_X_V2_VAULT" "${POOL_CWUSDC_RAW}" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
cast send "${USDC}" 'approve(address,uint256)' "\$DBIS_ENGINE_X_V2_VAULT" "$((POOL_USDC_RAW + LENDER_USDC_RAW))" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
cast send "\$DBIS_ENGINE_X_V2_VAULT" 'seedPool(uint256,uint256)' "${POOL_CWUSDC_RAW}" "${POOL_USDC_RAW}" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
cast send "\$DBIS_ENGINE_X_V2_VAULT" 'fundLender(uint256)' "${LENDER_USDC_RAW}" --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY"
EOF
exit 0
fi
pushd "${PROJECT_ROOT}/smom-dbis-138" >/dev/null
DEPLOY_OUT="$("${CREATE_CMD_EXEC[@]}")"
popd >/dev/null
printf '%s\n' "${DEPLOY_OUT}"
VAULT="$(printf '%s\n' "${DEPLOY_OUT}" | grep -oE 'Deployed to: 0x[a-fA-F0-9]{40}' | awk '{print $3}' | tail -1)"
if [[ -z "${VAULT}" ]]; then
echo "Could not parse deployed vault address" >&2
exit 1
fi
cast send "${VAULT}" 'setFlashFeeBps(uint256)' "${FLASH_FEE_BPS}" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
cast send "${VAULT}" 'setMaxFlashLoanAmount(uint256)' "${MAX_FLASH_LOAN_RAW}" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
if [[ "${SEED_AFTER_DEPLOY}" == "1" ]]; then
cast send "${CWUSDC}" 'approve(address,uint256)' "${VAULT}" "${POOL_CWUSDC_RAW}" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
cast send "${USDC}" 'approve(address,uint256)' "${VAULT}" "$((POOL_USDC_RAW + LENDER_USDC_RAW))" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
cast send "${VAULT}" 'seedPool(uint256,uint256)' "${POOL_CWUSDC_RAW}" "${POOL_USDC_RAW}" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
cast send "${VAULT}" 'fundLender(uint256)' "${LENDER_USDC_RAW}" --rpc-url "${ETHEREUM_MAINNET_RPC}" --private-key "${PRIVATE_KEY}"
fi
echo "DBIS_ENGINE_X_V2_VAULT=${VAULT}"