Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

How to Implement Automated Liquidations with Minimal Slippage

A technical guide for developers building automated liquidation systems for lending protocols. Covers core models, execution strategies, and code-level considerations.
Chainscore © 2026
introduction
DEFI ENGINEERING

How to Implement Automated Liquidations with Minimal Slippage

A technical guide for developers on building efficient liquidation bots that execute profitable positions while managing market impact.

Automated liquidations are a core mechanism for maintaining solvency in overcollateralized lending protocols like Aave, Compound, and MakerDAO. When a borrower's collateral value falls below a predefined health factor or collateral ratio, their position becomes eligible for liquidation. A liquidator can repay a portion of the borrower's debt in exchange for their collateral at a discount, profiting from the spread. This process is permissionless and automated, creating a competitive market for bots that monitor the blockchain and execute transactions. The primary challenge is executing these transactions profitably while contending with slippage, network congestion, and other bots.

Slippage—the difference between the expected price of a trade and the executed price—is the main adversary for a profitable liquidation bot. High slippage can erase the liquidation bonus. To minimize it, you must optimize your transaction's path through the market. This involves using flash loans to atomically borrow, repay, and sell without upfront capital, and routing the seized collateral through the most efficient DEX aggregator (like 1inch or CowSwap) or a direct pool with sufficient depth. Your bot's logic must calculate the optimal swap route in real-time, factoring in pool liquidity, fees, and the price impact of your intended trade size. Always simulate the transaction via a eth_call RPC method before broadcasting.

Here is a simplified conceptual flow for a liquidation transaction using a flash loan, written in a pseudo-Solidity style. The key is bundling all steps into a single atomic transaction via a flash loan callback.

solidity
// Inside your contract's callback function
function executeOperation(
    address[] calldata assets,
    uint256[] calldata amounts,
    uint256[] calldata premiums,
    address initiator,
    bytes calldata params
) external override returns (bool) {
    // 1. Decode params: borrower address, debt to repay, collateral to seize
    (address borrower, uint256 debtAmount) = abi.decode(params, (address, uint256));
    
    // 2. Approve and repay the borrower's debt to the lending protocol
    IERC20(debtAsset).approve(address(LENDING_POOL), debtAmount);
    LENDING_POOL.liquidationCall(collateralAsset, debtAsset, borrower, debtAmount, false);
    
    // 3. Seize the discounted collateral, now held by this contract
    uint256 collateralSeized = IERC20(collateralAsset).balanceOf(address(this));
    
    // 4. Sell collateral via DEX aggregator for debt asset to repay flash loan
    IERC20(collateralAsset).approve(address(AGGREGATOR), collateralSeized);
    AGGREGATOR.swap(collateralAsset, debtAsset, collateralSeized, minDebtOut, address(this));
    
    // 5. Repay flash loan + premium
    uint256 amountOwed = amounts[0] + premiums[0];
    IERC20(debtAsset).approve(address(LENDER), amountOwed);
    
    // 6. Keep any remaining tokens as profit
    return true;
}

To build a competitive bot, you need a robust off-chain keeper or searcher system. This service should listen for on-chain events like HealthFactorBelowThreshold or monitor price feed updates from oracles. Upon detecting an opportunity, it must instantly calculate profitability: Profit = (Collateral Value * Discount) - (Debt Repaid + Gas Costs + Slippage Estimate). Use the MEV-geth or MEV-boost ecosystem to access private mempools and protect your transaction from front-running. Tools like the Flashbots Bundle API allow you to submit bundles directly to miners/validators. Always set a tight slippage tolerance in your swap call, but pair it with a comprehensive slippage model that uses recent trade data to predict price impact.

Key risks include failed transactions from stale price data, getting outbid by bots with lower gas fees or better routes, and sandwich attacks on your collateral swap. Mitigate these by using direct p2p liquidity pools when possible, simulating transactions against a forked mainnet node (using Foundry or Hardhat), and implementing gas optimization strategies. Remember, the liquidation bonus is a finite resource competed for in real-time. Your edge comes from superior transaction structuring, faster execution, and more accurate slippage modeling than other participants in the MEV supply chain.

