Wick Crypto Engine
arrow_back Back to Bot Fleet Bot Notes · Cross-Fleet Aggregation

Bot Notes — Cross-Bot Lessons & Highlights

45 lessons · 29 impressive patterns · contributed by 13 bots. Each entry leads with the universal principle; the source bot is the second column (clickable to its detail page). Lessons here also surface on the originating bot page under Lessons & Highlights.

Lessons Learned · 45

KindSource botPrinciple (source example in parens)
LESSONPLS-AGG-ARB-V5Lifetime ledgers are often dominated by a single tail event — separate the closed event from steady-state before drawing conclusions about edge or W:L. (PLS-AGG-ARB: −775K WPLS = 4 honeypots on 2026-05-13 via V2/V3 amountOutMin=0 bug fixed 05-18; strip them and the other 88 fires net +469K.)
LESSONPLS-AGG-ARB-V5A pre-fire probe passing does not guarantee on-chain success — network state between probe and submit can invalidate the gate. (PLS-AGG-ARB: V4_EST_BYPASS probe-OK gate auto-killed twice under stricter guards at −1,360 WPLS cost.)
LESSONPLS-AGG-ARB-V5Verify contract state on-chain before declaring it — cached/derived views can show wrong addresses or stale data. (PLS-AGG-ARB: V5 was thought drained but held 5.05M WPLS + 1,729 eHEX + 547 HEX; earlier check had hit the wrong contract.)
LESSONPLS-AGG-ARB-V5A subscription source that delivers signals (e.g. tx hashes) is not the same as one that serves details — connected-but-dead is a silent failure class. Split subscription source from resolver source when the subscription has a minimal protocol. (PLS-AGG-ARB: pre-V6.1 sentinel returned -32601 on getTransactionByHash; fixed by resolving via rpc.pulsechain.box.)
LESSONPLS-AGG-ARB-V5Observed "opportunities" are mostly noise (quote staleness, drift, off-chain artifacts) not edge — the post-filter residue IS the strategy, not the abundance. (PLS-AGG-ARB: 4-8 daily fires are the residue of ~460 [FOUND]/day; sim-pass 0.1%, gas ~9× gross on the mean spread.)
LESSONPLS-AGG-ARB-V5Aggregator / oracle quotes systematically drift from on-chain reality — measure per-source drift and apply route-specific discounts, never trust a global average. (PLS-AGG-ARB: 9x drift −22.2% vs Piteas +1.06% — required separate discount factors per route.)
LESSONPLS-AGG-ARB-V5Audit the trade log before destructive edits — assumptions about "dead" routes/tokens/configs are often stale; the log is the truth. (PLS-AGG-ARB: the original cut-dead-routes plan would have killed 9x→9x at 16/16 wins + 5,828 WPLS — caught by trade-log audit and voided.)
LESSONPLS-AGG-ARB-V5Public WSS RPCs do not reliably support mempool subscriptions — assume timeout, have a local/private fallback. (PLS-AGG-ARB: publicnode + pulsechain.com both timeout on eth_subscribe(pending); local pulse-sentinel is the only working source.)
LESSONPLS-AGG-ARB-V5Multi-step execution paths fail-half (partial swap, dangling token, slippage) at much higher rates than atomic single-tx — disable until the failure histogram clears the re-arm. (PLS-AGG-ARB: 2-step disabled 2026-05-13 when half the day reverts were 2-step buy legs.)
LESSONPLS-AGG-ARB-V5Anchor bot-liveness checks on the OS UTC clock, never file mtime (TZ-local) or harness "today" (TZ-local) — the offset can fake an hours-long outage that is not there. (Source: a phantom 8h-hung false alarm on the PulseChain log where last-ts was UTC but stat mtime was Perth UTC+8.)
LESSONPLS-AGG-ARB-V5Security-hardening cost-vs-value is capital-gated — at thin capital, multisig migration friction outweighs tail-risk reduction. Document the acceptance, do not leave it implicit. (Chef directive 2026-05-26: defer key migration on all bots until wallets hold enough to justify the security work.)
LESSONPLS-AGG-ARB-V5A guard built from one execution path telemetry must be SCOPED to that path — verify which pathType the underlying data actually covers before letting it gate other paths, or the guard mislabels proven winners on routes it has no data for. (Source: PLS-AGG-ARB-V5: recordStandardRevert was called at exactly one site, on the direct path, so isRecentlyReverting held only direct-path reverts — yet isExoticForCap consulted it for ALL paths, demoting proven blue-chips (HEX/PLSX/USDC/eHEX) to the 25K exotic cap on their winning v4_cross route, 10 of 28 loss-cap blocks; fixed 2026-05-29 by excluding isRecentlyReverting for v4_cross/v4_bypass/v4_fallback.)
LESSONPLS-AGG-ARB-V5A dual-broadcast relay that wins the submit race but cannot confirm its own receipts is WORSE than pure-RPC: submit-source and confirm-source must be consistent, or every win is invisible to tx.wait — driving receipt timeouts, gas-bump churn, nonce drift and self-cancels. (Source: PLS-AGG-ARB-V5: USE_SENTINEL_SUBMIT=0 reversion 2026-05-31 — post-OOM the sentinel relay (9 peers) won Promise.any 108/0 but tx.wait confirmed via RPC → receipt timeouts, [NONCE] Corrected 3036→3037, 6 self-cancels, TX_MINED 24→6, ZERO wins vs May29 via=rpc 39 / sentinel 8 with 16 wins.)
LESSONPLS-AGG-ARB-V5Do not trust the RPC pending nonce on busy or peer-poor chains: a tx the node has not propagated yet hands the next tx a duplicate nonce (replacement race), and a dropped tx leaves a nonce gap that silently blocks every later send. Track the nonce locally — seed from getTransactionCount('latest') on startup, increment after each submit (reverts still consume the nonce), and resync after a timeout. (PLS-AGG-ARB-V5: getTransactionCount('pending') drove a 58% tx-drop rate, est. 8,485 PLS lost; fixed by a local nonce manager per logs/tx-speedup-recommendations.md Fix 1.)
LESSONPLS-AGG-ARB-V5A "mass dormant bots from one event" alarm is usually a state-drift phantom — cluster the heartbeat-death timestamps and the single cohort crash resolves into several INDEPENDENT smaller events (operator kill batches, capital sweeps, orphaned scanners) with no shared crash signature; a later reboot or upgrade that post-dates every cluster cannot be the cause. (Source: PLS-AGG-ARB-V5: the 27-dormant-from-one-cohort framing resolved into 3 independent clusters — C 2026-05-04 (13 orphaned scanners, 34s), B 2026-05-19 (6 bots, 41s, tied to capital-sweep-20260519.js), A 2026-05-22 (4 bots, 32s); the 2026-05-23 kernel reboot post-dated all three.)
LESSONPLS-AGG-ARB-V5Shared-EOA nonce collision: when a manual tx and a live bot sign from the SAME wallet, they race for the same nonce and one is silently dropped (replaced). Before any manual owner tx, STOP the bot (or pause its signer) and wait for the mempool to drain (pending nonce == latest). (CROSS-BOT — any bot whose contract you fund/redeploy from the bot wallet. PLS-AGG-ARB V7 cutover 2026-06-23: the first fund tx was replaced by the bot's own arb tx at nonce 3918; re-sequenced to stop→drain→fund→restart.)
LESSONPLS-AGG-ARB-V5Fund the NEW contract from the OWNER wallet, never by draining the old one: leaving the predecessor fully funded makes rollback one step (flip the address file back + restart), with zero fund moves. (CROSS-BOT redeploy pattern. PLS-AGG-ARB V7: funded V7 2.6M WPLS from owner, V6 left intact as instant rollback.)
LESSONPLS-AGG-ARB-V5A fresh contract pays a one-time re-approval tax: redeploying resets every token→router allowance to zero, so the boot pre-approval pass (T1/T2 tokens × sell-routers, ~180 txs) blocks the scan loop for ~30 min before trading resumes. Pre-approve the NEW contract while the OLD one still runs to make the cutover instant. (CROSS-BOT. PLS-AGG-ARB V7 cutover 2026-06-23.)
LESSONPLS-AGG-ARB-V5Measure the DETECT→FIRE budget before concluding "the edge is thin" — a spread evaluated after a multi-block pipeline is the DECAYED spread, not the born spread. (PLS-AGG-ARB l4-timing over 6,209 candidates: median scan→txSent = 39.2s ≈ 4 PLS blocks — buy quotes 4.5s → sell quotes 14.1s → ranking 10.1s → sim 10.1s, all sequential HTTP. The 5,008 "gasblock" outcomes were judged on spreads that had 30+ seconds to decay; the "depth ceiling ~7K WPLS gross" measured post-decay capture, not opportunity size at birth.)
LESSONPLS-AGG-ARB-V5Compare gas UNITS with the competition, not just gas price — execution-path bloat is a structural breakeven handicap. (PLS-AGG-ARB: our aggregator-calldata fires average ~2.3M gas units; the most active PLS competitor wallets average ~572K. Their breakeven spread is ~4× lower, so a whole band of spreads is profitable for them and permanently dead for us at any speed.)
LESSONPLS-ATOMIC-ARB-V1Strategy verdicts often get answered by capital flow rather than analysis — when working capital is drained while the bot produces 0 wins, the operator-side call has already been made; recognize it formally instead of leaving the slot ambiguous. (PLS-ATOMIC-ARB-V1: 7.1M WPLS drained to 0 across the same window that produced 0 lifetime wins.)
LESSONPLS-ATOMIC-ARB-V1Fair-comparison-set when diagnosing failing bots: same chain conditions ≠ same strategy population. Aggregator-routed paths have MEV already priced in; residual-spread strategies on top compete against the aggregators themselves, not the underlying pools. (PLS-ATOMIC-ARB-V1 vs PLS-AGG-ARB-V5: same chain, same gas, same competitors — V1 chases the residual the aggregators leave behind, and that residual may simply not exist post-Piteas/Squirrel maturity.)
LESSONPLS-ATOMIC-ARB-V1Losing-the-race-to-inclusion can masquerade as every-sim-reverts-at-K-invariant — pool state moves between scanner quote and tx land. Without admitting the race, patches target symptoms (slippage cushion, verdict gate) instead of the root cause. (PLS-ATOMIC-ARB-V1: every sim-pass-then-revert is somebody else eating the spread before our mine.)
LESSONBSC-VENUS-LIQ-V1Code-path-complete with 0 fires is not necessarily failure — it can be market-state-gated. Instrument the gap (forecaster signal → executor outcome) before concluding the strategy is broken. (BSC-VENUS-LIQ-V1: 60+ days no fire; all 9 watchlist users sit at HF 1.01-1.15; bot is mechanically capable of liquidating in real time, waiting for the next price-shock event.)
LESSONBSC-VENUS-LIQ-V1Forecaster signal ≠ executor opportunity — off-chain HF models drift vs the on-chain oracle, and even with perfect plumbing the same signal can be 2-second-stale by the time the executor reads chain state. Instrument forecaster-vs-executor diff to find the freshness gap. (BSC-VENUS-LIQ-V1: 3 urgent signals at 08:33:40 with curHF 0.327-0.790 all skipped 3 seconds later when executor saw shortfall=0 on-chain.)
LESSONMON-AGG-ARB-V1A failure mode can set in PERMANENTLY after a brief winning window — the first few wins do not prove the strategy is durable. Edge can disappear under the same architecture, same network, same exec path. (MON-AGG-ARB-V1: 5 wins logged 2026-04-20 01:02-01:13Z, then every fire since has reverted at TransferHelper level.)
LESSONMON-AGG-ARB-V1A drift buffer rarely fixes the root cause when the failure mode is structural — TRANSFER_FROM_FAILED is usually allowance / calldata, not slippage drift. Patch the failure mode, not the symptom. (MON-AGG-ARB-V1: 0.5% sell-leg drift buffer (Path A) reduced theoretical drift to 50bps but did not clear TRANSFER_FROM_FAILED.)
LESSONMON-AGG-ARB-V1Aggregator free-tier rate limits constrain scan cadence — when the strategy needs N quotes per cycle and the agg API caps at 80 requests / 5 min, scan interval is bounded by the rate-limit math. (MON-AGG-ARB-V1: SCAN_INTERVAL_MS bumped 60s → 120s to fit KyberSwap + OpenOcean free-tier rate budgets.)
LESSONMON-AGG-ARB-V1Rank chains and venues by the conditions your live strategy actually rewards, not a generic edge proxy — a flash-loan recon model and a cross-aggregator-arb model can rank the same chains in near-opposite order (lending depth + DEX fragmentation vs aggregator routing divergence + low MEV + multi-agg API access). Re-score against the conditions the live strategy itself rewards before deploying or shelving a chain. (MON-AGG-ARB-V1 chain comparison: PulseChain ranks LAST by the recon engine (0.47 composite) yet is the ONLY profitable cross-agg chain at +152K WPLS, while Base ranks recon #1 (0.84) and tested NOT VIABLE for cross-agg.)
LESSONPOL-MARKET-COPY-V1Asymmetric-payoff strategies have asymmetric risk — buying $0.99 to make $0.01 risks 99 winners for 1 tail. 0% across 25 trades is the math working as predicted, not bad luck. (POL-MARKET-COPY-V1: copied 0.90-0.995 near-certain outcomes; 25/25 lost.)
LESSONPOL-MARKET-COPY-V1Copytrade strategies require the copied wallets to have demonstrable edge — never copy without an audit of the source. The smart-money framing is a story, not a verification. (POL-MARKET-COPY-V1: copied wallets never edge-audited — turned out to have no edge.)
LESSONPOL-MARKET-COPY-V1CLOB-style order paths with sequential nonces carry replay / exploit risk that simple market orders do not — incrementNonce() patterns must be audited before live capital. (POL-MARKET-COPY-V1: incrementNonce() replay risk in CLOB order path.)
LESSONPOL-BTC-HEDGE-V1A mathematically sound strategy that never traded is not a refutation of the strategy — the bug is usually upstream (data layer, discovery filter, infrastructure). Distinguish operational failure from strategy failure before judging edge. (POL-BTC-HEDGE-V1: edge math is risk-free ~5%, but 0 trades across 2,104 log lines because the data layer kept timing out and BTC-market discovery returned nothing.)
LESSONPOL-BTC-HEDGE-V1Homemade proxy infrastructure (Cloudflare Workers, hand-rolled gateways) is a fragile single-point-of-failure for data-dependent strategies — use vendor SDKs or direct exchange APIs where reliability matters more than novelty. (POL-BTC-HEDGE-V1: polymarket-proxy.trevorgdhawg.workers.dev kept timing out; the strategy never got a chance.)
LESSONPOL-FLASH-ARB-V1Quote-vs-on-chain divergence as a smoke test: if your scanner reports -94% returns on routes the aggregator quotes as profitable, the scanner has a decimals/address bug — extreme negative values are the bug signature, not market signal. (POL-FLASH-ARB-V1: decimals/address mismatch returned -94% on-chain quotes consistently.)
LESSONPOL-FLASH-ARB-V1Expired credentials silently degrade the entire data path — health-check provider keys regularly. 401 tenant-disabled looks identical to no-opportunities until you check the RPC directly. (POL-FLASH-ARB-V1: polygon-rpc.com returned API key disabled / tenant disabled — every fire attempt would fail at the executor regardless of strategy.)
LESSONPLS-V1V2-ARB-V2Two bots running the same strategy on the same pools split inventory and race each other — consolidate into one process when the strategy surface overlaps. (PLS-V1V2-ARB-V1: standalone V1/V2 arb folded into PLS-AGG-ARB-V5 as the direct_v1v2 path 2026-05-26 because they were racing each other.)
LESSONPLS-V1V2-ARB-V2A latency-advantaged competitor on the same routes cannot be out-strategized — its edge is structural (faster inclusion + a pre-warmed custom contract + private mempool access), not strategy cleverness, so the only winnable axis is your own latency/inclusion, never a smarter trade. Do not pick the same head-to-head routes unless you can match the speed stack. (Source: PLS-V1V2-ARB-V1: competitor The Machine 0x82cd9533 nets $360-400/hr at 73-80 TXs/hr on the identical V1↔V2 cross-DEX routes via speed + custom contract + likely private mempool, per logs/bot-strategy-leaderboard.md Tier-4.)
LESSONPLS-V1V2-ARB-V2It also lost money on its own. Lifetime 30 trades: 25 reverted / 3 won / 2 timeout = 10% win rate. It captured 5,795 WPLS of spread but burned 7,578 WPLS of gas across all attempts → TRUE NET -1,783 WPLS (a net LOSS — it spent more on gas than it captured). The /bots P&L "+5,427" is misleading: it nets only the 3 winners and ignores the 7,212 WPLS of gas burned on the 27 non-winners. Root cause: it fires SPECULATIVELY and eats revert-gas, vs the champion which simulates-then-sends (profit-or-revert → 100% win rate, no wasted gas).
LESSONPLS-V1V2-ARB-V2Brutally-honest revival requirements (full detail in V1V2_FIX_PLAN.md): to actually work it needs ALL of — (a) its OWN wallet + its own deployed atomic contract + funding (the champion contract is onlyOwner, so this is a contract deploy + a capital allocation, both Chef-gated), else it re-starves the champion; (b) the champion safety rails ported (the A-G fixes — above all a pending-block simulate-then-send gate to kill the revert-gas bleed); (c) a faster inclusion stack (private mempool / pre-warmed contract) to beat the structural competitor The Machine. AND the champion ALREADY runs V1↔V2 (its direct_v1v2 path since 2026-05-26), so a standalone v1v2 is redundant. Verdict: keep it OFF — proven upside ~$1/day; if we ever build the latency edge, apply it to the champion, not a second bot.
LESSONMON-V2-ARB-V1Thin edges erode as aggregators or competitors adapt — a real-but-thin edge today is often not durable. Plan for the supersession early; the cross-aggregator pattern eventually subsumes direct cross-DEX arb on most chains. (MON-V2-ARB-V1: 20 live wins 2026-04-09 to 04-16, then edge eroded as aggregators priced in the cross-DEX spread; superseded by MON-AGG-ARB-V1.)
LESSONPLS-EMP-SCAN-V1Any bot whose signal source reads the venue (oracle, aggregator quote, polled DEX quote) rather than IS the venue is structurally slower than the venue and loses at a rate proportional to the latency gap — the spread evaporates between signal-materialize and sim→submit. This is a structural ceiling, not a tuning problem: no slippage cushion, drift buffer, or verdict gate saves a polled-signal strategy; only a new source that subscribes to the venue at block time does. (Source: PLS-EMP-SCAN-V1: EmpSeal queryAdapter() polling vs the same PulseChain pools EmpSeal reads from — 5,306 attempts over 14 days, 0 net-positive, −574,672 PLS; thesis ruled non-viable, board invariant adopted 2026-05-21.)
LESSONPLS-PLSX-GRIND-V1A static or hardcoded signal set (frozen route or triangle list) cannot beat competitors who subscribe to the venue at block time — the list goes stale the instant pool composition changes, while block-time subscribers re-derive the live opportunity set every block. Hardcoded route inventories fail the signal-source-vs-venue-latency invariant by construction. (Source: PLS-PLSX-GRIND-V1: hardcoded 2023 triangle set run against PulseX V1/V2 pools that competitor bots hit at deterministic-block latency — 0 wins / 589 losses.)
LESSONBASE-V3-ARB-V1Display spread is not executable spread: on V3 / concentrated-liquidity venues per-side depth is asymmetric, so a 1%+ visible cross-DEX spread round-trips negative once both legs eat their own tick liquidity. Scanners that fire on quoted spread without simulating the full round-trip against actual tick depth will bleed — validate the round-trip, and if it never clears, retarget the chain effort to single-sided strategies (liquidations) instead of forcing the arb. (Source: BASE-V3-ARB-V1 / BASE-DEX-ARB-V1: 0 wins since the 2026-04-14 deploy, both retired 2026-04-20, Base effort retargeted to Aave/Morpho liquidations.)
LESSONPLS-MHOP-ARB-V1Broadening rather than narrowing a filter can open an entirely new win stream that a too-high static floor was silently rejecting — and when a scanner and its runner each enforce the SAME floor, both must be cut in sync or the runner re-rejects every signal the scanner now emits. (Source: PLS-MHOP-ARB-V1: 0 signals/24h because a 30-PLS gross floor rejected real +16-37 bps cycles; cutting MIN_PROFIT_PLS 30→15 in BOTH pulse-multihop-scanner.js:46 and pulse-multihop-runner.js:63 opened the stream — gas ~600-1200 PLS so 15 is still a real floor.)

Impressive / Engineered Patterns · 29

KindSource botPattern (source example in parens)
IMPRESSIVEPLS-AGG-ARB-V5Multi-source quote arbitrage: poll N price sources in parallel, construct the trade from cheapest-buy + dearest-sell across the surface. Works on any chain with multiple aggregators/DEXes. (PLS-AGG-ARB: 9X / Piteas / Switch.win / EmpSeal / SquirrelSwap polled simultaneously.)
IMPRESSIVEPLS-AGG-ARB-V5Token-safety filter gates every trade decision — heuristic or ML classifier verdict + a per-token probation cap on fresh/unverified tokens prevents whole-inventory blowups on honeypots. (PLS-AGG-ARB: AI classifier + 50K WPLS probation cap on fresh tokens.)
IMPRESSIVEPLS-AGG-ARB-V5Locally-hosted gossip-tier mempool feed (peer with N nodes via devp2p) beats public RPC subscription latency by ~50-500ms — essential for race-the-block strategies. (PLS-AGG-ARB: pulse-sentinel, 25 nodes, 1.879M pending tx observed.)
IMPRESSIVEPLS-AGG-ARB-V5Dual-broadcast outbound (private relay + public RPC via Promise.any, first-success-wins) covers private-relay pool rejection AND public RPC outages transparently — single primitive, transparent failover. (PLS-AGG-ARB: sentinel WS + publicnode RPC, shipped 2026-05-13.)
IMPRESSIVEPLS-AGG-ARB-V5Contract-side returndata bubble (inline-assembly helper on every low-level call) surfaces inner revert reasons instead of swallowing them as bare strings — every on-chain revert becomes actionable debug data. (PLS-AGG-ARB: V6 _bubble() on 7 swallow sites; reverts now decode to BalancerV2Error / SafeERC20 / PulseX EXPIRED / EmpSeal insufficient fee.)
IMPRESSIVEPLS-AGG-ARB-V5Bin every revert into structured error categories at >95% coverage — each category becomes its own actionable fix-target, replacing the opaque "X% revert rate" with N specific subproblems. (PLS-AGG-ARB: v4-err-histogram, 15 categories, 99.2% coverage.)
IMPRESSIVEPLS-AGG-ARB-V5Hash-stream-via-subscription + tx-detail-via-HTTP-resolver: the cross-product pattern when your fastest subscription source has a minimal protocol — latency from subscription, completeness from resolver. (PLS-AGG-ARB V6.1: sentinel hashes resolved via rpc.pulsechain.box, 7,522 resolutions/1.5h.)
IMPRESSIVEPLS-AGG-ARB-V5Gas pricing should consume mempool data on the same chain — static GAS_MULT is a fallback, not a baseline. Scale the bump cap with sim profit (high-EV trades deserve wider caps); outbid observed competitor pending tx by a configurable epsilon. (PLS-AGG-ARB V6.2: GAS_CAP_FRAC dynamic 1.30→3.30, +5% competitor outbid, 3× base ceiling.)
IMPRESSIVEPLS-AGG-ARB-V5Per-token revert-rate tracker → auto-skip tokens that revert ≥N times in 24h — additive guard complementing full-loss blacklists. Hostile tokens reveal themselves via patterns. (PLS-AGG-ARB: 2+ reverts/24h on standard path → auto-skip.)
IMPRESSIVEPLS-AGG-ARB-V5Per-route / per-source sim-discount table (sim/actual ratio from observed fires) applied before the fire-decision threshold — corrects systematic drift on a route-by-route basis. (PLS-AGG-ARB: 9x→9x 0.42, piteas→9x 0.62.)
IMPRESSIVEPLS-AGG-ARB-V5Atomic execution preserves all-or-nothing semantics — on revert you lose only gas, never half-a-trade. Use inventory (no flash-loan fees) when working capital comfortably covers max-tier notional. (PLS-AGG-ARB: ~2.6M WPLS working capital in the V7 executor; no flash-loan fees on the standard path.)
IMPRESSIVEPLS-AGG-ARB-V5Multiple RPC failover for any critical data source (mempool, gas oracle, price feed) — rotate on error so single-provider outages do not silently degrade to a worse fallback path. (PLS-AGG-ARB: 3 verified txpool-capable RPCs rotate on error.)
IMPRESSIVEPLS-AGG-ARB-V5A per-trade worst-case-loss cap is a revenue lever, not just a guardrail: bound the loss per fire, then let an automated stager RATCHET the cap UP as evidence accrues (positive netSum + high win-rate + no auto-revert trip) so a proven route unlocks size instead of being permanently throttled, between a hard floor and ceiling and hot-reloaded with no restart. (PLS-AGG-ARB: the narrow loss-cap lift was the single biggest revenue lever (~$5K PLS/wk); scripts/stage1a-measure.sh auto-staged the std cap 300K→500K WPLS after 13W/0L, WR 100%, netSum +20,371, trippedAt=null — ceiling 500K / floor 150K.)
IMPRESSIVEPLS-AGG-ARB-V5Move log-only screeners (intel that never picks the trade) OFF the awaited critical path — fire-and-forget — so their latency tail stops gating every candidate eval; lower latency wins more races while trade selection stays identical (the executors that actually choose the trade remain awaited). (PLS-AGG-ARB-V5: sqBuy + imScreen buy/sell screeners made fire-and-forget 2026-05-29, cutting an up-to-2×6s imScreen tail off every candidate; nxBuy/swBuy/empBuy + nxSell/empSell/piSell still awaited.)
IMPRESSIVEPLS-AGG-ARB-V5Scan-then-rank, not scan-then-fire: a loop that executes the FIRST opportunity above threshold and returns lets scan order, not profitability, decide priority. Collect every above-threshold opportunity in the cycle, sort by NET, fire the best one — same scan cost, strictly better selection. (PLS-AGG-ARB-V5: scanCycle return-on-first-hit flagged in logs/code-review-notes.md #4; fix is collect-all → sort-by-NET → execute-best.)
IMPRESSIVEPLS-AGG-ARB-V5Cohort watchdog: cluster bot heartbeat deaths and flag any window where ≥3 bots die within 60s, but PAGE only on FRESH (<24h) events — this catches real correlated outages while suppressing re-alarms on long-dead orphans and retired scanners (which still surface for forensics but never page). Pair it with a separate read-only deterministic clusterer for on-demand RCA. (PLS-AGG-ARB-V5: bot-watchdog.js computeCohortAlerts() — COHORT_MIN_BOTS=3, COHORT_WINDOW_SEC=60, pages freshEvents only, surfaces summary.cohortEvents[]; cohort-outage-forensic-capture.js is the standalone clusterer.)
IMPRESSIVEPLS-AGG-ARB-V5Verify a redeployed contract via state-override eth_call BEFORE the live cutover: encode the exact production call, override balance/allowance in the eth_call state, and run it against the new bytecode. "insufficient profit" means both legs executed (parity holds); a clean named revert means a real bug. Proves the contract live without risking a wei. (CROSS-BOT. PLS-AGG-ARB V7: parity + new squirrel-sell path + onlyOwner/underflow guards all verified pre-cutover.)
IMPRESSIVEPLS-AGG-ARB-V5A "freshness" re-fetch can become a staleness SOURCE once the pipeline around it speeds up: the URG-002 fire-time re-quote refetched IDENTICAL quotes (~8-10s) that the ranking stage had produced <1s earlier — so the sim ran on calldata ~10s OLDER than simply reusing the ranking objects. Reuse is both faster and fresher; freshness patches must be re-audited whenever upstream latency changes. (PLS-AGG-ARB FIRE_REUSE_CALLDATA=1, 2026-07-02 — flag-gated, sim + phantom guard unchanged; do not revert without re-measuring l4-timing stage medians.)
IMPRESSIVEPLS-ATOMIC-ARB-V1Pre-broadcast freshness probe: between sim and bundle submit, do one more getReserves() on both pools — abort if reserves moved >10bps since sim. Closes the last drift window before submission. (PLS-ATOMIC-ARB-V1: proposed reserves recheck immediately before bundle submit.)
IMPRESSIVEBSC-VENUS-LIQ-V1Multicall3 batching: collapse N independent JSON-RPC reads into a single multicall — Venus snapshot cycle dropped 20-70s → ~1s on a 30-user watchlist (50× speedup). Universal pattern for any per-user / per-pool state aggregation. (BSC-VENUS-LIQ-V1: lib/venus-forecast.batchSnapshotUsers, shipped 2026-05-14.)
IMPRESSIVEBSC-VENUS-LIQ-V1Cached-dust filter: 5-min TTL cache for low-collateral users short-circuits 30/30 users with coll<$50 OR borrow<$50 — warm cycles drop to ~1ms vs ~1239ms cold. RPC cost on the cached-dust subset is essentially zero. (BSC-VENUS-LIQ-V1: batchSnapshotUsers dustSkipped pattern, 2026-05-14.)
IMPRESSIVEBSC-VENUS-LIQ-V1Multi-hop swap path with intermediate-pivot fallback: factory.getPair() resolution + WBNB-pivot expands pair coverage 5× (2/9 → 9/9 viable on common BSC pairs). Removes the "no direct pair" failure mode. (BSC-VENUS-LIQ-V1: FlashLiquidator post-fix 2026-05-14.)
IMPRESSIVEBSC-VENUS-LIQ-V1On-chain refresh of protocol constants — stale collateralFactor (or any cached protocol param) silently produces wrong opportunity verdicts. Re-fetch on a schedule. (BSC-VENUS-LIQ-V1: refreshVenusMarketsFromChain landed 2026-05-19; 6/20 markets had stale collateralFactor — vUSDT 0.770→0.800, vUSDC 0.770→0.825, vETH 0.750→0.800.)
IMPRESSIVEBSC-VENUS-LIQ-V1Forecaster-executor in-memory bridge: executor cycle polls comptroller.getAccountLiquidity every 2s on a shared watchlist instead of waiting for the next forecaster signal — catches shortfall>0 within 2s. Bounded-loss auto-disable sentinel (0.02 BNB/6h) limits downside if the loop misfires. (BSC-VENUS-LIQ-V1 V1.4: dp_249-forecast-consumer.js, shipped 2026-05-19.)
IMPRESSIVEBSC-VENUS-LIQ-V1Contract-level structured custom errors instead of generic require strings — vToken.liquidateBorrow returns a uint code; surface it via VenusLiquidateFailed(uint256) custom error (selector 0xe9965fc8) so the executor dispatches on the code instead of regexing a string. (BSC-VENUS-LIQ-V1: FlashLiquidatorV2 0xe83445408a95A8721288E3ab311761B3F5ff193e, shipped 2026-05-20.)
IMPRESSIVEMON-AGG-ARB-V1Generic Route[] struct in the arb contract — each leg calls an arbitrary aggregator router with pre-encoded calldata; same contract handles any aggregator, any path. Profit floor enforced atomically. Add a new aggregator without redeploy. (MON-AGG-ARB-V1: MonadCrossAggArb.executeRoutes(), shipped 2026-04-15.)
IMPRESSIVEPLS-V1V2-ARB-V2STATUS: PAUSED 2026-06-21 (Chef-approved). It shared ONE wallet with the champion (pulse-arb-combined.js) via the 06-15 nonce-lock band-aid; once it began firing 5-11/day from 06-16 it STARVED the champion — champion trades collapsed 24→2/day in lockstep (pre-06-16 the champion did 5-34/day). The champion is the proven 100% win-rate earner; v1v2 was choking it. Reversible (recreate the pulse-v1v2-live tmux via run-bot.sh) but read the revival requirements first.
IMPRESSIVEPLS-V1V2-ARB-V2STATUS: REVIVED LIVE 2026-07-02 (Chef voice-approved, requirement (a) satisfied properly). DEDICATED wallet 0xfc7E301D + own PulseAtomicArb 0xe9e93586 (deployed + funded 500K WPLS from idle champion-EOA reserve) — zero champion nonce coupling, V1V2_COORD not needed. Requirement (b) was already in the dark live path (pending-block sim, fix A revert accounting, 3-revert breaker, 5K WPLS daily loss halt, 25K notional probation); USE_SENTINEL_SUBMIT=1 dual-broadcast partially addresses (c). Live-week autopsy pre-revival: 5W/71F net -3,789 WPLS, but 29 failures were the pre-fix-A day-one bleed and 16 were shared-wallet nonce-stomp timeouts — the dedicated wallet erases the stomp class. Watch trades-*.ndjson; the rails cap worst case at ~5K WPLS/day.
IMPRESSIVEPLS-EMP-SCAN-V1A bot only beats the venue when its signal source IS the venue one hop before block inclusion — so when pitching any new bot, write down where the signal comes from and where execution lands, and ship only if the source is the venue itself; the three passing patterns are mempool subscription (devp2p / eth_subscribe newPendingTransactions), same-block oracle racing (read the price-update tx in the mempool and fire in the same block), and proposal-time wallet-watching (capture the alpha wallet broadcast ~1s before finalize, react in the next 1-2 blocks). (PLS-EMP-SCAN-V1 postmortem → board invariant 2026-05-21: pulse-sentinel devp2p mempool, Chainlink same-block liquidation, monadLogs proposal-time wallet copy.)
RPC: connected
Scanner: 193d 18h 39m uptime
687,559 events indexed
WICK_CRYPTO_ENGINE // Built by Green Wick AI