{"item":"copy-b","batch":"e04-split-engine","credit":"Taylor (gtmcknight), github.com/gtmcknight/amm-sim@4812a6382311624e1506aca131ca35c378f930d9 research/solved: the solved policy, replica2.py and everything the measured contracts are built on. Tracker contract with the split test: A/5718a00b (qlite-a); base contract LEAN: A/a79a3606; block driver: A/764c9461; all built on Taylor's work.","summary":"On the Rust engine the split test fires on 10.0% of its tries (44,436 of 443,364 on 64 seeds), against 78.4% on the replica (279,520 of 356,624 in A/5718a00b gate T). Cause: cfmm.rs recomputes k = reserve_x*reserve_y from the rounded reserves at every quote, so the rival's x*y performs a rounding random walk away from 1e6 (tens of ulps within a run), while replica2.py divides the constant K = 1e6 and stays within 1 ulp. The router arithmetic itself is the same in both. The test's constant sqrt(0.997e6) is therefore wrong in its last bits on the engine. A test that tries the neighbouring denominators around the last accepted one (one small integer of state) fires on 81.5% (3 candidates) or 89.2% (5 candidates) of tries on the same engine seeds.","engine":{"tries":443364,"hits":44436,"hit_rate":0.10022,"calls":687604,"seeds":[10005164,10005227],"n_seeds":64,"per_block":[{"seeds":[10005164,10005195],"calls":344604,"tries":222256,"hits":21753,"hit_rate":0.09787},{"seeds":[10005196,10005227],"calls":343000,"tries":221108,"hits":22683,"hit_rate":0.10259}],"definitions":"calls: afterSwap callbacks of the submission. tries: callbacks on which qHit ran (not read as arbitrage by the lean tell and timestamp - previous own callback timestamp < 7). hits: tries on which qHit returned true.","callbacks_not_read_as_arbitrage_block_10005164_10005195":223165,"replica_reference":{"hit":279520,"miss":77104,"hit_rate":0.78379,"source":"A/5718a00b T.rule_counts (Taylor's replica2, seeds 74200..74249); not re-run here"},"lean_mean_edge_64_seeds":530.7357},"method":{"counting":"tries = (sum afterSwap gas of V1 - of V0)/burn, hits = (V2 - V0)/burn, per block of 32 seeds from the driver's exact integer sum_ok_gas (= calls*mean_gas).","variants":"All from the A/5718a00b source, with the test's result removed from the fee path: the rival update is LEAN's again (bound test, else the 0.35 pull). V0 computes qHit and loops 0 times, V1 loops 256 times on every try, V2 on every accept, V3 (calibration, block 1 only) on every callback not read as arbitrage. The loop count is (q?MQ:z)+(tr?MT:z)+(z==0?MA:z) with z = gasleft()>>250 (0, opaque to the optimizer), so the four contracts differ only in three constants.","burn_gas":10496,"burn_derivation":"The three gas differences of block 1 are 256*41*222256, 256*41*21753 and 256*41*223165; their gcd over 256 is 41 and a per-iteration cost has to divide it, so the loop costs 41 gas an iteration and the burn is 10,496 gas. Every difference in both blocks divides by 10,496 with remainder 0.","burn_deviation":"10,496 gas, not the brief's about 20,000: the engine stops afterSwap at 250,000 gas (evm/strategy.rs:33) and LEAN already peaks at 197,120 here; counts are exact at either size.","peaks":{"lean":197120,"V0_V1_V2":197351,"V3":207281,"out_of_gas_any_arm":0}},"tolerance_scan":{"what":"V2 with the final equality of qHit replaced by |w - paid| * D <= paid * N, w = trunc(((n*grid)/d)*1e18), i.e. a relative tolerance N/D on the reconstructed paid amount; burn on accept.","rows":[{"tolerance":"0 (exact, V2)","hits":44436,"tries":443364,"hit_rate":0.10022,"n_seeds":64},{"tolerance":"1e-15","hits":270279,"tries":443364,"hit_rate":0.60961,"n_seeds":64},{"tolerance":"1e-14","hits":399960,"tries":443364,"hit_rate":0.9021,"n_seeds":64},{"tolerance":"1e-13","hits":423077,"tries":443364,"hit_rate":0.95424,"n_seeds":64},{"tolerance":"1e-9","hits":443364,"tries":443364,"hit_rate":1.0,"n_seeds":64},{"tolerance":"1e-6","hits":null,"tries":443364,"hit_rate":null,"n_seeds":0,"note":"not run: 1e-9 already accepts every try and the accept set can only grow, so 1e-6 also accepts every try"}],"count_formula":"hits = (gas difference to V0 - 12*hits_exact)/(10496 - 12): a call whose q is true costs 12 gas less in the compiled loop-count expression than one whose q is false. The 12 was read from the 1e-9 arm of block 1 (difference to 10496*tries is exactly -12*(tries - hits_exact)); with it the other seven arm-blocks all divide with remainder 0.","reading":"Not a usable fix. The lattice the test checks has relative spacing of order 1e-13 of a typical fill, so 1e-13 and looser accept almost any amount and 1e-9 accepts all. In the Python emulation (below) fills that were not split at all are accepted at 0.9% (1e-15), 5.7% (1e-14), 58% (1e-13), 100% (1e-9), while true splits pass at 83%, 100%, 100%, 100%.","shifted_constant":{"what":"V2 with the constant QK = sqrt(0.997e6) moved by j ulps (exact equality), block 10005164..10005195, tries 222256","hits_by_j":{"-8":16480,"-2":20184,"0":21753,"+2":21597,"+8":14007},"note":"approximate to a few counts (qHit's gas depends on its data, remainders are not 0). No single constant works: the accepts are spread over offsets, as a drifting k predicts."}},"edges_equal_lean":true,"edges_check":"V0, V1, V2 and LEAN ran all 64 seeds; the submission edge of each is bit-equal to LEAN's on every seed. The same holds for V3, the tolerance, shifted-constant, tracked-count and decoy arms on every seed they ran. 0 out of gas, calls == ok in every block, no failed or burnt seed.","router_differs":false,"differences":[{"what":"k recomputed from the stored reserves at every quote and every arbitrage sizing, against a constant. This is the cause.","engine_line":"amm_sim_rs/src/amm/cfmm.rs:131, 152, 180 (let k = self.reserve_x * self.reserve_y; then k / new_rx or k / new_ry at 133, 160, 189); amm_sim_rs/src/market/arbitrageur.rs:56, 106 (let k = rx * ry)","replica_line":"replica2.py:11 (K = 100.0 * 10000.0), used at 50, 53, 58, 60 (rival arbitrage), 68, 71, 80, 82 (ours), 104, 108, 123, 127 (retail)","effect":"Engine, measured: split test 10.0% of tries against 78.4% on the replica. Emulation: with the replica's arithmetic the constant test passes 0.89389 of true split fills and the rival's x*y ends within 1 ulp of 1e6; changing only K to x*y gives 0.09484 and with full engine arithmetic 0.14677 (0.30731 in steps 0..999, 0.10299 in 3000..9999), the rival's x*y ending 5 to 70 ulps of 1e6 away (ulp = 1.16e-10) and sqrt(x2*g2*y2) a median 7, at most 42 ulps from the constant."},{"what":"Reserves updated by increments with the fee kept in a separate bucket (net = amount - amount*fee), against assignment of the quoted reserves (amount*gamma).","engine_line":"amm_sim_rs/src/amm/cfmm.rs:207-210, 238-240, 269-271 (quotes use amount * gamma at 129, 187)","replica_line":"replica2.py:56, 63, 74, 85, 106, 111, 125, 130 (x, y = nrx, nry)","effect":"None on its own in the emulation: engine updates with a constant K give 0.8952 of split fills against 0.89389, x*y within 1 ulp. It only adds to the walk once k is recomputed."},{"what":"Split formula of the router: same operations in the same order (sqrt(x*gamma*y), r = a1/a2, r*(y2 + gamma2*Y) - y1, gamma1 + r*gamma2, clamp to [0, total], threshold 0.0001, total_x = size / fair_price).","engine_line":"amm_sim_rs/src/market/router.rs:50-51, 58, 61-62, 71-72 (buy); 92-93, 100, 103-104, 113-114 (sell); 188; 221","replica_line":"replica2.py:98-102 (buy), 115-121 (sell), 103, 107, 122, 126 (1e-4)","effect":"0: no arithmetic difference in router.rs. Its inputs x2, y2 differ because of cfmm.rs."},{"what":"Execution order: the engine fills and arbitrages the submission first, the replica the 30 bps pool first.","engine_line":"amm_sim_rs/src/market/router.rs:198-218, 224-244; amm_sim_rs/src/simulation/engine.rs:120, 141","replica_line":"replica2.py:103-113, 122-132 (retail); 47-87 (arbitrage)","effect":"0 on fills and on the test: the two pools do not interact inside a step. It only changes the oracle argument y2/x2 the replica hands a Python policy, which a contract never sees."},{"what":"Amounts, reserves and fees cross the EVM boundary as truncated WAD integers on the engine; the replica hands Python floats.","engine_line":"amm_sim_rs/src/amm/cfmm.rs:214-218, 245-249, 276-280; amm_sim_rs/src/types/wad.rs:33, 39","replica_line":"replica2.py:75, 86, 112, 131 (policy.on_trade), 16-17 (clampf)","effect":"Not a cause: the contract test already takes WAD inputs, and the emulation applies the same WAD truncation in every mode."},{"what":"Random streams.","engine_line":"amm_sim_rs/src/market/retail.rs, price_process.rs (not compared line by line)","replica_line":"replica2.py:3-4, 21-28","effect":"Changes which trades occur, not whether the test is exact."}],"engine_exact_test":{"strictly_exact":null,"reason":"The engine pays the submission fl(N/D) with D = fl(g1 + fl(r*g2)), r = fl(a1/a2), a2 = sqrt(fl(fl(x2*g2)*y2)) on a buy and sqrt(fl(fl(y2*g2)*x2)) on a sell (amm_sim_rs/src/market/router.rs:51, 93, 58, 62), g2 = 1 - 0.003, N a multiple of ulp(own paid-side reserve). Bit-exact D needs the rival's reserves x2, y2 as doubles at routing time. Their product is not a constant on the engine and moves by rounding at every rival trade (about 1.2 a step, none of them visible to us), so no formula of our own fill and a constant is exact.","exact_given_state":"Same test as qHit with D_m = D0 + m*ulp(D0), D0 the denominator computed with a2 = sqrt(0.997e6): accept iff for some m in {m0, m0+1, m0-1 [, m0+2, m0-2]} and n = round_half_even(paid*D_m/grid): trunc(fl(fl(n*grid/D_m)*1e18)) == paid wad; on accept m0 := m.","state":"One small signed integer m0, the last accepted denominator offset in ulps, 0 at start (slot 6 in the variants here; spare bits of slot 2 would do). In the emulation the nearest matching |m| stays <= 20 over 10,000 steps for 99.97% of split fills, and m0 moves on about a third of accepts.","measured_on_engine":{"tries":443364,"n_seeds":64,"three_candidates":{"hits":361409,"hit_rate":0.81515,"peak_gas_without_burn":203439,"mean_gas_over_V0":2743.9},"five_candidates":{"hits":395626,"hit_rate":0.89233,"peak_gas_without_burn":209771,"mean_gas_over_V0":3343.2},"V0_mean_gas_over_lean":8796.1,"false_accepts":{"what":"five untracked candidates 98..102 ulps (and -102..-98) away from D0, where no true denominator lies; block 10005164..10005195, tries 222256","plus_100":629,"minus_100":612,"rate":[0.00283,0.00275]},"how":"each tracked or decoy variant has a twin that burns nothing (same storage writes), so its count is (burn twin - no-burn twin)/10496, remainder 0 in every block; fees are LEAN's and edges equal LEAN's on every seed."},"used_for_fees_smoke":{"what":"The A/5718a00b tracker as delivered (ql) and with its test replaced by the tracked one and used as before (qlx3, qlx5), each alone against the 30 bps pool on the 64 lease seeds, paired with LEAN.","ql_minus_lean":{"n":64,"mean_diff":0.00569,"se":0.01091,"min":-0.1854,"seeds_positive":33},"qlx3_minus_lean":{"n":64,"mean_diff":0.04195,"se":0.01837,"min":-0.317,"seeds_positive":39},"qlx5_minus_lean":{"n":64,"mean_diff":0.0344,"se":0.01889,"min":-0.3624,"seeds_positive":39},"qlx3_minus_ql":{"n":64,"mean_diff":0.03625,"se":0.01835,"min":-0.35,"seeds_positive":40},"qlx5_minus_ql":{"n":64,"mean_diff":0.0287,"se":0.0191,"min":-0.3954,"seeds_positive":40},"peak_gas":{"ql":197366,"qlx3":201688,"qlx5":205701},"runtime_bytes":{"ql":22390,"qlx3":22488,"qlx5":22440},"source_chars":{"ql":47094,"qlx3":47230,"qlx5":47230},"reading":"A 64-seed smoke, about 2 standard errors: it agrees with the replica's +0.039 and with the brief's +0.004 for the constant test, and proves neither. Not a gate E run."},"caveats":"No Python reference and no gate T, F or Q for qHitX; D0 + m crossing a power of two is not handled; the accept also fires for the roughly 10% of true splits the constant test misses on the replica itself, so a replica run of this rule is not the +0.039 rule."},"emulation":{"what":"Python transcription of the engine's arithmetic (cfmm.rs, router.rs, arbitrageur.rs) inside replica2.py's event loop, with switches for the two cfmm.rs differences; own random streams (seeds 900000+i), a toy fee policy for our pool (bid and ask redrawn uniformly in 25..45 bps at every callback, as WAD) and a float copy of qHit. It is neither the engine nor Taylor's replica as run in the gates; it is used only to attribute the effect and to size the drift. Rates are per true split fill.","replica_arithmetic":{"seeds":6,"split_fills":40910,"exact_constant_test_hit_of_split":0.89389,"hit_of_all_retail_fills":0.85388,"test_with_true_A2_hit_of_split":0.94732,"A2_equals_constant_frac":0.79518,"A2_offset_ulps_median_p90_max":[0,1,1],"rival_k_minus_1e6_in_ulps_at_step_10000":[0.0,-1.0,0.0,-1.0,0.0,-1.0]},"engine_arithmetic":{"seeds":8,"split_fills":52313,"exact_constant_test_hit_of_split":0.14677,"hit_of_all_retail_fills":0.14027,"test_with_true_A2_hit_of_split":0.95066,"A2_equals_constant_frac":0.03722,"A2_offset_ulps_median_p90_max":[7,23,42],"rival_k_minus_1e6_in_ulps_at_step_10000":[5.0,70.0,56.0,48.0,66.0,25.0]},"engine_updates_constant_K":{"seeds":4,"split_fills":26709,"exact_constant_test_hit_of_split":0.8952,"hit_of_all_retail_fills":0.85546,"test_with_true_A2_hit_of_split":0.94852,"A2_equals_constant_frac":0.79381,"A2_offset_ulps_median_p90_max":[0,1,1],"rival_k_minus_1e6_in_ulps_at_step_10000":[0.0,-1.0,0.0,-1.0]},"replica_updates_recomputed_k":{"seeds":4,"split_fills":26709,"exact_constant_test_hit_of_split":0.09484,"hit_of_all_retail_fills":0.09062,"test_with_true_A2_hit_of_split":0.95268,"A2_equals_constant_frac":0.02426,"A2_offset_ulps_median_p90_max":[11,27,42],"rival_k_minus_1e6_in_ulps_at_step_10000":[-48.0,70.0,56.0,48.0]},"tracked_test_engine_arithmetic":{"seeds":6,"tracked_C3":{"hit_of_split":0.93933,"hit_of_all_to_us":0.00313,"hit_of_all_fills":0.8974,"moved_frac":0.3219},"tracked_C5":{"hit_of_split":0.99885,"hit_of_all_to_us":0.00365,"hit_of_all_fills":0.95428,"moved_frac":0.3619},"decoy5_at_+100":{"of_split":0.00332,"of_all_to_us":0.00209},"split_nearest_match_abs_d_ulps":{"frac_0":0.1462,"frac_le1":0.27,"frac_le2":0.4138,"frac_le5":0.6643,"frac_le10":0.8571,"frac_le20":0.9997,"none_within_40":0.0}},"note":"The test with the true a2 passes 0.95 of split fills in every mode; the rest is the WAD round trip and rounding of n, common to both sides."},"consistency":"0.039 * (0.1002 / 0.7838) = 0.0050, against the +0.004 se 0.004 the brief reports for the engine and +0.0057 se 0.0109 measured here (ql - LEAN, 64 seeds). The +0.039 and +0.004 are the brief's figures, not re-measured.","ledger":{"engine_seeds_used":[10005164,10005227],"n_engine_seeds":64,"lease":[10005164,10005227],"outside_lease":0,"burnt":[],"failures":[],"arms":{"lean":{"seeds":64,"runtime_bytes":21368,"source_sha256":"a6dfc3ba6b7a1b19"},"v0":{"seeds":64,"runtime_bytes":23036,"source_sha256":"cdffdf92cdb03941"},"v1":{"seeds":64,"runtime_bytes":23037,"source_sha256":"95c5694f78f767e6"},"v2":{"seeds":64,"runtime_bytes":23037,"source_sha256":"cc80071ffd0b43c0"},"v3":{"seeds":32,"runtime_bytes":23037,"source_sha256":"1e9363bc8ef70af4"},"t15":{"seeds":64,"runtime_bytes":23043,"source_sha256":"a9b6b58673343a9c"},"t14":{"seeds":64,"runtime_bytes":23042,"source_sha256":"29744ec2b06fdf16"},"t13":{"seeds":64,"runtime_bytes":23042,"source_sha256":"acb20b89f25a1465"},"t9":{"seeds":64,"runtime_bytes":23040,"source_sha256":"6494279d04d7b206"},"kp2":{"seeds":32,"runtime_bytes":23037,"source_sha256":"ffbcc4941055abc5"},"km2":{"seeds":32,"runtime_bytes":23037,"source_sha256":"efd78c9952223a0c"},"x3base":{"seeds":64,"runtime_bytes":22563,"source_sha256":"ef823f38a2527150"},"x3burn":{"seeds":64,"runtime_bytes":22564,"source_sha256":"6be5aa94e8e925ea"},"x5base":{"seeds":64,"runtime_bytes":22563,"source_sha256":"d5112d7dc335d916"},"x5burn":{"seeds":64,"runtime_bytes":22564,"source_sha256":"6002f092763e1337"},"kp8":{"seeds":32,"runtime_bytes":23037,"source_sha256":"3a3fd9a223c8e987"},"km8":{"seeds":32,"runtime_bytes":23037,"source_sha256":"49bd9886319def96"},"d5pbase":{"seeds":32,"runtime_bytes":22546,"source_sha256":"8a3206e0290dbb68"},"d5pburn":{"seeds":32,"runtime_bytes":22547,"source_sha256":"3107d126df425b46"},"d5mbase":{"seeds":32,"runtime_bytes":22547,"source_sha256":"7734825672cd6fc6"},"d5mburn":{"seeds":32,"runtime_bytes":22548,"source_sha256":"dc231b2034248949"},"ql":{"seeds":64,"runtime_bytes":22390,"source_sha256":"5289a60c833857b4"},"qlx3":{"seeds":64,"runtime_bytes":22488,"source_sha256":"4345e3ea82cbe374"},"qlx5":{"seeds":64,"runtime_bytes":22440,"source_sha256":"e183e5bc3fb794b7"}},"note":"Every arm ran each of its seeds once, in blocks of 32 through the A/764c9461 driver (workers 8, each arm alone against VanillaStrategy). Arms with 32 seeds ran 10005164..10005195 only. One ledger file; no interrupted block. Replica gate seeds: none used.","arm_key":"lean: A/a79a3606 source (sha256 a6dfc3ba...). v0..v3: counting variants. t15, t14, t13, t9: tolerance. kp2, km2, kp8, km8: QK moved by +2, -2, +8, -8 ulps. x3base/x3burn, x5base/x5burn: tracked test, no burn / burn on accept. d5pbase/d5pburn, d5mbase/d5mburn: decoys. ql: A/5718a00b source unchanged. qlx3, qlx5: tracked test used for fees.","environment":"kit 45e7563d setup_fast.sh --platform linux-x86_64 (exit 0), engine amm-challenge@6b6921f8 release wheel native sha256 ff88b6353c2aad73..., solc 0.8.24 optimizer 200 viaIR paris."},"scripts_encoding":"base64(zlib(json {name: text})): mk.py (counting, tolerance, shifted-constant variants), mkx.py (tracked), mkd.py (decoys), mku.py (tracked, used), final.py (counts from the ledger), emu.py and emu2.py (emulation). They read dl/a5718/code_zb64.bin and dl/lean/code_zb64.bin, the decoded code_zb64 of the two artifacts.","scripts_zb64":"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","not_done":["The rival's x*y on the engine was not observed: the engine reports edge and gas only. The attribution to the recomputed k rests on the source comparison, the emulation, and three engine measurements (accepts spread over shifted constants, 81-89% with a tracked offset, 0.28% for decoys).","Burn was 10,496 gas, not about 20,000 (reason under method).","Tolerance 1e-6 was not run (implied by 1e-9). Shifted-constant, decoy and V3 arms ran 32 seeds, not 64; shifted-constant counts are approximate.","The tracked test has no Python reference and passed no gate (P, Q, T, F, G, E); its edge figures are a 64-seed smoke at about 2 standard errors. The engine peak of qlx3/qlx5 is from 64 seeds only.","The replica's 78.4% and the brief's +0.039 / +0.004 were taken as given; Taylor's replica2 and the kit's ammfast and score.py were not run.","price_process.rs and retail.rs were not compared line by line with replica2.py; arbitrageur.rs only where it computes k; the fee clamp (wad.rs clamp_fee against clampf) was not compared.","How hits split by side or by time inside a run cannot be read through gas and was not measured on the engine (the emulation shows the constant test decaying from 0.31 to 0.10 of split fills).","The scripts and variant sources are not committed: only scripts_zb64 in this file. Nothing was submitted."]}