prerequisites
PREREQUISITES AND CORE CONCEPTS

How to Implement Automated Liquidations with Minimal Slippage

This guide covers the foundational knowledge required to build a secure and efficient automated liquidation system for DeFi lending protocols.

Automated liquidations are a critical risk management mechanism for overcollateralized lending protocols like Aave, Compound, and MakerDAO. They protect lenders by selling a borrower's collateral when their health factor falls below a threshold (e.g., 1.0). The core challenge is executing these sales quickly and at a favorable price to cover the debt plus a liquidation bonus, while minimizing the slippage that erodes the system's solvency. Slippage is the difference between the expected price of a trade and the price at which it actually executes, often caused by low liquidity or large trade size relative to the market depth.

To implement this, you need a solid grasp of several key concepts. First, understand the liquidation engine's on-chain logic, which calculates health factors and exposes a public liquidate() function. Second, you must interact with Decentralized Exchange (DEX) aggregators like 1inch or CowSwap to find the best execution path across multiple liquidity sources, which is essential for minimizing slippage. Finally, you need to manage gas optimization and transaction ordering (e.g., using Flashbots' MEV-Share) to ensure your liquidation transaction is included in a block before competitors, a process known as MEV (Maximal Extractable Value) capture.

The technical stack typically involves a keeper bot written in a language like TypeScript or Python, which monitors the blockchain for undercollateralized positions. This bot listens for events, calculates profitability off-chain, and then constructs and submits transactions. You'll need to use libraries such as ethers.js or viem to interact with smart contracts. A deep understanding of the specific protocol's liquidation parameters—like the liquidation threshold, close factor, and bonus—is non-negotiable, as these directly impact your strategy's logic and profit margins.

Effective slippage mitigation requires more than just using an aggregator. Strategies include splitting large orders across multiple blocks or DEXs to reduce market impact, using limit orders on protocols like CowSwap that avoid on-chain slippage, and implementing dynamic slippage tolerance based on real-time liquidity depth and volatility. Monitoring gas prices and network congestion is also crucial, as a delayed transaction can result in failed liquidation or significantly worse execution prices due to front-running or sandwich attacks.

liquidation-models-explained
IMPLEMENTATION GUIDE

Liquidation Models: Auction vs. Fixed Discount

Automated liquidations are a critical component of lending protocols. This guide compares the two dominant models and provides implementation strategies to minimize slippage.

A liquidation occurs when a borrower's collateral value falls below the required threshold for their debt. To protect the protocol from bad debt, liquidators are incentivized to repay the debt and seize the collateral at a discount. The two primary models for this process are fixed discount and auction-based liquidations. The choice of model directly impacts capital efficiency, market stability, and the liquidator's risk of slippage. Protocols like Aave V2/V3 and Compound use a fixed discount, while MakerDAO's Multi-Collateral Dai (MCD) system employs a complex auction model.

The fixed discount model is simpler to implement. The protocol defines a static liquidationBonus (e.g., 5-15%). A liquidator repays the borrower's debt and receives the equivalent value of collateral, plus the bonus. For example, repaying 100 DAI of debt might grant 105 DAI worth of ETH. This model is fast and gas-efficient, creating predictable incentives. However, in volatile markets, the fixed discount may be insufficient to cover a liquidator's slippage and gas costs, leading to failed liquidations and systemic risk. The discount must be calibrated carefully against historical volatility data.

Auction models introduce a time dimension to discover a fair market price. In a Dutch auction, the price of the collateral starts high and decreases over time until a liquidator accepts it. In a reverse auction for the liquidation penalty, liquidators bid to repay the debt for the smallest amount of collateral. This can result in a more efficient price discovery, potentially reducing the protocol's loss and the liquidator's slippage. However, auctions are more complex, require more gas, and introduce latency, which can be problematic during extreme volatility events.

To implement automated liquidations with minimal slippage, your smart contract and off-chain keeper logic must account for several factors. For a fixed discount system, your keeper should calculate the net profit dynamically: Profit = (Collateral Amount * Collateral Price * (1 + Bonus)) - (Debt Amount * Debt Price) - Gas Costs - Slippage Estimate. You must integrate with a DEX aggregator like 1inch or 0x API to get real-time swap rates and simulate the transaction to estimate slippage before submitting the liquidation tx.

