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
90 lines
3.1 KiB
Bash
Executable File
90 lines
3.1 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}"
|
|
FACTORY="${CHAIN_1_UNISWAP_V3_FACTORY:-0x1F98431c8aD98523631AE4a59f267346ea31F984}"
|
|
FEE="${ENGINE_X_UNIV3_FEE:-100}"
|
|
MAX_ABS_TICK="${ENGINE_X_INDEXED_MAX_ABS_TICK:-100}"
|
|
MIN_LIQUIDITY="${ENGINE_X_INDEXED_MIN_LIQUIDITY:-1}"
|
|
MAX_PROOF_SWAP_AMOUNT="${ENGINE_X_INDEXED_MAX_PROOF_SWAP_AMOUNT:-1000000}"
|
|
VERIFY="${VERIFY:-1}"
|
|
EXECUTE="${EXECUTE:-0}"
|
|
|
|
OWNER="${ENGINE_X_INDEXED_OWNER:-${DEPLOYER_ADDRESS:-}}"
|
|
if [[ -n "${PRIVATE_KEY:-}" ]]; then
|
|
OWNER="$(cast wallet address --private-key "${PRIVATE_KEY}")"
|
|
fi
|
|
if [[ -z "${OWNER}" ]]; then
|
|
echo "Set PRIVATE_KEY, DEPLOYER_ADDRESS, or ENGINE_X_INDEXED_OWNER" >&2
|
|
exit 1
|
|
fi
|
|
if [[ "${EXECUTE}" == "1" && -z "${PRIVATE_KEY:-}" ]]; then
|
|
echo "PRIVATE_KEY is required when EXECUTE=1" >&2
|
|
exit 1
|
|
fi
|
|
|
|
TOKEN0="$(printf '%s\n%s\n' "${CWUSDC}" "${USDC}" | tr '[:upper:]' '[:lower:]' | sort | sed -n '1p')"
|
|
TOKEN1="$(printf '%s\n%s\n' "${CWUSDC}" "${USDC}" | tr '[:upper:]' '[:lower:]' | sort | sed -n '2p')"
|
|
POOL="${ENGINE_X_UNIV3_POOL:-$(cast call "${FACTORY}" 'getPool(address,address,uint24)(address)' "${TOKEN0}" "${TOKEN1}" "${FEE}" --rpc-url "${ETHEREUM_MAINNET_RPC}" | grep -oE '0x[a-fA-F0-9]{40}' | head -1)}"
|
|
|
|
if [[ "${POOL}" == "0x0000000000000000000000000000000000000000" ]]; then
|
|
cat <<EOF
|
|
Engine X indexed-liquidity vault deployment blocked
|
|
UniV3 cWUSDC/USDC pool is not deployed for fee ${FEE}.
|
|
Create/fund the public pool first, then rerun this script.
|
|
EOF
|
|
exit 0
|
|
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/DBISEngineXIndexedLiquidityVault.sol:DBISEngineXIndexedLiquidityVault
|
|
--constructor-args
|
|
"${CWUSDC}" "${USDC}" "${POOL}" "${OWNER}" "${MAX_ABS_TICK}" "${MIN_LIQUIDITY}" "${MAX_PROOF_SWAP_AMOUNT}"
|
|
)
|
|
|
|
cat <<EOF
|
|
Engine X indexed-liquidity vault deployment plan
|
|
mode: ${EXECUTE}
|
|
owner: ${OWNER}
|
|
cWUSDC: ${CWUSDC}
|
|
USDC: ${USDC}
|
|
UniV3 pool: ${POOL}
|
|
fee: ${FEE}
|
|
max abs tick: ${MAX_ABS_TICK}
|
|
min liquidity: ${MIN_LIQUIDITY}
|
|
max proof swap amount raw: ${MAX_PROOF_SWAP_AMOUNT}
|
|
EOF
|
|
|
|
if [[ "${EXECUTE}" != "1" ]]; then
|
|
cat <<EOF
|
|
|
|
Dry-run only. Review command:
|
|
cd smom-dbis-138
|
|
forge create --broadcast --rpc-url "\$ETHEREUM_MAINNET_RPC" --private-key "\$PRIVATE_KEY" ${VERIFY_ARGS[*]} contracts/flash/DBISEngineXIndexedLiquidityVault.sol:DBISEngineXIndexedLiquidityVault --constructor-args "${CWUSDC}" "${USDC}" "${POOL}" "${OWNER}" "${MAX_ABS_TICK}" "${MIN_LIQUIDITY}" "${MAX_PROOF_SWAP_AMOUNT}"
|
|
EOF
|
|
exit 0
|
|
fi
|
|
|
|
pushd "${PROJECT_ROOT}/smom-dbis-138" >/dev/null
|
|
"${CREATE_CMD_EXEC[@]}"
|
|
popd >/dev/null
|