{
  "name": "ProofForge",
  "repository": "https://github.com/davidwilliam/proof_forge",
  "headline": "AI-written financial code that ships with a proof.",
  "summary": "Meta's Muse Spark, with Muse Wonder planning the hardest proofs, writes and repairs the logic behind real financial failures, from DeFi exploits to the Knight Capital trading loss, and proves every locked requirement in Lean 4. ProofForge rechecks each proof in a fresh sandbox and issues a Passport. No proof, no merge.",
  "generated_by": "web/scripts/evidence.mjs from committed result files",
  "checking": {
    "lean": "Lean v4.35.0",
    "judge": "lake comparator --paranoid in a fresh bubblewrap sandbox with six kernels (Lean default and paranoid, lean4lean, nanoda, con-leche, con-ron), then leanchecker and an axiom audit; the executable rebuilt from the same source runs generated property cases",
    "statuses": [
      "VERIFIED",
      "REFUTED",
      "UNRESOLVED"
    ]
  },
  "loss_total": {
    "phrase": "more than $1 billion",
    "usd_millions_rounded_down": 1007,
    "note": "the sum of the loss figures quoted for the incidents, each rounded down; the figures measure different things (taken, net profit to the attacker, realized loss), as each states"
  },
  "flagships": [
    {
      "key": "cetus",
      "incident": "Cetus",
      "date": "2025-05-22",
      "system": "concentrated-liquidity pools of Cetus, a DEX on Sui",
      "domain": "DEX liquidity math",
      "language": "Move",
      "loss": {
        "amount": "about $223 million",
        "basis": "taken, as The Block reports from Cetus's incident report",
        "sources": [
          {
            "label": "The Block",
            "url": "https://www.theblock.co/post/355795/sui-dex-cetus-open-source-library-flaw-smart-contract-223-million-usd-exploit"
          },
          {
            "label": "Dedaub",
            "url": "https://dedaub.com/blog/the-cetus-amm-200m-hack-how-a-flawed-overflow-check-led-to-catastrophic-loss/"
          }
        ],
        "quoted_from": "realworld/tasks/rw-cetus-shlw/README.md"
      },
      "bug": "The overflow check in checked_shlw tested against a 256-bit limit instead of a 192-bit limit, so a shift that lost bits reported no overflow.",
      "property_proved": {
        "text": "The overflow check never loses a bit, so a deposit is always charged at least the exact amount it owes.",
        "requirement": "REQ-DELTA-A-COVERS"
      },
      "task": "realworld/tasks/rw-cetus-shlw",
      "readme": "realworld/tasks/rw-cetus-shlw/README.md",
      "vulnerable_code": {
        "label": "Original checked_shlw",
        "verdict": "REFUTED",
        "finding": "On the attack deposit it charges 1 unit of token A; the exact amount owed, rounded up, is 31572840708638430117170542 units.",
        "kernel_checked_counterexample": "realworld/tasks/rw-cetus-shlw/witnesses/buggy_original.lean",
        "passport": {
          "path": "results/cetus-1/passports/original-port.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/passports/original-port.json",
          "sha256": "b79e965381258ef8a287983b492911da0c4dc7b7437bfc538c14ad196aadfad3",
          "status": "REFUTED",
          "requirements": {
            "REQ-SHLW-COMPLETE": "UNRESOLVED",
            "REQ-SHLW-EXACT": "REFUTED",
            "REQ-DELTA-A-FLOOR": "UNRESOLVED",
            "REQ-DELTA-A-TIGHT": "UNRESOLVED",
            "REQ-DELTA-A-COVERS": "REFUTED"
          },
          "kernels": 0,
          "property_cases": 2001,
          "executable": "REFUTED",
          "reproduce": "bin/proofforge verify results/cetus-1/passports/original-port.json --candidate realworld/tasks/rw-cetus-shlw/attacks/buggy_original.lean"
        }
      },
      "muse_repair": {
        "model": "Muse Spark 1.3",
        "tier": "Contributor",
        "planner": null,
        "arm": "A1",
        "attempt": 1,
        "change": "tests n * 2^64 < 2^256 directly",
        "verdict": "VERIFIED",
        "run": "results/cetus-1/repair-A1-1",
        "seconds": 428,
        "model_calls": 23,
        "usd_list_price": 0.1871,
        "usd_charged": 0.0111,
        "passport": {
          "path": "results/cetus-1/repair-A1-1/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/repair-A1-1/passport.json",
          "sha256": "9131dfdfd3e27da8145cd70972c65748a5447585ce2c625dee404b1506239852",
          "status": "VERIFIED",
          "requirements": {
            "REQ-SHLW-COMPLETE": "VERIFIED",
            "REQ-SHLW-EXACT": "VERIFIED",
            "REQ-DELTA-A-FLOOR": "VERIFIED",
            "REQ-DELTA-A-TIGHT": "VERIFIED",
            "REQ-DELTA-A-COVERS": "VERIFIED"
          },
          "kernels": 6,
          "property_cases": 2001,
          "executable": "PASS",
          "reproduce": "bin/proofforge verify results/cetus-1/repair-A1-1/passport.json --candidate results/cetus-1/repair-A1-1/final.lean"
        },
        "reproduced_by": "results/cetus-1/repair-A1-1/verify.txt"
      },
      "versions": [
        {
          "version": "Original code",
          "detail": "integer-mate at 4d09c8b, the last commit before the fixes",
          "commit": "4d09c8ba0527274983c6664a5d5def2e784d4692",
          "code": [
            "mask = 0xffffffffffffffff << 192",
            "n > mask"
          ],
          "verdict": "REFUTED",
          "finding": "The attack deposit is charged 1 unit of token A. The exact amount owed, rounded up, is 31572840708638430117170542 units, about 3.16 × 10^25.",
          "passport": {
            "path": "results/cetus-1/passports/original-port.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/passports/original-port.json",
            "sha256": "b79e965381258ef8a287983b492911da0c4dc7b7437bfc538c14ad196aadfad3",
            "status": "REFUTED",
            "requirements": {
              "REQ-SHLW-COMPLETE": "UNRESOLVED",
              "REQ-SHLW-EXACT": "REFUTED",
              "REQ-DELTA-A-FLOOR": "UNRESOLVED",
              "REQ-DELTA-A-TIGHT": "UNRESOLVED",
              "REQ-DELTA-A-COVERS": "REFUTED"
            },
            "kernels": 0,
            "property_cases": 2001,
            "executable": "REFUTED",
            "reproduce": "bin/proofforge verify results/cetus-1/passports/original-port.json --candidate realworld/tasks/rw-cetus-shlw/attacks/buggy_original.lean"
          }
        },
        {
          "version": "Same-day hotfix",
          "detail": "pull request 6, merged 14:37 UTC",
          "commit": "fc84a51c29fabfbfbdb8ed76506b61a07493d492",
          "merged": "2025-05-22T14:37:30Z",
          "code": [
            "mask = 1 << 192",
            "n > mask"
          ],
          "verdict": "REFUTED",
          "finding": "It refuses the attack deposit, but checkedShlw(2^192) = (0, false): 2^192 shifted left by 64 bits wraps to 0 and no overflow is reported. A deposit with liquidity × price difference = 2^192 is charged 0.",
          "passport": {
            "path": "results/cetus-1/passports/pr6-port.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/passports/pr6-port.json",
            "sha256": "d489c01595c307394d75579753303817724f7d586cffd2b7bb3b8cfe83f5e3e2",
            "status": "REFUTED",
            "requirements": {
              "REQ-SHLW-COMPLETE": "UNRESOLVED",
              "REQ-SHLW-EXACT": "REFUTED",
              "REQ-DELTA-A-FLOOR": "UNRESOLVED",
              "REQ-DELTA-A-TIGHT": "UNRESOLVED",
              "REQ-DELTA-A-COVERS": "UNRESOLVED"
            },
            "kernels": 0,
            "property_cases": 2001,
            "executable": "REFUTED",
            "reproduce": "bin/proofforge verify results/cetus-1/passports/pr6-port.json --candidate realworld/tasks/rw-cetus-shlw/attacks/pr6_mask_only.lean"
          }
        },
        {
          "version": "Final fix",
          "detail": "pull request 7, merged 16:09 UTC",
          "commit": "06660f704c4ac1d443ab62346a46b5b60d49df33",
          "merged": "2025-05-22T16:09:27Z",
          "code": [
            "mask = 1 << 192",
            "n >= mask"
          ],
          "verdict": "VERIFIED",
          "finding": "All five requirements proved for every 256-bit input and every u128 price and liquidity.",
          "passport": {
            "path": "results/cetus-1/passports/pr7-port.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/passports/pr7-port.json",
            "sha256": "37d236fb45a80f418f9cfd7b63296b25c6326bb4a8517b86f8b7e806cdfa5e48",
            "status": "VERIFIED",
            "requirements": {
              "REQ-SHLW-COMPLETE": "VERIFIED",
              "REQ-SHLW-EXACT": "VERIFIED",
              "REQ-DELTA-A-FLOOR": "VERIFIED",
              "REQ-DELTA-A-TIGHT": "VERIFIED",
              "REQ-DELTA-A-COVERS": "VERIFIED"
            },
            "kernels": 6,
            "property_cases": 2001,
            "executable": "PASS",
            "reproduce": "bin/proofforge verify results/cetus-1/passports/pr7-port.json --candidate realworld/tasks/rw-cetus-shlw/reference/SolutionA.lean"
          }
        },
        {
          "version": "Muse Spark repair",
          "detail": "from the original code, accepted on the first attempt",
          "commit": null,
          "code": [
            "n * 2^64 < 2^256"
          ],
          "verdict": "VERIFIED",
          "finding": "All five requirements proved. A separate theorem, muse_eq_pr7, proves it returns the same value and overflow flag as the final fix on every 256-bit input.",
          "passport": {
            "path": "results/cetus-1/repair-A1-1/passport.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/cetus-1/repair-A1-1/passport.json",
            "sha256": "9131dfdfd3e27da8145cd70972c65748a5447585ce2c625dee404b1506239852",
            "status": "VERIFIED",
            "requirements": {
              "REQ-SHLW-COMPLETE": "VERIFIED",
              "REQ-SHLW-EXACT": "VERIFIED",
              "REQ-DELTA-A-FLOOR": "VERIFIED",
              "REQ-DELTA-A-TIGHT": "VERIFIED",
              "REQ-DELTA-A-COVERS": "VERIFIED"
            },
            "kernels": 6,
            "property_cases": 2001,
            "executable": "PASS",
            "reproduce": "bin/proofforge verify results/cetus-1/repair-A1-1/passport.json --candidate results/cetus-1/repair-A1-1/final.lean"
          }
        }
      ],
      "muse_repair_equivalent_to_upstream_fix": {
        "file": "results/cetus-1/repair-A1-1/Equivalence.lean",
        "theorem": "theorem muse_eq_pr7 : ∀ n : BitVec 256, museShlw n = pr7Shlw n",
        "axioms": "propext, Quot.sound",
        "output": "results/cetus-1/repair-A1-1/Equivalence.out.txt"
      },
      "real_code": {
        "summary": "real Move code at 3 pinned commits, 2,007 inputs",
        "result": "658 break a requirement on the original, 0 on the final fix",
        "method": "The real checked_shlw and get_delta_a, unmodified at each pinned commit, ran with Sui CLI 1.83.0 (sui move test) on 2,007 inputs: 7 documented values and 2,000 generated by the task oracle.",
        "unit": "inputs",
        "total": 2007,
        "results": [
          {
            "code": "Original",
            "commit": "4d09c8ba0527274983c6664a5d5def2e784d4692",
            "inputs_violating_a_requirement": 658,
            "inputs_equal_to_lean_port": 2007,
            "inputs_equal_to_proved_repair": 1317,
            "note": "the attack deposit returns 1"
          },
          {
            "code": "Pull request 6",
            "commit": "fc84a51c29fabfbfbdb8ed76506b61a07493d492",
            "inputs_violating_a_requirement": 33,
            "inputs_equal_to_lean_port": 2007,
            "inputs_equal_to_proved_repair": 1974,
            "note": "32 of them at n = 2^192"
          },
          {
            "code": "Pull request 7",
            "commit": "06660f704c4ac1d443ab62346a46b5b60d49df33",
            "inputs_violating_a_requirement": 0,
            "inputs_equal_to_lean_port": 2007,
            "inputs_equal_to_proved_repair": 2007,
            "note": "identical to the Muse repair on every input"
          }
        ],
        "report": "results/cetus-1/real-code/report.json",
        "witnesses_checked_in_lean": {
          "goals": 9,
          "checked": 9
        }
      },
      "not_proved": [
        "The Move code is run on 2,007 inputs and compared with the Lean ports and the proved component; it is not itself proved.",
        "get_delta_b, the tick math and the rest of the pool (positions, swaps, fees) are not specified."
      ]
    },
    {
      "key": "balancer",
      "incident": "Balancer V2",
      "date": "2025-11-03",
      "system": "Composable Stable Pools of Balancer V2 and its forks",
      "domain": "AMM swap rounding",
      "language": "Solidity",
      "loss": {
        "amount": "more than $120 million",
        "basis": "across Balancer and its forks, as OpenZeppelin reports; The Block reports estimates of over $128 million",
        "sources": [
          {
            "label": "OpenZeppelin",
            "url": "https://www.openzeppelin.com/news/understanding-the-balancer-v2-exploit"
          },
          {
            "label": "The Block",
            "url": "https://www.theblock.co/post/377863/balancer-identifies-rounding-error-as-root-cause-of-multi-chain-defi-exploit"
          },
          {
            "label": "Certora",
            "url": "https://www.certora.com/blog/breaking-down-the-balancer-hack"
          }
        ],
        "quoted_from": "realworld/tasks/rw-balancer-upscale/README.md"
      },
      "bug": "A swap for an exact amount out rounded that amount down before pricing it, so 17 wei of osETH, worth 17.988 of the pool's units, was priced as 17.",
      "context": "Certora writes that its 2022 verified properties of these pools “did not constrain the relationship between individual swaps or rounding behavior”. The locked requirements here are about exactly that.",
      "property_proved": {
        "text": "For any pool math meeting the stated contract, no batch of swaps of any length lowers the pool's value.",
        "requirement": "REQ-BATCH-KEEPS-VALUE"
      },
      "task": "realworld/tasks/rw-balancer-upscale",
      "readme": "realworld/tasks/rw-balancer-upscale/README.md",
      "vulnerable_code": {
        "label": "Deployed swap path of the osETH/WETH pool",
        "verdict": "REFUTED",
        "finding": "Four rounds of the attack's three swaps lower the pool's value from 4,749,898,000 to 297,229,191.",
        "kernel_checked_counterexample": "realworld/tasks/rw-balancer-upscale/witnesses/attack_batch.lean",
        "passport": {
          "path": "results/balancer-1/passports/port.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/balancer-1/passports/port.json",
          "sha256": "d65bd405a13bfd4feaef838e4cc60dea2560bc47ff78cad8dfda591aaf26cb71",
          "status": "REFUTED",
          "requirements": {
            "REQ-GIVEN-IN-SUCCEEDS": "UNRESOLVED",
            "REQ-GIVEN-OUT-SUCCEEDS": "UNRESOLVED",
            "REQ-GIVEN-IN-PAYS-AT-MOST": "UNRESOLVED",
            "REQ-GIVEN-IN-PAYS-AT-LEAST": "UNRESOLVED",
            "REQ-GIVEN-OUT-CHARGES-AT-LEAST": "REFUTED",
            "REQ-GIVEN-OUT-CHARGES-AT-MOST": "UNRESOLVED",
            "REQ-SWAP-KEEPS-VALUE": "REFUTED",
            "REQ-BATCH-KEEPS-VALUE": "REFUTED"
          },
          "kernels": 0,
          "property_cases": 2001,
          "executable": "REFUTED",
          "reproduce": "bin/proofforge verify results/balancer-1/passports/port.json --candidate realworld/tasks/rw-balancer-upscale/attacks/balancer_port.lean"
        }
      },
      "muse_repair": {
        "model": "Muse Spark 1.3",
        "tier": "Contributor",
        "planner": "Muse Wonder 1.0",
        "arm": "A2",
        "attempt": 1,
        "change": "rounds the amount out up before pricing it and refuses the swap unless that amount is below the pool's balance",
        "verdict": "VERIFIED",
        "run": "results/balancer-1/repair-A2-1",
        "seconds": 2344,
        "model_calls": 151,
        "usd_list_price": 2.5115,
        "usd_charged": 0.4087,
        "passport": {
          "path": "results/balancer-1/repair-A2-1/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/balancer-1/repair-A2-1/passport.json",
          "sha256": "48930efdd4d67460bfd22bb15dfa9625caafc36cd6fca3a8fee444d5f3b204ba",
          "status": "VERIFIED",
          "requirements": {
            "REQ-GIVEN-IN-SUCCEEDS": "VERIFIED",
            "REQ-GIVEN-OUT-SUCCEEDS": "VERIFIED",
            "REQ-GIVEN-IN-PAYS-AT-MOST": "VERIFIED",
            "REQ-GIVEN-IN-PAYS-AT-LEAST": "VERIFIED",
            "REQ-GIVEN-OUT-CHARGES-AT-LEAST": "VERIFIED",
            "REQ-GIVEN-OUT-CHARGES-AT-MOST": "VERIFIED",
            "REQ-SWAP-KEEPS-VALUE": "VERIFIED",
            "REQ-BATCH-KEEPS-VALUE": "VERIFIED"
          },
          "kernels": 6,
          "property_cases": 2001,
          "executable": "PASS",
          "reproduce": "bin/proofforge verify results/balancer-1/repair-A2-1/passport.json --candidate results/balancer-1/repair-A2-1/final.lean"
        },
        "reproduced_by": "results/balancer-1/repair-A2-1/verify.txt"
      },
      "attack": [
        {
          "step": 1,
          "text": "The attacker sells BPT for the pool's tokens, 22 swaps in one batch. BPT swaps, joins and exits are not modeled.",
          "after": "67,000 wei of WETH and 67,000 of osETH"
        },
        {
          "step": 2,
          "text": "It takes osETH out until 18 wei are left."
        },
        {
          "step": 3,
          "text": "It takes 17 wei of osETH out. At the cached osETH rate that is 17.988 of the pool's units; the pool rounds it down and prices 17."
        },
        {
          "step": 4,
          "text": "It takes WETH out, paid with osETH, and repeats the three swaps, 30 rounds in all.",
          "after": "889 wei of WETH and 1,472 of osETH"
        },
        {
          "step": 5,
          "text": "It buys BPT back at the collapsed price. This step is not modeled; the specification states the property it relied on."
        }
      ],
      "kernel_checked_outcome": "The kernel checks that four rounds of these swaps lower the pool's value from 4,749,898,000 to 297,229,191, and that the port, run with a port of StableMath, charges exactly the logged amount of all 90 swaps of the attack.",
      "real_code": {
        "summary": "deployed Vault and pool on an Ethereum fork, 501 batches",
        "result": "identical to the Lean port on all 501; the pool's value falls in 56, never with the Muse repair",
        "method": "On a fork of Ethereum taken just before the attack transaction, the attack's first 22 swaps brought the deployed pool to 67,000 wei of each token, as on chain. Then 501 batches (the attack's 90 swaps and 500 generated, 10,385 swaps in all) ran through the deployed Vault, the Lean port and the Muse repair.",
        "unit": "batches",
        "total": 501,
        "results": [
          {
            "code": "Deployed Vault and osETH/WETH pool",
            "commit": null,
            "batches_violating_a_requirement": 56,
            "batches_equal_to_lean_port": 501,
            "batches_equal_to_proved_repair": 194,
            "note": "the pool's invariant falls in 56 batches, and its BPT price with it"
          },
          {
            "code": "Muse repair",
            "commit": null,
            "batches_violating_a_requirement": 0,
            "batches_equal_to_lean_port": null,
            "batches_equal_to_proved_repair": null,
            "note": "the proved component on the same 501 batches"
          }
        ],
        "report": "results/balancer-1/real-code/report.json",
        "witnesses_checked_in_lean": {
          "goals": 6,
          "checked": 6
        }
      },
      "not_proved": [
        "The requirements hold for any pool math meeting a stated contract; a constant-product pool is proved to meet it, StableMath is not, so results with StableMath are tested.",
        "BPT swaps, joins and exits are not modeled. The deployed contracts are run on 501 batches on a fork; they are not themselves proved."
      ]
    },
    {
      "key": "euler",
      "incident": "Euler Finance",
      "date": "2023-03-13",
      "system": "Euler Finance v1 lending market",
      "domain": "lending solvency",
      "language": "Solidity",
      "loss": {
        "amount": "about $197 million",
        "basis": "in net profit to the attacker, as Cyfrin reports; CoinDesk later reported that all recoverable funds were returned",
        "sources": [
          {
            "label": "Cyfrin",
            "url": "https://www.cyfrin.io/blog/how-did-the-euler-finance-hack-happen-hack-analysis"
          },
          {
            "label": "Zellic",
            "url": "https://www.zellic.io/blog/euler-finance-exploit-analysis"
          },
          {
            "label": "CoinDesk",
            "url": "https://www.coindesk.com/business/2023/04/03/euler-says-all-recoverable-funds-stolen-in-200m-hack-have-been-returned"
          }
        ],
        "quoted_from": "realworld/tasks/rw-euler-donate/README.md"
      },
      "bug": "donateToReserves moved an account's collateral to the reserves without the liquidity check that withdraw, mint and transfer perform.",
      "property_proved": {
        "text": "No sequence of operations leaves any account with more debt than its risk-adjusted collateral.",
        "requirement": "REQ-NO-BAD-DEBT"
      },
      "task": "realworld/tasks/rw-euler-donate",
      "readme": "realworld/tasks/rw-euler-donate/README.md",
      "vulnerable_code": {
        "label": "Euler v1 at b1ee326",
        "verdict": "REFUTED",
        "finding": "The attack sequence leaves 134,000,000 of debt with no collateral behind it.",
        "kernel_checked_counterexample": "realworld/tasks/rw-euler-donate/witnesses/buggy_original.lean",
        "passport": {
          "path": "results/euler-1/rw-euler-donate/passports/port.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/euler-1/rw-euler-donate/passports/port.json",
          "sha256": "cec7d847f1d0b6a6f9cdb0e46fd149430807f86e14ce746054484ccee3a3a050",
          "status": "REFUTED",
          "requirements": {
            "REQ-HONEST-FLOW": "UNRESOLVED",
            "REQ-ALLOWED-SUCCEEDS": "UNRESOLVED",
            "REQ-EFFECTS": "UNRESOLVED",
            "REQ-ACTOR-HEALTHY": "REFUTED",
            "REQ-STAYS-HEALTHY": "REFUTED",
            "REQ-NO-BAD-DEBT": "REFUTED"
          },
          "kernels": 0,
          "property_cases": 2001,
          "executable": "REFUTED",
          "reproduce": "bin/proofforge verify results/euler-1/rw-euler-donate/passports/port.json --candidate realworld/tasks/rw-euler-donate/candidate/Solution.lean"
        }
      },
      "muse_repair": {
        "model": "Muse Spark 1.3",
        "tier": "Contributor",
        "planner": null,
        "arm": "A1",
        "attempt": 1,
        "change": "adds the health check to the donation guard",
        "verdict": "VERIFIED",
        "run": "results/euler-1/rw-euler-donate/repair-A1-1",
        "seconds": 1682,
        "model_calls": 40,
        "usd_list_price": 0.8324,
        "usd_charged": 0.0489,
        "passport": {
          "path": "results/euler-1/rw-euler-donate/repair-A1-1/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/euler-1/rw-euler-donate/repair-A1-1/passport.json",
          "sha256": "6de7bb94c38cf23a31ba08174d7505b4b8d54dddc9ffbd6d177dde4981b82002",
          "status": "VERIFIED",
          "requirements": {
            "REQ-HONEST-FLOW": "VERIFIED",
            "REQ-ALLOWED-SUCCEEDS": "VERIFIED",
            "REQ-EFFECTS": "VERIFIED",
            "REQ-ACTOR-HEALTHY": "VERIFIED",
            "REQ-STAYS-HEALTHY": "VERIFIED",
            "REQ-NO-BAD-DEBT": "VERIFIED"
          },
          "kernels": 6,
          "property_cases": 2001,
          "executable": "PASS",
          "reproduce": "bin/proofforge verify results/euler-1/rw-euler-donate/repair-A1-1/passport.json --candidate results/euler-1/rw-euler-donate/repair-A1-1/final.lean"
        },
        "reproduced_by": "results/euler-1/rw-euler-donate/repair-A1-1/verify.txt"
      },
      "attack": [
        {
          "step": 1,
          "text": "A lender deposits 8,904,507."
        },
        {
          "step": 2,
          "text": "The violator deposits 20,000,000, then mints 200,000,000, repays 10,000,000 and mints 200,000,000.",
          "after": "collateral 420,000,000, debt 390,000,000: healthy"
        },
        {
          "step": 3,
          "text": "The violator donates 100,000,000 eTokens to the reserves. No liquidity check runs.",
          "after": "collateral 320,000,000, debt 390,000,000: unhealthy"
        },
        {
          "step": 4,
          "text": "A second attacker account liquidates 256,000,000 of the debt at the 20% maximum discount.",
          "after": "violator: collateral 0, debt 134,000,000"
        },
        {
          "step": 5,
          "text": "The liquidator withdraws the whole pool, 38,904,507: the lender's entire deposit."
        }
      ],
      "kernel_checked_outcome": "The kernel checks every state above and that NoBadDebt, StaysHealthy and ActorHealthy are false for the port: 134,000,000 of debt is left with no collateral behind it.",
      "real_code": {
        "summary": "real Solidity contracts at the pinned commit, 1,004 sequences",
        "result": "57 break a requirement unmodified, 0 with the missing check added",
        "method": "The unmodified contracts at b1ee326 were deployed in a local Foundry test and run on the attack, Euler's three donate test scenarios and 1,000 generated sequences, then compared after every operation with the requirements, with Euler's own liquidity computation and with the Muse repair.",
        "unit": "sequences",
        "total": 1004,
        "results": [
          {
            "code": "Euler v1 at b1ee326, unmodified",
            "commit": "b1ee3265853628d5a529081d7908c38404201b4e",
            "sequences_violating_a_requirement": 57,
            "sequences_equal_to_lean_port": null,
            "sequences_equal_to_proved_repair": 947,
            "note": "Euler's own liquidity check also reports collateral below liability in 57"
          },
          {
            "code": "The same with checkLiquidity(account) added",
            "commit": null,
            "sequences_violating_a_requirement": 0,
            "sequences_equal_to_lean_port": null,
            "sequences_equal_to_proved_repair": 1004,
            "note": "a local copy, not an upstream release"
          }
        ],
        "report": "results/euler-1/rw-euler-donate/real-code/report.json",
        "witnesses_checked_in_lean": {
          "goals": 2,
          "checked": 2
        }
      },
      "not_proved": [
        "One asset priced at 1, an eToken exchange rate fixed at 1 and no interest; flash loans, sub-accounts and multiple collateral assets are not modeled.",
        "The contracts are run on 1,004 sequences and compared with the requirements and the proved component; they are not themselves proved."
      ]
    },
    {
      "key": "knight",
      "incident": "Knight Capital",
      "date": "2012-08-01",
      "system": "SMARS, Knight Capital's equity order router",
      "domain": "equity order routing",
      "language": null,
      "reconstructed": "Knight Capital is reconstructed from the SEC's findings (Release No. 34-70694) because Knight's code is not public; nothing in the task is Knight's code, and every Knight Passport says so.",
      "loss": {
        "amount": "$460 million",
        "basis": "realized loss, as the SEC order states",
        "sources": [
          {
            "label": "SEC order 34-70694",
            "url": "https://www.sec.gov/files/litigation/admin/2013/34-70694.pdf"
          },
          {
            "label": "archived copy",
            "url": "https://web.archive.org/web/20201212052325/https://www.sec.gov/litigation/admin/2013/34-70694.pdf"
          }
        ],
        "quoted_from": "realworld/tasks/rc-knight-router/README.md"
      },
      "bug": "New code was not copied to one of eight servers. There, orders carrying a repurposed flag ran dead Power Peg code, which kept sending child orders without counting the executions.",
      "context": "The SEC order reports millions of child orders for 212 parent orders: 4 million executions in 154 stocks, more than 397 million shares, in about 45 minutes.",
      "property_proved": {
        "text": "On every server and code version, after any sequence of events, the shares sent for an order never exceed its quantity.",
        "requirement": "REQ-NEVER-OVERROUTE"
      },
      "task": "realworld/tasks/rc-knight-router",
      "readme": "realworld/tasks/rc-knight-router/README.md",
      "vulnerable_code": {
        "label": "Reconstructed Power Peg router",
        "verdict": "REFUTED",
        "finding": "For every n, n rounds of a 100-share routing opportunity and a fill send n child orders and 100 × n shares for one 100-share order.",
        "kernel_checked_counterexample": "realworld/tasks/rc-knight-router/witnesses/buggy_original.lean",
        "passport": {
          "path": "results/knight-1/start/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/knight-1/start/passport.json",
          "sha256": "ca3e7312fe7af22f53f52fbd08f53dfc85bde86ebe49a96e0e9751e4f365a6b8",
          "status": "REFUTED",
          "requirements": {
            "REQ-NORMAL-ORDER-ROUTED": "REFUTED",
            "REQ-ROUTES-AVAILABLE": "REFUTED",
            "REQ-NEVER-OVERROUTE": "REFUTED",
            "REQ-STOP-WHEN-FILLED": "REFUTED",
            "REQ-NO-EXCESS-EXECUTION": "REFUTED",
            "REQ-FILL-ACCOUNTING": "REFUTED"
          },
          "kernels": 0,
          "property_cases": 2001,
          "executable": "REFUTED",
          "reproduce": "bin/proofforge verify results/knight-1/start/passport.json --candidate realworld/tasks/rc-knight-router/candidate/Solution.lean"
        }
      },
      "muse_repair": {
        "model": "Muse Spark 1.3",
        "tier": "Contributor",
        "planner": "Muse Wonder 1.0",
        "arm": "A2",
        "attempt": 2,
        "change": "removes the Power Peg path, so every build routes by the shares not yet sent and every fill advances the executed count",
        "verdict": "VERIFIED",
        "run": "results/knight-1/A2-2",
        "seconds": 4079,
        "model_calls": 256,
        "usd_list_price": 4.96,
        "usd_charged": 0.9788,
        "passport": {
          "path": "results/knight-1/A2-2/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/knight-1/A2-2/passport.json",
          "sha256": "98cfed64ae1ec596e517299b422a5fb0beac571cdce89c18ea2e5660845bc178",
          "status": "VERIFIED",
          "requirements": {
            "REQ-NORMAL-ORDER-ROUTED": "VERIFIED",
            "REQ-ROUTES-AVAILABLE": "VERIFIED",
            "REQ-NEVER-OVERROUTE": "VERIFIED",
            "REQ-STOP-WHEN-FILLED": "VERIFIED",
            "REQ-NO-EXCESS-EXECUTION": "VERIFIED",
            "REQ-FILL-ACCOUNTING": "VERIFIED"
          },
          "kernels": 6,
          "property_cases": 2001,
          "executable": "PASS",
          "reproduce": "bin/proofforge verify results/knight-1/A2-2/passport.json --candidate results/knight-1/A2-2/final.lean"
        },
        "reproduced_by": "results/knight-1/A2-2/verify.log"
      },
      "unresolved_attempts": [
        {
          "attempt": "A1, attempt 1",
          "run": "results/knight-1/A1-1",
          "required_theorems_proved": 1,
          "stopped_by": "wall-clock cap",
          "passport": {
            "path": "results/knight-1/A1-1/passport.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/knight-1/A1-1/passport.json",
            "sha256": "4fddc1683956e92f1f0a7e97eb48bdc238e233b55b9e430dda47062bfaac5e74",
            "status": "UNRESOLVED",
            "requirements": {
              "REQ-NORMAL-ORDER-ROUTED": "UNRESOLVED",
              "REQ-ROUTES-AVAILABLE": "UNRESOLVED",
              "REQ-NEVER-OVERROUTE": "UNRESOLVED",
              "REQ-STOP-WHEN-FILLED": "UNRESOLVED",
              "REQ-NO-EXCESS-EXECUTION": "UNRESOLVED",
              "REQ-FILL-ACCOUNTING": "UNRESOLVED"
            },
            "kernels": 0,
            "property_cases": 2001,
            "executable": "PASS",
            "reproduce": "bin/proofforge verify results/knight-1/A1-1/passport.json --candidate results/knight-1/A1-1/final.lean"
          }
        },
        {
          "attempt": "A1, attempt 2",
          "run": "results/knight-1/A1-2",
          "required_theorems_proved": 1,
          "stopped_by": "dollar cap",
          "passport": {
            "path": "results/knight-1/A1-2/passport.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/knight-1/A1-2/passport.json",
            "sha256": "27f4c83221ed220ea8e52e955a82a45bd73f9d8eed2d0136081096a4b09afb6c",
            "status": "UNRESOLVED",
            "requirements": {
              "REQ-NORMAL-ORDER-ROUTED": "UNRESOLVED",
              "REQ-ROUTES-AVAILABLE": "UNRESOLVED",
              "REQ-NEVER-OVERROUTE": "UNRESOLVED",
              "REQ-STOP-WHEN-FILLED": "UNRESOLVED",
              "REQ-NO-EXCESS-EXECUTION": "UNRESOLVED",
              "REQ-FILL-ACCOUNTING": "UNRESOLVED"
            },
            "kernels": 0,
            "property_cases": 2001,
            "executable": "PASS",
            "reproduce": "bin/proofforge verify results/knight-1/A1-2/passport.json --candidate results/knight-1/A1-2/final.lean"
          }
        },
        {
          "attempt": "A2, attempt 1",
          "run": "results/knight-1/A2-1",
          "required_theorems_proved": 5,
          "stopped_by": "dollar cap",
          "passport": {
            "path": "results/knight-1/A2-1/passport.json",
            "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/knight-1/A2-1/passport.json",
            "sha256": "edc4ec8cd40a2db0fb8b77a2c959e5d9e4cb236403e5ce4e3cb2778bd5279c9b",
            "status": "UNRESOLVED",
            "requirements": {
              "REQ-NORMAL-ORDER-ROUTED": "UNRESOLVED",
              "REQ-ROUTES-AVAILABLE": "UNRESOLVED",
              "REQ-NEVER-OVERROUTE": "UNRESOLVED",
              "REQ-STOP-WHEN-FILLED": "UNRESOLVED",
              "REQ-NO-EXCESS-EXECUTION": "UNRESOLVED",
              "REQ-FILL-ACCOUNTING": "UNRESOLVED"
            },
            "kernels": 0,
            "property_cases": 2001,
            "executable": "PASS",
            "reproduce": "bin/proofforge verify results/knight-1/A2-1/passport.json --candidate results/knight-1/A2-1/final.lean"
          }
        }
      ],
      "attack": [
        {
          "step": 1,
          "text": "Seven of eight servers run the new code; the eighth still runs the old code (paragraph 15)."
        },
        {
          "step": 2,
          "text": "A parent order for 100 shares arrives with the repurposed flag, which on the eighth server activates Power Peg (paragraphs 13 and 16)."
        },
        {
          "step": 3,
          "text": "A routing opportunity for 100 shares arrives. The router sends a 100-share child order, and it is filled.",
          "after": "100 of 100 shares executed"
        },
        {
          "step": 4,
          "text": "Power Peg's count never sees the fill, so the next opportunity sends another 100 shares, and so on for every opportunity.",
          "after": "after n rounds: n child orders, 100 × n shares executed"
        }
      ],
      "kernel_checked_outcome": "The kernel proves by induction that the reconstructed router sends n child orders for one 100-share order, for every n, while the new code sends exactly one on the same events. It also refutes the obvious patch: counting fills again still sends 200 shares for a 100-share order when two opportunities arrive before a fill.",
      "real_code": "none: the code is not public",
      "not_proved": [
        "The mechanism by which fills stopped reaching Power Peg's count is one interpretation of paragraphs 14 and 16 of the order; other mechanisms with the same outcome are possible.",
        "Prices, venues, order types, timing and cancellations are not modeled. The executable wrapper is tested, not proved."
      ]
    },
    {
      "key": "hundred",
      "incident": "Hundred Finance",
      "date": "2023-04-15",
      "system": "hWBTC market of Hundred Finance, a Compound v2 fork on Optimism",
      "domain": "vault share accounting",
      "language": "Solidity",
      "loss": {
        "amount": "about $7 million",
        "basis": "in reported losses (rekt.news gives $7.4M; this figure was not checked here)",
        "sources": [
          {
            "label": "rekt.news",
            "url": "https://rekt.news/hundred-rekt2"
          },
          {
            "label": "BlockSec",
            "url": "https://blocksec.com/blog/6-hundred-finance-incident-catalyzing-the-wave-of-precision-related-exploits-in-vulnerable-forked-protocols"
          }
        ],
        "quoted_from": "realworld/tasks/rw-hundred-vault/README.md"
      },
      "bug": "redeemUnderlying rounded the shares burned down, so a withdrawal worth 1.99999999992 share units burned 1.",
      "property_proved": {
        "text": "No sequence of operations, donations included, lowers the value of a share while shares are outstanding.",
        "requirement": "REQ-SHARE-VALUE"
      },
      "task": "realworld/tasks/rw-hundred-vault",
      "readme": "realworld/tasks/rw-hundred-vault/README.md",
      "vulnerable_code": {
        "label": "Hundred hToken share accounting",
        "verdict": "REFUTED",
        "finding": "After the attack's own amounts, the last share unit is backed by 2 satoshi.",
        "kernel_checked_counterexample": "realworld/tasks/rw-hundred-vault/witnesses/hundred_attack.lean",
        "passport": null
      },
      "muse_repair": {
        "model": "Muse Spark 1.3",
        "tier": "Contributor",
        "planner": null,
        "arm": "A1",
        "attempt": 1,
        "change": "prices shares from the exact ratio of assets to supply and rounds the shares burned up",
        "verdict": "VERIFIED",
        "run": "results/vault-1/repair-A1-1",
        "seconds": 1200,
        "model_calls": 67,
        "usd_list_price": 0.6513,
        "usd_charged": 0.037,
        "passport": {
          "path": "results/vault-1/repair-A1-1/passport.json",
          "url": "https://github.com/davidwilliam/proof_forge/blob/main/results/vault-1/repair-A1-1/passport.json",
          "sha256": "08fe86f17f27c49d60bda786d1498200d333c1c8d63d2f858ab668cd4f7fe7c4",
          "status": "VERIFIED",
          "requirements": {
            "REQ-DEPOSIT-SUCCEEDS": "VERIFIED",
            "REQ-REDEEM-SUCCEEDS": "VERIFIED",
            "REQ-WITHDRAW-SUCCEEDS": "VERIFIED",
            "REQ-DEPOSIT-EFFECTS": "VERIFIED",
            "REQ-REDEEM-EFFECTS": "VERIFIED",
            "REQ-WITHDRAW-EFFECTS": "VERIFIED",
            "REQ-DEPOSIT-ROUNDS-DOWN": "VERIFIED",
            "REQ-REDEEM-ROUNDS-DOWN": "VERIFIED",
            "REQ-WITHDRAW-ROUNDS-UP": "VERIFIED",
            "REQ-SHARE-VALUE": "VERIFIED"
          },
          "kernels": 6,
          "property_cases": 2001,
          "executable": "PASS",
          "reproduce": "bin/proofforge verify results/vault-1/repair-A1-1/passport.json --candidate results/vault-1/repair-A1-1/final.lean"
        },
        "reproduced_by": "results/vault-1/repair-A1-1/verify.txt"
      },
      "attack": [
        {
          "step": 1,
          "text": "The market is emptied: no shares outstanding, 1 satoshi of cash."
        },
        {
          "step": 2,
          "text": "The attacker deposits 400,000,000 satoshi (4 WBTC).",
          "after": "20,000,000,000 share units"
        },
        {
          "step": 3,
          "text": "It redeems 19,999,999,998 share units.",
          "after": "2 share units backed by 1 satoshi"
        },
        {
          "step": 4,
          "text": "It sends 50,030,063,816 satoshi straight to the market, so each unit is worth about 250 WBTC, and borrows ETH against its 2 units. Borrowing is not modeled.",
          "after": "2 share units backed by 50,030,063,817 satoshi"
        },
        {
          "step": 5,
          "text": "It withdraws 50,030,063,815 satoshi, worth 1.99999999992 share units. The contract burns 1.",
          "after": "1 share unit backed by 2 satoshi"
        }
      ],
      "kernel_checked_outcome": "The kernel checks that the port breaks REQ-SHARE-VALUE (a share falls from 50,030,063,817 / 2 satoshi to 2) and REQ-WITHDRAW-ROUNDS-UP. The Muse repair burns both share units.",
      "real_code": {
        "summary": "deployed bytecode on an Optimism fork, 501 sequences",
        "result": "matches the Lean port on all 501; 292 break a requirement",
        "method": "On a fork of Optimism at block 90761917, the hWBTC market was emptied as in the attack, and 501 sequences (the attack and 500 generated) ran on the deployed CErc20Delegate bytecode, on the Lean port and on the Muse repair.",
        "unit": "sequences",
        "total": 501,
        "results": [
          {
            "code": "Deployed hWBTC contract",
            "commit": null,
            "sequences_violating_a_requirement": 292,
            "sequences_equal_to_lean_port": 501,
            "sequences_equal_to_proved_repair": 209,
            "note": "identical to the Lean port after every operation of all 501"
          },
          {
            "code": "Muse repair",
            "commit": null,
            "sequences_violating_a_requirement": 0,
            "sequences_equal_to_lean_port": null,
            "sequences_equal_to_proved_repair": null,
            "note": "the proved component, on the same 501 sequences"
          }
        ],
        "report": "results/vault-1/real-code/report.json",
        "witnesses_checked_in_lean": {
          "goals": 5,
          "checked": 5
        }
      },
      "not_proved": [
        "Only share accounting is modeled; the comptroller, borrowing, liquidation, interest and reserves are not. The specification states the share-value property the borrow relied on.",
        "The deployed contract is run on 501 sequences on a fork and compared with the port and the requirements; it is not itself proved."
      ]
    }
  ],
  "implements": {
    "label": "test tasks implemented from the specification alone",
    "value": 30,
    "of": 30,
    "detail": "9 base specifications in ledgers, permissions and queues; the variants differ only in code implement mode never sees",
    "source": "results/implement-1/implement.json"
  },
  "implemented_flagships": [
    {
      "flagship": "cetus",
      "mode": "implement: Muse starts from the locked challenge with placeholder definitions and unproved theorems; no vulnerable code, issue report or reference",
      "status": "VERIFIED",
      "passport": {
        "sha256": "b2cf6c2de4f91b8ea0f1505463e5301f28783d87a103c0a3e7d1d3f791a7dd7a",
        "path": "results/implement-flagships-1/rw-cetus-shlw/passport.json",
        "requirements": {
          "REQ-SHLW-COMPLETE": "VERIFIED",
          "REQ-SHLW-EXACT": "VERIFIED",
          "REQ-DELTA-A-FLOOR": "VERIFIED",
          "REQ-DELTA-A-TIGHT": "VERIFIED",
          "REQ-DELTA-A-COVERS": "VERIFIED"
        },
        "reproduce": "bin/proofforge verify results/implement-flagships-1/rw-cetus-shlw/passport.json --candidate results/implement-flagships-1/rw-cetus-shlw/final.lean"
      }
    },
    {
      "flagship": "euler",
      "mode": "implement: Muse starts from the locked challenge with placeholder definitions and unproved theorems; no vulnerable code, issue report or reference",
      "status": "VERIFIED",
      "passport": {
        "sha256": "27d4ec2838e9bbfc938278e29e8eac89570d1f14a9468de15b03514cbdd4286e",
        "path": "results/implement-flagships-1/rw-euler-donate/passport.json",
        "requirements": {
          "REQ-HONEST-FLOW": "VERIFIED",
          "REQ-ALLOWED-SUCCEEDS": "VERIFIED",
          "REQ-EFFECTS": "VERIFIED",
          "REQ-ACTOR-HEALTHY": "VERIFIED",
          "REQ-STAYS-HEALTHY": "VERIFIED",
          "REQ-NO-BAD-DEBT": "VERIFIED"
        },
        "reproduce": "bin/proofforge verify results/implement-flagships-1/rw-euler-donate/passport.json --candidate results/implement-flagships-1/rw-euler-donate/final.lean"
      }
    },
    {
      "flagship": "hundred",
      "mode": "implement: Muse starts from the locked challenge with placeholder definitions and unproved theorems; no vulnerable code, issue report or reference",
      "status": "VERIFIED",
      "passport": {
        "sha256": "eee7e2cdbedf658d81afc95f07966d5d37a9e6f7a27cabbccd6dd0dc5ba6e3c6",
        "path": "results/implement-flagships-1/rw-hundred-vault/passport.json",
        "requirements": {
          "REQ-DEPOSIT-SUCCEEDS": "VERIFIED",
          "REQ-REDEEM-SUCCEEDS": "VERIFIED",
          "REQ-WITHDRAW-SUCCEEDS": "VERIFIED",
          "REQ-DEPOSIT-EFFECTS": "VERIFIED",
          "REQ-REDEEM-EFFECTS": "VERIFIED",
          "REQ-WITHDRAW-EFFECTS": "VERIFIED",
          "REQ-DEPOSIT-ROUNDS-DOWN": "VERIFIED",
          "REQ-REDEEM-ROUNDS-DOWN": "VERIFIED",
          "REQ-WITHDRAW-ROUNDS-UP": "VERIFIED",
          "REQ-SHARE-VALUE": "VERIFIED"
        },
        "reproduce": "bin/proofforge verify results/implement-flagships-1/rw-hundred-vault/passport.json --candidate results/implement-flagships-1/rw-hundred-vault/final.lean"
      }
    },
    {
      "flagship": "balancer",
      "mode": "implement: Muse starts from the locked challenge with placeholder definitions and unproved theorems; no vulnerable code, issue report or reference",
      "status": "VERIFIED",
      "passport": {
        "sha256": "65d5a81fef2352eb67a72f032ade091fd051b30ebf44c310b1d0c6dcb1b84d3d",
        "path": "results/balancer-1/implement-2/passport.json",
        "requirements": {
          "REQ-GIVEN-IN-SUCCEEDS": "VERIFIED",
          "REQ-GIVEN-OUT-SUCCEEDS": "VERIFIED",
          "REQ-GIVEN-IN-PAYS-AT-MOST": "VERIFIED",
          "REQ-GIVEN-IN-PAYS-AT-LEAST": "VERIFIED",
          "REQ-GIVEN-OUT-CHARGES-AT-LEAST": "VERIFIED",
          "REQ-GIVEN-OUT-CHARGES-AT-MOST": "VERIFIED",
          "REQ-SWAP-KEEPS-VALUE": "VERIFIED",
          "REQ-BATCH-KEEPS-VALUE": "VERIFIED"
        },
        "reproduce": "bin/proofforge verify results/balancer-1/implement-2/passport.json --candidate results/balancer-1/implement-2/final.lean"
      }
    }
  ],
  "benchmark": {
    "tasks": 59,
    "splits": {
      "dev": 23,
      "val": 6,
      "test": 30
    },
    "families": [
      {
        "family": "Payouts",
        "tasks": 9
      },
      {
        "family": "Ledgers",
        "tasks": 10
      },
      {
        "family": "Transfer batches",
        "tasks": 10
      },
      {
        "family": "Permissions",
        "tasks": 10
      },
      {
        "family": "Rate limiters",
        "tasks": 10
      },
      {
        "family": "Queues",
        "tasks": 10
      }
    ],
    "e1": {
      "source": "results/e1-test-1/e1.json",
      "test_tasks": 30,
      "property_cases_per_repair": 2000,
      "completed": {
        "A0 Compile-and-retry": 28,
        "A1 ProofForge harness": 30,
        "A2 Harness and planner": 30
      },
      "mcnemar_p_vs_A0": 0.5,
      "batch_usd_list_price": 70.09
    },
    "e2": {
      "source": "results/e2-all-1/e2.json",
      "seeded_bad_cases": 247,
      "good_cases": 239,
      "accepted_bad": {
        "Ordinary checking": 233,
        "Rebuild and property tests only": 1,
        "ProofForge": 0
      },
      "rejected_good": {
        "Ordinary checking": 0,
        "Rebuild and property tests only": 0,
        "ProofForge": 0
      }
    }
  },
  "not_claimed": [
    "The deployed Solidity and Move code is not itself proved. Each incident's Lean 4 port is a reviewed hand translation, tested against the real code on the stated inputs; the translation is not machine-checked.",
    "A requirement covers exactly what its Lean statement says. Each port models only the logic named in its task README.",
    "Loss figures are quoted from the sources each task README cites.",
    "The JSON wrapper around each proved function is tested, not proved.",
    "Knight Capital is reconstructed from the SEC's findings (Release No. 34-70694) because Knight's code is not public; nothing in the task is Knight's code, and every Knight Passport says so."
  ],
  "reproduce": {
    "setup": [
      "git clone https://github.com/davidwilliam/proof_forge && cd proof_forge",
      "docker build -t proofforge-lean:4.35.0 -f infra/docker/Dockerfile.lean infra/docker"
    ],
    "passports": [
      {
        "passport": "results/cetus-1/passports/original-port.json",
        "sha256": "b79e965381258ef8a287983b492911da0c4dc7b7437bfc538c14ad196aadfad3",
        "status": "REFUTED",
        "command": "bin/proofforge verify results/cetus-1/passports/original-port.json --candidate realworld/tasks/rw-cetus-shlw/attacks/buggy_original.lean"
      },
      {
        "passport": "results/cetus-1/repair-A1-1/passport.json",
        "sha256": "9131dfdfd3e27da8145cd70972c65748a5447585ce2c625dee404b1506239852",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/cetus-1/repair-A1-1/passport.json --candidate results/cetus-1/repair-A1-1/final.lean"
      },
      {
        "passport": "results/cetus-1/passports/pr6-port.json",
        "sha256": "d489c01595c307394d75579753303817724f7d586cffd2b7bb3b8cfe83f5e3e2",
        "status": "REFUTED",
        "command": "bin/proofforge verify results/cetus-1/passports/pr6-port.json --candidate realworld/tasks/rw-cetus-shlw/attacks/pr6_mask_only.lean"
      },
      {
        "passport": "results/cetus-1/passports/pr7-port.json",
        "sha256": "37d236fb45a80f418f9cfd7b63296b25c6326bb4a8517b86f8b7e806cdfa5e48",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/cetus-1/passports/pr7-port.json --candidate realworld/tasks/rw-cetus-shlw/reference/SolutionA.lean"
      },
      {
        "passport": "results/balancer-1/passports/port.json",
        "sha256": "d65bd405a13bfd4feaef838e4cc60dea2560bc47ff78cad8dfda591aaf26cb71",
        "status": "REFUTED",
        "command": "bin/proofforge verify results/balancer-1/passports/port.json --candidate realworld/tasks/rw-balancer-upscale/attacks/balancer_port.lean"
      },
      {
        "passport": "results/balancer-1/repair-A2-1/passport.json",
        "sha256": "48930efdd4d67460bfd22bb15dfa9625caafc36cd6fca3a8fee444d5f3b204ba",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/balancer-1/repair-A2-1/passport.json --candidate results/balancer-1/repair-A2-1/final.lean"
      },
      {
        "passport": "results/euler-1/rw-euler-donate/passports/port.json",
        "sha256": "cec7d847f1d0b6a6f9cdb0e46fd149430807f86e14ce746054484ccee3a3a050",
        "status": "REFUTED",
        "command": "bin/proofforge verify results/euler-1/rw-euler-donate/passports/port.json --candidate realworld/tasks/rw-euler-donate/candidate/Solution.lean"
      },
      {
        "passport": "results/euler-1/rw-euler-donate/repair-A1-1/passport.json",
        "sha256": "6de7bb94c38cf23a31ba08174d7505b4b8d54dddc9ffbd6d177dde4981b82002",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/euler-1/rw-euler-donate/repair-A1-1/passport.json --candidate results/euler-1/rw-euler-donate/repair-A1-1/final.lean"
      },
      {
        "passport": "results/knight-1/start/passport.json",
        "sha256": "ca3e7312fe7af22f53f52fbd08f53dfc85bde86ebe49a96e0e9751e4f365a6b8",
        "status": "REFUTED",
        "command": "bin/proofforge verify results/knight-1/start/passport.json --candidate realworld/tasks/rc-knight-router/candidate/Solution.lean"
      },
      {
        "passport": "results/knight-1/A2-2/passport.json",
        "sha256": "98cfed64ae1ec596e517299b422a5fb0beac571cdce89c18ea2e5660845bc178",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/knight-1/A2-2/passport.json --candidate results/knight-1/A2-2/final.lean"
      },
      {
        "passport": "results/vault-1/repair-A1-1/passport.json",
        "sha256": "08fe86f17f27c49d60bda786d1498200d333c1c8d63d2f858ab668cd4f7fe7c4",
        "status": "VERIFIED",
        "command": "bin/proofforge verify results/vault-1/repair-A1-1/passport.json --candidate results/vault-1/repair-A1-1/final.lean"
      }
    ]
  }
}
