harb/onchain/analysis
2025-08-18 22:09:03 +02:00
..
helpers feat: Add scenario recording and replay system for invariant debugging 2025-08-18 20:31:39 +02:00
.gitignore wip 2025-08-09 18:03:31 +02:00
AnalysisVisualizer.py wip 2025-08-09 18:03:31 +02:00
ImprovedFuzzingAnalysis.s.sol recorded fuzzing 2025-08-18 22:09:03 +02:00
README.md wip 2025-08-09 18:03:31 +02:00
RecordedFuzzingAnalysis.s.sol recorded fuzzing 2025-08-18 22:09:03 +02:00
replay-scenario.sh feat: Add scenario recording and replay system for invariant debugging 2025-08-18 20:31:39 +02:00
requirements.txt wip 2025-08-09 18:03:31 +02:00
run-fuzzing.sh refactor: Migrate to improved fuzzing system with visualizer support 2025-08-18 21:09:03 +02:00
run-recorded-fuzzing.sh recorded fuzzing 2025-08-18 22:09:03 +02:00
scenario-visualizer.html better visualizer 2025-08-17 15:09:41 +02:00
view-scenarios.sh better scripts 2025-08-09 19:17:46 +02:00

KRAIKEN Fuzzing Analysis Tools

This directory contains tools for fuzzing the KRAIKEN LiquidityManager to identify potential profitable trading scenarios.

Quick Start

# Run fuzzing with default settings (50 runs, 20 trades)
./run-fuzzing.sh BullMarketOptimizer

# Run with custom parameters
./run-fuzzing.sh WhaleOptimizer runs=100 trades=50

# Clean up generated files
./clean.sh

Files

Core Scripts

  • FuzzingAnalysis.s.sol - Main Solidity fuzzing script that tests trading scenarios
  • run-fuzzing.sh - Shell script to orchestrate multiple fuzzing runs
  • clean.sh - Cleanup script to remove generated files

Helpers

  • helpers/SwapExecutor.sol - Handles swap execution through Uniswap
  • helpers/CSVManager.sol - CSV generation utilities
  • helpers/CSVHelper.sol - CSV formatting helpers

Visualization

  • AnalysisVisualizer.py - Python script to generate charts from CSV data
  • scenario-visualizer.html - Interactive web visualization
  • view-scenarios.sh - Quick script to launch web server for visualization

Available Optimizers

  • BullMarketOptimizer - Aggressive parameters for bull market conditions
  • NeutralMarketOptimizer - Balanced parameters
  • BearMarketOptimizer - Conservative parameters for bear market conditions
  • WhaleOptimizer - Simulates large position dominance
  • MockOptimizer - Standard mock with configurable parameters
  • RandomScenarioOptimizer - Randomized parameters for each run

Usage

Running Fuzzing Campaigns

# Basic usage
./run-fuzzing.sh <optimizer_class> [runs=N] [trades=N]

# Examples
./run-fuzzing.sh BullMarketOptimizer                    # Uses defaults
./run-fuzzing.sh WhaleOptimizer runs=100               # 100 runs
./run-fuzzing.sh BearMarketOptimizer trades=50         # 50 trades per run
./run-fuzzing.sh NeutralMarketOptimizer runs=25 trades=30  # Both params

Parameters:

  • optimizer_class - Required. The optimizer class to use
  • runs=N - Optional. Number of fuzzing runs (default: 50)
  • trades=N - Optional. Trades per run (default: 20, actual will be ±5)

Output

Each fuzzing campaign creates a timestamped directory with:

  • Individual run logs (run_N.log)
  • Merged CSV of profitable scenarios
  • Summary report with statistics
  • Configuration file for reproducibility

Visualization

To visualize results:

# Start local web server
./view-scenarios.sh

# Or use Python directly
python3 -m http.server 8000
# Then open http://localhost:8000/scenario-visualizer.html

Cleanup

Remove all generated files:

./clean.sh

Environment Variables

The fuzzing script supports these environment variables:

  • FUZZING_RUNS - Number of runs (overridden by script parameter)
  • OPTIMIZER_CLASS - Optimizer to use (overridden by script parameter)
  • TRADES_PER_RUN - Trades per run (overridden by script parameter)
  • TRACK_POSITIONS - Enable detailed position tracking (default: false)

Development

To add a new optimizer:

  1. Create the optimizer contract in ../test/mocks/
  2. Import it in FuzzingAnalysis.s.sol
  3. Add it to the _getOptimizerByClass function
  4. Update this README

Notes

  • Each run deploys a fresh Uniswap V3 environment
  • Gas limit is set to 200M for --via-ir compilation
  • Results are deterministic based on the seed
  • The fuzzer tests random buy/sell patterns with periodic recenters