If implementing an auction, your contract needs a time-based price decay function or a bidding mechanism. A common pattern is a step auction where the price decreases by a fixed amount at set intervals. Your off-chain keeper must monitor the auction, calculate the profitability at each price point, and submit a bid or purchase transaction before competitors. Using a private transaction relay like Flashbots can help secure the profitable transaction in a competitive environment. Always include a slippage tolerance parameter in your swap call, even when claiming auctioned collateral.

The choice between models is a trade-off between simplicity and efficiency. For new protocols or stable assets, a well-calibrated fixed discount is often sufficient. For large, volatile collateral types or protocols prioritizing capital preservation, an auction model may be worth the added complexity. Test your implementation extensively on a testnet using historical price feeds to simulate black swan events. Ultimately, minimizing slippage is about integrating real-time market data and robust transaction execution into your liquidation bot's logic.

MECHANISM SELECTION

Comparison: Auction vs. Fixed Discount Liquidations

Key differences between the two primary liquidation mechanisms, focusing on implementation complexity, capital efficiency, and market impact.

Feature / MetricDutch AuctionFixed Discount

Slippage Control

High (Dynamic pricing)

Low (Fixed price)

Implementation Complexity

High

Low

Time to Liquidation

Minutes to hours

< 1 minute

Capital Efficiency

High (Maximizes recovery)

Variable (Risk of over-discount)

Gas Cost per TX

$50-150

$10-30

Keeper Competition

Oracle Dependency

Low (Uses time decay)

High (Uses spot price)

Best For

Large, illiquid positions

Small, liquid positions

execution-optimization
DEX AGGREGATOR GUIDE

How to Implement Automated Liquidations with Minimal Slippage

Automated liquidation systems require precise, low-slippage execution to remain profitable. This guide explains how to leverage DEX aggregators and on-chain strategies to execute liquidations efficiently.

Automated liquidations are a critical component of DeFi lending protocols like Aave and Compound. When a borrower's collateral value falls below a specified health factor, their position becomes eligible for liquidation. A liquidator can repay a portion of the borrower's debt in exchange for discounted collateral. The profitability of this operation hinges on executing the swap from the repaid debt asset to the seized collateral asset with minimal slippage. High slippage can turn a profitable opportunity into a loss, especially in volatile market conditions.

DEX aggregators like 1inch, 0x API, and CowSwap are essential tools for this task. Instead of routing a trade through a single DEX, an aggregator splits the order across multiple liquidity sources (Uniswap, Balancer, Curve, etc.) to find the best possible price. They use algorithms to optimize for the effective exchange rate, which includes fees and price impact. For a liquidation bot, integrating with an aggregator's API ensures you get a better price than any single venue could offer, maximizing your margin.

To implement this, your smart contract or off-chain keeper must first check for liquidatable positions using the lending protocol's public view functions. Upon finding one, calculate the exact debt amount to repay. Then, query an aggregator for a swap quote. For example, you can call the 1inch AggregationRouterV5's getQuote function or use the 0x API's /swap/v1/quote endpoint. The response will provide the expected output amount and a calldata payload for the swap transaction.

The critical step is bundling the liquidation call with the swap in a single atomic transaction. This is typically done using flash loans or the lending protocol's own liquidation function that returns seized tokens. Your contract should: 1) Execute the liquidation, receiving collateral tokens, then 2) Immediately route those tokens through the aggregator's contract to swap them for the original debt asset, repaying the flash loan if used. This atomicity prevents price risk between steps. Always simulate the transaction using eth_call to verify profitability before broadcasting.

Advanced strategies involve slippage tolerance and MEV protection. Set a dynamic slippage limit based on on-chain volatility; too tight and trades fail, too loose and profits leak. Aggregators like CowSwap offer MEV-protected orders via batch auctions, shielding you from frontrunning. Furthermore, consider gas optimization: the aggregator's route may involve multiple hops, increasing gas costs. Weigh this against the price improvement. Monitoring tools like Tenderly or OpenZeppelin Defender can help track and automate these complex transactions reliably.

