#!/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 < 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}"