{"delta":-5.262308226099058,"interpretation":"Oracle-assisted simulator ceiling experiment only: strategy reads the current true price supplied by the patched engine after each swap. No leaderboard result is claimed.","code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport {AMMStrategyBase} from \"./AMMStrategyBase.sol\";\nimport {TradeInfo} from \"./IAMMStrategy.sol\";\n\ncontract Strategy is AMMStrategyBase {\n    uint256 constant ELAPSED_CAP = 8;\n    uint256 constant SIGNAL_THRESHOLD = WAD / 650;\n    uint256 constant DIR_DECAY = 750000000000000000;\n    uint256 constant ACT_DECAY = 530000000000000000;\n    uint256 constant SIZE_DECAY = 530000000000000000;\n    uint256 constant TOX_DECAY = 910000000000000000;\n    uint256 constant SIGMA_DECAY = 690000000000000000;\n    uint256 constant LAMBDA_DECAY = 990000000000000000;\n    uint256 constant SIZE_BLEND_DECAY = 828000000000000000;\n    uint256 constant TOX_BLEND_DECAY = 51000000000000000;\n    uint256 constant ACT_BLEND_DECAY = 985000000000000000;\n    uint256 constant PHAT_ALPHA = 270000000000000000;\n    uint256 constant PHAT_ALPHA_RETAIL = 60000000000000000;\n    uint256 constant PHAT_ALPHA_SAME = 120000000000000000;\n    uint256 constant REVERT_U = 0;\n    uint256 constant DIR_IMPACT_MULT = 4;\n    uint256 constant GATE_SIGMA_MULT = 7200000000000000000;\n    uint256 constant MIN_GATE = 30000000000000000;\n    uint256 constant TRADE_TOX_BOOST = 3500 * BPS;\n    uint256 constant STALE_ATTRACT_FRAC = 1050000000000000000;\n    uint256 constant RET_CAP = WAD / 35;\n    uint256 constant TOX_CAP = WAD / 5;\n    uint256 constant TRADE_RATIO_CAP = WAD / 5;\n    uint256 constant LAMBDA_CAP = 1820000000000000000;\n    uint256 constant STEP_COUNT_CAP = 64;\n    uint256 constant BASE_FEE = 4 * BPS;\n    uint256 constant SIGMA_COEF = 200000000000000000;\n    uint256 constant LAMBDA_COEF = 12 * BPS;\n    uint256 constant FLOW_SIZE_COEF = 4842 * BPS;\n    uint256 constant TOX_COEF = 300 * BPS;\n    uint256 constant TOX_QUAD_COEF = 15000 * BPS;\n    uint256 constant ACT_COEF = 91843 * BPS;\n    uint256 constant DIR_COEF = 20 * BPS;\n    uint256 constant DIR_TOX_COEF = 100 * BPS;\n    uint256 constant STALE_DIR_COEF = 6850 * BPS;\n    uint256 constant SIGMA_TOX_COEF = 500 * BPS;\n    uint256 constant TAIL_KNEE = 600 * BPS;\n    uint256 constant TAIL_SLOPE_PROTECT = 930000000000000000;\n    uint256 constant TAIL_SLOPE_ATTRACT = 850000000000000000;\n\n    function afterInitialize(uint256 initialX, uint256 initialY) external override returns (uint256, uint256) {\n        slots[0] = BASE_FEE; slots[1] = BASE_FEE; slots[2] = 0; slots[3] = WAD; slots[4] = 0;\n        slots[5] = initialX > 0 ? wdiv(initialY, initialX) : 100 * WAD;\n        slots[6] = 950000000000000; slots[7] = 800000000000000000; slots[8] = 2000000000000000;\n        slots[9] = 0; slots[10] = 0; slots[11] = 0; slots[12] = 0;\n        slots[20] = 1407375012403289420;\n        return (BASE_FEE, BASE_FEE);\n    }\n\n    function afterSwap(TradeInfo calldata trade) external override returns (uint256, uint256) {\n        uint256 prevBidFee = slots[0]; uint256 prevAskFee = slots[1]; uint256 lastTs = slots[2];\n        uint256 dirState = slots[3]; uint256 actEma = slots[4]; uint256 pHat = slots[5];\n        uint256 sigmaHat = slots[6]; uint256 lambdaHat = slots[7]; uint256 sizeHat = slots[8];\n        uint256 toxEma = slots[9]; uint256 stepTradeCount = slots[10];\n\n        bool isNewStep = trade.timestamp > lastTs;\n        if (isNewStep) {\n            uint256 elapsedRaw = trade.timestamp - lastTs;\n            uint256 elapsed = elapsedRaw > ELAPSED_CAP ? ELAPSED_CAP : elapsedRaw;\n            dirState = _decayCentered(dirState, DIR_DECAY, elapsed);\n            actEma = wmul(actEma, _powWad(ACT_DECAY, elapsed));\n            sizeHat = wmul(sizeHat, _powWad(SIZE_DECAY, elapsed));\n            toxEma = wmul(toxEma, _powWad(TOX_DECAY, elapsed));\n            if (stepTradeCount > 0 && elapsedRaw > 0) {\n                uint256 lambdaInst = (stepTradeCount * WAD) / elapsedRaw;\n                if (lambdaInst > LAMBDA_CAP) lambdaInst = LAMBDA_CAP;\n                lambdaHat = wmul(lambdaHat, LAMBDA_DECAY) + wmul(lambdaInst, WAD - LAMBDA_DECAY);\n            }\n            stepTradeCount = 0;\n        }\n\n        bool firstInStep = stepTradeCount == 0;\n        uint256 spot = trade.reserveX > 0 ? wdiv(trade.reserveY, trade.reserveX) : pHat;\n        if (pHat == 0) pHat = spot;\n\n        uint256 feeUsed = trade.isBuy ? prevBidFee : prevAskFee;\n        uint256 gamma = feeUsed < WAD ? WAD - feeUsed : 0;\n        uint256 pImplied;\n        if (gamma == 0) { pImplied = spot; }\n        else { pImplied = trade.isBuy ? wmul(spot, gamma) : wdiv(spot, gamma); }\n\n        {\n            uint256 ret = pHat > 0 ? wdiv(absDiff(pImplied, pHat), pHat) : 0;\n            uint256 alpha = firstInStep ? PHAT_ALPHA : PHAT_ALPHA_RETAIL;\n            uint256 prePhat = pHat;\n            bool secondPrint = !firstInStep && stepTradeCount == 1;\n            bool sameDir = false; bool oppDir = false;\n            if (secondPrint) {\n                bool up2 = pImplied >= pHat;\n                uint256 d1 = slots[12];\n                if (d1 != 0) { sameDir = (d1 == 1) == up2; oppDir = !sameDir; }\n                if (sameDir) alpha = PHAT_ALPHA_SAME;\n            }\n            if (firstInStep) { slots[11] = pHat; slots[12] = pImplied >= pHat ? 1 : 2; }\n            uint256 adaptiveGate = wmul(sigmaHat, GATE_SIGMA_MULT);\n            if (adaptiveGate < MIN_GATE) adaptiveGate = MIN_GATE;\n            if (ret <= adaptiveGate) { pHat = wmul(pHat, WAD - alpha) + wmul(pImplied, alpha); }\n            if (oppDir && REVERT_U > 0) {\n                uint256 pre = slots[11];\n                if (pre > pHat) pHat = pHat + wmul(pre - pHat, REVERT_U);\n                else pHat = pHat - wmul(pHat - pre, REVERT_U);\n            }\n            if (firstInStep) {\n                if (ret > RET_CAP) ret = RET_CAP;\n                sigmaHat = wmul(sigmaHat, SIGMA_DECAY) + wmul(ret, WAD - SIGMA_DECAY);\n            }\n        }\n\n        // Interior retail routing equalizes fee-adjusted marginal prices.\n        // Subsequent trades in a step cannot be the initial arbitrage trade.\n        if (!firstInStep && feeUsed > 30 * BPS && gamma > 0) {\n            uint256 normalSpot = trade.isBuy\n                ? wdiv(wmul(spot, gamma), WAD - 30 * BPS)\n                : wdiv(wmul(spot, WAD - 30 * BPS), gamma);\n            pHat = wmul(pHat, 90 * WAD / 100) + wmul(normalSpot, 10 * WAD / 100);\n        }\n\n        uint256 tradeRatio = trade.reserveY > 0 ? wdiv(trade.amountY, trade.reserveY) : 0;\n        if (tradeRatio > TRADE_RATIO_CAP) tradeRatio = TRADE_RATIO_CAP;\n\n        if (tradeRatio > SIGNAL_THRESHOLD) {\n            uint256 push = tradeRatio * DIR_IMPACT_MULT;\n            if (push > WAD / 4) push = WAD / 4;\n            if (trade.isBuy) {\n                dirState = dirState + push;\n                if (dirState > 2 * WAD) dirState = 2 * WAD;\n            } else {\n                dirState = dirState > push ? dirState - push : 0;\n            }\n            actEma = wmul(actEma, ACT_BLEND_DECAY) + wmul(tradeRatio, WAD - ACT_BLEND_DECAY);\n            sizeHat = wmul(sizeHat, SIZE_BLEND_DECAY) + wmul(tradeRatio, WAD - SIZE_BLEND_DECAY);\n            if (sizeHat > WAD) sizeHat = WAD;\n        }\n\n        uint256 tox = pHat > 0 ? wdiv(absDiff(spot, pHat), pHat) : 0;\n        if (tox > TOX_CAP) tox = TOX_CAP;\n        toxEma = wmul(toxEma, TOX_BLEND_DECAY) + wmul(tox, WAD - TOX_BLEND_DECAY);\n        uint256 toxSignal = toxEma;\n\n        stepTradeCount = stepTradeCount + 1;\n        if (stepTradeCount > STEP_COUNT_CAP) stepTradeCount = STEP_COUNT_CAP;\n\n        uint256 p;\n        assembly { p := calldataload(196) }\n        require(p > 0, \"oracle price missing\");\n        uint256 g = wdiv(absDiff(spot, p), p);\n        uint256 exposed = clampFee(wmul((slots[20] & 65535) * 1e14, g) + ((slots[20] >> 16) & 65535) * 1e14);\n        uint256 reduction = wmul(((slots[20] >> 48) & 65535) * 1e14, g);\n        uint256 c = ((slots[20] >> 32) & 65535) * 1e14;\n        uint256 other = clampFee(c > reduction ? c - reduction : 0);\n        uint256 bidFee = spot >= p ? exposed : other;\n        uint256 askFee = spot >= p ? other : exposed;\n\n        slots[0] = bidFee; slots[1] = askFee; slots[2] = trade.timestamp;\n        slots[3] = dirState; slots[4] = actEma; slots[5] = pHat;\n        slots[6] = sigmaHat; slots[7] = lambdaHat; slots[8] = sizeHat;\n        slots[9] = toxEma; slots[10] = stepTradeCount;\n\n        return (bidFee, askFee);\n    }\n\n    function _compressTailWithSlope(uint256 fee, uint256 slope) internal pure returns (uint256) {\n        if (fee <= TAIL_KNEE) return fee;\n        return TAIL_KNEE + wmul(fee - TAIL_KNEE, slope);\n    }\n\n    function _powWad(uint256 factor, uint256 exp) internal pure returns (uint256 result) {\n        result = WAD;\n        while (exp > 0) {\n            if (exp & 1 == 1) result = wmul(result, factor);\n            factor = wmul(factor, factor);\n            exp >>= 1;\n        }\n    }\n\n    function _decayCentered(uint256 centered, uint256 decayFactor, uint256 elapsed) internal pure returns (uint256) {\n        uint256 mul = _powWad(decayFactor, elapsed);\n        if (centered >= WAD) { return WAD + wmul(centered - WAD, mul); }\n        uint256 below = wmul(WAD - centered, mul);\n        return below < WAD ? WAD - below : 0;\n    }\n\n    function getName() external pure override returns (string memory) { return \"no_cubic\"; }\n}\n","simulator_diff":"diff --git a/amm_sim_rs/src/amm/cfmm.rs b/amm_sim_rs/src/amm/cfmm.rs\nindex 02e6645..1712a91 100644\n--- a/amm_sim_rs/src/amm/cfmm.rs\n+++ b/amm_sim_rs/src/amm/cfmm.rs\n@@ -42,6 +42,7 @@ pub struct CFMM {\n     pub name: String,\n     /// EVM strategy for fee decisions\n     strategy: EVMStrategy,\n+    pub fair_price: f64,\n     /// Current X reserves\n     reserve_x: f64,\n     /// Current Y reserves\n@@ -63,6 +64,7 @@ impl CFMM {\n         Self {\n             name,\n             strategy,\n+            fair_price: 0.0,\n             reserve_x,\n             reserve_y,\n             current_fees: FeeQuote::symmetric(Wad::from_bps(30)),\n@@ -291,7 +293,7 @@ impl CFMM {\n \n     /// Update fees from strategy after a trade.\n     fn update_fees(&mut self, trade_info: &TradeInfo) {\n-        if let Ok((bid_fee, ask_fee)) = self.strategy.after_swap(trade_info) {\n+        if let Ok((bid_fee, ask_fee)) = self.strategy.after_swap(trade_info, self.fair_price) {\n             self.current_fees = FeeQuote::new(bid_fee.clamp_fee(), ask_fee.clamp_fee());\n         }\n         // On error, keep current fees\ndiff --git a/amm_sim_rs/src/evm/strategy.rs b/amm_sim_rs/src/evm/strategy.rs\nindex 1d06af1..147d868 100644\n--- a/amm_sim_rs/src/evm/strategy.rs\n+++ b/amm_sim_rs/src/evm/strategy.rs\n@@ -176,12 +176,14 @@ impl EVMStrategy {\n     ///\n     /// Returns (bid_fee, ask_fee) in WAD.\n     #[inline]\n-    pub fn after_swap(&mut self, trade: &TradeInfo) -> Result<(Wad, Wad), EVMError> {\n+    pub fn after_swap(&mut self, trade: &TradeInfo, fair_price: f64) -> Result<(Wad, Wad), EVMError> {\n         // Encode trade info into pre-allocated buffer\n         trade.encode_calldata(&mut self.trade_calldata);\n \n         // Copy calldata to avoid borrow conflict\n-        let calldata = self.trade_calldata;\n+        let mut calldata = [0u8; 228];\n+        calldata[..196].copy_from_slice(&self.trade_calldata);\n+        calldata[196..].copy_from_slice(&U256::from((fair_price * 1e18).floor() as u128).to_be_bytes::<32>());\n         let result = self.call(&calldata, GAS_LIMIT_TRADE)?;\n \n         decode_fee_pair(&result)\ndiff --git a/amm_sim_rs/src/simulation/engine.rs b/amm_sim_rs/src/simulation/engine.rs\nindex 6834c43..bb6bec8 100644\n--- a/amm_sim_rs/src/simulation/engine.rs\n+++ b/amm_sim_rs/src/simulation/engine.rs\n@@ -113,6 +113,9 @@ impl SimulationEngine {\n         edges.insert(submission_name.clone(), 0.0);\n         edges.insert(baseline_name.clone(), 0.0);\n \n+        let mut arb_edges = edges.clone();\n+        let mut retail_edges = edges.clone();\n+\n         // Run simulation steps\n         let mut steps = Vec::with_capacity(self.config.n_steps as usize);\n \n@@ -136,11 +139,13 @@ impl SimulationEngine {\n         for t in 0..self.config.n_steps {\n             // 1. Generate new fair price\n             let fair_price = price_process.step();\n+            for amm in amms.iter_mut() { amm.fair_price = fair_price; }\n \n             // 2. Arbitrageur extracts profit from each AMM\n             for amm in amms.iter_mut() {\n                 if let Some(arb_result) = arbitrageur.execute_arb(amm, fair_price, t as u64) {\n                     *arb_volume_y.get_mut(&arb_result.amm_name).unwrap() += arb_result.amount_y;\n+                    *arb_edges.get_mut(&arb_result.amm_name).unwrap() -= arb_result.profit;\n                     let entry = edges.entry(arb_result.amm_name).or_insert(0.0);\n                     // AMM edge is the negative of arbitrageur profit at true price\n                     *entry += -arb_result.profit;\n@@ -157,6 +162,7 @@ impl SimulationEngine {\n                 } else {\n                     trade.amount_y - trade.amount_x * fair_price\n                 };\n+                *retail_edges.get_mut(&trade.amm_name).unwrap() += trade_edge;\n                 let entry = edges.entry(trade.amm_name).or_insert(0.0);\n                 *entry += trade_edge;\n             }\n@@ -215,6 +221,8 @@ impl SimulationEngine {\n             arb_volume_y,\n             retail_volume_y,\n             average_fees,\n+            arb_edges,\n+            retail_edges,\n         })\n     }\n }\ndiff --git a/amm_sim_rs/src/types/result.rs b/amm_sim_rs/src/types/result.rs\nindex 0257335..0cf97da 100644\n--- a/amm_sim_rs/src/types/result.rs\n+++ b/amm_sim_rs/src/types/result.rs\n@@ -80,6 +80,10 @@ pub struct LightweightSimResult {\n \n     /// Average fees (bid, ask) by strategy name over the simulation\n     #[pyo3(get)]\n+    pub arb_edges: HashMap<String, f64>,\n+    #[pyo3(get)]\n+    pub retail_edges: HashMap<String, f64>,\n+    #[pyo3(get)]\n     pub average_fees: HashMap<String, (f64, f64)>,\n }\n \n","sha256":"d8c31796df2b4d31812702b83a7aef9940e8df84d91e40d298dca5e5f7220a9f","reference":{"name":"NP2","sha256":"51f1c1a9d4999ee460eb8bbc66880da8074b173399a4f5d71f96671482e18ac0","construction":"TWO plus NP Interior retail routing block, as specified in the assignment.","sources":[0,1]},"methodology":{"simulator_commit":"6b6921f8d463314aa7c96234e1be25a25245f704","source_indices":[2,3,4,5,6,7,8],"opponent":"Compiled contracts/src/VanillaStrategy.sol; each arm run separately against Vanilla.","batch_size":20,"workers":4,"config":"For each seed s: numpy.default_rng(s) draws size uniform(19,21), then rate uniform(.6,1), then sigma uniform(.000882,.001008); build_config(seed=s, gbm_sigma=sigma, retail_arrival_rate=rate, retail_mean_size=size). Price RNG seed=s; retail RNG seed=s+1 in pinned simulator.","paired_definition":"candidate edges[submission] minus NP2 edges[submission] per seed; sample standard deviation ddof=1 divided by sqrt(n).","oracle":"The engine sets CFMM.fair_price immediately after price_process.step(), before arbitrage and retail; strategy appends floor(fair_price*1e18) as big-endian U256 at calldata byte 196. NP2 source is unchanged.","initial_fees":"NP2 afterInitialize fees retained at 4 bps. Only post-state-update fee logic is replaced.","parameters":"One packed storage word holds four 16-bit values (a/1e-4, b in bps, c in bps, d/1e-4). Grid template patches its sole initialization literal; no runtime instructions change. Final literal source compiled normally and matched patched template exactly on seeds 11000..11019.","fee_stats":"Arithmetic mean over seeds of simulator average_fees[submission], itself mean of post-retail fee quotes over all steps; fee fraction units, not bps or volume weighted.","split":"Arbitrage edge sums -arb_result.profit; retail sums the existing true-price trade_edge. Separate accumulators added without changing edges arithmetic."},"calibration":{"CH":{"sha256":"6dd68f77a70900319460215374143dbd5d924198450a46d9f5f91f6b1e3d35c3","n":1000,"seeds":[0,999],"mean_edge":525.5258821780834,"required":525.525882178,"passed":true},"NP2":{"n":1000,"seeds":[0,999],"mean_edge":526.1155722459862,"brief_approximate":526.1156,"passed":true},"note":"Both calibration scores measured with the oracle-calldata and split-accounting patch active; neither strategy reads appended calldata."},"tuning":{"grid":{"a":[0.5,0.75,0.9,1,1.1],"b_bps":[10,15,20,25,30,35,40],"c_bps":[10,15,20,25,30,35,40],"d":[0,0.5,1]},"stage1":{"n_per_tuple":20,"seeds":[10000,10019],"tuples":735,"order":"itertools.product(a,b_bps,c_bps,d), last axis fastest; score_pairs are [mean_diff,se], rounded to 6 decimal places.","score_pairs":[[-82.40026,2.847048],[-101.009724,3.132253],[-104.139724,3.163754],[-73.981309,2.744405],[-92.053923,3.026118],[-100.542978,3.111404],[-68.615005,2.672186],[-81.260951,2.872464],[-95.805464,3.050576],[-66.161361,2.642135],[-71.569129,2.707932],[-89.28593,2.975578],[-66.559248,2.639996],[-64.380381,2.581674],[-81.657295,2.907148],[-69.514763,2.688569],[-60.504715,2.495597],[-74.038277,2.790461],[-74.252538,2.758451],[-60.198735,2.448173],[-67.818754,2.686228],[-57.372572,2.311267],[-71.599362,2.486729],[-73.775803,2.534658],[-52.031975,2.23276],[-66.039701,2.404327],[-70.96449,2.464222],[-49.868354,2.194853],[-58.101619,2.306048],[-67.637748,2.427681],[-50.749092,2.197473],[-50.248231,2.191716],[-63.779256,2.360897],[-54.270896,2.242451],[-44.988802,2.088337],[-59.607509,2.295302],[-59.374212,2.300591],[-43.444183,2.057965],[-54.86677,2.235313],[-64.991685,2.38247],[-45.420764,2.060668],[-50.336529,2.184934],[-42.516336,1.906249],[-50.49785,2.023202],[-52.26739,2.067098],[-40.645007,1.86615],[-46.287447,1.943871],[-49.852925,2.006031],[-41.468377,1.857802],[-41.337711,1.878634],[-47.208363,1.964672],[-44.385948,1.870938],[-35.998953,1.820834],[-44.357483,1.914082],[-48.709179,1.907525],[-32.82146,1.769398],[-41.680148,1.882496],[-53.804559,1.961465],[-33.343799,1.74539],[-39.30927,1.857756],[-59.19727,2.025609],[-36.881397,1.724093],[-37.282567,1.826919],[-36.089851,1.630819],[-37.575923,1.689869],[-39.133564,1.726662],[-36.652371,1.603253],[-34.127867,1.624145],[-37.060306,1.675494],[-38.651968,1.588735],[-30.652928,1.57067],[-34.852265,1.634269],[-41.834699,1.615939],[-27.636579,1.52884],[-32.547349,1.596479],[-45.953885,1.658112],[-26.249043,1.507328],[-30.541211,1.569382],[-50.605627,1.713769],[-28.007213,1.486302],[-29.054533,1.543037],[-55.482055,1.785615],[-31.927777,1.479389],[-28.08415,1.538434],[-33.994791,1.382901],[-31.636756,1.444851],[-32.97303,1.455245],[-35.284722,1.359236],[-28.927566,1.363533],[-31.190527,1.443575],[-37.429884,1.365641],[-26.202098,1.306528],[-29.427604,1.387926],[-40.449607,1.374746],[-24.228699,1.291664],[-27.561296,1.331464],[-44.116941,1.417928],[-23.546614,1.269716],[-25.953758,1.299323],[-48.340333,1.474108],[-25.189974,1.265672],[-24.795628,1.296026],[-52.84418,1.554507],[-28.662149,1.283129],[-24.081722,1.296684],[-32.908186,1.172379],[-29.645573,1.155909],[-30.647786,1.206627],[-34.446592,1.159771],[-27.301175,1.129364],[-29.291101,1.167724],[-36.588763,1.181178],[-25.099492,1.089544],[-27.719957,1.130161],[-39.305949,1.184891],[-23.463176,1.08483],[-26.097576,1.111718],[-42.563983,1.230046],[-22.665717,1.078346],[-24.690094,1.104389],[-46.285309,1.274742],[-23.534583,1.079563],[-23.594971,1.087159],[-50.462599,1.352077],[-26.143029,1.098975],[-22.931081,1.092492],[-32.26814,0.995277],[-28.724276,0.973244],[-29.614125,0.990061],[-33.896828,0.98865],[-26.669001,0.917601],[-28.428451,0.94692],[-35.860323,1.00196],[-24.778628,0.931838],[-27.066461,0.925767],[-38.331946,1.052185],[-23.288493,0.913602],[-25.575097,0.920191],[-41.228212,1.081256],[-22.505795,0.926044],[-24.321124,0.928597],[-44.716226,1.154711],[-22.881446,0.950217],[-23.296663,0.922481],[-48.49512,1.217336],[-24.577385,0.965596],[-22.617267,0.936885],[-19.69364,0.786967],[-22.388319,0.759576],[-24.097474,0.779632],[-19.441912,0.789736],[-18.641443,0.715807],[-22.064928,0.755499],[-20.892582,0.822299],[-14.415481,0.676611],[-19.679849,0.726825],[-23.87202,0.85855],[-10.550304,0.648618],[-17.06064,0.704635],[-27.998166,0.942082],[-8.365584,0.636175],[-14.556874,0.686586],[-32.971579,1.042007],[-9.146549,0.636691],[-12.214154,0.679902],[-38.332902,1.170895],[-12.277098,0.651219],[-10.525059,0.671459],[-16.861309,0.602825],[-15.161094,0.585648],[-16.472153,0.604058],[-17.982715,0.636624],[-12.361239,0.551942],[-14.802812,0.591988],[-20.259886,0.667577],[-9.439492,0.526959],[-12.964497,0.572881],[-23.524779,0.734153],[-7.054294,0.504786],[-11.030325,0.553194],[-27.552986,0.791986],[-5.897109,0.499858],[-9.276137,0.526585],[-32.164356,0.895347],[-6.783114,0.475099],[-7.862345,0.506617],[-37.149638,1.037343],[-9.793219,0.494177],[-6.911971,0.532204],[-17.802425,0.567847],[-14.873954,0.489004],[-15.887428,0.505558],[-19.243675,0.601471],[-12.516042,0.476828],[-14.53928,0.485039],[-21.508215,0.644286],[-10.093614,0.455784],[-12.94006,0.468138],[-24.626032,0.702398],[-8.196922,0.450795],[-11.281475,0.461543],[-28.283866,0.767221],[-7.23951,0.470736],[-9.771086,0.455097],[-32.480412,0.831155],[-7.845642,0.498733],[-8.578143,0.467585],[-36.948459,0.925091],[-9.934974,0.528661],[-7.855478,0.469774],[-19.379136,0.605376],[-16.062456,0.529387],[-16.980788,0.529285],[-20.940901,0.633833],[-14.049166,0.527207],[-15.775072,0.539098],[-23.06354,0.675002],[-11.965133,0.523656],[-14.375008,0.541683],[-25.788392,0.725808],[-10.297544,0.499188],[-12.951013,0.525763],[-29.008679,0.771737],[-9.402828,0.519686],[-11.595331,0.501573],[-32.722464,0.844842],[-9.712113,0.525196],[-10.531313,0.509625],[-36.713248,0.93329],[-11.157903,0.559834],[-9.886206,0.509775],[-20.697705,0.718117],[-17.29441,0.632411],[-18.106389,0.635269],[-22.220464,0.718561],[-15.559584,0.621377],[-16.975876,0.62783],[-24.214573,0.756696],[-13.715514,0.616312],[-15.778702,0.627038],[-26.675688,0.783262],[-12.3026,0.601825],[-14.514164,0.611085],[-29.538149,0.822693],[-11.428362,0.616656],[-13.337643,0.60997],[-32.904824,0.849215],[-11.476118,0.638135],[-12.453842,0.617895],[-36.587392,0.906245],[-12.563841,0.665971],[-11.74423,0.620875],[-21.726745,0.718427],[-18.347413,0.681842],[-19.045465,0.671257],[-22.980256,0.766413],[-16.765259,0.671869],[-18.019213,0.695036],[-24.866978,0.783325],[-15.139393,0.672854],[-16.959409,0.677326],[-27.223773,0.807271],[-13.8041,0.659637],[-15.692221,0.656731],[-29.89715,0.841381],[-12.992163,0.661492],[-14.669915,0.663194],[-32.965154,0.887816],[-12.909971,0.692508],[-13.858042,0.67207],[-36.415187,0.932831],[-13.700972,0.744491],[-13.163879,0.697469],[-22.26888,0.818276],[-19.096396,0.78297],[-19.671979,0.756821],[-23.849071,0.829675],[-17.523157,0.788514],[-18.749724,0.773447],[-25.584059,0.865788],[-15.987177,0.764594],[-17.7378,0.792814],[-27.844278,0.864236],[-14.841297,0.755287],[-16.561616,0.748612],[-30.353427,0.889859],[-14.12302,0.761922],[-15.613344,0.748205],[-33.174535,0.92817],[-14.033506,0.76469],[-14.799533,0.779485],[-36.28899,0.965178],[-14.735243,0.794281],[-14.235665,0.775303],[-21.286315,0.771462],[-19.460918,0.709139],[-20.576006,0.722033],[-22.291451,0.81366],[-17.063659,0.68708],[-19.241197,0.707435],[-24.157215,0.86499],[-14.662468,0.666839],[-17.639963,0.689215],[-26.785415,0.909761],[-12.5164,0.643963],[-15.98964,0.68045],[-30.091913,0.98578],[-11.296517,0.636567],[-14.441377,0.671433],[-33.967594,1.06345],[-11.441655,0.644483],[-13.093981,0.651688],[-38.038499,1.173319],[-12.850191,0.641328],[-12.145078,0.665676],[-24.251262,0.874531],[-21.910408,0.833149],[-22.814694,0.849034],[-25.372095,0.901542],[-19.944012,0.824573],[-21.72539,0.822221],[-27.212288,0.936921],[-17.935317,0.804084],[-20.437115,0.817942],[-29.728018,0.975976],[-16.200028,0.792106],[-18.973884,0.807765],[-32.628701,1.011526],[-15.181832,0.789299],[-17.666759,0.79957],[-36.124778,1.057682],[-15.17029,0.771207],[-16.575864,0.804056],[-39.965479,1.132255],[-16.364329,0.770897],[-15.783916,0.797176],[-26.387856,1.037533],[-23.944125,0.97741],[-24.704906,0.975406],[-27.50782,1.033002],[-22.136036,0.962953],[-23.661062,0.975633],[-29.270889,1.069774],[-20.344013,0.952085],[-22.484672,0.968544],[-31.602375,1.101817],[-18.885303,0.923163],[-21.161734,0.942837],[-34.345993,1.141546],[-17.979513,0.905472],[-20.059315,0.931033],[-37.465035,1.205151],[-17.974854,0.914387],[-19.116618,0.927214],[-40.930752,1.245579],[-18.87375,0.941361],[-18.336211,0.928481],[-27.710226,1.124317],[-24.777885,1.108224],[-25.497428,1.084487],[-28.847435,1.130661],[-23.353425,1.0751],[-24.594678,1.092574],[-30.47313,1.152083],[-21.808883,1.067176],[-23.587815,1.089715],[-32.564112,1.166913],[-20.578886,1.053117],[-22.517809,1.070501],[-35.170358,1.188827],[-19.84131,1.022838],[-21.496373,1.051262],[-38.055087,1.237818],[-19.787299,1.022071],[-20.610337,1.048618],[-41.379005,1.278044],[-20.455119,1.028168],[-20.026933,1.041982],[-28.090407,1.147788],[-25.462602,1.092199],[-25.980102,1.091193],[-29.208248,1.166625],[-23.940275,1.090945],[-25.062654,1.103206],[-30.739547,1.193087],[-22.520185,1.083258],[-24.113508,1.093536],[-32.783918,1.215332],[-21.337855,1.080204],[-23.050131,1.062947],[-35.1424,1.241027],[-20.71332,1.06256],[-22.091396,1.073767],[-37.910808,1.279034],[-20.653766,1.065123],[-21.347987,1.076394],[-40.966065,1.311109],[-21.20732,1.062042],[-20.871061,1.092455],[-28.224918,1.222284],[-25.437947,1.187932],[-25.960043,1.162125],[-29.517119,1.260029],[-24.214483,1.164118],[-25.156615,1.189001],[-31.080389,1.257153],[-22.998011,1.164684],[-24.39672,1.172339],[-33.09484,1.275289],[-21.908338,1.185779],[-23.434665,1.15499],[-35.364207,1.268379],[-21.324101,1.161555],[-22.604357,1.169897],[-37.947446,1.288207],[-21.255372,1.1618],[-21.939686,1.169637],[-40.786518,1.321043],[-21.790776,1.139127],[-21.49148,1.183457],[-29.006282,1.256716],[-26.07539,1.181295],[-26.511857,1.200174],[-30.281442,1.266588],[-24.978768,1.170608],[-25.834269,1.189351],[-31.8696,1.286032],[-23.838062,1.16295],[-25.113774,1.19046],[-33.810573,1.294751],[-22.952206,1.18276],[-24.229049,1.167229],[-35.9663,1.331637],[-22.198318,1.182347],[-23.467128,1.18525],[-38.376203,1.35438],[-22.138391,1.202125],[-22.887459,1.190963],[-40.970929,1.350075],[-22.626134,1.200436],[-22.476024,1.219898],[-35.848423,1.50034],[-34.264206,1.440313],[-35.086349,1.446374],[-36.733683,1.516076],[-32.458311,1.430947],[-34.078122,1.443275],[-38.161274,1.534935],[-30.59354,1.425427],[-32.855932,1.430525],[-40.282901,1.551384],[-28.967041,1.410097],[-31.628423,1.403766],[-42.79786,1.58046],[-27.97243,1.392471],[-30.378646,1.408981],[-45.760757,1.612778],[-27.870031,1.388502],[-29.312057,1.39334],[-49.166068,1.704944],[-28.726905,1.400964],[-28.487234,1.383607],[-35.561686,1.469705],[-33.440335,1.443941],[-34.169887,1.443358],[-36.473085,1.493805],[-31.961897,1.41871],[-33.272322,1.446199],[-38.007653,1.51627],[-30.35865,1.420832],[-32.282701,1.419917],[-40.019412,1.523898],[-29.012255,1.414665],[-31.125932,1.411054],[-42.449729,1.553993],[-28.205018,1.404768],[-30.062598,1.415343],[-45.323288,1.577763],[-28.066054,1.403402],[-29.225931,1.413106],[-48.396979,1.623486],[-28.730621,1.424222],[-28.556231,1.419943],[-35.242115,1.445194],[-32.945296,1.397261],[-33.48568,1.401109],[-36.240392,1.459275],[-31.564129,1.371854],[-32.703233,1.394932],[-37.717416,1.50086],[-30.179188,1.389887],[-31.810258,1.370328],[-39.650646,1.545149],[-28.967155,1.381912],[-30.855685,1.361103],[-42.018013,1.57079],[-28.300881,1.380402],[-29.911572,1.369873],[-44.726809,1.59701],[-28.205331,1.37235],[-29.132918,1.359919],[-47.553147,1.598272],[-28.740707,1.385136],[-28.521522,1.373025],[-35.327689,1.505924],[-32.878003,1.487779],[-33.417556,1.47695],[-36.38638,1.527971],[-31.666641,1.44491],[-32.636176,1.479429],[-37.932099,1.572956],[-30.410866,1.435144],[-31.863954,1.460936],[-39.784882,1.588446],[-29.287509,1.433102],[-30.975871,1.435471],[-42.010402,1.618236],[-28.590573,1.439728],[-30.087383,1.433127],[-44.640688,1.628157],[-28.560406,1.425157],[-29.376234,1.422452],[-47.365256,1.641993],[-28.974235,1.421908],[-28.822155,1.434748],[-36.653896,1.564088],[-34.010458,1.514127],[-34.575738,1.517081],[-37.76946,1.59937],[-33.003406,1.499264],[-33.967125,1.494104],[-39.222979,1.611842],[-31.819693,1.487084],[-33.204229,1.501468],[-41.0554,1.618139],[-30.908974,1.484083],[-32.354648,1.481469],[-42.895458,1.6458],[-30.294617,1.478318],[-31.573098,1.479703],[-45.270287,1.690235],[-29.863111,1.436908],[-30.896621,1.475702],[-47.781343,1.688323],[-30.347445,1.445876],[-30.489435,1.473546],[-38.890122,1.604813],[-36.228971,1.560811],[-36.588605,1.542304],[-40.035715,1.614991],[-35.323732,1.559134],[-36.004603,1.560695],[-41.380149,1.614246],[-34.333556,1.585693],[-35.413161,1.571817],[-43.153781,1.59965],[-33.599638,1.579741],[-34.733941,1.575342],[-44.989332,1.644426],[-33.064009,1.600008],[-34.201357,1.591068],[-47.258836,1.655831],[-32.80217,1.575166],[-33.674247,1.608961],[-49.589545,1.662402],[-33.154184,1.569863],[-33.162761,1.573283],[-42.550523,1.697802],[-40.19445,1.695783],[-40.476554,1.689042],[-44.403389,1.84479],[-39.363119,1.702017],[-40.074731,1.693715],[-45.386987,1.927881],[-38.52361,1.671824],[-39.461901,1.7106],[-47.084019,1.94847],[-37.82418,1.677415],[-38.85387,1.668052],[-48.90876,1.933825],[-37.235651,1.676187],[-38.356131,1.652252],[-50.821239,1.903874],[-37.085382,1.632846],[-37.854194,1.665916],[-53.098171,1.893873],[-37.319717,1.612391],[-37.46803,1.677175],[-53.333607,3.09906],[-51.828079,3.147704],[-52.441306,3.13797],[-54.068531,3.083694],[-50.378652,3.159935],[-51.650157,3.145401],[-55.392604,3.100056],[-48.989881,3.173301],[-50.642314,3.157658],[-57.094318,2.993872],[-47.807101,3.155499],[-49.650678,3.161317],[-59.328057,2.951374],[-46.967827,3.142796],[-48.783958,3.165442],[-61.627906,2.905378],[-46.847034,3.117793],[-47.960578,3.166603],[-64.117388,2.879921],[-47.222877,3.135308],[-47.402129,3.155874],[-56.096282,3.938394],[-54.84827,4.095867],[-55.377937,4.093541],[-56.889272,3.902905],[-53.760891,4.103376],[-54.707522,4.098342],[-58.11367,3.860576],[-52.528717,4.135587],[-53.93783,4.103961],[-59.74009,3.831359],[-51.679615,4.131537],[-53.204582,4.101191],[-61.879812,3.845788],[-51.051185,4.140734],[-52.43494,4.12286],[-63.751353,3.656374],[-50.925542,4.103507],[-51.776927,4.114864],[-66.181476,3.561804],[-51.230709,4.119549],[-51.268311,4.14398],[-59.851809,4.338184],[-58.103203,4.314833],[-58.615679,4.303569],[-60.588344,4.268602],[-57.085197,4.33983],[-57.972691,4.31744],[-61.60524,4.256309],[-56.038871,4.343515],[-57.238077,4.328382],[-63.25621,4.192693],[-55.13233,4.356475],[-56.54651,4.325874],[-65.073382,4.216697],[-54.502033,4.355038],[-55.880254,4.359798],[-66.851737,4.145304],[-54.382237,4.394472],[-55.251093,4.372758],[-68.989999,4.132981],[-54.959758,4.37119],[-54.696743,4.384273],[-64.585992,4.395924],[-63.346327,4.404196],[-63.754865,4.396583],[-64.831695,4.3633],[-62.412224,4.423602],[-63.122872,4.410393],[-66.737448,4.449315],[-61.425576,4.429114],[-62.506048,4.40887],[-67.940419,4.42262],[-60.621858,4.457604],[-61.878452,4.416986],[-69.337871,4.395919],[-59.983532,4.440203],[-61.239845,4.442098],[-71.335538,4.370564],[-59.675503,4.429232],[-60.654032,4.456845],[-72.215146,4.277537],[-60.040719,4.4468],[-60.282438,4.466064],[-70.860362,4.522371],[-69.691989,4.563437],[-70.033962,4.540045],[-71.41589,4.478559],[-69.069348,4.575401],[-69.879151,4.568727],[-73.054961,4.569991],[-68.074327,4.580009],[-69.213785,4.5443],[-73.585053,4.60726],[-67.234407,4.596615],[-68.492951,4.549634],[-74.789037,4.545933],[-66.676067,4.572841],[-67.911123,4.566895],[-76.163377,4.523313],[-66.387924,4.554933],[-67.256342,4.581833],[-77.813696,4.483595],[-66.469159,4.539424],[-66.903552,4.581918],[-77.120764,4.66941],[-76.950503,4.763376],[-76.865605,4.707859],[-77.458277,4.611554],[-75.949794,4.719495],[-76.625072,4.764259],[-78.145265,4.563463],[-75.246071,4.769115],[-76.376655,4.814736],[-80.073324,4.722576],[-74.497059,4.825996],[-75.517773,4.750015],[-80.934972,4.652995],[-73.774493,4.804122],[-74.920818,4.722076],[-82.366704,4.602006],[-73.386953,4.749045],[-74.424654,4.753161],[-83.922183,4.540684],[-73.375765,4.708577],[-74.069957,4.811086],[-85.268133,4.963338],[-84.834859,4.991128],[-84.894203,4.980443],[-85.04078,4.930359],[-83.999846,4.929815],[-84.458568,4.942615],[-85.744705,4.890503],[-83.348503,4.979523],[-84.044934,4.941851],[-87.063831,4.918716],[-82.53047,4.982128],[-83.344621,4.953807],[-88.14635,4.78542],[-82.010637,5.029508],[-83.082188,4.976547],[-89.463475,4.662904],[-81.757433,5.048307],[-82.62589,5.048751],[-90.819457,4.601805],[-81.636762,5.000689],[-82.180982,5.026604]]},"stage2":{"selection":"Top 12 by stage1 mean_diff; maximize stage2 mean_diff.","n_per_tuple":200,"seeds":[10020,10219],"results":[{"a":0.75,"b":15,"c":30,"d":0.5,"n":20,"mean_diff":-5.897109465523485,"se":0.4998576641128589,"stage2":{"n":200,"mean_diff":-5.215965909006464,"se":0.18742383173131608}},{"a":0.75,"b":15,"c":35,"d":0.5,"n":20,"mean_diff":-6.783113722928547,"se":0.47509852731307856,"stage2":{"n":200,"mean_diff":-6.086302416282956,"se":0.18184436218828617}},{"a":0.75,"b":15,"c":40,"d":1,"n":20,"mean_diff":-6.911971408798519,"se":0.5322041280221871,"stage2":{"n":200,"mean_diff":-6.237474140449717,"se":0.19727544161955873}},{"a":0.75,"b":15,"c":25,"d":0.5,"n":20,"mean_diff":-7.054294369340292,"se":0.5047861189760848,"stage2":{"n":200,"mean_diff":-6.519742501710903,"se":0.20240479878337528}},{"a":0.75,"b":20,"c":30,"d":0.5,"n":20,"mean_diff":-7.23951028006361,"se":0.47073572182500545,"stage2":{"n":200,"mean_diff":-6.563748110595409,"se":0.17859370472746738}},{"a":0.75,"b":20,"c":35,"d":0.5,"n":20,"mean_diff":-7.845641600142824,"se":0.4987329706079207,"stage2":{"n":200,"mean_diff":-7.0447170348910735,"se":0.1761993938721852}},{"a":0.75,"b":20,"c":40,"d":1,"n":20,"mean_diff":-7.8554780604328185,"se":0.46977429427721207,"stage2":{"n":200,"mean_diff":-7.176978041554608,"se":0.18476725446314854}},{"a":0.75,"b":15,"c":35,"d":1,"n":20,"mean_diff":-7.862345331785588,"se":0.506617449835897,"stage2":{"n":200,"mean_diff":-7.325693472866374,"se":0.20767588626776534}},{"a":0.75,"b":20,"c":25,"d":0.5,"n":20,"mean_diff":-8.19692241274783,"se":0.4507953870916956,"stage2":{"n":200,"mean_diff":-7.6055816465217525,"se":0.18819396093369944}},{"a":0.75,"b":10,"c":30,"d":0.5,"n":20,"mean_diff":-8.365583945522454,"se":0.6361753794516175,"stage2":{"n":200,"mean_diff":-8.015752992345032,"se":0.23494886759369804}},{"a":0.75,"b":20,"c":35,"d":1,"n":20,"mean_diff":-8.57814250821317,"se":0.46758474416198115,"stage2":{"n":200,"mean_diff":-8.018189149574109,"se":0.1923526849229717}},{"a":0.75,"b":10,"c":35,"d":0.5,"n":20,"mean_diff":-9.146549015221996,"se":0.6366913111534895,"stage2":{"n":200,"mean_diff":-8.62860016297356,"se":0.22399057206255427}}]},"frozen":{"selected":{"a":0.75,"b":15,"c":30,"d":0.5,"n":20,"mean_diff":-5.897109465523485,"se":0.4998576641128589,"stage2":{"n":200,"mean_diff":-5.215965909006464,"se":0.18742383173131608}},"sha256":"d8c31796df2b4d31812702b83a7aef9940e8df84d91e40d298dca5e5f7220a9f","equivalence_seeds":[11000,11019],"equivalence_exact":true},"holdout":"One confirmation only, seeds 2710000..2711999; no tuning or selection used these seeds.","repaired_issue":"Initial tuning harness stored parameters in four extra slots and exceeded afterInitialize gas. Replaced with one packed word before measuring the grid; gas limits unchanged."},"paired":{"n":2000,"mean_diff":-5.262308226099058,"se":0.06504516455654068,"worst":[{"seed":2711840,"diff":-23.506285771174362,"candidate_edge":787.1027813052903,"np2_edge":810.6090670764646},{"seed":2710891,"diff":-17.576535221796803,"candidate_edge":756.3975436223868,"np2_edge":773.9740788441836},{"seed":2710427,"diff":-16.750760443733952,"candidate_edge":743.0591737343568,"np2_edge":759.8099341780908},{"seed":2711212,"diff":-16.380332215771432,"candidate_edge":757.9799446584,"np2_edge":774.3602768741714},{"seed":2711440,"diff":-15.664495489577575,"candidate_edge":742.0232355832678,"np2_edge":757.6877310728454},{"seed":2711498,"diff":-15.15553363439642,"candidate_edge":668.0559599497632,"np2_edge":683.2114935841596},{"seed":2710263,"diff":-14.860650392538446,"candidate_edge":641.4190390174836,"np2_edge":656.279689410022},{"seed":2710139,"diff":-14.57115333285094,"candidate_edge":706.8124349232992,"np2_edge":721.3835882561501},{"seed":2710210,"diff":-14.248847261829383,"candidate_edge":669.722215332849,"np2_edge":683.9710625946784},{"seed":2710630,"diff":-14.16330712063359,"candidate_edge":606.0898065943836,"np2_edge":620.2531137150172}],"candidate_mean":521.4016452226265,"np2_mean":526.6639534487255},"split":{"arb":{"mean_diff":-0.48424107663925214,"se":0.058245435571098514},"retail":{"mean_diff":-4.778067149459827,"se":0.04091404940532672}},"fee_stats":{"bid":0.003361748816020507,"ask":0.0032603222673243774,"np2_bid":0.0036414205800230364,"np2_ask":0.003540393661775732},"split_sum_error":5.9117155615240335e-12,"blocked":null,"next":"Do not promote this static oracle fee rule over NP2. Untested next hypothesis: retain NP2 adaptive mid-fee and replace only directional skew with oracle information, to isolate direction information from loss of base-fee adaptation.","reproduction":{"experiment.py":"import json,hashlib,itertools,time\nfrom pathlib import Path\nimport numpy as np\nimport amm_sim_rs\nfrom amm_competition.evm.compiler import SolidityCompiler\nfrom amm_competition.competition.config import build_config\nROOT=Path(__file__).resolve().parents[2]\nOUT=Path(__file__).resolve().parent\ncomp=SolidityCompiler()\ndef compile(s,name=\"Strategy\"):\n r=comp.compile(s,contract_name=name);assert r.success,r.errors\n return bytes(r.bytecode)\nvan=compile(Path('contracts/src/VanillaStrategy.sol').read_text(),'VanillaStrategy')\nnp2=(ROOT/'NP2.sol').read_text()\nbase=compile(np2)\ndef configs(seeds):\n out=[]\n for s in seeds:\n  rng=np.random.default_rng(s);size=rng.uniform(19,21);rate=rng.uniform(.6,1);sigma=rng.uniform(.000882,.001008)\n  out.append(build_config(seed=s,gbm_sigma=sigma,retail_arrival_rate=rate,retail_mean_size=size))\n return out\ndef run(b,seeds):\n rows=[]\n for i in range(0,len(seeds),20):\n  res=amm_sim_rs.run_batch(list(b),list(van),configs(seeds[i:i+20]),4)\n  for r in res.results:\n   rows.append([r.seed,r.edges['submission'],r.arb_edges['submission'],r.retail_edges['submission'],*r.average_fees['submission']])\n return np.array(rows)\ndef save(name,rows): np.save(OUT/(name+'.npy'),rows)\nif __name__=='__main__':\n t=time.time()\n ch=compile((ROOT/'CH.sol').read_text())\n for name,b in [('CH',ch),('NP2',base)]:\n  rows=run(b,list(range(1000)));save(name,rows);mean=rows[:,1].mean();print(name,mean,'elapsed',time.time()-t,flush=True)\n  if name=='CH':assert abs(mean-525.525882178)<1e-8,mean\n","tune.py":"from experiment import *\n# The sentinels are only initialization values in slots 20..23; every grid\n# evaluation uses identical runtime instructions with four different values.\nmarkers=['0x'+'1234'*16]\ndef source(params):\n packed=params[0] if len(params)==1 else str(sum((int(v)//10**14)<<(16*i) for i,v in enumerate(params)))\n s=np2.replace('        return (BASE_FEE, BASE_FEE);',f'        slots[20] = {packed};\\n'+'        return (BASE_FEE, BASE_FEE);',1)\n start=s.index('        uint256 flowSize =');end=s.index('        slots[0] = bidFee;',start)\n s=s[:start]+'''        uint256 p;\n        assembly { p := calldataload(196) }\n        require(p > 0, \"oracle price missing\");\n        uint256 g = wdiv(absDiff(spot, p), p);\n        uint256 exposed = clampFee(wmul((slots[20] & 65535) * 1e14, g) + ((slots[20] >> 16) & 65535) * 1e14);\n        uint256 reduction = wmul(((slots[20] >> 48) & 65535) * 1e14, g);\n        uint256 c = ((slots[20] >> 32) & 65535) * 1e14;\n        uint256 other = clampFee(c > reduction ? c - reduction : 0);\n        uint256 bidFee = spot >= p ? exposed : other;\n        uint256 askFee = spot >= p ? other : exposed;\n\n'''+s[end:]\n return s\nif __name__=='__main__':\n template=compile(source(markers));mb=[bytes.fromhex(x[2:]) for x in markers]\n print('marker_counts',[template.count(x) for x in mb],flush=True)\n assert all(template.count(x)==1 for x in mb)\n (OUT/'oracle_template.sol').write_text(source(markers))\n def patched(params):\n  b=template\n  packed=sum((int(v)//10**14)<<(16*i) for i,v in enumerate(params))\n  b=b.replace(mb[0],packed.to_bytes(32,'big'))\n  return b\n seeds=list(range(10000,10020));ref=run(base,seeds);save('tune_ref20',ref)\n grid=list(itertools.product([.5,.75,.9,1,1.1],range(10,41,5),range(10,41,5),[0,.5,1]))\n records=[];t=time.time()\n for i,(a,b,c,d) in enumerate(grid):\n  params=[round(a*1e18),b*10**14,c*10**14,round(d*1e18)]\n  rows=run(patched(params),seeds);diff=rows[:,1]-ref[:,1]\n  records.append(dict(a=a,b=b,c=c,d=d,n=len(seeds),mean_diff=float(diff.mean()),se=float(diff.std(ddof=1)/len(diff)**.5)))\n  if (i+1)%15==0:\n   (OUT/'grid.json').write_text(json.dumps(records));print('grid',i+1,'/',len(grid),'best',max(records,key=lambda x:x['mean_diff']),'elapsed',time.time()-t,flush=True)\n (OUT/'grid.json').write_text(json.dumps(records))\n top=sorted(records,key=lambda x:x['mean_diff'],reverse=True)[:12]\n seeds=list(range(10020,10220));ref=run(base,seeds);save('tune_ref200',ref)\n for j,r in enumerate(top):\n  params=[round(r['a']*1e18),r['b']*10**14,r['c']*10**14,round(r['d']*1e18)]\n  rows=run(patched(params),seeds);save('top'+str(j),rows);diff=rows[:,1]-ref[:,1];r['stage2']=dict(n=len(seeds),mean_diff=float(diff.mean()),se=float(diff.std(ddof=1)/len(diff)**.5))\n  (OUT/'top.json').write_text(json.dumps(top));print('top',j,r,flush=True)\n selected=max(top,key=lambda r:r['stage2']['mean_diff']);params=[round(selected['a']*1e18),selected['b']*10**14,selected['c']*10**14,round(selected['d']*1e18)]\n code=source([str(v) for v in params]);(OUT/'selected.sol').write_text(code)\n compiled=compile(code)\n # Verify source compilation and patched template have identical behavior.\n r1=run(compiled,list(range(11000,11020)));r2=run(patched(params),list(range(11000,11020)));assert np.array_equal(r1,r2),np.max(abs(r1-r2))\n (OUT/'frozen.json').write_text(json.dumps({'selected':selected,'sha256':hashlib.sha256(code.encode()).hexdigest(),'equivalence_seeds':[11000,11019],'equivalence_exact':True}))\n print('FROZEN',selected,flush=True)\n","confirm.py":"from experiment import *\nif __name__=='__main__':\n frozen=json.loads((OUT/'frozen.json').read_text())\n source=(OUT/'selected.sol').read_text();assert hashlib.sha256(source.encode()).hexdigest()==frozen['sha256']\n cand=compile(source)\n assert not (OUT/'confirmation_started.json').exists(),'Do not reuse holdout'\n (OUT/'confirmation_started.json').write_text(json.dumps({'seed_start':2710000,'n':2000,'sha256':frozen['sha256']}))\n a=[];b=[];t=time.time()\n for start in range(2710000,2712000,20):\n  seeds=list(range(start,start+20));a.extend(run(cand,seeds));b.extend(run(base,seeds))\n  if len(a)%100==0:print('confirmed',len(a),'elapsed',time.time()-t,flush=True)\n a=np.array(a);b=np.array(b);save('confirm_candidate',a);save('confirm_np2',b)\n d=a[:,1]-b[:,1];order=np.argsort(d)[:10]\n def stats(x):return dict(mean_diff=float(x.mean()),se=float(x.std(ddof=1)/len(x)**.5))\n report=dict(paired=dict(n=len(d),**stats(d),worst=[dict(seed=int(a[i,0]),diff=float(d[i]),candidate_edge=float(a[i,1]),np2_edge=float(b[i,1])) for i in order],candidate_mean=float(a[:,1].mean()),np2_mean=float(b[:,1].mean())),split=dict(arb=stats(a[:,2]-b[:,2]),retail=stats(a[:,3]-b[:,3])),fee_stats=dict(bid=float(a[:,4].mean()),ask=float(a[:,5].mean()),np2_bid=float(b[:,4].mean()),np2_ask=float(b[:,5].mean())),split_sum_error=float(abs((a[:,2]+a[:,3])-a[:,1]).max()))\n (OUT/'confirmation.json').write_text(json.dumps(report));print(json.dumps(report),flush=True)\n"},"conclusion":{"beats_NP2":false,"clears_top10_gain_target":false,"clears_first_place_gain_target":false,"scope":"Inference applies to this specified static fee family and tested parameter grid; it is not an optimal-control bound on every oracle strategy."},"grid_best_by_a":[{"a":0.5,"b":40,"c":30,"d":0.5,"n":20,"mean_diff":-22.50579461343181,"se":0.9260436772948621},{"a":0.75,"b":15,"c":30,"d":0.5,"n":20,"mean_diff":-5.897109465523485,"se":0.4998576641128589},{"a":0.9,"b":10,"c":30,"d":0.5,"n":20,"mean_diff":-11.296517362239646,"se":0.63656675094221},{"a":1,"b":10,"c":35,"d":0.5,"n":20,"mean_diff":-27.87003126816628,"se":1.3885024677116464},{"a":1.1,"b":10,"c":35,"d":0.5,"n":20,"mean_diff":-46.84703364092656,"se":3.117793440869923}],"evidence_hashes":{"CH.npy":"393ec67bc72b4fdb7ec1e5a3554e3f3ad893735041b8ffb303d69fd99468d1e3","NP2.npy":"de9f6c47ca44354462de2c9e2925c731314e35218b5c02240990d8affdcc73a8","confirm_candidate.npy":"b4bd64802f33752c04604f1f8b6cc78fb3c2272588009ae7c62184450a6b43e5","confirm_np2.npy":"40b19f9a3ce22d5963f882f0f70375838ac19d29b1c9e55f80c0d509ef8019a9","grid.json":"ed8f352c37257bc8b07667b3da34068dec4a44608dc253c20ac096de63c4509d","top.json":"d8298576a8776a80b0b59f3d595109514e07e463f75804e8ed316a25f83da862"}}