keeper-network-integration
KEEPER NETWORK INTEGRATION

How to Implement Automated Liquidations with Minimal Slippage

A technical guide for developers on building a keeper bot that executes on-chain liquidations while managing price impact and gas costs.

Automated liquidations are a critical component of DeFi lending protocols like Aave, Compound, and MakerDAO. When a borrower's collateral value falls below a predefined health factor or collateralization ratio, their position becomes eligible for liquidation. A keeper network is a decentralized set of bots that monitors the blockchain for these opportunities, submitting transactions to close underwater positions in exchange for a liquidation bonus. The core challenge is executing these transactions profitably, which requires minimizing slippage from large swaps and optimizing for network gas fees.

Slippage—the difference between the expected price of a trade and the executed price—is the primary profit killer for keepers. A large liquidation can drain a decentralized exchange's liquidity pool, resulting in significant price impact. To mitigate this, successful keeper strategies employ liquidity aggregation. Instead of routing the entire swap through a single DEX like Uniswap V3, the transaction splits the order across multiple venues (e.g., Balancer, Curve, 1inch Aggregator) via a router contract. Using the 1inch Fusion API or a similar solution allows for MEV-protected, limit-order-like executions that can secure better rates and protect against front-running.

The technical implementation involves a three-part system: a listener, a strategy engine, and an executor. The listener subscribes to blockchain events (e.g., HealthFactorBelowThreshold from Aave) using a service like The Graph or direct RPC subscriptions. The strategy engine, upon detecting an opportunity, simulates the liquidation transaction using Tenderly or a forked network via Foundry to calculate profitability, factoring in gas, slippage, and the liquidation bonus. The executor then builds and submits the transaction. Critical here is using Flashbots or a similar private mempool (like Taichi Network on Arbitrum) to bundle the liquidation with the necessary DEX swaps in a single atomic transaction, preventing sandwich attacks.

Here is a simplified Foundry/Solidity example of a keeper contract that performs a liquidation on Aave V3, using a swap via a generic router to minimize slippage. Note that in production, you would integrate a specific aggregator like 1inch.

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {IPool} from "@aave/core-v3/contracts/interfaces/IPool.sol";
interface ISwapRouter {
    function swapTokensForExactTokens(...) external returns (uint[] memory);
}
contract KeeperLiquidation {
    IPool public constant AAVE_POOL = IPool(0x...);
    ISwapRouter public constant ROUTER = ISwapRouter(0x...);
    function liquidateAndSwap(
        address collateralAsset,
        address debtAsset,
        address user,
        uint256 debtToCover,
        bytes calldata swapData // Encoded path & min return from off-chain engine
    ) external {
        // 1. Perform the Aave liquidation
        AAVE_POOL.liquidationCall(collateralAsset, debtAsset, user, debtToCover, false);
        // 2. Swap the received collateral to repay the keeper's debt/realize profit
        ROUTER.swapTokensForExactTokens(swapData);
    }
}

To operate profitably, your keeper must continuously optimize for Total Extractable Value (TEV), which is the liquidation bonus minus all costs (gas + slippage + protocol fees). This requires dynamic gas bidding strategies, often using EIP-1559 maxFeePerGas and maxPriorityFeePerGas estimates from services like Blocknative. Furthermore, consider cross-chain liquidations on L2s like Arbitrum or Base, where gas is cheaper but bridging latency adds complexity. Successful keeper operations are not just about speed; they are about precise economic calculation and robust transaction engineering to ensure the net reward remains positive under volatile network conditions.

mev-gas-management
MANAGING MEV AND GAS COSTS

How to Implement Automated Liquidations with Minimal Slippage

Automated liquidation bots must execute trades instantly while protecting against front-running and excessive price impact. This guide covers strategies to minimize slippage and manage gas costs effectively.

