Liquidation bot development for lending protocols

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1All 1305 services
Liquidation bot development for lending protocols
Complex
~1-2 weeks
Frequently Asked Questions

Blockchain Development Services

Blockchain Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1357
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1249
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    954
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1187
  • image_logo-advance_0.webp
    B2B Advance company logo design
    645
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    926

Building a winning liquidation bot for lending protocols

Recently, a client came to us with a problem: their liquidator bot kept losing to competitors, even though the algorithm was correct. It turned out they were using polling to get the pool state — querying RPC every 5 seconds. When the price dropped sharply, the bot only learned about it after 5 seconds, while competitors with an event-driven architecture knew in 1–2 seconds. After switching to our scheme, latency dropped to 500 ms, and the bot now consistently captures top liquidations.

In Aave V3, position health is measured by the health factor. When it falls below 1.0, liquidation becomes available — and anyone can seize the collateral with a 5–15% bonus. For each such transaction, the liquidator earns $200–$500 if they get there first. But competition is fierce: hundreds of bots with co-located servers fight for every block. We know how to build a liquidator that actually wins — not by magic, but by architecture and infrastructure.

Our experience includes developing liquidation systems for Aave, Compound, and Radiant, where we consistently ranked in the top 10 by profitability. Over our work, we have launched more than 30 trading and liquidation bots processing millions of dollars daily. We guarantee your bot will be competitive — with zero downtime and minimal latency. Gas savings via Flashbots can reach 30%.

The gap between a slow bot and a fast one isn’t in the algorithm — it’s in the infrastructure and implementation details.

Technical implementation and architecture

Steps to develop a liquidation bot

  1. Protocol selection and health factor assessment. Study the liquidationCall interface, liquidation bonuses, and assets. For Aave V3, typical bonuses are 5% (stablecoin) to 15% (volatile).
  2. Design event-driven architecture. Subscribe to Borrow, Deposit, Repay events from the protocol and AnswerUpdated events from Chainlink. Store state in Redis with a TTL of 1 hour.
  3. Implement flash loan contract. Write a Solidity contract that borrows the debt token via Aave, performs the liquidation, swaps the collateral through Uniswap V3, and repays the loan. The flash loan fee is 0.09%.
  4. Integrate private mempool. Send transactions via Flashbots Bundles (Ethereum) or private RPC endpoints (L2). Liquidation success rate increases 10x.
  5. Load testing. Simulate 10,000 positions and updating 50 Chainlink feeds — the bot must process everything in 500 ms.

Detection: event subscription vs polling

The naive approach is to query the list of positions every N seconds via getUserAccountData. With thousands of active positions, this is unworkable: too many RPC requests, too high latency. The correct approach reduces requests by a factor of 100.

Event subscription via WebSocket. Listen for the protocol’s Borrow, Deposit, and Repay events. On each event, update the local state for that specific user. There’s no need to re-query everything — only changed positions.

Price feed subscription. Listen for Chainlink AnswerUpdated events for all protocol assets. When an asset’s price changes, recalculate the health factor for all positions using that asset as collateral or debt. Price oracle updates usually trigger liquidations, not user actions.

Combining the two channels gives an up-to-date list of liquidation candidates within one to two seconds of an on-chain state change. This event-driven approach saves $500 per month on RPC fees compared to polling. Our MEV liquidation bot for Aave uses Flashbots and private mempool to execute liquidation calls with gas optimization and monitoring of health factors.

Flash loans and private mempool

Classic liquidation requires holding a reserve of each debt token. With dozens of assets in the protocol, that’s expensive and inefficient. The standard solution: use a flash loan from Aave or Balancer to obtain the debt token, call liquidationCall(), swap the received collateral back to the original token via Uniswap V3 or Curve, and repay the flash loan. The entire cycle is one transaction. On average, each successful liquidation yields $300 profit after gas costs.

