- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains - Omit embedded publish git dirs and empty placeholders from index Made-with: Cursor
171 lines
6.3 KiB
Bash
Executable File
171 lines
6.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Deploy Mainnet flash quote-push stack (Aave receiver + external unwinder).
|
|
# Default: simulation only (no --broadcast). Use --apply to broadcast.
|
|
#
|
|
# Env:
|
|
# PRIVATE_KEY, ETHEREUM_MAINNET_RPC
|
|
# DODO_PMM_INTEGRATION_MAINNET required when QUOTE_PUSH_UNWINDER_TYPE=dodo
|
|
# UNISWAP_V3_SWAP_ROUTER_MAINNET optional for univ3; defaults to legacy SwapRouter `0xE592...`
|
|
# QUOTE_PUSH_UNWINDER_TYPE univ3 (default) | dodo | two_hop_dodo | dodo_univ3
|
|
#
|
|
# Usage:
|
|
# source scripts/lib/load-project-env.sh
|
|
# bash scripts/deployment/deploy-mainnet-aave-quote-push-stack.sh --dry-run
|
|
# bash scripts/deployment/deploy-mainnet-aave-quote-push-stack.sh --apply
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROXMOX_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
SMOM="${PROXMOX_ROOT}/smom-dbis-138"
|
|
|
|
# Preserve explicit caller overrides across sourced repo env files.
|
|
_qp_private_key="${PRIVATE_KEY-}"
|
|
_qp_rpc="${ETHEREUM_MAINNET_RPC-}"
|
|
_qp_unwind_type="${QUOTE_PUSH_UNWINDER_TYPE-}"
|
|
_qp_integration="${DODO_PMM_INTEGRATION_MAINNET-}"
|
|
_qp_router="${UNISWAP_V3_SWAP_ROUTER_MAINNET-}"
|
|
_qp_skip_receiver="${DEPLOY_MAINNET_FLASH_SKIP_RECEIVER-}"
|
|
|
|
# shellcheck disable=SC1091
|
|
source "${PROXMOX_ROOT}/scripts/lib/load-project-env.sh" 2>/dev/null || true
|
|
# shellcheck disable=SC1091
|
|
source "${SMOM}/scripts/load-env.sh" >/dev/null 2>&1 || true
|
|
|
|
[[ -n "$_qp_private_key" ]] && export PRIVATE_KEY="$_qp_private_key"
|
|
[[ -n "$_qp_rpc" ]] && export ETHEREUM_MAINNET_RPC="$_qp_rpc"
|
|
[[ -n "$_qp_unwind_type" ]] && export QUOTE_PUSH_UNWINDER_TYPE="$_qp_unwind_type"
|
|
[[ -n "$_qp_integration" ]] && export DODO_PMM_INTEGRATION_MAINNET="$_qp_integration"
|
|
[[ -n "$_qp_router" ]] && export UNISWAP_V3_SWAP_ROUTER_MAINNET="$_qp_router"
|
|
[[ -n "$_qp_skip_receiver" ]] && export DEPLOY_MAINNET_FLASH_SKIP_RECEIVER="$_qp_skip_receiver"
|
|
|
|
unset _qp_private_key _qp_rpc _qp_unwind_type _qp_integration _qp_router _qp_skip_receiver
|
|
|
|
pick_latest_create_address() {
|
|
local script_name="$1"
|
|
local contract_name="$2"
|
|
local latest_json="${SMOM}/broadcast/${script_name}/1/run-latest.json"
|
|
if [[ ! -f "$latest_json" ]] || ! command -v jq >/dev/null 2>&1; then
|
|
return 1
|
|
fi
|
|
|
|
jq -r --arg contract "$contract_name" \
|
|
'.transactions[]? | select(.transactionType == "CREATE" and .contractName == $contract) | .contractAddress' \
|
|
"$latest_json" | tail -n1
|
|
}
|
|
|
|
BROADCAST=()
|
|
MODE="dry-run"
|
|
if (($# == 0)); then
|
|
:
|
|
else
|
|
for a in "$@"; do
|
|
case "$a" in
|
|
--apply) BROADCAST=(--broadcast); MODE=apply ;;
|
|
--dry-run) BROADCAST=(); MODE=dry-run ;;
|
|
*)
|
|
echo "[fail] unknown arg: $a (use --dry-run or --apply)" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
if [[ -z "${ETHEREUM_MAINNET_RPC:-}" || -z "${PRIVATE_KEY:-}" ]]; then
|
|
echo "[fail] ETHEREUM_MAINNET_RPC and PRIVATE_KEY are required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
UNW="${QUOTE_PUSH_UNWINDER_TYPE:-univ3}"
|
|
|
|
echo "mode=$MODE unwinder_type=$UNW"
|
|
if [[ "${DEPLOY_MAINNET_FLASH_SKIP_RECEIVER:-}" == "1" ]]; then
|
|
echo "Step 1/2: skipped (DEPLOY_MAINNET_FLASH_SKIP_RECEIVER=1; reuse AAVE_QUOTE_PUSH_RECEIVER_MAINNET)"
|
|
else
|
|
echo "Step 1/2: DeployAaveQuotePushFlashReceiver"
|
|
(
|
|
cd "$SMOM"
|
|
forge script script/deploy/DeployAaveQuotePushFlashReceiver.s.sol:DeployAaveQuotePushFlashReceiver \
|
|
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
|
"${BROADCAST[@]}" \
|
|
-vvvv
|
|
)
|
|
fi
|
|
|
|
if [[ "$UNW" == "dodo" ]]; then
|
|
if [[ -z "${DODO_PMM_INTEGRATION_MAINNET:-}" ]]; then
|
|
echo "[fail] DODO_PMM_INTEGRATION_MAINNET required for dodo unwinder" >&2
|
|
exit 1
|
|
fi
|
|
echo "Step 2/2: DeployDODOIntegrationExternalUnwinder"
|
|
(
|
|
cd "$SMOM"
|
|
forge script script/deploy/DeployDODOIntegrationExternalUnwinder.s.sol:DeployDODOIntegrationExternalUnwinder \
|
|
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
|
"${BROADCAST[@]}" \
|
|
-vvvv
|
|
)
|
|
elif [[ "$UNW" == "two_hop_dodo" ]]; then
|
|
if [[ -z "${DODO_PMM_INTEGRATION_MAINNET:-}" ]]; then
|
|
echo "[fail] DODO_PMM_INTEGRATION_MAINNET required for two_hop_dodo unwinder" >&2
|
|
exit 1
|
|
fi
|
|
echo "Step 2/2: DeployTwoHopDodoIntegrationUnwinder"
|
|
(
|
|
cd "$SMOM"
|
|
forge script script/deploy/DeployTwoHopDodoIntegrationUnwinder.s.sol:DeployTwoHopDodoIntegrationUnwinder \
|
|
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
|
"${BROADCAST[@]}" \
|
|
-vvvv
|
|
)
|
|
elif [[ "$UNW" == "dodo_univ3" ]]; then
|
|
if [[ -z "${DODO_PMM_INTEGRATION_MAINNET:-}" ]]; then
|
|
echo "[fail] DODO_PMM_INTEGRATION_MAINNET required for dodo_univ3 unwinder" >&2
|
|
exit 1
|
|
fi
|
|
echo "Step 2/2: DeployDODOToUniswapV3MultiHopExternalUnwinder"
|
|
(
|
|
cd "$SMOM"
|
|
forge script script/deploy/DeployDODOToUniswapV3MultiHopExternalUnwinder.s.sol:DeployDODOToUniswapV3MultiHopExternalUnwinder \
|
|
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
|
"${BROADCAST[@]}" \
|
|
-vvvv
|
|
)
|
|
else
|
|
echo "Step 2/2: DeployUniswapV3ExternalUnwinder"
|
|
(
|
|
cd "$SMOM"
|
|
forge script script/deploy/DeployUniswapV3ExternalUnwinder.s.sol:DeployUniswapV3ExternalUnwinder \
|
|
--rpc-url "$ETHEREUM_MAINNET_RPC" \
|
|
"${BROADCAST[@]}" \
|
|
-vvvv
|
|
)
|
|
fi
|
|
|
|
echo
|
|
receiver_addr="$(pick_latest_create_address "DeployAaveQuotePushFlashReceiver.s.sol" "AaveQuotePushFlashReceiver" || true)"
|
|
unwinder_contract="UniswapV3ExternalUnwinder"
|
|
unwinder_script="DeployUniswapV3ExternalUnwinder.s.sol"
|
|
case "$UNW" in
|
|
dodo)
|
|
unwinder_contract="DODOIntegrationExternalUnwinder"
|
|
unwinder_script="DeployDODOIntegrationExternalUnwinder.s.sol"
|
|
;;
|
|
two_hop_dodo)
|
|
unwinder_contract="TwoHopDodoIntegrationUnwinder"
|
|
unwinder_script="DeployTwoHopDodoIntegrationUnwinder.s.sol"
|
|
;;
|
|
dodo_univ3)
|
|
unwinder_contract="DODOToUniswapV3MultiHopExternalUnwinder"
|
|
unwinder_script="DeployDODOToUniswapV3MultiHopExternalUnwinder.s.sol"
|
|
;;
|
|
esac
|
|
unwinder_addr="$(pick_latest_create_address "$unwinder_script" "$unwinder_contract" || true)"
|
|
|
|
echo "After --apply: copy deployed addresses into .env:"
|
|
echo " AAVE_QUOTE_PUSH_RECEIVER_MAINNET=${receiver_addr:-...}"
|
|
echo " QUOTE_PUSH_EXTERNAL_UNWINDER_MAINNET=${unwinder_addr:-...}"
|
|
echo "Or rerun immediately with QUOTE_PUSH_UNWINDER_TYPE=${UNW} so run-mainnet-aave-cwusdc-quote-push-once.sh can auto-pick the latest broadcast unwinder."
|
|
echo "Then set FLASH_QUOTE_AMOUNT_RAW, UNWIND_MODE, UNWIND_V3_FEE_U24 (or UNWIND_DODO_POOL / two-hop vars) and run:"
|
|
echo " bash scripts/deployment/run-mainnet-aave-cwusdc-quote-push-once.sh --dry-run"
|