{"item": "bounded-bitmath", "status": "done", "summary": "TellMath.isArb(bool,uint256 x8)->bool, exact integer port of tellref.is_arb (amm-sim research@66604b34). Matches expected (last field) on 11856/11856 vectors.json.gz vectors, 0 mismatches, plus 6892 extra edge vectors labelled by tellref itself (zero/1 wei/cap 1e17/cap-1 fees, both sides, binade edges +-1 wei, n=1..2^53+1 on the grid, paid +-1 wei): 0 mismatches. No assembly in the library.", "gate": {"vectors_matched": "11856/11856", "mismatches": 0, "extra_edge_vectors": 6892, "extra_edge_true": 2271, "extra_mismatches": 0, "isArb_true_count_on_vectors": 4670}, "approach": "bitLen by 8-step binary normalization; rn() estimates the exponent from bit lengths so the quotient lands in [2^52,2^54), needs at most one corrective re-division (one or two divisions per rn), round half-even on the remainder with carry to the next binade; gammaOf follows engine fee->f64->/1e18->1-fee each rounded; binade() from bit length with a single +-1 correction against exact 1e18*2^e edges; grid=min(binade before, after)-52; n0 rounded half-up as in tellref; candidates n0-1,n0,n0+1 (n>0) via rn and handed() (forward int(fl(v*1e18))).", "bounds": "isArb returns false (never reverts) unless paid amount, paid-side reserve before and after are in [1,2^128) and the side's fee is in [0,1e17] (engine clamp). Within that, exponents: binade in [-60,68], grid-ge shift in about [-121,61]; largest intermediate about 2^243 (paid*gamma_m<<61), so no shift overflows. tellref itself loops forever on a zero reserve; the port returns false there. Fees are not clamped inside: pass the fee in force (already clamped) as tellref does.", "helper": {"fn": "TellMath.ulpOverGridWad(paidW,beforeW,afterW) returns min(1, ulp(fl(paidW/1e18))/2^grid) scaled by 1e18 (WAD>>d for d<=64, 0 beyond or out of bounds)", "boundary_checks": "1262 cases (reserves at 1e18*2^e -1/0/+1 for e in -30..39, paid at the same edges, edge>>20, random <2^127, zero and 2^128) equal to a Python reference built on tellref.rn/binade: all pass (testUlpBoundaries)"}, "gas": {"method": "gasleft() around the library call inside the forge test (solc 0.8.24, optimizer 200, viaIR, paris); external = call to a Harness contract wrapping it (includes call/ABI/memory overhead)", "inline_vectors": {"n": 11856, "min": 14316, "mean": 17163.9, "p95": 18998, "max": 20193}, "inline_all_incl_edge": {"n": 18748, "min": 11152, "mean": 17343.6, "p95": 19507, "max": 20859}, "external_vectors": {"n": 11856, "min": 32280, "mean": 37295.0, "p95": 40750, "max": 42375}, "per_vector_inline_gas_zb64": "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", "per_vector_inline_gas_format": "zlib+base64 of big-endian uint16 per vector, in vectors.json.gz order"}, "size": {"source_bytes": 5670, "harness_runtime_bytes": 2949, "harness_initcode_bytes": 2977, "note": "Harness = isArb + ulpOverGridWad exposed externally; inlined into a strategy the cost is smaller and depends on the optimizer"}, "not_done": "No engine validation, no whole-strategy gas, no integration into C0 (out of this item's scope).", "commands": ["B=https://raw.githubusercontent.com/gtmcknight/amm-sim/66604b3426d8e97a73e2c39940b9b4dece51cc73/research; curl -LsSf $B/tell/fetch.sh -o fetch.sh && sh fetch.sh $B amm   # fetched 34 files, 0 mismatched", "unpack bundle into port/ and code into port/src/TellMath.sol", "cd port && python3 -I gen.py ../amm   # writes vec.bin (18748 rows of 10 ABI words) and ulp.bin", "forge test   # testVectors requires 0 mismatches; writes gas.bin: 8 bytes/vector = inline gas(32b) | external gas(31b) | result bit"], "code_path": "src/TellMath.sol", "code_zb64": "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", "code_sha256": "77075345fd956b35fce09dc6a9b59135b18276c0bf4a5a21bdff060874b90e92", "bundle_zb64": "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", "bundle_sha256": "6fe53ec474b50cba1cdea260b97d9366eed075903782187d7b24b249ba5b8d6b"}