A critical factor is the profitable path. After the flash loan fee (0.09% in Aave V3) and swap slippage, the liquidation must remain profitable. The bot must simulate the full transaction via eth_call before sending — otherwise, gas on a reverted transaction is also lost. According to the Aave documentation, the health factor must be below 1.0 for a liquidation to be allowed.

Here is the core of a liquidation contract:

function execute(
    address borrower,
    address debtToken,
    address collateralToken,
    uint256 amount
) external {
    // Get flash loan via Aave
    aaveLendingPool.flashLoan(
        address(this),
        debtToken,
        amount,
        abi.encode(borrower, collateralToken)
    );
}

function executeOperation(
    address[] calldata assets,
    uint256[] calldata amounts,
    uint256[] calldata premiums,
    address initiator,
    bytes calldata params
) external override returns (bool) {
    // Decode parameters
    (address borrower, address collateralToken) = abi.decode(params, (address, address));
    // Execute liquidation
    aaveLendingPool.liquidationCall(
        collateralToken,
        assets[0],
        borrower,
        amounts[0],
        false
    );
    // Swap collateral to debt token via Uniswap
    uint256 collateralBalance = IERC20(collateralToken).balanceOf(address(this));
    swapCollateralToDebt(collateralToken, assets[0], collateralBalance);
    // Repay flash loan with premium
    IERC20(assets[0]).approve(address(aaveLendingPool), amounts[0] + premiums[0]);
    return true;
}

The public mempool is death for a liquidation bot. A profitable transaction will be sandwich-attacked or front-run by an MEV bot within the same second. The solution is Flashbots (Ethereum) or private RPC endpoints (Alchemy Private, BloxRoute). The transaction goes directly to the validator, bypassing the public mempool. In our practice, Flashbots is 10x more efficient than normal submission. Using a private mempool is a mandatory condition for profitable operation.

On L2s (Arbitrum, Optimism, Base) the situation differs: the sequencer is centralized, MEV is less aggressive, but latency to the sequencer node is still critical.

Bot architecture and multi-protocol support

Component Implementation Role
State manager In-memory + Redis User positions, health factors
Event listener ethers.js WebSocket Position and price updates
Profitability calculator Onchain simulation eth_call before sending
Executor Flashbots / private RPC Send without front-running
Flash loan handler Solidity contract Atomic liquidation

The liquidation contract is deployed separately. The bot calls its execute() function, passing parameters: borrower address, debt token, collateral token, amount. The contract performs flash loan → liquidation → swap → repayment. Profit stays on the contract; the bot periodically withdraws.

Aave V3, Compound V3 (Comet), Venus on BSC, Radiant — each has its own liquidationCall interface and health factor logic. We use the adapter pattern: a common ILiquidator interface with implementations for each protocol. Adding a new protocol means writing a new adapter without changing core logic. Order development of a bot that will generate steady income.

Project overview and ordering

What is included in the work

The following deliverables are included in every project: documentation, source code access, team training, ongoing support. Our work includes full documentation, access to code repositories, training for your team, and ongoing support.

Stage Result
Protocol audit Documentation on health factor, liquidation bonuses, interfaces
Contract development Solidity liquidator contract with flash loan support
Backend Node.js bot with event listener, state manager, executor
Flashbots integration Private mempool submission without front-running
Testing Fork tests + load testing
Deployment and monitoring Server in the region, Grafana dashboard
Documentation and training API description, runbook, team session

Testing and deployment

Fork tests on mainnet are mandatory. Foundry vm.createFork + vm.warp allow reproducing historical liquidations: take a block where a position was liquidated, run the bot — it should detect and execute it. This is the best way to verify health factor calculations.

Load test: 10,000 positions in the state manager, simulate updating all Chainlink feeds — the bot must process the queue in < 500 ms. This is 3x faster than a typical implementation.

Deployment: server in the same region as the Alchemy/Infura nodes (usually us-east-1). PM2 or systemd for uptime. Monitoring via Grafana: latency from event to transaction, profit per liquidation, failed attempts.

