Wick Crypto Engine
arrow_back Back to Bot Fleet Bot Detail · Prototype

Bot Titles

BSC-VENUS-LIQ-V1
gavel
BSC-VENUS-LIQ-V1 BSC STOPPED · STOPPED_UNKNOWN
BSC Venus Liquidation · Venus (Comp V2) Liquidation
contract 0xd4e0...3790
24h gas burn0
24h CB halts0
BSC Venus liquidation bot. Watches Venus Core Pool borrowers, projects health factor under collateral-price stress, and when worst-case HF crosses below 1.05 fires an Aave V3 flash loan → Comptroller.liquidateBorrow → seizes vToken collateral → redeems → swaps to debt via Pancake V2 → repays flash + 0.05% fee, keeping the discount. Three-daemon pipeline: bsc-venus-watchlist (5s Comptroller poll on Borrow-event-indexed users), bsc-venus-forecaster (2s HF projection at -0.5/-1/-2% collateral perturbation scenarios), bsc-venus-executor (live-only callStatic-then-send via FlashLiquidatorV2 at 0xe834…193e, deployed 2026-05-20 with Venus-error bubble). Trevor flagship since 2026-05-12.

Performance So Far

BSC-VENUS-LIQ-V1
Execution Funnel · last 24hdetect → validate → fire → land → profit
updown (11)external/static·upper-left = inputs · upper-right = outputs · hover for role
0
Signals
→
0
Sims
→
0
Broadcasts
→
0
Mined
→
0
Wins
Net P&L (USD)
+$0.00
Wins
0
Losses
0
Total Trades
0
Win Rate
—
Gas Spent
—
Contract Balance
—
Pool of funds accessed by multiple bots (MON-V2-ARB-V1, MON-WALLET-COPY-V1)

14-Day Profitability Sprint · Next 3 Moves

