Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- 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
This commit is contained in:
170
scripts/deployment/deploy-mainnet-aave-quote-push-stack.sh
Executable file
170
scripts/deployment/deploy-mainnet-aave-quote-push-stack.sh
Executable file
@@ -0,0 +1,170 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user