Common mistakes

  • Using polling instead of event subscription — increases latency to 5+ seconds.
  • Ignoring private mempool — liquidations are intercepted by MEV bots.
  • Incorrect profitable path calculation — transaction reverts, losing gas.
  • Choosing a server in the wrong region — an extra 100 ms latency.

Time and cost estimates

A basic bot for one protocol (Aave) on one chain — from 1 to 1.5 weeks. A multi-protocol bot with flash loan executor and Flashbots integration — from 2 to 3 weeks. Supporting multiple chains with a unified state manager — an additional week per chain. Development cost starts at $8,000 for a basic bot.

Why order development from us?

We have been working in DeFi since the commercial launch of Aave. In 5 years, we have built more than 30 bots for liquidations, arbitrage, and MEV. We guarantee 99.9% uptime and stable profitability. We will evaluate your project in 2 days — contact us. Get a consultation on architecture and protocol selection.

Contact us for a consultation on the architecture of your future bot.

DeFi Protocol Development

We design modular DeFi protocols where the math of stablecoins, liquidity, and oracles works flawlessly. Mango Markets is a stress test: the attacker manipulated the spot price through a single account, took a loan against inflated collateral, and withdrew $114 million. The oracle took the price from a single source without TWAP. Not a code bug—it was an architectural decision that became a vulnerability. Our experience shows: any DeFi protocol is a system of bets that all components, from calculations to economic incentives, are correctly aligned simultaneously.

We don't write code under the 'if it works, don't touch it' mindset. We model stress scenarios: cascading liquidations, depegs, flash loans. Only then do we build events that won't break the protocol.

Why are oracles a critical component of DeFi?

Most major DeFi hacks started with oracle manipulation. Let's break down the three layers we use in every project.

Spot price as oracle—not an option. Uniswap v2 spot price can be shifted by a flash loan in one transaction. The price at the end of the block is the only one that enters the state, and the oracle reads it. Attack scheme: borrow via flash loan → buy asset into the pool → price rises → take a loan against inflated collateral → sell asset → repay flash loan. One transaction.

TWAP as protection. Uniswap v3 observe() averages the price over a period (30 minutes). Manipulation requires maintaining the price for several blocks—this is expensive. But TWAP reacts slowly to legitimate changes, opening a window for arbitrage on liquidation during sharp movements.

Chainlink Price Feeds are an aggregation from multiple data providers with a median. Standard for lending. Problem: heartbeat 1–24 hours and deviation threshold 0.5%. If the price doesn't move, the feed may not update for a day. In volatile markets—lag.

Oracle Mechanism Manipulation Protection Latency
Chainlink Median from independent providers High (decentralization) Up to 24h at 0% movement
Uniswap v3 TWAP Average price over N blocks High (hard to maintain) 30 min – 1 h
Pyth Network Cross-chain low-latency Medium (dependent on publisher) Seconds

In production, we use a two-tier check: Chainlink aggregator + Uniswap v3 TWAP as a verifier. If the discrepancy exceeds N%, the transaction is rejected and the system is paused.

How to protect a DeFi protocol from flash loan attacks?

Flash loans turn any user into an owner of unlimited capital for one transaction. Therefore, when designing contracts, we assume: everyone has access to unlimited capital. This completely changes the threat model.

Legitimate uses of flash loans are arbitrage, liquidation, and self-liquidation. But the protocol must verify that the loan is not used for manipulation: the oracle must not read the price from a pool that can be shifted in one transaction. We add checks on block.timestamp and minimum liquidity depth.

Key Components of DeFi Architecture

Protocol Type Core Mechanism Main Risk
DEX (AMM) x*y=k or concentrated liquidity impermanent loss, oracle manipulation
Lending collateral ratio, liquidation bad debt during cascading liquidations
Yield aggregator auto-compounding strategies rug via strategy upgrade
Derivatives / Perps funding rate, mark price liquidation cascades, socialized losses
Liquid staking stETH-style rebasing depegging on mass unstake

