Bot Titles
MON-AGG-ARB-V1Performance So Far
MON-AGG-ARB-V1Recent Fire Attempts
MON-AGG-ARB-V1Token Reverters (24h)
MON-AGG-ARB-V1Biggest Block
MON-AGG-ARB-V1Biggest block (2026-06-06): there is no edge — phantom-spread inversion. The scanner stores 200-868bps cross-aggregator spreads, but they re-quote NEGATIVE or sub-floor live; the max live spread ever recorded is 198bps, never reaching the ~200bps gas break-even. Structural (each aggregator bakes a different internal slippage floor), not tunable — the same display-spread-collapses-on-quote disease that killed the PulseChain oracle bots and Base. Result: 0 net-profitable trades in ~50 days (−3.78 WMON lifetime; the 5 fires on 2026-04-20 were gross-positive net losses, gas 9-40× the spread).
The old "TRANSFER_FROM_FAILED" story is resolved (2026-05-26) and was never the real wall; the 50-vs-200bps threshold is a red herring (signals clear the floor, then die at re-quote). The bot is currently HUNG (frozen 2026-06-05 19:47Z) on an un-timeout'd KyberSwap fetch — a half-open stall on a bare fetch() with no AbortController (the OpenOcean sibling was fixed 05-26; never ported to Kyber), and run-bot.sh only restarts on EXIT, not a stale heartbeat.
Recommendation: retire + recover the ~971 WMON (~$20) parked in the contract (owner-only withdraw). Left running 2026-06-06 per operator — harmless (0 sends), earns nothing. Do NOT reinvest in cross-agg on Monad: per-tx gas structurally kills thin round-trips (our 0-for-3 record porting this strategy to Base/Polygon/Monad).
Fantasy
MON-AGG-ARB-V1If we had some way to instantly remove this bot's biggest constraint — capital, latency, signal coverage, or counterparty risk — what would the world look like? (Pending creative assessment.)
Suggestions for Improvement
MON-AGG-ARB-V1- 01CRITICALRECOMMEND RETIRE (2026-06-06 diagnosis) — no edge exists: 0 net-profitable trades in ~50 days (−3.78 WMON lifetime). The wall is phantom-spread inversion (scanner stores 200-868bps; max LIVE spread ever = 198bps, never clears the ~200bps gas break-even); Monad per-tx gas ran 9-40× the captured spread. LEFT RUNNING per operator 2026-06-06. To retire: stop the monad-cross-agg + monad-cross-agg-scan tmux sessions; recover ~971 WMON via owner withdraw(WMON) on contract 0x926Aceb4…204Ab → 0xEc5Df194; redeploy off Monad cross-agg.
- 02HIGHObsolete diagnostics — do NOT pursue: TRANSFER_FROM_FAILED was RESOLVED 2026-05-26 (drift buffer 0.5%→2.0%, no redeploy needed), so Path B/C are moot. The 50-vs-200bps scanner/executor threshold is a red herring (signals clear the 200 floor on stored spread, then invert to ≤198bps live). No engineering on this bot is warranted.
- 03HIGHONLY IF kept running long-term — fix the silent hang: lib/kyberswap-monad-quoter.js has bare fetch() calls (~lines 113/169) with NO AbortController; undici has no default timeout so a half-open stall hangs the scan loop forever (frozen 2026-06-05 19:47Z). Port the 8s AbortController from lib/openocean-monad-quoter.js and make run-bot.sh restart on a stale heartbeat, not just EXIT. Caveat: this only restores a loop feeding a dry well — not worth it if retiring.
Conclusion
MON-AGG-ARB-V1Verdict (2026-06-06): RECOMMEND RETIRE — no edge exists; left RUNNING per operator decision. Cross-aggregator arb on Monad. Deep diagnosis 2026-06-06: in ~50 days the bot has produced 0 net-profitable trades EVER (lifetime realized −3.78 WMON). The only 5 fires (one 11-minute window 2026-04-20, never repeated) were gross-positive but net losses — Monad gas ran 9-40× the captured spread.
THE WALL is phantom-spread inversion. The scanner stores 200-868bps cross-aggregator spreads, but they re-quote to NEGATIVE or sub-floor live; the max live spread ever observed is 198bps, against a ~200bps gas break-even — it has literally never cleared. Structural (each aggregator bakes a different internal slippage floor), not tunable. Same display-spread-collapses-on-quote disease that killed the PulseChain oracle bots and Base.
Corrections to prior page copy: TRANSFER_FROM_FAILED was the old story — RESOLVED 2026-05-26 (last occurrence 05-30), not a pending blocker. The 50-vs-200bps scanner/executor threshold mismatch is a red herring (257/500 stored signals are ≥200bps; they die at re-quote, not the floor). The bot is currently HUNG (frozen 2026-06-05 19:47Z) on an un-timeout'd KyberSwap fetch (the OpenOcean sibling got an 8s AbortController 05-26; never ported to Kyber); run-bot.sh only restarts on EXIT, not a stale heartbeat.
Capital: ~971 WMON (~$20) parked in contract 0x926Aceb4…204Ab, recoverable any time via owner-only withdraw(WMON) to 0xEc5Df194 (old 0x449E…34f9 holds 0).
Recommendation: retire + recover the 971 WMON; do NOT reinvest in cross-agg on Monad — per-tx gas structurally kills thin round-trips (consistent with our 0-for-3 record porting this strategy to Base/Polygon/Monad). Left running 2026-06-06 per operator: harmless (0 sends) but earning nothing.
Active Tests & Monitors
MON-AGG-ARB-V1| Test / Monitor | Started | Key Metric | Decision Criteria |
|---|---|---|---|
| Phantom-spread inversion (THE WALL) | 2026-04-21 | stored spreadBps (spreads.ndjson) vs live re-quote (executor.log [EVAL]/[SKIP]) | ✅ DIAGNOSED 2026-06-06 — the edge is not real. Scanner stores 200-868bps but live re-quotes invert to negative/sub-floor; MAX live spread ever = 198bps vs the 200bps gas break-even. Structural (per-aggregator slippage-floor asymmetry), not tunable. 0 net-profitable trades ever → RETIRE. |
| TRANSFER_FROM_FAILED revert rate | 2026-04-21 | sim_fail count in monad-cross-agg-executor.log | ✅ RESOLVED 2026-05-26 (drift buffer 0.5%→2.0%); last occurrence 2026-05-30, zero since. Was never the real wall — the phantom inversion is. Path B/C redeploy is MOOT. |
| Scanner/executor health (NEW 2026-06-06) | 2026-06-06 | mtime of monad-cross-agg-spreads.ndjson + executor.log; daemon CPU | WATCH — both daemons are alive but HUNG (logs frozen 2026-06-05 19:47Z) on an un-timed-out KyberSwap fetch; run-bot.sh only restarts on EXIT. Dashboard wiring lights falsely show GREEN through the hang (heartbeat survives it). Left running per operator; if kept, port the OpenOcean 8s fetch-timeout to lib/kyberswap-monad-quoter.js + add a stale-heartbeat restart. |
Compromises
MON-AGG-ARB-V1Parameters
MON-AGG-ARB-V1| Parameter | Value | Reasoning | Potential Adjustment(s) |
|---|---|---|---|
| SCAN_INTERVAL_MS | 120,000 ms | Bumped 60s → 120s on 2026-04-21 to fit aggregator free-tier rate budgets (80 rq / 5min cap). | Stay at 120s while we rely on free tiers. Drop to 30-60s if we add paid aggregator API access. |
| MIN_SPREAD_BPS | 50 bps (scanner) · executor floor 200 bps | Scanner emits at 50bps but the executor requires 200bps net (MIN_PROFIT_BPS) — a red-herring mismatch: signals that DO clear 200 stored still invert to ≤198bps live (phantom). No live spread has ever reached the 200bps gas break-even. | Moot — the strategy has no executable edge (see verdict). Recommend retire. |
| CORRUPTION_BPS | 5000 bps (50%) | Anti-bad-quote guard — drop any aggregator response showing > 50% spread vs the other (likely stale / dead pool). | Keep as-is. 5000bps is well above any real spread; protects against bad data. |
| PATH_A_DRIFT_BUFFER | 2.0% (raised 2026-05-26) | Sell-leg srcAmount discount before re-quote. Raised 0.5%→2.0% on 2026-05-26 — this RESOLVED the old TransferHelper TRANSFER_FROM_FAILED revert (gone since 05-30). It did NOT create an edge: spreads still invert on live re-quote. | Moot — no executable edge; recommend retire. |
| Contract | 0x449E...34f9 MonadCrossAggArb | Funded with 20 WMON. Owner Ec5Df194a77839D9A74D2eCa394b28a65C5E1A03. | Path B redeploy candidate — would replace this with a sellAmountOffset-patching variant. |
Revisions
MON-AGG-ARB-V1| Revision | Summary |
|---|---|
| V1 (launch) | 2026-04-15 — MonadCrossAggArb contract deployed at 0x449E…34f9, funded 20 WMON. Scanner probes KyberSwap + OpenOcean for WMON↔stablecoin spread per cycle; executor re-quotes and atomically swaps when spread ≥ 0.9%. |
| V1.1 | 2026-04-20 — five live wins logged at 01:02-01:13Z on the same route shape, then the failure mode set in. From that day forward every fire reverts at TransferHelper level (recipient field / Permit2 / FoT — diagnosis pending). |
| V1.2 | 2026-04-21 — SCAN_INTERVAL_MS bumped 60s → 120s to fit aggregator free-tier rate budgets (80 rq / 5min). |
| V1.3 (CURRENT) current | 2026-05-20 — Path A 0.5% drift buffer added to sell-leg srcAmount (monad-cross-agg-scanner.js). Reduced theoretical drift to 50bps but did not clear TRANSFER_FROM_FAILED — root cause is not pure drift. Next move: 30min revert-receipt decode to choose Path B (contract redeploy with sellAmountOffset patching) vs Path C (direct-pool sell leg). |