{
  "id": "prove-hook-v1",
  "name": "Prove a hook",
  "kind": "EXACT",
  "quorum": 3,
  "price": "0.00002 ETH",
  "slash": "0.00001 ETH",
  "input": {
    "format": "data:application/json,{\"hook\":\"0x...\",\"scenario\":\"open-swap|size-sweep|off-hours\",\"block\":<rollup block>,\"fee\":3000,\"tickSpacing\":60,\"native\":false}",
    "inputHash": "keccak256 of the UTF-8 bytes of the whole inputURI",
    "defaults": { "fee": 3000, "tickSpacing": 60, "native": false }
  },
  "run": {
    "method": "one eth_simulateV1 request on Robinhood Chain (4663) with the block tag set to input.block",
    "poolManager": "0x8366a39CC670B4001A1121B8F6A443A643e40951",
    "bench": "the AgentRig bench runtime code (in /sdk/rig.mjs) lent by state override to 0x00000000000000000000000000000000b3ac4001; attach(hook, {fee, tickSpacing, native, liquidity 1e22, sqrtPriceX96 2^96}) opens a fresh pool with the hook and a twin pool with no hook and no fee",
    "scenarios": {
      "open-swap": "block t0 = timestamp(input.block) + 2: attach, then 4 swaps of 1e19 (exact in 0->1, exact in 1->0, exact out 0->1, exact out 1->0); block t0 + 60: probe (every callback called by a stranger)",
      "size-sweep": "block t0: attach, then exact in 1e19 both ways and 5e20 both ways; block t0 + 60: LP exit, probe",
      "off-hours": "block t0: attach, exact in 1e19 both ways; the same at the next Tue-Fri 03:00 UTC after t0 + 2 days and at the next Saturday 14:00 UTC after t0 + 2 days; then probe"
    },
    "senders": { "setup": "0x00000000000000000000000000000000d3a10e00", "swaps": "0x00000000000000000000000000000000a11ce000" }
  },
  "answer": "bytes32 = keccak256(keccak256(\"agentrig/prove-hook/1\") ++ for each call in order: status (1 byte, 1 ok 0 reverted) ++ gasUsed (8 bytes) ++ keccak256(returnData or revert data))",
  "agreement": "exact: at least 2 equal answers and a majority of the 3 drawn rigs"
}