AMM: From x*y=k to Concentrated Liquidity

Uniswap v2 uses x * y = k. LP tokens are ERC-20—each pool issues its own token proportional to the share. Problem: liquidity is spread across the entire curve, most of it unused.

Uniswap v3 and ERC-721 positions: concentrated liquidity—LPs provide liquidity in a range [priceLow, priceHigh]. Capital efficiency up to 4000x for stable pairs. But ERC-721 breaks vault strategies built for ERC-20. Range management is a separate engineering challenge: a position falls out of range when the price moves, stops earning fees, and becomes single-asset. Protocols like Arrakis Finance automatically rebalance. If you build a vault on top of v3, you need your own range manager or integration with an existing one.

Slippage in v3 is calculated via sqrtPriceX96—96-bit fixed-point math. Errors on the frontend lead to discrepancies between visible and actual slippage.

Curve for pairs with close prices (stablecoin/stablecoin, stETH/ETH) uses an invariant combining constant product and constant sum. Lower slippage within the peg range. Contracts are in Vyper, code is mathematically dense, auditing is difficult.

Lending Protocols: Collateral, Liquidation, Bad Debt

LTV defines the maximum loan against collateral. Liquidation threshold is the level for liquidation. The difference is the buffer for the liquidator. Typical example: LTV 75%, liquidation threshold 80%, bonus 5%. If the price drops 20%+, the position is open for liquidation.

Cascading liquidations: many positions are liquidated simultaneously → liquidators sell collateral → price drops → next wave. LUNA/UST 2022 is a classic cascade.

If collateral devalues faster than liquidation, the protocol incurs bad debt. Aave uses a Safety Module (staked AAVE), Compound uses reserves. Without a backstop, bad debt is socialized via dilution of the supply token or netting.

Designing a liquidation system requires modeling stress scenarios: a single liquidation bot failure, high gas, collateral delisting.

Yield Farming and Incentive Mechanics

Liquidity mining distributes governance tokens to LP providers. Problem: mercenary capital—farmers come, sell tokens, leave. TVL is illusory.

Sustainable mechanics: protocol-owned liquidity (Olympus bonding), veToken (CRV locked → boost + governance), locked staking with penalty. The ve-model, if implemented incorrectly, creates governance concentration. A timelock on gauge weight changes and limits on voting power are needed.

What Our DeFi Protocol Development Includes

  • Architectural documentation: contract interaction diagrams, liquidation stress tests, oracle calculations.
  • Implementation in Solidity 0.8.x with OpenZeppelin 5.x (AccessControl, ReentrancyGuard, Pausable, TimelockController) and Solmate for gas-optimized base contracts.
  • Foundry fork tests on real mainnet (Uniswap, Chainlink, Aave) — pre-deployment tests cover all scenarios.
  • Audit: at least two independent auditors for TVL over $1M. Code4rena or Sherlock for bug bounty.
  • Deployment with Gnosis Safe 3/5 multisig + timelock 48–72 hours.
  • Monitoring via Tenderly (alerts, simulations), OpenZeppelin Defender (automation), Forta (on-chain threat detection).
  • Post-launch support: updates, patches, upgrades via proxy.

Our Expertise and Experience

We have been developing DeFi protocols since 2020, delivering 30+ projects with a combined TVL of over $150 million. Our clients include protocols in the top 20 by TVL on Ethereum, Arbitrum, and Base. The team consists of certified Solidity developers who have completed ConsenSys Diligence audit tracks.

DeFi basic principles that we apply in practice.

Timelines

  • DEX with AMM (Uniswap v2 fork): 6–10 weeks
  • Lending protocol (Aave-style, single collateral): 3–5 months
  • Yield aggregator with multiple strategies: 2–4 months
  • Full-fledged DeFi protocol with governance: 5–8 months including audit

Cost is calculated individually—contact us for a project estimate.

Get a consultation on DeFi protocol architecture—we will analyze the risks and propose an optimal solution.