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
119 lines
5.3 KiB
Bash
Executable File
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}"
|