BSC-VENUS-LIQ-V1
Verdict DECOMMISSION CLOCK · 0d · 2026-06-04
MOST-ENGINEERED OF THE FLEET, ZERO FIRES. Code path is ready; the bot is waiting for a real underwater BSC borrower. The 14-day question is whether to wait passively or get pre-emptive.
  • 01
    Tighten SIGNAL_MAX_AGE_MS from 15s to 3-5s and add an executor-side projHF probe under ±1% oracle stress before submitting.
    Why
    On 2026-05-14 the forecaster fired 3 urgent signals at 08:33:40 (curHF 0.327-0.790, biggest cover $3,957). All 3 were skipped 3 seconds later when the executor saw shortfall=0 on chain. The freshness gap is the dominant block: forecaster's cached snapshot can be 5-15s old; in 3-5s the HF crosses back. A single missed $3,957 fire pays for a year of bot operation. We are NOT in opportunity drought — we are in race-to-the-block.
    Success criterion
    By 2026-06-04: at least 1 successful fire OR a documented SKIP-because-shortfall-zero rate drop from 100% to under 30% on tracked watchlist crossings (proving the freshness gap closed).
    Effort
    ~4 hours (config + executor-side fresh-projHF helper + 48h observation).
  • 02
    DONE 2026-05-25 — vBNB-debt branch shipped via FlashLiquidatorV3 (0xBFa879E0…E720) + BSC_VENUS_VBNB_ENABLED=1. BNB-denominated borrows now route to executeVenusVBnbDebtLiquidation instead of short-circuiting.
    Why
    Roughly 20% of Venus borrowers have BNB-denominated debt. The contract's liquidateBorrow path uses transferFrom; vBNB.liquidateBorrow is payable + receives native BNB. We need a separate code branch that calls liquidateBorrow{value: debtToCover}(). Without it, 1 in 5 underwater borrowers is invisible to us — even if the freshness fix (move #1) lands, we still skip 20% of opportunities.
    Success criterion
    By 2026-06-01: contract upgrade deployed, at least 1 vBNB-debt borrower in the active watchlist enters the executor candidate set (whether they cross or not is market-state-gated).
    Effort
    1-2 days (Solidity branch + redeploy + executor dispatch byte).
  • 03
    Mempool-watch BSC Chainlink price-feed updateAnswer transactions. Subscribe to oracle aggregator addresses via WSS, project HF impact at the new price, fire IN the SAME block as the price-update tx.
    Why
    This converts the bot from "react to already-landed price changes" (every other liquidator does this) to "race-the-oracle pre-emptive liquidator." Every Aave mainnet team does this; BSC Venus has thinner competition + 48 Club bundle relay. Without same-block oracle racing, even with perfect freshness (move #1) we are still one of N bots seeing the post-confirmed price; the gas auction is the only differentiator. With this, we land before the auction starts.
    Success criterion
    By 2026-06-04: WSS subscription to ≥3 Chainlink aggregator addresses live, project-HF helper produces a "would liquidate at new price" log line whenever a relevant price-update tx hits mempool, and 1+ successful same-block fire OR documented latency edge ≤ 200ms vs price-update inclusion.
    Effort
    3-5 days (port pulse-sentinel devp2p architecture to BSC + Chainlink ABI integration).
Acting CEO directive 2026-05-21 · 14-day sprint to demonstrate a credible profitability path for every flagship bot · Bots without progress on the moves above by 2026-06-04 are pulled from the flagship row and the slot is reassigned.

Future Performance Expectations · 7d / 30d / 90d

BSC-VENUS-LIQ-V1
Baseline · 2026-05-21
0 fires lifetime. Most-engineered bot in fleet — Multicall3 batching + dust-skip filter + dp_249 bridge + Comptroller pre-flight all live. Forecaster emits 2s cadence; executor freshness gate at 5s; stress probe live since 2026-05-21 surfacing 5-15 STRESS_OVERRIDE events/day on positions Venus rejects.
WindowNet USDFiresTier / stateShape · what has to happen
7d$0 – $800–2Code-only optimizations liveFirst fire likely happens IF an underwater BSC user crosses Venus oracle threshold AND survives Comptroller pre-flight. Without V3 deploy + activation, vBNB-debt borrowers still skip (cleanly). Expected 0-2 fires per week 1; per-fire $5-50 net depending on cover size and discount.
30d$50 – $5005–15V3 vBNB-debt activeFlashLiquidatorV3 deployed and BSC_VENUS_VBNB_ENABLED=1. Combined vBep20 + vBNB coverage at 100% of Venus Core Pool borrowers. 5-15 fires/month at current Venus volume + competitor density. Per-fire net $5-50 typical. STRESS_OVERRIDE fires that win indicate we beat the standard 50-bot pack to a price-update — every such event is a moat datapoint.
90d$300 – $3,00030–100Chainlink mempool watching liveMove 3 ships: WSS to ≥3 Chainlink aggregator addresses, project-HF helper, same-block-as-oracle-update firing. This is the structural differentiator — turns the bot from "one of 50 bots racing post-confirmation" to "1-2 bots racing IN-block with the price update." 48 Club private bundle relayer integration accelerates further. At this state the bot has a real moat; expected $10-30 per fire average.
Kill condition
Zero fires in 21 consecutive days post-V3-activation AND known HF<1.0 user observed at least once in that window → strategy is fundamentally non-competitive on BSC. Retire and reallocate slot.
Scaling behavior
Per-fire economics are the constraint, not notional. Bot is capital-light (Aave flash) — scaling = beating more competitors per opportunity, which requires Chainlink-mempool work.
Ranges are expectation, not commitment. Lower bound: code stays as-is + market delivers its average. Upper bound: full sprint moves shipped + favorable market state. Decommission deadline 2026-06-04 is binary — kill conditions above are the threshold.

Recent Fire Attempts

BSC-VENUS-LIQ-V1
no recent fire
no recent fire
no recent fire
no recent fire
no recent fire
no recent fire
no recent fire
Last 7 TX_SEND events (newest left). Outcome stitched from log within ~80-line window after broadcast. Empty boxes = no recent fire to show.

Token Reverters (24h)

BSC-VENUS-LIQ-V1
No on-chain reverts in last 24h.
White / black lists are located at /bots/PLStokens.

Biggest Block

BSC-VENUS-LIQ-V1

Fleet status 2026-05-21: RUNNING · HEARTBEATING + PRECHECK GATE LIVE. (Re-verified live 2026-05-25.) Today (2026-05-20): added Comptroller.liquidateBorrowAllowed pre-flight in bsc-venus-executor.js (~line 441-484) — surfaces Venus's structured error codes (3=INSUFFICIENT_SHORTFALL, 5=INVALID_ACCOUNT_PAIR, 6=INVALID_CLOSE_AMOUNT, 10=MARKET_NOT_LISTED, etc.) instead of the contract's generic "venus liquidate failed" wrapper. Code 6 (close-factor breach) auto-halves debtToCover and re-probes. Yesterday: dp_249 bridge wired — bsc/lib/dp249-forecast-consumer.js maintains in-memory watchlist (currentHF AND projectedHF < 0.99) and the executor cycle() polls comptroller.getAccountLiquidity every 2s. Bounded-loss: 0.02 BNB/6h auto-disable sentinel.

Status today: 0 PRECHECK events fired since deploy — no watchlist user has crossed shortfall>0 yet. Forecaster sees urgency-signals every 2s (HF 0.50-1.01 cluster) but Venus's on-chain books say HF>=1.0 + liquidity>0 for all of them. New code path is dormant pending a real crossing.

Earlier ship (2026-05-14): refreshVenusMarketsFromChain landed — 6/20 markets had stale collateralFactor (vUSDT 0.770→0.800, vUSDC 0.770→0.825, vETH 0.750→0.800, vBTCB 0.750→0.800, vCAKE 0.550→0.500, vXRP 0.500→0.650). Off-chain HF math aligned with Venus on-chain. Watchlist widened MAX_USERS_PER_CYCLE 30 → 250 the same day.

Historical context (block pattern that motivated dp_249): forecaster↔executor freshness mismatch.

Three urgent signals from the forecaster at 08:33:40, all skipped by the executor at 08:33:43-44 (3 seconds later):

[SIGNAL] urgent | 0xa59ec0ae… curHF=0.482 projHF=0.458 debt=vUSDT coll=vXRP cover=$3957
[SIGNAL] urgent | 0x65fcd151… curHF=0.327 projHF=0.310 debt=vETH coll=vBNB cover=$487
[SIGNAL] urgent | 0x9bc7a167… curHF=0.790 cover=$458
↓ 3 seconds later
[SKIP] 0xa59ec0ae… — on-chain shortfall=0 (Venus says HF>=1.0, liquidity=$400)
[SKIP] 0x65fcd151… — on-chain shortfall=0 (Venus says HF>=1.0, liquidity=$417)
[SKIP] 0x9bc7a167… — on-chain shortfall=0 (Venus says HF>=1.0, liquidity=$375)

Forecaster reads cached snapshot (~5-15s old per SIGNAL_MAX_AGE_MS) → executor does fresh Comptroller.getAccountLiquidity → HF has moved across the 1.0 threshold in the 3-second gap. The forecaster's HF=0.482 was real at capture-time; by execution time the borrower has either added collateral or a Chainlink price update moved oracle marks. The biggest skipped fire today carried $3,957 cover — single liquidation discount easily covers a week of bot operating cost. M1's "SKIP because revenue floor too low" verdict (11 cycles standing) is contradicted by the live data.

Two fixes shape the work:
• Tighten SIGNAL_MAX_AGE_MS from 15s → 3-5s so the freshness gap can't open this wide.
• Have the executor do its own one-line projHF probe under ±1% oracle stress before submitting; if projHF survives stress AND on-chain HF<1.0, fire even if "current" reads marginal.

Earlier blocks cleared 2026-05-14: batchSnapshotUsers (50× cycle speedup), factory.getPair()-resolved swap surface (5× viable routes). The watchlist-sort bug from this entry's prior version is now incidental — the dominant gap today is the freshness window.

Fantasy

BSC-VENUS-LIQ-V1
If we had some way to...

If we had a mempool subscription to the Chainlink price-feed Oracle update transactions on BSC (the same way pulse-sentinel subs to PulseChain mempool), we'd know the next Venus oracle price BEFORE it landed on-chain — and could fire the liquidation tx in the SAME block as the price-update tx itself. Every other liquidation bot reacts to the price change after it's mined; we'd be racing them on inclusion of the very tx that creates the opportunity. This is the standard MEV-extraction pattern on Aave mainnet, but BSC's 48 Club private builder + Venus's smaller bot population means the moat is shallower. Closest real-world thing accessible to us: pulse-sentinel's devp2p peer architecture would port directly to BSC if we ran it against bsc.publicnode.com WSS and the 48 Club RPC. A few days of work to plumb but converts the bot from a passive forecaster-of-already-liquidatable-positions into a pre-emptive race-the-oracle-tx liquidator.

Suggestions for Improvement

BSC-VENUS-LIQ-V1

    Conclusion

    BSC-VENUS-LIQ-V1

    Verdict: most engineered effort of the fleet, still 0 fires. Trevor-flagship since 2026-05-12 with two of three planned big-block fixes shipped. Both were real wins: Multicall3 batching took cycle time from 20-70s to ~1s, and the WBNB-pivot swap path took addressable Venus pair coverage from 2/9 to 9/9. The pipeline is now mechanically capable of liquidating real users in real time.

    Failure mode #1 — opportunity dryness, not infrastructure. Watchlist-sort + Multicall3 batching + dust-skip + dp_249 bridge + Comptroller pre-flight all shipped. Forecaster signals fire every 2s on watchlist users at HF 0.50-1.01, but Venus's own books read HF>=1.0 + liquidity>0 every time. Either the off-chain HF model still drifts vs Venus's oracle, OR there genuinely isn't an underwater BSC Venus user right now. We won't know which until the next price-shock event.

    Failure mode #2 — resolved 2026-05-20. Old FlashLiquidator wrapped Venus calls in require(ok, "venus liquidate failed"), discarding the comptroller code. FlashLiquidatorV2 at 0xe83445…193e now revert-bubbles via custom errors VenusLiquidateFailed(uint256) + VenusRedeemFailed(uint256), and bsc-venus-executor.js step-0 decodes them against the existing VENUS_ERROR_CODES table. Post-mining reverts are no longer opaque.

    Failure mode #3 — vBNB-debt branch: SHIPPED 2026-05-25. Roughly 20% of Venus borrowers have BNB-denominated debt that the day-1 build short-circuited (vBNB.liquidateBorrow is payable). FlashLiquidatorV3 (0xBFa879E0…E720) added the payable vBNB path; deployed + BSC_VENUS_VBNB_ENABLED=1, so vBNB-debt borrowers now enter the candidate set — ~1.25× addressable pool. First live vBNB fire is the remaining validation.

    Fixable? The path is concrete. The bot is the most-engineered-for-readiness in the fleet. First-fire is gated by market state. If a real underwater user appears and we still skip with on-chain shortfall=0, the off-chain HF model needs another reconciliation pass (the 2026-05-14 collateralFactor refresh was step 1; step 2 may be liquidationThreshold or price-mark drift).

    Active Tests & Monitors

    BSC-VENUS-LIQ-V1
    Test / MonitorStartedKey MetricDecision Criteria
    PRECHECK gate fire-through rate (NEW)2026-05-20[PRECHECK] count in bsc-venus-executor.logComptroller.liquidateBorrowAllowed pre-flight + code-6 close-factor auto-halve is wired. 0 PRECHECK events fired since deploy — no signal has passed shortfall>0 to reach the gate. Will surface real Venus error codes once a crossing happens.
    Forecaster cycle time2026-05-14 (post Multicall3)[SLOW] cycle=Xms in bsc-venus-forecaster.log✅ COMPLETE — Shipped 2026-05-14 (batchSnapshotUsers in lib/venus-forecast, sub-second cycles, [STALE] cascade resolved). Closed 2026-05-27.
    Signal volume2026-04-30Signal append rate in bsc-venus-signals.ndjsonHealthy. 7,840 lifetime signals; latest 2026-05-20T17:14:49Z. Forecaster emits urgency:soon every 2s on the dp_249 watchlist (8-10 accounts).
    Sim-revert capture2026-04-24bsc-venus-sim-reverts.ndjson append rateActive. 37,846 lines lifetime; big cluster 2026-05-16. Pre-PRECHECK reverts all carry the generic "venus liquidate failed" wrapper — PRECHECK now produces named Venus codes upstream of this log.
    Borrower index growth2026-04-15 (deploy)[STATS] index=X in watchlist log✅ EFFECTIVELY PRUNED 2026-05-27 — index now 939 total, but watchlist filters to 315 (~33%) via liquidityBufferUsd:500. The "drop ~70%" intent is already implemented at the watchlist layer; scanner only deeply monitors the active 315. Explicit index prune would save ~150KB storage but not scan efficiency. Skip the build.
    Real liquidatable surface2026-04-15[STATS] liquidatable=X in watchlist logCURRENT: 1 across 823 indexed. The opportunity exists but is thin — strategy must tolerate days between fires. Tier-S classification (FR-018) assumes more density than the data shows.
    Trade outcomes (0 fires lifetime)2026-04-15bsc-venus-trades.ndjson + bsc-venus-executor.log [FIRE] count0 fires ever. Bot has never sent a tx. Every layer below the forecaster is hypothetical until the [STALE] loop clears.

    Compromises

    BSC-VENUS-LIQ-V1
    DecisionAggressive ←Current Position→ ConservativeNotes
    Forecaster cycle cap (MAX_USERS_PER_CYCLE = 250)
    Few · fast cycle, blind to most users
    Many · full coverage, stale snapshot
    Was 15 → 30 → 250 (2026-05-14, post Multicall3 batching + dust-skip filter). Full watchlist scanned every cycle in <2s. Hidden-liquidatable case (e.g. 0x3af6cd5c HF=0.114) no longer falls outside the window.
    HF flag threshold (HF_PREDICT_FLAG = 1.05)
    Tight · only flag already-underwater (≤1.0)
    Loose · flag every user near 1.2
    Raised 2026-04-23 from 1.0 → 1.05 because 1.0 produced 0 signals (only matched already-liquidatable users, which are racing-frontrun-immediately). 1.05 catches users about to cross under -2% collateral perturbation. Mirror of Base liq pipeline's about_to_pop heuristic.
    Swap-pair whitelist (direct V2 only)
    Permissive · trust any pool exists
    Strict · WBNB + stable-stable only
    Day-1 restriction in tryFire (executor:145-152). Excludes the majority of Venus debt/collateral pairs that need WBNB as an intermediate hop. Re-locating to multi-hop or V3 in the FlashLiquidator contract opens 5-10× the addressable opportunity surface.
    Min profit floor (MIN_NET_PROFIT_USD = $0.10)
    Low · catch dust profits
    High · only meaningful trades
    Was $1.00, dropped 2026-05-12 per Trevor to encourage fires for end-to-end data while the bot is brand-new. Will revisit if gas costs (~0.001 BNB ≈ $0.30) eat dust fires. Inert until forecaster actually produces signals.
    Rate cap (MAX_FIRES_PER_HOUR = 10)
    Strict · bounded downside
    Uncapped · max opportunity capture
    Sliding 1h window. Inert today — bot has 0 lifetime fires. Provides safety bound once pipeline recovers.
    Min wallet BNB gas (MIN_BNB_GAS = 0.05)
    Loose · run-dry risk
    Strict · may starve under spike
    0.05 BNB ≈ $15 ≈ 5-10 fires worth of gas. Pre-flight check before every fire attempt. Wallet 0xEc5Df194 (operator).
    Watchlist scan threshold ($500 unused liquidity)
    Tight · scan full index every cycle
    Loose · only the at-risk subset
    LIQUIDITY_BUFFER_USD = 500. Users with unused liquidity > $500 are not in the watchlist. 823 indexed but 250 in watchlist; 30 forecasted per cycle.
    Position-size pre-filter (NONE)
    Permissive · cycles wasted on dust
    Strict · miss small-but-real positions
    No min debt/collateral USD floor before forecast.snapshotUser runs. The 0x3af6cd5c $0.10 dust loop ate 829 lifetime cycles. Adding "skip if debtUsd < $50 OR collateralUsd < $50" at snapshotUser entry frees the cycles AND eliminates the inevitable Pancake-quote-fails-on-dust sim revert.
    Signal freshness (MAX_SIGNAL_AGE_MS = 15s)
    Tight · only block-fresh signals
    Loose · burn through stale signals
    15s with BSC ~3s block time spans ~5 blocks. Reasonable today since signals are scarce; tighten to 6-9s once forecaster produces enough volume that we can afford to be picky.
    vBNB debt support (NONE)
    Permissive · handle payable-native
    Strict · skip all vBNB borrowers
    tryFire short-circuits if pair.debt.underlying === 'BNB'. The Venus vBNB.liquidateBorrow is payable + receives native BNB rather than transferFrom-ing WBNB, so the contract path differs. Adding a vBNB code branch in FlashLiquidator unlocks the ~20% of Venus borrowers whose debt is in BNB.
    Capital deployment (Aave-flash, contract idle)
    Conservative · keep contract drained
    Aggressive · pre-fund contract for self-flash
    Contract holds no balance — every liquidation uses an Aave V3 flash loan + pays 0.05% fee. Could self-finance with a pre-funded pool and skip the flash fee, but then idle capital becomes a target. Current model is correct for the volume profile.

    Parameters

    BSC-VENUS-LIQ-V1
    ParameterValueReasoningPotential Adjustment(s)
    HF_PREDICT_FLAG1.05 (forecaster)Emit signal if worst-case projected HF crosses below this. Was 1.0 (0 signals), raised 2026-04-23 to catch users about to cross under -2% collateral perturbation.Raise to 1.10 if signal volume stays thin post-Multicall fix. Drop back to 1.0 if false-alarm rate is the dominant cost.
    HF_URGENT1.0 (forecaster)Signals below this are tagged urgency:urgent (already liquidatable). Above 1.0 and below 1.05 are tagged urgency:soon.Tied to HF_PREDICT_FLAG. If we shorten signal_age, can tighten this to 0.99 to add execution headroom.
    MAX_USERS_PER_CYCLE250 (forecaster)Whole-watchlist scan per cycle. Raised 15 → 30 → 250 (2026-05-14) once Multicall3 batching + cached-dust skip landed. Cycle time now <2s for 250 users.Keep at 250 unless borrower index grows materially past 1000 (auto-prune would reduce first).
    FORECAST_INTERVAL_MS2000 (forecaster)Target cycle period. Loop fires every 2s after previous cycle resolves.Cannot reach today — cycles take 20-70s. Once Multicall ships, true 2s cadence is achievable.
    MAX_WATCHLIST_AGE_MS30000 (forecaster)Abort cycle if watchlist snapshot is older than this. Prevents acting on stale at-risk data.Hard-binding. The 30s window matches the worst-case watchlist scan cadence (5s + RPC slack). Raising hides the [STALE] symptom but doesn't fix the underlying cycle-time blowout.
    SCAN_INTERVAL_MS5000 (watchlist)Comptroller.getAccountLiquidity polling cadence for the at-risk subset.Tighter (2-3s) if forecaster recovers and we want closer-to-real-time. Looser only if BSC RPC quota becomes a bottleneck.
    FULL_RESCAN_INTERVAL_MS60000 (watchlist)Full borrower-index sample every minute (capped at 1500 users per cycle). Catches users whose HF drifted slowly out of the hot subset.No tuning needed today.
    LIQUIDITY_BUFFER_USD500 (watchlist)Users with unused-liquidity < $500 go in the watchlist hot set. Below this, they're close enough to liquidation to warrant 5s polling.Raise to $1000 to widen the hot set if forecaster recovers and is hungry for more candidates.
    MIN_BNB_GAS0.05 BNB (executor)Pre-flight wallet balance check. ~$15 at current BNB price ≈ 5-10 fires of gas headroom.Raise to 0.10 BNB once bot starts firing consistently and we want a safety buffer.
    MIN_NET_PROFIT_USD$0.10 (executor)Minimum net profit floor passed to FlashLiquidator. Was $1.00, dropped 2026-05-12 per Trevor for end-to-end data collection.Return to $1.00 after first 5 fires confirm pipeline works. Raise to $5+ once we have data on gas cost per fire.
    MAX_FIRES_PER_HOUR10 (executor)Sliding 1h window rate cap. Inert today (0 lifetime fires).Cap can rise to 25-50 once landings prove reliable; or drop to 5 if revert rate is uncontrolled.
    MAX_SIGNAL_AGE_MS15000 (executor)Reject signals older than 15s at tryFire entry. BSC ~3s blocks → 15s spans 5 blocks.Tighten to 6-9s once forecaster produces volume.
    SLIPPAGE_BPS200 (executor)2% slippage on collateral→debt swap via Pancake V2. Calculated minSwapAmountOut from expectedCollateralSeizedUsd.Raise to 300-500 on thin pairs that consistently revert with InsufficientOutput. Drop to 100 on stable-stable pairs.
    AAVE_FLASH_FEE_BPS5 (executor)0.05% flash-loan fee charged by Aave V3. Subtracted from expected profit at minProfit calculation.Fixed by Aave — not tunable. Listed for completeness.
    Swap-pair whitelistWBNB + stable-stablehasDirectV2Pool gate in executor:145-152 — only allow swaps where (a) one side is WBNB OR (b) both sides are stables. Day-1 restriction; needs contract upgrade to relax.Expanding via multi-hop WBNB intermediate in FlashLiquidator opens the majority of Venus debt/collateral pairs.
    FlashLiquidator contract0xd4e0…3790Deployed 2026-04-15 by 0xEc5Df194a77839D9A74D2eCa394b28a65C5E1A03. AaveProvider = 0xff75B6da14FfbbfD355Daf7a2731456b3562Ba6D. Owner = operator wallet.Redeploy needed to add vBNB support OR multi-hop swap path. Single owner key (same as PLS bots).

    Revisions

    BSC-VENUS-LIQ-V1
    RevisionSummary
    V1 (launch)2026-04-15 — FlashLiquidator deployed on BSC, indexer + watchlist + forecaster + executor wired against Venus Comptroller. 250-user watchlist scan, callStatic sim per candidate, atomic flash-loan repay-and-seize via Aave V3 BSC.
    V1.12026-05-12 — HF_PREDICT_FLAG raised 1.0 → 1.05 (catch users about to cross under -2% shock). MAX_USERS_PER_CYCLE 15 → 30. Re-deploy with WBNB-pivot swap path: addressable pair coverage 2/9 → 9/9.
    V1.22026-05-14 — Multicall3 batched snapshotUser (cycle time 20-70s → ~1s for 30 users). MAX_USERS_PER_CYCLE 30 → 250 (whole watchlist). Cached-dust skip filter shipped: warm cycles drop to ~1ms.
    V1.32026-05-19 — refreshVenusMarketsFromChain landed. 6/20 markets had stale collateralFactor (vUSDT 0.770→0.800, vUSDC 0.770→0.825, vETH 0.750→0.800, vBTCB 0.750→0.800, vCAKE 0.550→0.500, vXRP 0.500→0.650). Off-chain HF math now aligned with Venus on-chain.
    V1.42026-05-19 — dp_249 forecaster-executor bridge wired (bsc/lib/dp249-forecast-consumer.js). In-memory watchlist of accounts with currentHF AND projectedHF < 0.99; executor cycle() polls comptroller.getAccountLiquidity every 2s, catching shortfall>0 within 2s instead of waiting on the next forecaster signal. Bounded-loss 0.02 BNB/6h auto-disable sentinel.
    V1.52026-05-20 — Comptroller.liquidateBorrowAllowed pre-flight added in bsc-venus-executor.js (~line 441). Surfaces Venus structured error codes (3=INSUFFICIENT_SHORTFALL, 5=INVALID_ACCOUNT_PAIR, 6=INVALID_CLOSE_AMOUNT, 10=MARKET_NOT_LISTED) instead of generic "venus liquidate failed" wrapper. Code 6 (close-factor breach) auto-halves debtToCover and re-probes once. 0 PRECHECK events fired since deploy — no watchlist user has crossed shortfall>0 yet.
    V2 (CURRENT) current2026-05-21 contract redeploy: FlashLiquidatorV2 on BSC at 0xe83445408a95A8721288E3ab311761B3F5ff193e (tx 0xed046b06…5e5fc0f6, replaces V1 at 0xF835799C…231C49). Adds custom errors VenusLiquidateFailed(uint256) (selector 0xe9965fc8) + VenusRedeemFailed(uint256) (selector 0x4d32aac3) that surface the uint Compound V2 error code returned by vToken.liquidateBorrow()/redeem(). Previously the contract did `require(liqErr == 0, "venus liquidate failed")` and discarded the actual error code; now reverts with the code embedded. bsc-venus-executor.js restarted at 20:47:09Z; bot picks up V2 address from flash-liquidator-bsc-address.json with zero code change.
    RPC: connected
    Scanner: 193d 18h 42m uptime
    687,559 events indexed
    WICK_CRYPTO_ENGINE // Built by Green Wick AI