chore: sync workspace docs, configs, and submodules
All checks were successful
Deploy to Phoenix / deploy (push) Successful in 9s
All checks were successful
Deploy to Phoenix / deploy (push) Successful in 9s
This commit is contained in:
138
scripts/maintenance/run-mainnet-cwusdc-usdc-support.sh
Executable file
138
scripts/maintenance/run-mainnet-cwusdc-usdc-support.sh
Executable file
@@ -0,0 +1,138 @@
|
||||
#!/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"
|
||||
|
||||
POLICY_PATH="${PROJECT_ROOT}/config/extraction/mainnet-cwusdc-usdc-support-policy.json"
|
||||
CHECKER="${PROJECT_ROOT}/scripts/verify/check-mainnet-cwusdc-usdc-support-health.py"
|
||||
FORGE_TARGET="smom-dbis-138/script/flash/RunManagedMainnetAaveCwusdcUsdcQuotePushCycle.s.sol:RunManagedMainnetAaveCwusdcUsdcQuotePushCycle"
|
||||
|
||||
DRY_RUN=1
|
||||
HEALTH_ONLY=0
|
||||
FORCE_RUN=0
|
||||
FLASH_OVERRIDE=""
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: bash scripts/maintenance/run-mainnet-cwusdc-usdc-support.sh [options]
|
||||
|
||||
Options:
|
||||
--health-only Print the current support decision and exit.
|
||||
--broadcast Broadcast the managed cycle instead of simulating it.
|
||||
--force Run the managed cycle even if the checker only recommends monitor/hold.
|
||||
--flash-quote-amount-raw N
|
||||
Override the policy-selected flash quote amount.
|
||||
-h, --help Show this help text.
|
||||
|
||||
Behavior:
|
||||
- Reads the canonical policy at config/extraction/mainnet-cwusdc-usdc-support-policy.json
|
||||
- Checks the public Uniswap V2 pair and defended DODO venue
|
||||
- Uses the managed Aave quote-push cycle against the defended DODO venue when intervention is recommended
|
||||
- Defaults to simulation unless --broadcast is passed
|
||||
EOF
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--health-only)
|
||||
HEALTH_ONLY=1
|
||||
shift
|
||||
;;
|
||||
--broadcast)
|
||||
DRY_RUN=0
|
||||
shift
|
||||
;;
|
||||
--force)
|
||||
FORCE_RUN=1
|
||||
shift
|
||||
;;
|
||||
--flash-quote-amount-raw)
|
||||
FLASH_OVERRIDE="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: unknown option: $1" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ -f "$POLICY_PATH" ]] || { echo "ERROR: missing policy file: $POLICY_PATH" >&2; exit 1; }
|
||||
[[ -f "$CHECKER" ]] || { echo "ERROR: missing checker script: $CHECKER" >&2; exit 1; }
|
||||
|
||||
eval "$(
|
||||
python3 "$CHECKER" --shell
|
||||
)"
|
||||
|
||||
echo "Policy: $POLICY_PATH"
|
||||
echo "Public pair: ${PUBLIC_PAIR_ADDRESS}"
|
||||
echo "Defended DODO pool: ${DEFENDED_POOL_ADDRESS}"
|
||||
echo "Deviation: ${PUBLIC_PAIR_DEVIATION_BPS:-unknown} bps"
|
||||
echo "Decision: ${DECISION_SEVERITY} / ${DECISION_ACTION}"
|
||||
echo "Reasons: ${REASONS_JSON}"
|
||||
|
||||
if [[ "$HEALTH_ONLY" -eq 1 ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "$DECISION_ACTION" != "run_managed_cycle" && "$FORCE_RUN" -ne 1 ]]; then
|
||||
echo "No managed cycle scheduled. Use --force to simulate anyway."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
FLASH_QUOTE_AMOUNT_RAW="${FLASH_OVERRIDE:-$FLASH_QUOTE_AMOUNT_RAW}"
|
||||
if [[ -z "${FLASH_QUOTE_AMOUNT_RAW:-}" || "${FLASH_QUOTE_AMOUNT_RAW}" == "0" ]]; then
|
||||
echo "ERROR: no flash quote amount resolved from policy or override" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for required_var in \
|
||||
ETHEREUM_MAINNET_RPC \
|
||||
DODO_PMM_INTEGRATION_MAINNET \
|
||||
QUOTE_PUSH_EXTERNAL_UNWINDER_MAINNET \
|
||||
AAVE_QUOTE_PUSH_RECEIVER_MAINNET \
|
||||
QUOTE_PUSH_TREASURY_MANAGER_MAINNET \
|
||||
UNWIND_MODE; do
|
||||
if [[ -z "${!required_var:-}" ]]; then
|
||||
echo "ERROR: missing required env var: ${required_var}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
export PRIVATE_KEY="${KEEPER_PRIVATE_KEY:-${PRIVATE_KEY:-}}"
|
||||
if [[ -z "${PRIVATE_KEY}" ]]; then
|
||||
echo "ERROR: missing PRIVATE_KEY and KEEPER_PRIVATE_KEY" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export POOL_CWUSDC_USDC_MAINNET="${DEFENDED_POOL_ADDRESS}"
|
||||
export FLASH_QUOTE_AMOUNT_RAW
|
||||
export QUOTE_PUSH_TREASURY_HARVEST="${QUOTE_PUSH_TREASURY_HARVEST:-1}"
|
||||
export QUOTE_PUSH_TREASURY_GAS_HOLDBACK_TARGET_RAW="${GAS_HOLDBACK_TARGET_RAW}"
|
||||
|
||||
forge_cmd=(
|
||||
forge script
|
||||
"$FORGE_TARGET"
|
||||
--root "$PROJECT_ROOT/smom-dbis-138"
|
||||
--rpc-url "$ETHEREUM_MAINNET_RPC"
|
||||
)
|
||||
|
||||
if [[ "$DRY_RUN" -eq 0 ]]; then
|
||||
forge_cmd+=(--broadcast)
|
||||
else
|
||||
echo "Simulation only. Pass --broadcast to execute on-chain."
|
||||
fi
|
||||
|
||||
printf 'Running:'
|
||||
printf ' %q' "${forge_cmd[@]}"
|
||||
printf '\n'
|
||||
"${forge_cmd[@]}"
|
||||
Reference in New Issue
Block a user