Liquidation is a critical DeFi mechanism where undercollateralized positions are closed to repay debt. An automated bot must monitor positions, calculate health factors, and execute the liquidation transaction. The primary challenge is minimizing slippage—the difference between the expected price and the execution price—which directly eats into your profit margin. High slippage occurs due to low liquidity in the target pool or being outbid by other searchers in the Miner Extractable Value (MEV) supply chain. Your bot's success depends on speed, gas strategy, and intelligent routing.

To reduce slippage, you must optimize your trade execution path. Instead of a simple swap on a single DEX, use an aggregator like 1inch or CowSwap that splits the order across multiple liquidity sources to find the best price. For large orders, consider using Flash Loans from Aave or Balancer to atomically borrow, liquidate, and repay, which allows you to offer a more competitive liquidation bonus without upfront capital. Always calculate the maximum acceptable slippage (slippageTolerance) based on the pool's depth; setting it too low causes failed transactions, while setting it too high invites MEV bots to sandwich your trade.

Gas cost management is equally crucial. In a competitive liquidation environment, transactions are often won by those who pay the highest priority fee. Implement a dynamic gas pricing strategy. Monitor the current base fee and estimate the priority fee required to land your transaction in the next block using services like Etherscan Gas Tracker or the eth_feeHistory RPC method. Your bot should have a configurable maximum gas price based on the liquidation's profit potential. Use EIP-1559 transaction types to set both maxFeePerGas and maxPriorityFeePerGas appropriately for the network conditions.

Protecting your transactions from predatory MEV is essential. To avoid sandwich attacks, submit transactions with private mempool services like Flashbots Protect or BloXroute. These services bypass the public mempool, preventing front-running bots from seeing your intent. For transactions that must go public, use submarine sends—a technique where you initially send a transaction with a low gas price and later replace it with a higher-priced one just before block finalization. Furthermore, always simulate your transaction (eth_estimateGas, eth_call) before broadcasting to check for reverts and estimate final costs accurately.

Here is a simplified code snippet in TypeScript using ethers.js and the 1inch aggregator router to execute a liquidation swap with controlled slippage and gas parameters. This example assumes you have already identified a liquidatable position and calculated the required token amounts.

typescript
import { ethers } from 'ethers';
import { AggregationRouterV5 } from './1inchAbi'; // ABI for 1inch Router V5

async function executeLiquidation(
  signer: ethers.Signer,
  fromToken: string,
  toToken: string,
  amountIn: ethers.BigNumber,
  slippageBps: number // e.g., 50 for 0.5%
) {
  const routerAddress = '0x1111111254EEB25477B68fb85Ed929f73A960582';
  const router = new ethers.Contract(routerAddress, AggregationRouterV5, signer);

  // 1. Get quote from 1inch API (off-chain)
  const quoteUrl = `https://api.1inch.io/v5.0/1/quote?fromTokenAddress=${fromToken}&toTokenAddress=${toToken}&amount=${amountIn}`;
  const quote = await fetch(quoteUrl).then(r => r.json());
  const minAmountOut = quote.toTokenAmount.mul(10000 - slippageBps).div(10000);

  // 2. Build transaction data
  const txData = await router.populateTransaction.swap(
    signer.getAddress(),
    quote,
    '0x', // empty permit data
    minAmountOut,
    { gasLimit: 500000, maxFeePerGas: ethers.utils.parseUnits('50', 'gwei'), maxPriorityFeePerGas: ethers.utils.parseUnits('2', 'gwei') }
  );

  // 3. Send via private RPC (e.g., Flashbots)
  const privateProvider = new ethers.providers.JsonRpcProvider('https://rpc.flashbots.net');
  const privateSigner = signer.connect(privateProvider);
  const tx = await privateSigner.sendTransaction(txData);
  await tx.wait();
}

Successful liquidation bots run 24/7, requiring robust monitoring and failure handling. Log all transaction attempts, including gas used, slippage incurred, and profit/loss. Set up alerts for failed transactions due to slippage tolerance or gas underestimation. Continuously backtest your strategy against historical blockchain data. Remember, the most profitable bots combine low-level technical execution—smart contract calls, gas optimization—with high-level market understanding of lending protocol parameters and overall DeFi liquidity conditions. Start with testnets and small mainnet amounts to refine your approach before scaling.

PRACTICAL GUIDE

