- Add AttackRunner.s.sol: structured forge script that reads attack ops from a JSONL file (ATTACK_FILE env), executes them against the local Anvil deployment, and emits full state snapshots (tick, positions, VWAP, optimizer output, adversary balances) as JSON lines after every recenter and at start/end. - Add 5 canonical attack files in onchain/script/backtesting/attacks/: * il-crystallization-15.jsonl — 15 buy-recenter cycles + sell (extraction) * il-crystallization-80.jsonl — 80 buy-recenter cycles + sell (extraction) * fee-drain-oscillation.jsonl — buy-recenter-sell-recenter oscillation * round-trip-safe.jsonl — 20 full round-trips (regression: safe) * staking-safe.jsonl — staking manipulation (regression: safe) - Add scripts/harb-evaluator/export-attacks.py: parses red-team-stream.jsonl for tool_use Bash blocks containing cast send commands and converts them to AttackRunner-compatible JSONL (buy/sell/recenter/stake/unstake/mint_lp/burn_lp). - Update scripts/harb-evaluator/red-team.sh: after each agent run, automatically exports the attack sequence via export-attacks.py and replays it with AttackRunner to capture structured snapshots in tmp/red-team-snapshots.jsonl. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
153 lines
5.9 KiB
JSON
153 lines
5.9 KiB
JSON
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"buy","amount":"100000000000000000000","token":"WETH"}
|
|
{"op":"recenter"}
|
|
{"op":"sell","amount":"all","token":"KRK"}
|