130 lines
4.2 KiB
Bash
130 lines
4.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
# Test the V3 binary step output params
|
||
|
|
# V3 now uses direct 2D mapping with no intermediate score:
|
||
|
|
# staked <= 91% → BEAR (AS=30%, AW=100, DD=0.3e18)
|
||
|
|
# staked > 91% + low tax → BULL (AS=100%, AW=20, DD=1e18)
|
||
|
|
#
|
||
|
|
# BUGS FIXED from previous version:
|
||
|
|
# 1. Bear AS was 1e17 (10%) — should be 3e17 (30%) matching V3 contract
|
||
|
|
# 2. Had ramp transition 140-160 — V3 uses binary step, no intermediate params
|
||
|
|
# 3. DD was proportional to score — now binary (0.3e18 bear, 1e18 bull)
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
|
|
cd "$SCRIPT_DIR/.."
|
||
|
|
|
||
|
|
FORGE="${HOME}/.foundry/bin/forge"
|
||
|
|
|
||
|
|
LOG="analysis/V3_STEP_LOG.md"
|
||
|
|
echo "# OptimizerV3 Binary Step Test — $(date -u '+%Y-%m-%d %H:%M UTC')" > "$LOG"
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
echo "V3 outputs exactly two configs (no intermediates):" >> "$LOG"
|
||
|
|
echo "- Bear: AS=30% AW=100 DD=0.3e18" >> "$LOG"
|
||
|
|
echo "- Bull: AS=100% AW=20 DD=1e18" >> "$LOG"
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
|
||
|
|
check_resources() {
|
||
|
|
local disk_pct=$(df / --output=pcent | tail -1 | tr -d ' %')
|
||
|
|
if [ "$disk_pct" -gt 85 ]; then
|
||
|
|
echo "DISK FULL ($disk_pct%) — stopping"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
run_config() {
|
||
|
|
local name=$1 config=$2 buybias=$3 runs=$4
|
||
|
|
|
||
|
|
local CI=0
|
||
|
|
local AS AW DD desc
|
||
|
|
if [ "$config" = "bear" ]; then
|
||
|
|
AS=300000000000000000 # 30% = 3e17
|
||
|
|
AW=100
|
||
|
|
DD=300000000000000000 # 0.3e18
|
||
|
|
desc="AS=30% AW=100"
|
||
|
|
elif [ "$config" = "bull" ]; then
|
||
|
|
AS=1000000000000000000 # 100% = 1e18
|
||
|
|
AW=20
|
||
|
|
DD=1000000000000000000 # 1e18
|
||
|
|
desc="AS=100% AW=20"
|
||
|
|
else
|
||
|
|
echo "Unknown config: $config"
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "=== $name ($desc) buybias=$buybias ==="
|
||
|
|
echo "### $name ($desc, buybias=$buybias)" >> "$LOG"
|
||
|
|
|
||
|
|
local profitable=0
|
||
|
|
local total=0
|
||
|
|
for i in $(seq 1 $runs); do
|
||
|
|
printf " Run $i/$runs... "
|
||
|
|
local seed=$RANDOM$RANDOM$RANDOM
|
||
|
|
local output
|
||
|
|
output=$(CI_VALUE=$CI AS_VALUE=$AS AW_VALUE=$AW DD_VALUE=$DD \
|
||
|
|
BATCH_SEED=$seed OPTIMIZER_CLASS=ConfigurableOptimizer \
|
||
|
|
UNCAPPED_SWAPS=true FUZZING_RUNS=1 BUY_BIAS=$buybias \
|
||
|
|
TRADES_PER_RUN=2000 \
|
||
|
|
"$FORGE" script analysis/StreamlinedFuzzing.s.sol:StreamlinedFuzzing \
|
||
|
|
--skip-simulation --gas-estimate-multiplier 300 -vv 2>&1)
|
||
|
|
|
||
|
|
local csv_prefix=$(echo "$output" | grep "prefix:" | sed 's/.*prefix: //')
|
||
|
|
local csv_file="analysis/fuzz-${csv_prefix}-000.csv"
|
||
|
|
|
||
|
|
if [ -f "$csv_file" ]; then
|
||
|
|
local init_eth=$(head -2 "$csv_file" | tail -1 | cut -d',' -f13)
|
||
|
|
local final_eth=$(tail -1 "$csv_file" | cut -d',' -f13)
|
||
|
|
if [ -n "$init_eth" ] && [ -n "$final_eth" ]; then
|
||
|
|
local pnl_eth
|
||
|
|
pnl_eth=$(python3 -c "
|
||
|
|
init=$init_eth; final=$final_eth
|
||
|
|
pnl = (final - init) / 1e18
|
||
|
|
status = 'PROFIT' if pnl > 0 else 'SAFE'
|
||
|
|
print(f'{status} {pnl:.1f}')
|
||
|
|
" 2>/dev/null || echo "SAFE 0.0")
|
||
|
|
local status=$(echo "$pnl_eth" | cut -d' ' -f1)
|
||
|
|
local pnl=$(echo "$pnl_eth" | cut -d' ' -f2)
|
||
|
|
if [ "$status" = "PROFIT" ]; then
|
||
|
|
profitable=$((profitable + 1))
|
||
|
|
echo "❌ +${pnl} ETH"
|
||
|
|
else
|
||
|
|
echo "✅ ${pnl} ETH"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
rm -f "$csv_file"
|
||
|
|
else
|
||
|
|
echo "⚠️ no CSV"
|
||
|
|
fi
|
||
|
|
total=$((total + 1))
|
||
|
|
done
|
||
|
|
|
||
|
|
local emoji="✅"; [ "$profitable" -gt 0 ] && emoji="❌"
|
||
|
|
echo "$emoji $profitable/$total profitable"
|
||
|
|
echo "Result: **$profitable/$total** $emoji" >> "$LOG"
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
check_resources
|
||
|
|
}
|
||
|
|
|
||
|
|
echo "Testing V3 binary step output configs..."
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Bear config: AS=30% AW=100 — this is what V3 outputs for staked <= 91%
|
||
|
|
echo "## Bear Config (AS=30% AW=100)" >> "$LOG"
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
|
||
|
|
run_config "bear-sellheavy" bear 10 5
|
||
|
|
run_config "bear-balanced" bear 50 5
|
||
|
|
|
||
|
|
# Bull config: AS=100% AW=20 — this is what V3 outputs for euphoric staking
|
||
|
|
echo "## Bull Config (AS=100% AW=20)" >> "$LOG"
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
|
||
|
|
run_config "bull-sellheavy" bull 10 5
|
||
|
|
run_config "bull-balanced" bull 50 5
|
||
|
|
|
||
|
|
echo "" >> "$LOG"
|
||
|
|
echo "### Complete: $(date -u '+%Y-%m-%d %H:%M UTC')" >> "$LOG"
|
||
|
|
echo ""
|
||
|
|
echo "=== DONE ==="
|
||
|
|
echo "Results: analysis/V3_STEP_LOG.md"
|