Implementation Examples and Code Snippets

Core Contract Logic

This simplified Solidity snippet shows the core logic for a liquidation bot, integrating with Aave V3 and a DEX aggregator.

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {IPool} from "@aave/core-v3/contracts/interfaces/IPool.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract LiquidationBot {
    IPool public immutable aavePool;
    address public immutable aggregator;

    constructor(address _aavePool, address _aggregator) {
        aavePool = IPool(_aavePool);
        aggregator = _aggregator;
    }

    function liquidatePosition(
        address user,
        address collateralAsset,
        address debtAsset,
        uint256 debtToCover,
        bytes calldata swapData // Encoded call to aggregator
    ) external {
        // 1. Check health factor
        (, , , , , uint256 healthFactor) = aavePool.getUserAccountData(user);
        require(healthFactor < 1e18, "Position not liquidatable");

        // 2. Execute liquidation via Aave
        aavePool.liquidationCall(collateralAsset, debtAsset, user, debtToCover, false);

        // 3. Swap seized collateral to repay debt, using aggregator for best price
        uint256 collateralBalance = IERC20(collateralAsset).balanceOf(address(this));
        IERC20(collateralAsset).approve(aggregator, collateralBalance);
        (bool success, ) = aggregator.call(swapData);
        require(success, "Swap failed");

        // Profit = remaining tokens after swap and debt repayment
    }
}

Key Points: The contract uses an external aggregator for the swap to minimize slippage. The swapData should be generated off-chain by querying an API like 1inch for the optimal route.

AUTOMATED LIQUIDATIONS

Frequently Asked Questions

Common technical questions and solutions for developers implementing automated liquidation systems in DeFi.

Slippage in liquidations primarily occurs due to liquidity fragmentation and price impact. When a large liquidation order hits a decentralized exchange (DEX), it consumes multiple price points in the liquidity pool's bonding curve. For example, swapping 100 ETH for USDC on Uniswap v3 will execute at progressively worse prices as the pool's reserves are depleted. The key factors are:

  • Pool Depth: The total value locked (TVL) in the target liquidity pool.
  • Trade Size: The size of the collateral being liquidated relative to the pool.
  • Concurrent Activity: Other large swaps happening in the same block.

Minimizing slippage requires strategies to split orders across pools or use specialized protocols designed for large trades.

conclusion
IMPLEMENTATION SUMMARY

Conclusion and Next Steps

This guide has covered the core strategies for building an automated liquidation system that minimizes slippage. The next steps involve integrating these concepts into a production-ready bot and exploring advanced optimizations.

You now have the foundational knowledge to build a robust liquidation bot. The key is to combine the strategies discussed: using on-chain price oracles like Chainlink for trigger logic, executing via flash loans from protocols like Aave or Balancer to avoid capital lockup, and routing the liquidation transaction through a DEX aggregator such as 1inch or CowSwap to secure the best price. Remember to simulate transactions using tools like Tenderly or a forked mainnet node to estimate gas costs and potential slippage before deploying live capital.

For production deployment, focus on reliability and monitoring. Implement a fallback oracle (e.g., Uniswap V3 TWAP) to hedge against oracle manipulation or downtime. Use a service like Gelato Network or OpenZeppelin Defender for automated, gas-optimized transaction execution. Crucially, set up comprehensive alerting for failed transactions, sudden gas price spikes, and changes in the health of your target lending pools (e.g., Aave's Health Factor or Compound's Collateral Factor). Your bot's profitability depends on uptime and execution success more than marginal slippage improvements.

To go further, consider these advanced optimizations. First, implement MEV protection by using private transaction relays like Flashbots Protect RPC or submitting bundles directly to builders. This prevents frontrunning and sandwich attacks. Second, explore cross-chain liquidations using generalized messaging protocols (e.g., LayerZero, Axelar) to monitor and act on opportunities across multiple networks from a single bot. Finally, analyze historical liquidation data from platforms like Flipside Crypto or Dune Analytics to identify the most profitable pools and tune your bot's parameters for specific market conditions.

How to Implement Automated Liquidations with Minimal Slippage | ChainScore Guides