162 lines
No EOL
4.8 KiB
Bash
Executable file
162 lines
No EOL
4.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Usage: ./run-improved-fuzzing.sh [optimizer] [runs=N] [staking=on|off] [buybias=N] [trades=N] [stakingbias=N]
|
|
# Examples:
|
|
# ./run-improved-fuzzing.sh BullMarketOptimizer runs=50
|
|
# ./run-improved-fuzzing.sh WhaleOptimizer runs=20 staking=off
|
|
# ./run-improved-fuzzing.sh BullMarketOptimizer runs=200 staking=on buybias=100 trades=30 stakingbias=95
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
BOLD='\033[1m'
|
|
|
|
# Configuration
|
|
OPTIMIZER=${1:-BullMarketOptimizer}
|
|
RUNS=${2:-runs=20}
|
|
STAKING=${3:-staking=on}
|
|
BUYBIAS=${4:-buybias=50}
|
|
TRADES=${5:-trades=15}
|
|
STAKINGBIAS=${6:-stakingbias=80}
|
|
|
|
# Parse runs parameter
|
|
if [[ $RUNS == runs=* ]]; then
|
|
RUNS_VALUE=${RUNS#runs=}
|
|
else
|
|
RUNS_VALUE=$RUNS
|
|
fi
|
|
|
|
# Parse staking parameter
|
|
STAKING_ENABLED="true"
|
|
if [[ $STAKING == staking=* ]]; then
|
|
STAKING_VALUE=${STAKING#staking=}
|
|
if [[ $STAKING_VALUE == "off" ]] || [[ $STAKING_VALUE == "false" ]] || [[ $STAKING_VALUE == "0" ]]; then
|
|
STAKING_ENABLED="false"
|
|
fi
|
|
fi
|
|
|
|
# Parse buy bias parameter
|
|
BUYBIAS_VALUE="50"
|
|
if [[ $BUYBIAS == buybias=* ]]; then
|
|
BUYBIAS_VALUE=${BUYBIAS#buybias=}
|
|
fi
|
|
|
|
# Parse trades parameter
|
|
TRADES_VALUE="15"
|
|
if [[ $TRADES == trades=* ]]; then
|
|
TRADES_VALUE=${TRADES#trades=}
|
|
fi
|
|
|
|
# Parse staking bias parameter
|
|
STAKINGBIAS_VALUE="80"
|
|
if [[ $STAKINGBIAS == stakingbias=* ]]; then
|
|
STAKINGBIAS_VALUE=${STAKINGBIAS#stakingbias=}
|
|
fi
|
|
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
OUTPUT_DIR="fuzzing_results_${OPTIMIZER}_${TIMESTAMP}"
|
|
|
|
echo -e "${GREEN}=== Fuzzing Analysis ===${NC}"
|
|
echo "Optimizer: $OPTIMIZER"
|
|
echo "Total runs: $RUNS_VALUE"
|
|
echo "Trades per run: $TRADES_VALUE"
|
|
echo "Staking: $([ "$STAKING_ENABLED" = "true" ] && echo "enabled" || echo "disabled")"
|
|
if [ "$STAKING_ENABLED" = "true" ]; then
|
|
echo "Staking bias: $STAKINGBIAS_VALUE%"
|
|
fi
|
|
echo "Buy bias: $BUYBIAS_VALUE%"
|
|
echo "Output directory: $OUTPUT_DIR"
|
|
echo ""
|
|
|
|
# Validate optimizer
|
|
case $OPTIMIZER in
|
|
BullMarketOptimizer|BearMarketOptimizer|NeutralMarketOptimizer|WhaleOptimizer|ExtremeOptimizer|MaliciousOptimizer)
|
|
echo "Optimizer validation passed"
|
|
;;
|
|
*)
|
|
echo -e "${RED}Error: Invalid optimizer class${NC}"
|
|
echo "Valid options: BullMarketOptimizer, BearMarketOptimizer, NeutralMarketOptimizer, WhaleOptimizer, ExtremeOptimizer, MaliciousOptimizer"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Create output directory
|
|
mkdir -p $OUTPUT_DIR
|
|
|
|
# Run the fuzzing analysis
|
|
echo -e "${YELLOW}Starting fuzzing analysis...${NC}"
|
|
echo ""
|
|
|
|
FUZZING_RUNS=$RUNS_VALUE \
|
|
OPTIMIZER_CLASS=$OPTIMIZER \
|
|
ENABLE_STAKING=$STAKING_ENABLED \
|
|
BUY_BIAS=$BUYBIAS_VALUE \
|
|
TRADES_PER_RUN=$TRADES_VALUE \
|
|
STAKING_BIAS=$STAKINGBIAS_VALUE \
|
|
TRACK_POSITIONS=true \
|
|
forge script analysis/ImprovedFuzzingAnalysis.s.sol:ImprovedFuzzingAnalysis --gas-limit 200000000 -vv 2>&1 | tee $OUTPUT_DIR/fuzzing.log
|
|
|
|
# Extract key metrics
|
|
echo ""
|
|
echo -e "${GREEN}=== ANALYSIS COMPLETE ===${NC}"
|
|
|
|
# Show summary from log
|
|
tail -20 $OUTPUT_DIR/fuzzing.log | grep -E "Total scenarios|Profitable|Discovery|Stakes|Snatches" || true
|
|
|
|
# Check for position CSVs
|
|
POSITION_CSV_COUNT=$(ls -1 improved_positions_*.csv 2>/dev/null | wc -l)
|
|
|
|
if [ $POSITION_CSV_COUNT -gt 0 ]; then
|
|
# Move position CSVs to output directory
|
|
mv improved_positions_*.csv $OUTPUT_DIR/
|
|
echo ""
|
|
echo -e "${GREEN}Position CSVs saved to: $OUTPUT_DIR/${NC}"
|
|
|
|
# Calculate max staking percentage
|
|
echo ""
|
|
echo -e "${YELLOW}=== Maximum Staking Level ===${NC}"
|
|
for f in $OUTPUT_DIR/improved_positions_*.csv; do
|
|
tail -1 "$f" | cut -d',' -f13
|
|
done | sort -n | tail -1 | awk '{
|
|
pct = $1/1e16
|
|
printf "%.2f%% of authorized stake (%.2f%% of KRAIKEN supply)\n", pct, pct*0.2
|
|
}'
|
|
fi
|
|
|
|
# Check for snatching activity
|
|
echo ""
|
|
echo -e "${YELLOW}=== Snatching Activity ===${NC}"
|
|
SNATCH_COUNT=$(grep -c "SNATCHED" $OUTPUT_DIR/fuzzing.log 2>/dev/null || true)
|
|
if [ -z "$SNATCH_COUNT" ]; then
|
|
SNATCH_COUNT="0"
|
|
fi
|
|
if [ "$SNATCH_COUNT" -gt "0" ]; then
|
|
echo -e "${GREEN}Snatching observed! Found $SNATCH_COUNT snatching events${NC}"
|
|
grep "SNATCHED" $OUTPUT_DIR/fuzzing.log | head -5
|
|
else
|
|
echo "No snatching observed in this run"
|
|
fi
|
|
|
|
# Check for profitable scenarios
|
|
PROFITABLE_COUNT=$(grep -c "PROFITABLE!" $OUTPUT_DIR/fuzzing.log 2>/dev/null || true)
|
|
if [ -z "$PROFITABLE_COUNT" ]; then
|
|
PROFITABLE_COUNT="0"
|
|
fi
|
|
if [ "$PROFITABLE_COUNT" -gt "0" ]; then
|
|
echo ""
|
|
echo -e "${GREEN}=== PROFITABLE SCENARIOS FOUND ===${NC}"
|
|
echo "Found $PROFITABLE_COUNT profitable scenarios"
|
|
grep "PROFITABLE!" $OUTPUT_DIR/fuzzing.log | head -5
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}Full results saved to: $OUTPUT_DIR/${NC}"
|
|
echo ""
|
|
echo "To view detailed logs:"
|
|
echo " cat $OUTPUT_DIR/fuzzing.log"
|
|
echo ""
|
|
echo "To visualize position movements (if CSVs generated):"
|
|
echo " ./analysis/view-scenarios.sh $OUTPUT_DIR" |