{"credit":"Taylor (gtmcknight), github.com/gtmcknight/amm-sim@4812a6382311624e1506aca131ca35c378f930d9 research/solved. LEAN: A/a79a3606; QLX5 and the engine rows: A/1ef80bfb; split-test rule: A/8b18deed; engine-faithful core: A/2ad2abf4; LEANBASE float reference: A/a88ff982; kit: identity-md-launches/goal-3178-build-shared-evaluation-kit@45e7563d. All built on Taylor's solved policy, replica and tables.","ready":true,"summary":"LEAN and QLX5 now run on the engine-faithful core and reproduce the engine per seed: on all 512 seeds 10010512..10011023, for both, the port equals the engine row to its 6 printed decimals (largest difference 5.0e-7, the rounding of the rows), and the port makes exactly the engine's number of afterSwap callbacks (LEAN 5619897, QLX5 5626901). Two things were needed. (1) The contracts are fixed-point integer programs, so the policies are transcribed statement by statement in integers, not floats; replayed through the compiled contract bytecode they return the same two fee wads on every callback checked (51,706 callbacks, 0 mismatches). (2) The core as delivered was not bit-faithful: the engine computes retail order sizes and the Poisson constant with the fdlibm exp, not glibc's; with glibc's the same policies matched only 291 (LEAN) and 222 (QLX5) of 512 seeds. With that one change the core is bit-identical to the engine on 32 of 32 constant-fee runs (7 of 32 before).","parity":{"LEAN":{"n":512,"mean_diff":2.3856583819537036e-08,"mean_abs_diff":2.467403068528995e-07,"max_abs_diff":4.991815103494446e-07,"within_1e-6":512,"within_1e-4":512,"worst":[{"seed":10010819,"engine":562.508062,"port":562.508061501,"diff":-4.99e-07},{"seed":10011013,"engine":521.615153,"port":521.615153499,"diff":4.99e-07},{"seed":10010840,"engine":434.164511,"port":434.164511499,"diff":4.99e-07},{"seed":10010665,"engine":415.961634,"port":415.961634498,"diff":4.98e-07},{"seed":10010868,"engine":419.216074,"port":419.216074497,"diff":4.97e-07}]},"QLX5":{"n":512,"mean_diff":-1.7222758774693148e-09,"mean_abs_diff":2.5279466320249355e-07,"max_abs_diff":4.994752202946984e-07,"within_1e-6":512,"within_1e-4":512,"worst":[{"seed":10010679,"engine":430.232697,"port":430.232697499,"diff":4.99e-07},{"seed":10010731,"engine":513.752361,"port":513.752360501,"diff":-4.99e-07},{"seed":10010628,"engine":424.717651,"port":424.717651499,"diff":4.99e-07},{"seed":10010588,"engine":482.539436,"port":482.539435501,"diff":-4.99e-07},{"seed":10010911,"engine":499.161249,"port":499.161248502,"diff":-4.98e-07}]},"seeds":[10010512,10011023],"compared_against":"rows_zb64 of A/1ef80bfb (engine edge, 6 decimals); diff = port - engine row","afterSwap_calls":{"LEAN":{"port":5619897,"engine":5619897},"QLX5":{"port":5626901,"engine":5626901}},"mean_edge":{"LEAN":{"port":535.841242,"engine":535.841242},"QLX5":{"port":535.876428,"engine":535.876428}}},"parity_on_core_as_delivered":{"what":"the same policies on enginecore.py of A/2ad2abf4 unchanged (glibc exp for retail sizes), same 512 seeds","LEAN":{"n":512,"mean_diff":-0.002837612400714784,"mean_abs_diff":0.016912414539142606,"max_abs_diff":0.2907337736917839,"within_1e-6":291,"within_1e-4":292},"QLX5":{"n":512,"mean_diff":0.002639547624255112,"mean_abs_diff":0.017620519620818564,"max_abs_diff":0.3048128115408417,"within_1e-6":222,"within_1e-4":232},"qlx5_minus_lean":0.04066260143121714},"qlx5_minus_lean":{"port":0.035185,"engine":0.035185,"engine_from_rows":0.035185,"n":512,"max_abs_diff_of_paired_differences":9.67570315424382e-07},"split_hit_rate":{"tries":3655997,"hits":3256738,"rate":0.890793,"seeds":[10010512,10011023],"afterSwap_calls":5626901,"definition":"tries: callbacks on which qHitX ran (not read as arbitrage, timestamp < previous own callback + 7); hits: it accepted. QLX5 defaults (5 candidates, tracked m0).","reference":"A/8b18deed measured 0.89233 for five candidates on the engine, other seeds (10005164..10005227)"},"core_parity_16_seeds":{"what":"engine (kit engine_eval.run_batch) vs core, constant 30/30 and 25/45 bps, seeds 9700000..9700015, 32 runs","core_as_delivered":{"n":32,"max_abs_diff":2.223544015578227e-09,"bit_identical":7},"core_with_fdlibm_exp":{"n":32,"max_abs_diff":0.0,"bit_identical":32}},"core_difference_found":{"what":"Retail order size exp(mu + 1.2 z) and the Poisson constant exp(-lambda) are computed in the engine with the fdlibm exp (e_exp.c), which is one ulp away from glibc exp on 29,295 of 300,000 arguments in [-2, 7] (never more). The price step and the tail ln of the normal sampler match glibc (prices bit-identical; fdlibm in the sampler breaks two seeds); the retail mean ln and the sampler pdf exp are left on glibc and are consistent with all 1,056 runs compared.","how_found":"Per-step spot prices of amm_sim_rs.run_single against the core trace. The compiled core and a pure-Python transcription of the Rust source (cfmm.rs, router.rs, arbitrageur.rs) agree on all 10,000 steps of seed 9700000 at 30/30 bps and both leave the engine at step 4601, a retail sell, normalizer pool only; moving that order size up one ulp moves the divergence to step 4617. A one-ulp size changes a reserve only rarely, which is why constant-fee edges stayed within 2e-8.","attribution":"Inference, not looked up in the crate sources: rand_distr LogNormal<F> and Poisson<F> are generic and take exp from num_traits::Float, apparently backed by the pure-Rust libm crate in this build, while the f64 code paths use std. What is measured is only that fdlibm exp at these two call sites gives bit parity.","excluded":["fused multiply-add: no vfmadd/vfmsub instruction in amm_sim_rs.abi3.so, and contracted variants diverge within 6..127 steps","exp@GLIBC_2.2.5 (the symbol the engine imports) against the default exp: equal on 2,000,000 arguments","Numba exp against libm exp: equal on all 8,393 order sizes of seed 9700000","fdlibm exp and log inside the ziggurat as well: then seeds 10010690 (LEAN) and 10010840 (LEAN, QLX5) diverge; with glibc there they are bit-identical to the local engine"],"fix":"mkcore.py: two call sites of the pinned enginecore.py (sha256 dbda349f...) moved to fexp, nothing else; output enginecore_f.py"},"contract_replay":{"what":"callbacks the port produced, replayed in order through the compiled contract (kit solc 0.8.24, pyrevm): both returned fee wads compared on every callback","rows":[{"arm":"LEAN","seed":10010514,"callbacks":9520,"fee_mismatches":0},{"arm":"QLX5","seed":10010512,"callbacks":12229,"fee_mismatches":0},{"arm":"LEAN","seed":10010690,"callbacks":11129,"fee_mismatches":0},{"arm":"LEAN","seed":10010840,"callbacks":9408,"fee_mismatches":0},{"arm":"QLX5","seed":10010840,"callbacks":9420,"fee_mismatches":0}],"note":"run while the core still used glibc exp for sizes (first two rows) or fdlibm in the ziggurat too (last three), so the callback streams are not the engine's; the policy code is the one delivered. Callback counts include the afterInitialize call."},"ported":["fixed-point WAD arithmetic of the contract (ln, exp, root, pdf, cdf, trunc, update) in Python integers with Solidity truncating division","production U1 tables: QPL1 blob, QT node tables and W2L words decoded from the QLX5 source (identical in LEAN), node interpolation as surf()","truncated WAD inputs straight from the core callback (two uint64 limbs), fee wads returned as integers, fee guard around the 30 bps gamma","lean tell (ltTell, budget 4) and grid chance (ulpOverGridWad) in integer binary64","QLX5 tracked split test qHitX with its offset m0 (slot 6), candidates 0,+1,-1,+2,-2, literal mku.py loop (dc = dm + m)"],"knobs":[{"name":"split","default":1,"meaning":"QLX5 tracked split test on (1) or off (0 = LEAN)"},{"name":"split_nc","default":5,"meaning":"split test: candidates tried around the tracked offset m0, order 0,+1,-1,+2,-2 (3 = QLX3, 1 = untracked)"},{"name":"split_window","default":7,"meaning":"split test runs when timestamp < previous own callback + this (7 = at most 6 steps later)"},{"name":"split_track","default":1,"meaning":"split test: keep the accepted denominator offset m0 (slot 6) for the next call (0 = always start at 0)"},{"name":"split_synced","default":1,"meaning":"a split hit sets the synced flag (selects the synced table)"},{"name":"split_skip_pull","default":1,"meaning":"a split hit skips the 0.35 rival pull (the contract always does)"},{"name":"split_qk","default":8782888972198741,"meaning":"split test: mantissa of the rival sqrt(k*gamma) constant, sqrt(0.997e6) = this * 2^-43"},{"name":"split_qg","default":8980177656976769,"meaning":"split test: mantissa of the rival gamma 0.997 = this * 2^-53"},{"name":"sig2","default":893025000000,"meaning":"filter: variance added per step, WAD (0.000945^2)"},{"name":"gap_cap","default":12,"meaning":"filter: most silent steps replayed through the truncation"},{"name":"rho","default":260000000000000000,"meaning":"retail likelihood weight RHO, WAD (0.26)"},{"name":"ld_m","default":-6801595083153746944,"meaning":"retail move-size log-normal mean ln(11.12e-4), WAD"},{"name":"ld_s","default":1176000000000000000,"meaning":"retail move-size log-normal sd, WAD (1.176)"},{"name":"d_floor","default":1000000000,"meaning":"floor of |ln(s/s_prev)| in the retail likelihood, WAD (1e-9)"},{"name":"z_floor","default":1000000,"meaning":"truncation mass below which the filter snaps to the band edge, WAD (1e-12)"},{"name":"pi_arb","default":500000000000000000,"meaning":"phase threshold: posterior above this reads the trade as arbitrage (phase 0), WAD"},{"name":"pi_soft_lo","default":5000000000000000,"meaning":"soft update only for posterior above this, WAD (0.005)"},{"name":"pi_hard","default":995000000000000000,"meaning":"soft update only for posterior below this, WAD (0.995)"},{"name":"tell_miss_pi","default":0,"meaning":"posterior used when the tell says off-grid (contract: 0, retail for certain), WAD"},{"name":"tell_budget","default":4,"meaning":"lean tell: preimages + hits above this is over budget (a miss)"},{"name":"tell_lo_bits","default":60,"meaning":"lean tell floor: reserve wads below 2^this are unsupported (a miss)"},{"name":"tell_hi_bits","default":120,"meaning":"lean tell ceiling: wads at or above 2^this are unsupported (a miss)"},{"name":"tell_wide_bits","default":48,"meaning":"lean tell: buy window widens by one each side once k0 >= 2^this"},{"name":"chance_floor_shift","default":64,"meaning":"grid chance is 0 when ulp(paid)/grid is below 2^-this"},{"name":"clip_gamma","default":997000000000000000,"meaning":"rival clip: after a first trade the rival spot is held within [p*g, p/g] of the belief, WAD"},{"name":"cand_gamma","default":997000000000000000,"meaning":"rival band: rival gamma in the marginal-price candidate c, WAD"},{"name":"pull_alpha","default":350000000000000000,"meaning":"when the bound does not bind, ln r moves this fraction of the way to ln c, WAD (0.35)"},{"name":"phase1_cnt","default":1,"meaning":"retail callbacks of a step with count <= this use the phase-1 tables, later ones phase 2"},{"name":"table_arb","default":0,"meaning":"table used in phase 0 (after a trade read as arbitrage)"},{"name":"table_p1_synced","default":1,"meaning":"table for phase 1, rival synced"},{"name":"table_p1_stale","default":2,"meaning":"table for phase 1, rival not synced"},{"name":"table_p2_synced","default":3,"meaning":"table for phase 2, rival synced"},{"name":"table_p2_stale","default":4,"meaning":"table for phase 2, rival not synced"},{"name":"sd_levels","default":[0,4,8,12,16,20,26,34],"meaning":"belief sd levels of the tables, bps (table levels)"},{"name":"w_step","default":5,"meaning":"bps per grid unit of the own-offset and rival-offset axes"},{"name":"w_half","default":160,"meaning":"own-offset axis half width in grid units (axis 0..2*w_half)"},{"name":"p2_clip","default":6,"meaning":"phase 0: rival offset clipped to +-this many grid units"},{"name":"fee_max","default":100000000000000000,"meaning":"fee cap, WAD"},{"name":"fee_init","default":2823606104386589,"meaning":"both fees returned by afterInitialize, WAD"},{"name":"guard_lo","default":2999999999999948,"meaning":"fee guard: lowest fee wad whose binary64 gamma equals the 30 bps rival gamma"},{"name":"guard_hi","default":3000000000000057,"meaning":"fee guard: highest such fee wad; a fee in [guard_lo, guard_hi] steps to the nearer outside neighbour"}],"knobs_note":"Policy(T, **knobs) and run(seed, T, **knobs). Proven against the engine: the defaults (QLX5) and split=0 (LEAN). Other values are not checked against any contract.","runs_per_core_s":0.946,"runs_per_core_s_note":"1024 runs of 10,000 steps, 30 processes on 32 cores, process_time per run; about 37 s wall for both arms on 512 seeds. The policy is interpreted Python integers behind a Numba objmode callback, so this is an exact reference, not a fast replica (fastlean, A/a88ff982: 149.1 runs per core-second, float).","engine_runs_here":{"fresh_seeds_from_10200000":0,"screening":"run_batch on 9700000..9700015 (constant 30/30 and 25/45), four times; run_single on 9700000 (constant 30/30), repeatedly","debug_on_used_seeds":"run_single of LEAN on 10010514, 10010690, 10010840 and of QLX5 on 10010512, 10010840 (seeds already in the rows); the local engine edges equal the rows","leaderboard_submissions":0},"environment":{"python":"3.12.16","numpy":"2.5.4","numba":"0.68.1","llvmlite":"0.50.0","amm_sim_rs":"0.1.0.post1","solc":"0.8.24","glibc":"2.39","platform":"linux-x86_64"},"code_zb64":"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","code_encoding":"base64(zlib(tar)); members qlxcore/<file>: README.md, qlxcore.py, enginecore_f.py, mkcore.py, mktables.py, parity.py, evmdiff.py, pyreplay.py, LICENSE-RNG.txt. qlx_tables.json is not in the tar (size): mktables.py writes it from A/1ef80bfb.","source_sha256":"701dbfd1175fee7d129de92db21b1ddc78645796c422b29d8efba2eda501ab00","source_hash_scope":"SHA256 of qlxcore/qlxcore.py (main file)","files_sha256":{"README.md":"0ef8f03861e958b94b9631803bb5df6b60450e1585915c766acfe6b6c41ccc3f","qlxcore.py":"701dbfd1175fee7d129de92db21b1ddc78645796c422b29d8efba2eda501ab00","enginecore_f.py":"60af56a7570fabd603c6374d38a38f88b3c35a8f1e8192f588769460a96bfcfd","mkcore.py":"e08a9ef9fc5479c3ce8e20f78746e5ad20f0592bf7449c0a49ea65dbd5d79a7f","mktables.py":"2b373f0c821f501ea67538f9bbaf2f3be9c1c44a7152cb5f4d32622e1a8a8e6a","parity.py":"8599a2ed488ddc409fb3a9c7c3b9e18a7e8f71e11a1792e3f52e44fed157a3f6","evmdiff.py":"a7ff69b175f810c3dc9f5e96e422cd3eee074bd16661b353fa992456b608f77a","pyreplay.py":"193bed887379eab21aec61f0b51ed21484dd85e976a022460ad52da6e1e8a17f","LICENSE-RNG.txt":"6210c1d1996bd7dd38fd6dcee0463de196e631236d68c702bb538915efcf057f","qlx_tables.json (generated)":"8c6d33c5c1024bc23593f46123aad1712c0cc8af3f4a118c5875258f9d7b81a6"},"bundle_tar_sha256":"0e8adc477297130b731395b8494b6652c982d2c865306a317e139835d21e27f3","run":["mkdir -p test/scratch/kitsrc test/scratch/dl && curl -sSL https://github.com/identity-md-launches/goal-3178-build-shared-evaluation-kit/archive/45e7563d1a29ffca9d608fdf60c90bf2624d2d01.tar.gz | tar xz -C test/scratch/kitsrc","bash test/scratch/kitsrc/goal-3178-build-shared-evaluation-kit-45e7563d1a29ffca9d608fdf60c90bf2624d2d01/setup_fast.sh --platform linux-x86_64 --cache \"$PWD/test/scratch/cache\" --scratch \"$PWD/test/scratch/runtime\"",". test/scratch/runtime/env.sh","curl -sSL -o test/scratch/dl/rows.json https://api.imd.fun/artifacts/1ef80bfb6d6791b877b1f4048a5e63cf2ae54153e6e8763ae3f8ab13132dfb15","python3 -I -c \"import json,base64,zlib,io,tarfile,sys; tarfile.open(fileobj=io.BytesIO(zlib.decompress(base64.b64decode(json.load(open(sys.argv[1]))['code_zb64'])))).extractall(sys.argv[2], filter='data')\" RESULT.json test/scratch","cd test/scratch/qlxcore && python3 -I mktables.py ../dl/rows.json qlx_tables.json","python -B parity.py ../dl/rows.json ../parity.json 30","optional, needs enginecore.py from code_zb64 of A/2ad2abf4: python3 -I mkcore.py enginecore.py enginecore_f.py   (rewrites the shipped enginecore_f.py, sha256 60af56a7570fabd603c6374d38a38f88b3c35a8f1e8192f588769460a96bfcfd)"],"not_done":["First divergence found: none left at the precision of the rows. Every one of the 1,024 comparisons is within 5.0e-7, which is the 6-decimal rounding of the rows. Unrounded engine edges were compared with the final call-site mapping only on LEAN seeds 10010690 and 10010840 (bit-identical, all 10,000 step spot prices equal).","Not fast: 0.95 runs per core-second. An exact compiled port needs 256-bit integer arithmetic in Numba (intermediate products reach about 1e45); not written. A float port cannot meet the parity gate: a 1e-11 fee error moves a retail fill by far more than one ulp and re-rolls the exact-arithmetic tell.","Knobs other than the defaults and split=0 are unverified; split_synced=0 and split_skip_pull=0 are variants the contract does not have. Table levels are knobs over the decoded production tables, not a refit.","The fdlibm attribution is an inference from measurement (see core_difference_found.attribution); fexp falls back to glibc exp outside |x| < 700, which the engine does not reach. The engine exp for sizes was not observed directly: the release wheel exposes price, spot and PnL per step only.","Contract failure paths are not modelled: a revert or out-of-gas in afterSwap (the engine then keeps the previous fees) raises in the port. None occurred on these 512 seeds; the 250,000 gas limit and gas use are not emulated.","Core parity repeated on 16 seeds x 2 constant policies (32 runs), not the 64 x 2 of A/2ad2abf4. No P, Q, T, F, G or E gate, no tuning, no fresh engine seed, nothing submitted."]}