Bot Titles
BASE-AAVE-LIQ-V1Performance So Far
BASE-AAVE-LIQ-V114-Day Profitability Sprint · Next 3 Moves
BASE-AAVE-LIQ-V1- 01BUILD MORPHO EXECUTOR. morpho-watchlist + morpho-forecaster already emit position data into nothing. Mirror liq-executor-v2.js but call Morpho.liquidate() instead of Aave.liquidationCall, OR amend FlashLiquidatorV2 to accept a Morpho payload via a new sentinel byte.WhyThe bot card promises "Aave / Morpho" but Morpho is observation-only. We are advertising 2× coverage and shipping 1×. Morpho on Base has a separate pool of underwater positions — uncorrelated with Aave, so adding it materially expands the surface where a HF crossing can produce a first fire within 14 days. Highest-value single build on this bot.Success criterionBy 2026-06-01: Morpho executor deployed; ≥1 callStatic-pass Morpho candidate logged. By 2026-06-04: ≥1 successful Morpho-path fire OR a documented Morpho HF<1.0 crossing handled (even if a competitor won the race).Effort3-4 days (mirror liq-executor-v2.js + Morpho contract integration + redeploy of FlashLiquidatorV2 with Morpho sentinel).
- 02Pre-broadcast freshness probe on Aave HF. Between callStatic sim and tx send, do one more eth_getStorageAt on the user's aaveHealthFactor; abort if it crossed back above 1.0.WhyWhen first fires DO start landing on Base, the borderline 1.00-1.005 candidates will be the bulk. Base oracle updates can flip HF back above 1.0 between sim and inclusion; without the probe, every such case is a sim-pass-then-tx-revert that burns gas. This makes the difference between "we got our first fire" being net-positive vs net-negative on day one.Success criterionBy 2026-05-28: probe deployed and shows up in liq-executor-v2.log as a [STALE_HF_ABORT] entry on at least one near-miss; OR documented that no candidate in the window required the probe (cleanest possible state).Effort~4 hours (one storage read + abort branch in liq-executor-v2.js around line 333).
- 03Decode Aave V3 sim reverts into named categories. Map the 4-byte revert selectors so sim-reject reasons (33=HEALTH_FACTOR_NOT_BELOW_THRESHOLD, 34=COLLATERAL_CANNOT_COVER_NEW_BORROW, 49=NO_DEBT_OF_SELECTED_TYPE, etc.) land in a histogram instead of "call revert exception".WhySame pattern that unblocked PLS-AGG-ARB diagnostics. Once first fires start happening and some revert, we need named categories to know exactly which fix to ship next (parameter retune vs contract upgrade vs route blacklist). Without the histogram, every revert is a blind RCA — exactly what wasted 3 weeks on PLS-ATOMIC-ARB.Success criterionBy 2026-05-31: Aave V3 revert-selector map (45+ codes) deployed in liq-executor-v2 sim path; histogram visible on /bots/BASE-AAVE-LIQ once first sim-fail accrues.Effort~6 hours (copy the PLS-ATOMIC-ARB CONTRACT_ERROR_SELECTORS pattern + Aave-specific codes from AaveErrors.sol).
Future Performance Expectations · 7d / 30d / 90d
BASE-AAVE-LIQ-V1| Window | Net USD | Fires | Tier / state | Shape · what has to happen |
|---|---|---|---|---|
| 7d | $0 – $60 | 0–2 | Aave-only | Probability of first fire ~30-50% in any given week given Base oracle volatility. Per-fire $5-30 typical. Pre-broadcast HF freshness probe (Move 2 from sprint) saves gas on the 1.00-1.005 borderline candidates that will be the bulk of first fires. |
| 30d | $20 – $300 | 2–10 | Aave + Morpho | Morpho executor live (sprint Move 1). Addressable surface doubles. 2-10 fires/month at typical Aave-Morpho cadence on Base. Aave V3 sim-revert categories mapped — diagnostics tighten the borderline-HF false-positive rate. |
| 90d | $200 – $2,000 | 5–50 | Aave + Morpho + same-block oracle racing | Base mempool oracle racing live (analog to BSC-VENUS Move 3). Private bundle relayer integration on the Base sequencer. Bot transitions from "react to post-confirmation HF crossing" to "fire IN the block where Chainlink price update mints the opportunity." Structural moat against the 20-50 professional searcher fleet. |
Recent Fire Attempts
BASE-AAVE-LIQ-V1Token Reverters (24h)
BASE-AAVE-LIQ-V1Biggest Block
BASE-AAVE-LIQ-V1Status 2026-05-26: OFF (deliberately) — do NOT restart the Aave poller. All three daemons down since 05-22/05-24. The real blocker is NOT "no liquidatable users" (that earlier read was wrong) — the live snapshot below finds ~10 liquidatable positions every cycle yet fires 0. The full revival analysis (Aave dust economics, 2s-poller latency, the marginal on-chain Morpho probe, options A-D, decision) is in the Conclusion. Engineering history + the diagnostic snapshot retained below.
The 2026-05-21 snapshot (last live) showed detection working — it is the sizing/filtering, not finding candidates, that produced 0 fires:
Today's shipped batch (2026-05-20):
1. Multicall3 batched HF reads in liq-executor-v2.js:333-358 — replaces 10 sequential pool.getUserAccountData() calls with one Multicall3.aggregate3(). Cycle latency dropped from 62s → ~1-2s.
2. Sticky-skip cooldown (STICKY_HOT_REJECTS=8, COLD_TIER_SKIP_CYCLES=2). Address-level state map. After 8 consecutive HF>=1.0 reads, an account enters "cold tier" and gets re-checked every 2 cycles instead of every cycle. Frees RPC budget for new candidates.
3. SWAP_ROUTES expansion in base-config.js + liq-executor-v2.js: AAVE token added 2026-05-20; combined coverage now WETH / cbETH / wstETH / cbBTC / USDC / USDbC / DAI / EURC / AERO / weETH / AAVE (≈ 11 routes vs the 4 the page used to claim).
Live pattern at 01:11Z 2026-05-21:
[CYCLE] 10 liquidatable positions — building candidates
[CYCLE] No viable candidates after sizing — 9x cold-tier (recent HF>=1.0 streak) | 1x no swap route
All 9 watchlist users sit at HF 1.01-1.15. Bot is correctly waiting for one to actually cross 1.0. No competitor-race losses, no swap-route gaps, no cycle-latency staleness.
Morpho still observation-only (morpho-watchlist + morpho-forecaster) — no Morpho executor exists yet, so "Aave + Morpho" on the bot card overstates current Morpho coverage.
Decoded sim-revert categories shipped 2026-04-27 (45-line Aave V3 code map). Recent snapshot: 168 wallets classified, 50 hot, 10 liquidatable per cycle. The opportunity surface is real and renewing — but no user has crossed since the relaunch. First fire is gated by market state, not engineering.
Fantasy
BASE-AAVE-LIQ-V1If we had a private bundle relayer on Base (the way pulse-sentinel handles PulseChain), we could submit liquidation txs through the Base Sequencer's priority queue WITH a guarantee they land in the same block as the Chainlink oracle update that creates the opportunity. Today Base liquidations are a public-mempool race against ~20-50 other MEV bots; the bot that bids highest gas wins, and our 1.5× priority multiplier just isn't competitive against teams running professional searchers. The fantasy: pulse-sentinel's devp2p peer architecture ported to Base, peering with public Base RPCs and the Coinbase-operated Sequencer endpoint. Replace the mempool-race game with a same-block-as-oracle-update game. Probably the difference between 0 fires (current) and a few wins per day on the about_to_pop bucket.
Suggestions for Improvement
BASE-AAVE-LIQ-V1- 01HIGHPre-broadcast freshness probe (mirrors the PLS-ATOMIC-ARB pattern). Between callStatic sim and tx send, do one more eth_getStorageAt on the user's aaveHealthFactor. Aave HF can move between sim and inclusion on a price update — if it crossed back above 1.0, the liquidation will revert. Saves gas on borderline 1.00-1.005 candidates.
- 02HIGHDecode liq-executor-v2 sim reverts into named categories. Aave V3's liquidationCall has well-known revert reasons (33: HEALTH_FACTOR_NOT_BELOW_THRESHOLD, 34: COLLATERAL_CANNOT_COVER_NEW_BORROW, 49: NO_DEBT_OF_SELECTED_TYPE, etc.). Map the 4-byte revert selectors so sim-reject reasons land in the histogram instead of "call revert exception".
Conclusion
BASE-AAVE-LIQ-V1Status 2026-05-26: OFF — deliberately, and kept on the roster (NOT decommissioned yet). All three daemons (liq-watchlist + liq-forecaster + liq-exec-v2) are down: the forecaster died 2026-05-22 on Base public-RPC degradation (ECONNRESET on publicnode; 502/503 "no backend healthy" on mainnet.base.org), the executor stopped 05-24 on stale predictions. There is a standing "do NOT restart the Aave poller" decision — it never executed a single profitable liquidation. Left in Low-Frequency as a placeholder while the Morpho path was evaluated (result below).
Why it never fired — economics, not infrastructure (the earlier "waiting for an opportunity" read was WRONG). The executor's own log shows it found ~10 liquidatable Aave positions EVERY cycle but logged "No viable candidates after sizing" — each nets below the $0.30 floor after gas + the 0.05% flash-loan fee. The seizable 4-8% bonus on a Base Aave near-liquidation position is smaller than the cost to take it; lowering the floor to $0.30 (05-15) surfaced none. The opportunities appeared and were all dust.
Compounding constraint — a 2-second poller in a latency game. No mempool subscription, no bundle / private-builder. On Base's FIFO ordering, contested liquidations are won by searchers firing in the SAME block as the Chainlink oracle update; a 2s poll loses every race for the rare profitable one. Fixing the economics would ALSO require a mempool/bundle rebuild to land.
Morpho path — investigated on-chain 2026-05-26, verdict MARGINAL. The card always oversold "Aave / Morpho": Morpho was observation-only (no executor). A live Morpho-Blue probe of the tracked market (USDC/wbCOIN, ~$1,957 total borrowed) found the positions that PERSIST as liquidatable are bad debt — e.g. HF=0, 33 USDC debt against 1e-18 collateral, so you'd seize ~$0 and eat the debt (that is why no one captures them). There ARE small capturable ones (sampled: one at ~$2.48 max bonus on $64.94 collateral; healthy positions up to $872 collateral → ~$32 potential if they pop), but they're tiny, the collateral (wbCOIN) may be too illiquid to swap without eating the bonus, and the market is small. A Morpho executor + the speed to win contested ones is high effort for marginal, uncertain return.
Revival options (investigated 2026-05-26): (A) relaunch Aave as-is — resumes the 0-fire pattern (dust + poller), no. (B) Aave + mempool/bundle rebuild — wins races but positions are still dust, no. (C) build the Morpho executor + speed — the only path with a real edge, but the on-chain validation shows it is marginal (tiny captures, illiquid collateral, small market, bad-debt noise); not worth it vs the champion / NAV Reaper now. (D) keep parked — chosen.
Decision (2026-05-26): leave OFF, do NOT decommission, do NOT build Morpho yet. The Aave poller is settled (do not restart). The Morpho executor is the one technically-viable direction, but its live economics are too marginal to justify the build today. Kept on the Low-Frequency roster; re-evaluate only if Base Aave/Morpho liquidation sizes grow.
Active Tests & Monitors
BASE-AAVE-LIQ-V1| Test / Monitor | Started | Key Metric | Decision Criteria |
|---|---|---|---|
| Sticky-skip cooldown (NEW 2026-05-20) | 2026-05-20 | STICKY_HOT_REJECTS=8 / COLD_TIER_SKIP_CYCLES=2 _hfRejectCount + _coldTierCycle Maps in liq-executor-v2.js | Live. All 9 current watchlist users sit in HF 1.01-1.15 band; bot rotates through cold-tier evaluating 2 fresh users per cycle. Working as designed — waiting on a real crossing below 1.0. |
| Daemon liveness | 2026-05-14 (relaunched) | tmux base-liq-watch + base-liq-fcst + liq-exec-v2; heartbeat-base_liq_predictive.ndjson freshness | All three live. Heartbeat fresh as of 2026-05-21. No restart needed. |
| Forecaster prediction freshness | 2026-05-14 | mtime of logs/base-liq-predictions.ndjson | Writes every cycle. mtime <5min consistently. |
| Sim attempts vs sim reverts | never (0 fires) | liq-executor-v2.log [SIM] count vs [SKIP] count | [SKIP] still dominates (no user crossing HF<1.0). Once a fire lands, watch the SIM/REVERT ratio to distinguish opportunity-gap from strategy-gap. |
| Morpho executor wiring | not started | existence of base/morpho-executor.js + Morpho payload in FlashLiquidator.sol | Today only Aave is executable. Morpho data exists (NDJSON output ongoing). Building a Morpho executor unlocks the "/ Morpho" half of the bot label. |
| Swap-pair coverage hits | 2026-05-20 (post-expand) | [SKIP] reason="no swap route" count in liq-executor-v2.log | SWAP_ROUTES now covers 11 collaterals. Current cycle pattern shows 1x no-swap-route per 10 candidates (~10% miss). Acceptable; remaining gap is syrupUSDC (DEFERRED). |
| Executor wallet ETH balance | 2026-04-14 (deploy) | eth_getBalance(0xEc5Df194…) | Required for gas. Same operator wallet as PLS + BSC bots. Verify periodically — if below 0.01 ETH the bot will fail at first fire. |
Compromises
BASE-AAVE-LIQ-V1| Decision | Aggressive ← | Current Position | → Conservative | Notes |
|---|---|---|---|---|
| Bot daemons (RUNNING since 2026-05-14) | Reactivate · resume liquidation hunting | Stay stopped · defer Base flagship work | All three daemons live: tmux base-liq-watch, base-liq-fcst, liq-exec-v2. Heartbeats fresh as of 2026-05-21. 0 fires lifetime — gated by market state (no Base user crossing HF<1.0), not by daemon liveness. | |
| HF watchlist band (1.00 - 1.15) | Tight band · only near-liquidation candidates | Wide band · catch slow HF drift earlier | HF_MAX_WATCH = 1.15 from lib/liquidation-config. 130 positions made the cut at last scan; 50 were hot. Tightening to 1.10 reduces RPC pressure; widening to 1.25 catches more slow-decay positions at the cost of false-alarm volume. | |
| Forecast scenarios (±0.5 / 1 / 2 / 3 / 5 %) | Few scenarios · fast cycle | Many · catch tail risk | 6 scenarios applied per position. CPU-cheap (no RPC, just math). about_to_pop bucket = positions liquidatable at 0% shock (HF ≤ 1.0054). Worth keeping the -5% bucket for volatile-collateral tail risk even though it rarely matches. | |
| Prediction staleness gate (60s) | Tight · only fresh predictions fire | Loose · burn stale signals | MAX_PREDICTION_AGE_MS = 60000. Raised 2026-04-23 from 15s when 15s caused executor to skip every poll (forecaster cadence is ~5s but only writes on fresh watchlist; watchlist cadence is ~120s in slow paths). | |
| Sim TOP_K (10) | Sim few · save RPC | Sim many · don't miss winners | Top 10 predictions by predicted netProfit get callStatic-simmed each cycle. Higher K = more RPC + more sim-revert noise; lower K = miss winners ranked below the cutoff. | |
| Batch size (max 3) | No batching · per-position txs | Aggressive batch · all-or-nothing | BATCH_SIZE_MAX = 3. First 3 sim-survivors get bundled into one executeBatchLiquidations call. Gas-efficient vs sending 3 separate txs; if any item reverts the whole tx reverts. Caller MUST callStatic each item off-chain first. | |
| Min net profit ($0.30) | Permissive · catch dust | Conservative · only meaningful | MIN_NET_PROFIT_USD = 0.30 (lowered from 1.00 on 2026-05-15). Permissive while we wait for first fires; raise to $5-10 once landings prove reliable. | |
| Priority multiplier (1.5×) | Standard fee · cheap inclusion | Aggressive bid · win race | PRIORITY_MULTIPLIER = 150 (%). Bumps priority gas 1.5× over base. Base mempool is competitive; 1.5× is mid-range. MEV teams routinely bid 3-5×. | |
| Swap-pair coverage (11 routes) | Permissive · trust router · revert on miss | Strict · whitelist · pre-filter | SWAP_ROUTES expanded to 11 entries 2026-05-20: WETH, cbETH, wstETH, cbBTC, USDC, USDbC, DAI, EURC, AERO, weETH, AAVE. Only syrupUSDC remains DEFERRED (needs Maple redeem path). Aave Base lists ~12 supported collaterals; coverage is now near-complete. | |
| Morpho coverage (observation-only) | Aave-only execution | Full Aave + Morpho execution | morpho-watchlist + morpho-forecaster collect Morpho position data + project shocks. NO morpho-executor exists. Bot card label "Aave / Morpho" overstates today — Morpho is read-only. Building a Morpho executor (mirrors liq-executor-v2 with Morpho.liquidate semantics) is the highest-value follow-up. | |
| Circuit breaker (3 losses → 1h halt) | No CB · trade through losses | Tight CB · pause aggressively | Standard 3-strike pause. Per shared lib/circuit-breaker. Will trigger only when bot has produced 3 net-negative liquidations within window; never tested live (0 fires lifetime). | |
| Capital sourcing (Aave flash loan) | Self-funded contract | Always-flash | Always flash-borrows debtAsset from Aave V3 + pays 0.05% fee. Contract holds no capital (matches BSC + PLS liquidation pattern). Owner key is the operator wallet 0xEc5Df194 (same as PLS + BSC bots). |
Parameters
BASE-AAVE-LIQ-V1| Parameter | Value | Reasoning | Potential Adjustment(s) |
|---|---|---|---|
| HF_MAX_WATCH | 1.15 (lib/liquidation-config) | Watchlist hot-band ceiling. Users with HF in [1.00, 1.15] get 5s rescan. Above 1.15 they fall into the 30s bulk poll. | Tighten to 1.10 if RPC load is high. Widen to 1.25 to catch slow-decay positions earlier; cost is more false-alarm volume. |
| WATCHLIST_SCAN_INTERVAL | 5s | How often the hot-band users get rescanned. | Tied to RPC capacity. 2-3s achievable on a paid endpoint. |
| POLL_INTERVAL_MS | 2000 (executor) | Cycle period for the executor reading predictions NDJSON. | Lower to 1000 for tighter signal-to-fire latency once landings prove reliable. |
| MAX_PREDICTION_AGE_MS | 60000 | Predictions older than this are stale → executor skips. Raised 2026-04-23 from 15s (which caused executor to skip every poll). | Reducing back below 30s only safe if watchlist cadence improves first. |
| TOP_K_SIM | 10 | Top 10 predictions by predicted netProfit get callStatic-simmed each cycle. | Raise to 20 if missing valid candidates outside top 10. Drop to 5 if RPC-bound. |
| BATCH_SIZE_MAX | 3 | Up to 3 sim-passed liquidations batched into one executeBatchLiquidations tx. All-or-nothing semantics. | Higher batch = better gas efficiency but every additional item raises whole-tx-revert risk. 3 is a reasonable middle ground. |
| MIN_NET_PROFIT_USD | $0.30 | Minimum net profit floor passed into the contract. Lowered 2026-05-15 from $1.00 → $0.30 to allow small fires while we collect data. | Permissive; raise to $5-10 once landings confirm pipeline works. |
| PRIORITY_MULTIPLIER | 150 (%) | Bumps priority gas 1.5× over base. Base mempool is competitive — MEV teams routinely bid 3-5×. | Push to 200-300 if losing races. Drop to 110 if winning easily. |
| SWAP_ROUTES table | 11 entries (WETH/cbETH/wstETH/cbBTC/USDC/USDbC/DAI/EURC/AERO/weETH/AAVE) | Pre-configured Uniswap V3 + Aerodrome routes per collateral asset. AAVE added 2026-05-20; only syrupUSDC remains DEFERRED (needs Maple redeem path). | Coverage now near-complete for Aave Base collaterals. Add syrupUSDC when the Maple redeem path is built. |
| AAVE_FLASH_FEE_BPS | 5 (0.05%) | Aave V3 flash-loan fee. Subtracted from expected profit. | Fixed by Aave — not tunable. |
| DEFAULT_CLOSE_FACTOR | 0.5 (lib/liquidation-config) | Aave V3 close factor for HF > 0.95 (covers up to 50% of debt per liquidation). | Fixed by Aave protocol. MAX_CLOSE_FACTOR=1.0 applies when HF ≤ CLOSE_FACTOR_HF_THRESHOLD (~0.95) → full repay allowed. |
| CIRCUIT_BREAKER | 3 losses → 1h halt | Standard from lib/circuit-breaker. Strategy = base_liq_predictive. | Raise to 5 losses once data confirms bot is profitable on average. |
| FlashLiquidatorV2 contract | 0x2015Ba5c39E4Acc0d00725284074CCA836fc86Fc | Deployed 2026-05-21. Aave V3 provider = 0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D. Replaces V1 at 0xdea5F2CaA50aa4DaD07628b3C9CE77574b40BcCa. V2 surfaces Venus error codes via VenusLiquidateFailed(uint256) / VenusRedeemFailed(uint256) custom errors. Shared codebase with BSC FlashLiquidatorV2. | May need another redeploy when Morpho support lands — the contract has Venus dispatch but not Morpho. |
Revisions
BASE-AAVE-LIQ-V1| Revision | Summary |
|---|---|
| V1 (launch) | 2026-04-14 — FlashLiquidator deployed on Base at 0xdea5F2CaA50aa4DaD07628b3C9CE77574b40BcCa. Three-daemon pipeline: liq-watchlist + liq-forecaster + liq-exec-v2. Aave V3 flash-funded, 0.05% fee. HF band [1.00, 1.15]. |
| V1.1 | 2026-04-27 — Decoded Aave V3 sim-revert categories (45-line code map). 168 wallets classified, 50 hot, ~10 liquidatable per cycle. |
| V1.2 | 2026-05-14 — Daemons relaunched after a multi-day pause. Heartbeats fresh since. |
| V1.3 | 2026-05-15 — MIN_NET_PROFIT_USD lowered $1.00 → $0.30 to allow data-collection fires. |
| V1.4 | 2026-05-20 — Multicall3 batched HF reads (liq-executor-v2.js:333-358): cycle latency 62s → ~1-2s. Sticky-skip cooldown (STICKY_HOT_REJECTS=8 / COLD_TIER_SKIP_CYCLES=2) frees RPC budget on cold-tier addresses. SWAP_ROUTES expanded 4 → 11 entries (added wstETH, cbBTC, USDC, EURC, AERO, weETH, AAVE). Only syrupUSDC remains DEFERRED. |
| V2 (CURRENT) current | 2026-05-21 contract redeploy: FlashLiquidatorV2 on Base at 0x2015Ba5c39E4Acc0d00725284074CCA836fc86Fc (tx 0x87c4a630…edb7bda6, replaces V1 at 0xdea5F2Ca…40BcCa). Shared codebase with BSC FlashLiquidatorV2 — same VenusLiquidateFailed(uint256) / VenusRedeemFailed(uint256) custom errors. Venus path unused on Base (Aave-only) so V2 behaves identically to V1 here, but kept on the V2 codebase for parity + future cross-chain Venus enable. liq-exec-v2 restarted at 20:49:57Z in a fresh tmux pane (the old simple sh -c wrapper died with its node child; ran-bot.sh supervisor pattern would have auto-restarted, but liq-exec-v2 didn't have one — followup TODO). |