Kapatmak için ESC'ye basın

DeFi Likidasyon Botları: Balinaları Avlama Rehberi

Decentralized Finance (DeFi) dünyası genellikle dijital bir vahşi ormana benzetilir ki bu kesinlikle nokta atışı bir tanım. Küçük yatırımcılar ekran başında grafik inceleyip trendin ne yöne kırılacağını tahmin etmeye çalışırken, işin kurdu olmuş profesyoneller —yani MEV searcher'lar (Maximal Extractable Value) ve likidasyon botu operatörleri— başkalarının taktiksel hatalarını yakalamak için doğrudan blockchain'in röntgenini çekiyor.

Ne zaman ki büyük bir oyuncu (yani bir "balina"), borç verme platformlarında (Aave, Compound, Spark, Morpho gibi) devasa kripto varlığını teminat gösterip yüklü bir kredi çeker ve piyasa onun tersine dönmeye başlar, işte o an dananın kuyruğu kopar. Eğer adamın pozisyonu zorunlu kapanmanın (likidasyonun) eşiğine gelirse, piyasada tam anlamıyla parayı küreklele toplayabileceğiniz eşsiz bir verimsizlik doğar.

Bu yazıda, bu tarz kritik pozisyonları takip eden av mekanizmasının arkasındaki mantığı inceleyecek, likidasyona %1 kalmış balinaları nasıl tek tek avlayacağımızı ve hem teknik hem de stratejik olarak bu durumdan nasıl maksimum kâr sağlayacağımızı masaya yatıracağız.

DeFi Borçlanma Mekaniği: Likidasyonlar Neden Tetiklenir?

Sistemdeki açıkları nerede arayacağınızı bilmek için, borç verme protokollerinin (Lending Protocols) arkasındaki matematiğe tamamen yalayıp yutmuş olmanız gerekir. Merkezi borsaların (CEX) aksine —ki orada likidasyon motorunu borsanın kendi iç sistemi yönetir— DeFi'de bu süreç tamamen dışarıdaki aktörlere, yani likidatörlere (liquidators) ihale edilmiştir.

Protokol kendi kendine bir pozisyonu kapatamaz, çünkü içinde gömülü otomatik bir tetikleyici yoktur. Bunun yerine sistem, ağdaki herhangi bir geliştirici gelip borçlunun borcunu kapasın ve adamın teminatını ucuza kapsın diye ekonomik bir ödül (genellikle %5 ila %10 arasında bir teminat satın alma indirimi) sunar.

En Kritik Metrik: Health Factor (HF)

Herhangi bir borç pozisyonunun ne kadar güvende olduğu, Sağlık Faktörü (Health Factor) denilen bir değerle ölçülür. Çoğu EVM uyumlu protokolde (örneğin Aave v3) bu formül tam olarak şöyle işler:

1
 

Burada:

  • Collateral_i - i teminatının baz para birimi (örneğin ETH veya USD) cinsinden toplam değeri.
  • LiquidationThreshold_i (Likidasyon Eşiği) - Protokol tarafından o varlık için belirlenmiş olan maksimum borç/teminat oranıdır (örneğin %85).
  • Debt_j - İçeride biriken faizler de dahil olmak üzere çekilen j kredisinin toplam değeri.

Kırılma Noktası: HF > 1 olduğu sürece pozisyon tamamen güvendedir. HF değeri 1'in altına düştüğü an, o pozisyon piyasadaki tüm botların önüne açık büfe yem olarak düşer ve likide edilebilir hale gelir.

"Likidasyona %1 Kalması" Ne Demek?

Bu durum, bir pozisyonun HF değerinin 1.0001 ile 1.01 arasındaki o ölümcül tehlike bölgesine sıkışması demektir. Teminat olarak gösterilen varlığın fiyatındaki en ufak bir aşağı yönlü kıpırdanma (veya borç alınan varlığın yukarı fırlaması), o pozisyonu saniyeler içinde botlara meze yapar.

"Dump'tan Para Kazanma" Stratejisi: İki Farklı Senaryo

Çoğu kişi likidatörlerin sadece protokolden gelen o ufak indirimi (bonusu) cebe indirdiğini sanır. Ancak söz konusu on milyonlarca dolarlık balina pozisyonları olduğunda, arka planda çok daha vahşi ve çok daha tatlı kâr kapıları açılır.

Senaryo A: Flash Loan ile Klasik Likidasyon Avı

HF değeri 1'in altına düşmüş bir pozisyon yakaladınız. Ama elalemin 10.000.000 dolarlık borcunu kapatmak için cebinizde beş kuruşunuz yok. İşte burada sahneye Flash Loan (anlık kredi) girer:

  1. Tek bir işlem (transaction) içinde, hiçbir teminat göstermeden Uniswap veya Aave'den 10 milyon DAI borç alırsınız.
  2. Bu parayla gidip ilgili protokolde balinanın borcunu tıkır tıkır kapatırsınız.
  3. Karşılığında adamın teminatını (örneğin ETH) %5 indirimle kaparsınız (yani elinize 10.5 milyon dolar değerinde ETH geçer).
  4. Gözünüzü bile kırpmadan bu ETH'leri DEX'te satıp anında nakde çevirir, Flash Loan'ın 10 milyon DAI'sini + işlem ücretini geri ödersiniz.
  5. Gas ücreti düşüldükten sonra kalan net kâr (yaklaşık ~490.000 dolar) kılçıksız şekilde cüzdanınıza kalır.

Senaryo B: Hedefli Short ve Arkadan İtme (Whale Hunting)

Bu, piyasadaki likiditeyi çok iyi okumayı gerektiren, çok daha agresif ve derin bir oyun planıdır:

  1. HF değeri 1.005 olan (yani uçurumun kenarına %1 kalmış) bir balina tespit ettiniz. Adamın teminatı 50.000 WBTC, borcu ise USDT cinsinden.
  2. Matematiksel olarak WBTC fiyatı kaça düşerse bu adamın HF değerinin tam 1 olacağını hesaplıyorsunuz. Diyelim ki fiyatın sadece 150 dolarcık gevşemesi yetiyor.
  3. Vadeli işlem piyasasında veya kaldıraçlı bir türev DEX'te yüksek kaldıraçla yüklü bir WBTC Short pozisyonu açıyorsunuz.
  4. Eğer spot piyasada o anlık bir likidite eksikliği varsa (yani tahta inceyse), siz veya piyasadaki diğer oyuncular spot piyasada yüklü bir WBTC satışı patlatarak fiyatta saniyelik sert bir iğne (flash crash) oluşturuyorsunuz.
  5. Fiyat gidip likidasyon tetikleyicisine çarpıyor. Likidasyon botları (veya kendi yazılımınız) balinayı deli gibi likide etmeye başlıyor. Likidasyon sürecinde borcu kapatmak için piyasaya zorunlu olarak devasa miktarda WBTC dump'lanıyor ve bu da düşüşü daha da körüklüyor (şelale etkisi).
  6. Sizin short pozisyonunuz, bu suni veya hızlandırılmış çöküşün tam en dip noktasında Take-Profit (kâr al) yaparak muazzam bir kazançla kapanıyor.

"Yaralı Balinaları" İzleme Cephaneliği

Blockchain'i Etherscan üzerinden manuel olarak takip etmeye çalışmak tam bir amelelik olur ve imkansızdır. Profesyoneller üç katmanlı bir araç kombinasyonu kullanır: hazır dashboard'lar, altyapı API'leri ve kendi node'larına bağlı özel parser yazılımları.

1. Hazır Analiz Platformları (Hızlı Başlangıç İçin)

  • DeFi Saver (Loan Shifter / Simulation sekmesi): Popüler protokollerdeki devasa pozisyonları gözünüzle canlı canlı görmenizi sağlar.
  • Debank / Arkham Intelligence: Belirli cüzdan adresleri için izleme listeleri (Watchlist) oluşturmada üstlerine yoktur. Token zenginleri listesinden büyük bir borçlu yakaladığınızda, hemen adresine alarmı kurarsınız.
  • Dune Analytics: Büyük borçluların Sağlık Faktörlerini anlık olarak listeleyen tonla halka açık dashboard bulabilirsiniz. (Arama etiketleri: Aave v3 liquidation thresholds, Compound positions monitoring).

2. Özelleştirilmiş API'ler (Otomasyon İçin)

Kendi başınıza maliyetli bir archive node kurma zahmetine girmeden, filtrelenmiş veriyi en temiz şekilde almanın yolu protokollerin resmi API'lerini kullanmaktır.

Örneğin Aave'nin açık bir GraphQL endpoint'i (The Graph) vardır ve bu sayede içerideki tüm borçluların röntgenini tek bir hamlede çekebilirsiniz.

ParametreAçıklamaNeden Takip Edilmeli?
collateralBalanceUSDUSD cinsinden toplam teminat miktarıSadece gerçek balinaları (1 milyon dolar ve üzeri) filtrelemek için.
totalBorrowsUSDUSD cinsinden toplam borç miktarıLikidasyon anında borcu kapatmak için ne kadarlık bir likiditeye ihtiyacınız olacağını öngörmek için.
currentLiquidationThresholdGüncel likidasyon eşiği oranıGeri dönüşü olmayan o kritik noktayı doları dolarına hesaplamak için.

Pratik Rehber: Kritik Pozisyonları Yakalayan Parser Yazıyoruz

Geldik işin mutfağına. Likidasyona %1 kalmış bir adresi yakalamak için, ilgili protokolün Pool veya DataProvider akıllı sözleşmelerini (smart contract) durmaksızın sorgulayan bir script yazmamız gerekiyor.

Aşağıda, web3.py kütüphanesi kullanılarak Python ile yazılmış bir script örneği görebilirsiniz. Bu kod, Arbitrum ağındaki (likidasyon için biçilmiş kaftandır; gas ücretleri komik düzeyde düşüktür ve çok hızlıdır) Aave Protocol Data Provider sözleşmesine istek atar, kullanıcının verilerini çeker ve likidasyona olan yakınlığını hesaplar.

import os
from web3 import Web3
# Hızlı bir RPC node'una bağlanıyoruz (Alchemy veya QuickNode gibi)
RPC_URL = "https://arb-mainnet.g.alchemy.com/v2/YOUR_API_KEY"
w3 = Web3(Web3.HTTPProvider(RPC_URL))
if not w3.is_connected():
    raise Exception("Blockchain ağına bağlanılamadı")
# Arbitrum üzerindeki Aave v3 Pool sözleşme adresi
AAVE_POOL_ADDRESS = "0x794a61358D6845594F94dc1DB02A252b5b4814aD"
# Sadece getUserAccountData fonksiyonunu içeren minimal bir ABI
AAVE_POOL_ABI = [
    {
        "inputs": [{"internalType": "address", "name": "user", "type": "address"}],
        "name": "getUserAccountData",
        "outputs": [
            {"internalType": "uint256", "name": "totalCollateralBase", "type": "uint256"},
            {"internalType": "uint256", "name": "totalDebtBase", "type": "uint256"},
            {"internalType": "uint256", "name": "availableBorrowsBase", "type": "uint256"},
            {"internalType": "uint256", "name": "currentLiquidationThreshold", "type": "uint256"},
            {"internalType": "uint256", "name": "ltv", "type": "uint256"},
            {"internalType": "uint256", "name": "healthFactor", "type": "uint256"}
        ],
        "stateMutability": "view",
        "type": "function"
    }
]
pool_contract = w3.eth.contract(address=AAVE_POOL_ADDRESS, abi=AAVE_POOL_ABI)
def check_whale_position(user_address):
    try:
        # Hesap verilerini akıllı sözleşmeden çekiyoruz
        data = pool_contract.functions.getUserAccountData(w3.to_checksum_address(user_address)).call()
        
        # Gelen veriler 18 desimal (ondalık) hassasiyettedir (Aave'nin baz para biriminde)
        collateral = data[0] / 1e8  # v3 baz para birimine göre değişir (genelde 8 desimal USD'dir)
        debt = data[1] / 1e8
        hf = data[5] / 1e18 # Health Factor değeri 18 desimal olarak döner
        
        # Sadece büyük balinaları filtreliyoruz (Teminat > 500.000$)
        if collateral > 500000:
            print(f"Adres: {user_address}")
            print(f"  Teminat: ${collateral:,.2f} | Borç: ${debt:,.2f}")
            print(f"  Health Factor: {hf:.4f}")
            
            # Likidasyona %1 kalmış mı diye kontrol ediyoruz
            # Likidasyon HF <= 1.0 olduğunda tetiklendiği için, riskli bölge 1.0000 ile 1.0100 arasıdır
            if 1.0000 < hf <= 1.0100:
                print(f"⚠️ KRİTİK DURUM ALARMI: Balina likidasyona %1 mesafede! Teminatın dump yeme riski var.")
                # Buraya Telegram alarm botunuzu veya likidasyon botunuzun tetikleyici fonksiyonunu bağlayabilirsiniz
            print("-" * 50)
            
    except Exception as e:
        print(f"Adres kontrol edilirken hata oluştu {user_address}: {e}")
# Test etmek için örnek bir balina adresi girin (bunu kendi listenizdeki canlı bir adresle değiştirin)
whale_target = "0x..." 
check_whale_position(whale_target)

Taramak İçin Adres Havuzunu Nereden Bulacağız?

Yukarıdaki kod sadece tek bir adresi kontrol eder. Tam teşekküllü bir radar sistemi kurmak için alt taraftan sürekli beslenen bir adres akışına ihtiyacınız var. Profesyonel botlar bu havuzu şu yöntemlerle doldurur:

  • Geçmiş Event'lerin Taranması (Log Parsing): Bot, protokolün deploy edildiği ilk günden bugüne kadarki tüm blockchain geçmişini bir kez tarayarak Supply, Borrow, ve CollateralSwitch event'lerini tetiklemiş olan tüm benzersiz adresleri toplar.
  • Canlı Log Aboneliği (WebSockets): Script, WebSockets (w3.eth.subscribe('logs', ...)) üzerinden yeni çıkan blokları anlık dinler ve havuzla etkileşime giren taze adresleri suçüstü yakalar. Yakalanan tüm yeni adresler yerel bir veri tabanına (MariaDB/PostgreSQL gibi) kaydedilir.
  • Sonsuz Döngüde Tarama (Polling Worker): Arka planda çalışan bir worker, veri tabanındaki adresleri durmaksızın bir döngü içinde döndürerek her biri için getUserAccountData fonksiyonunu çağırır ve skorları günceller.

"Av" Anatomisi: Tetiklenme Noktası Nokta Atışı Nasıl Hesaplanır?

"Yaralı bir balina" üzerinden ekmek yemek istiyorsanız, sadece mevcut Health Factor (Sağlık Faktörü) değerini bilmek kesmez. Profesyonel bir searcher'ın fiyat dinamiklerini çok iyi okuması gerekir. Pozisyonun ne zaman bıçağın altına yatacağını, yani teminat varlığının (collateral) tam olarak hangi fiyata düşeceğini nokta atışı hesaplamalıyız.

Gelin bu hesabı formüle dökelim. Diyelim ki balinamızın elinde tek bir teminat varlık (örneğin ETH) ve karşılığında aldığı sabit fiyatlı tek bir borç varlık (USDT) var. Bu spesifik protokolde ETH için likidasyon eşiği (Liquidation Threshold, yani LT) %85 (0.85) olarak belirlenmiş olsun.

Kritik teminat fiyatını (Price_crit) bulmamızı sağlayan formül şu şekildedir:

Formula for the critical price of collateral
 

Pratik Hesaplama Örneği

Piyasadaki devasa bir canlı pozisyonu ele alalım:

  • Teminat Miktarı (Collateral_Amount): $10,000\ ETH$
  • Güncel ETH Fiyatı: $3,400\ USD$
  • Teminatın İtibari (Fiat) Değeri: $34,000,000\ USD$
  • Güncel Borç (Debt_USD): $28,500,000\ USDT$
  • Likidasyon Eşiği (LT): %85 (0.85)

Öncelikle bu pozisyonun mevcut Sağlık Faktörünü hesaplayalım:

position-health-factor
 

Pozisyon uçurumun kenarında, patlamaya sadece %1.4 kalmış. Şimdi de her şeyin tepe taklak olacağı o net ETH fiyatını bulalım:

The ETH price at which the position will collapse
 

Protokolün kahini, yani oracle'ı (genelde Chainlink olur) zincir üstü fiyat güncellemesini geçip ETH'yi $3,352.94 seviyesine fırlattığı an, pozisyonun kilidi açılır ve tasfiye edilmeye hazır hale gelir.

Kimseden Kolay Kolay Duyamayacağınız Bir Alfa Bilgi: Akıllı sözleşmeler, Binance'teki anlık spot fiyatı saliselik olarak göremez. Tamamen oracle'lara göbektirler. Chainlink oracle'ları zincir üstü fiyatı iki senaryoda günceller: Ya bir zamanlayıcı tetiklenir (örneğin 20 dakikada bir) ya da zincir dışındaki fiyat belirli bir yüzdenin üzerinde sapma gösterir (Deviation Threshold) — ki bu oran majör pariteler için genelde %0.5 veya %1'dir. Bu eşiği yakından takip eden kurt yatırımcılar, oracle işlemi daha mempool'da onaylanmadan saniyeler önce tasfiyenin tam "tetiklenme" anını öngörüp erkenden pozisyon alırlar.

Pratikte "Whale Hunting" Stratejisi: İşlem Nasıl Yürütülür?

Hedef kilitlenip kritik fiyat haritası çıkarıldıktan sonra, searcher'ın önünde para kazanmak için iki yol vardır: Pasif yöntem (tasfiyeye hazırlık yapmak) veya agresif yöntem (piyasayı bilerek dump'latmak).

1. Sermaye Mühendisliği (Flash Loan'lar vs. Öz Sermaye)

Eğer tasfiye ödülünü (likidasyon bonusu) cebe indirmeyi hedefliyorsanız (örneğimizde 34 milyon dolar üzerinden %5 bonus, temizinden 1.7 milyon dolar brüt kâr demektir), borcu kapatmak için acilen 28.5 milyon dolar bulmanız gerekir.

Bu kadar devasa bir nakiti cüzdanda boş boş yatırmak sermaye verimliliği açısından tam bir enayilik olduğundan, burada Uniswap v3 likidite havuzları veya Aave v3 borç verenleri üzerinden Flash Loan (hızlı kredi) çekilir. Tek bir atomik işlem içerisinde 28.5 milyon dolar borçlanır, Aave sözleşmesindeki liquidationCall fonksiyonunu tetikler, teminat olan ETH'ye çöker ve flash loan'ı ufak faiziyle (%0.05) geri ödemek için o ETH'nin bir kısmını bir likidite agregatörü (1inch / Paraswap) üzerinden hemen USDT'ye çevirirsiniz. Kalan ETH ise sizin saf ve net kârınızdır.

2. Piyasa Arbitrajı ve Hedefli Short İşlemler

Balinanın boyutu standart flash loan havuzlarını aşacak kadar devasaysa veya spot DEX'lerdeki likidite, teminatı çok ciddi bir fiyat kayması (Slippage) yaşamadan dönüştüremeyecek kadar sığsa, türev piyasasında front-running oyunu başlar:

  1. 1. Adım: Fiyatın kritik nokta olan 3,352.94 seviyesine topu topu 15-20 dolarlık bir mesafede olduğunu görürsünüz.
  2. 2. Adım: Merkeziyetsiz vadeli işlem borsalarında (Hyperliquid, dYdX, Vertex) veya majör CEX'lerde yüksek kaldıraçla agresif bir short pozisyon açılır.
  3. 3. Adım (Katalizör): Spot piyasada (tahtanın en sığ olduğu an kollanarak) yüklü bir satış emri çakılır. Bunu genelde büyük piyasa yapıcılar veya searcher grupları bir araya gelerek yapar; amaç anlık bir fiyat kırılması (dump) yaratmaktır.
  4. 4. Adım (Kaskad): Fiyat tetikleyiciyi kırdığı an, dünyanın dört bir yanındaki tasfiye botları deliler gibi likidasyon fonksiyonlarını spam'lemeye başlar. Kârlarını sabitlemek isteyen bu botlar, el koydukları teminatı (ETH) market emriyle çat çat stablecoin'lere dump'lar.
  5. 5. Adım (Kâr Al): Sadece 1-2 dakika içinde piyasaya boca edilen 10,000 ETH'lik satış baskısı lokal alıcı tahtasını paramparça eder ve fiyatı %2-3 daha aşağı çeker. Sizin short pozisyonunuz, yapay olarak tetiklenen bu panik dalgasının tam en dip noktasında lokum gibi kapanır.

Likidasyon Botu Mimarisi: MEV'in Karanlık Ormanında Herkesi Geçmek

Bu tasfiye işlemlerini kendi kendine yürütecek bir bot yazmaya niyetliyseniz, sıradan bir Web3 script'iyle bu işin içinden çıkamazsınız. Bu nişte, hıza dayalı acımasız bir savaş döner; biz buna PGA (Priority Gas Auction) ve MEV-boost kapışması diyoruz.

Kamuya açık mempool'a gönderdiğiniz sıradan bir işlem, genel front-runner botların radarına anında takılır. Sizin calldata'nızı kopyalar, gas ücretini 1 gwei artırır ve kârı gözünüzün önünde kapıp kaçarlar.

Prodüksiyon Seviyesi Bir MEV Botunun Teknoloji Yığını:

  • Programlama Dili: Veri toplama ve analitik işleri genelde Python/Go ile halledilir. Ancak flash loan yönlendirmesini ve tasfiye çağrısını yürüten akıllı sözleşme, gas optimizasyonunun dibine vurmak adına kesinlikle Solidity / Yul ile yazılmalıdır. Son zamanlarda profesyonel botların arka yüzünde (backend) Rust (alloy kütüphanesi ekosistemi) çılgın bir popülerlik yakalamış durumda.
  • Block Builder'lara Doğrudan Bağlantı: Profesyoneller halka açık mempool'u tamamen bypass eder. İşlemlerini Flashbots (MEV-Share / MEV-Boost), BeaverBuild veya Titan gibi özel röleler (Relays) üzerinden gönderirler. İşlem, bir "paket" (Bundle) halinde doğrudan validatöre iletilir. Validatöre açıkça şunu dersiniz: "Benim işlemimi tam olarak ETH fiyatını düşürecek olan oracle işleminin arkasına yerleştir, ben de karşılığında tasfiye kârımın %50'sini sana bahşiş (tip) olarak ateşleyeyim."

Aşağıda, böyle bir profesyonel botun bileşenlerinin mantıksal işleyiş şeması yer almaktadır:

[Blockchain Node / Websocket] 
       │ (Yeni blokları ve mempool işlemlerini kesintisiz dinler)
       ▼
[Parser & DB] ────► [Health Factor Calculator] 
                         │ (Eğer HF <= 1 ise tetiklenir)
                         ▼
                  [Flashbots / MEV Builder] ──► [Private Validator] ──► [Profit]

Tetikleyici Akıllı Sözleşme Mimarisi (Solidity)

Likidasyonun tek bir atomik işlem (atomic transaction) içinde tereyağından kıl çeker gibi tamamlanabilmesi için, Flash Loan ve borç verme (lending) protokolü ile etkileşime giren tüm mantığın özel bir akıllı sözleşme (custom smart contract) içinde paketlenmesi şarttır. Doğrudan bir cüzdandan (EOA) ayrı ayrı işlemler göndermeyi aklınızdan bile geçirmeyin; rakip MEV botları önünüze geçer (front-run) ve göz açıp kapayıncaya kadar teminatı havada kapar.

Aşağıda, Flash Loan mekanizması aracılığıyla Aave v3 ile temiz bir şekilde etkileşime girmek üzere optimize edilmiş, Solidity ^0.8.20 tabanlı bir akıllı sözleşme mimarisi örneği yer almaktadır.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IPool {
    function liquidationCall(
        address collateralAsset,
        address debtAsset,
        address user,
        uint256 debtToCover,
        bool receiveAToken
    ) external;
    function flashLoanSimple(
        address receiverAddress,
        address asset,
        uint256 amount,
        bytes calldata params,
        uint16 referralCode
    ) external;
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
contract LiquidatorBot {
    address public immutable owner;
    IPool public immutable aavePool;
    modifier onlyOwner() {
        require(msg.sender == owner, "Owner degilsiniz");
        _;
    }
    constructor(address _pool) {
        owner = msg.sender;
        aavePool = IPool(_pool);
    }
    // Flash loan callback fonksiyonuna parametreleri aktarmak icin kullanilan struct
    struct LiquidationParams {
        address collateralAsset;
        address debtAsset;
        address userToLiquidate;
        uint256 debtToCover;
    }
    // 1. Harici Tetikleyici: Hedef saptandigi an backend'iniz (Rust/Go/Python) tarafından tetiklenir
    function calmedDownTrigger(
        address _collateralAsset,
        address _debtAsset,
        address _userToLiquidate,
        uint256 _debtToCover
    ) external onlyOwner {
        bytes memory params = abi.encode(
            LiquidationParams({
                collateralAsset: _collateralAsset,
                debtAsset: _debtAsset,
                userToLiquidate: _userToLiquidate,
                debtToCover: _debtToCover
            })
        );
        // Balinanin borcunu tam ucu ucuna kapatabilmek icin Aave'den flash loan talep ediyoruz
        aavePool.flashLoanSimple(
            address(this),
            _debtAsset,
            _debtToCover,
            params,
            0
        );
    }
    // 2. Aave Callback Fonksiyonu: Fonlar kontrata gectikten hemen sonra AYNI islem icinde calisir
    function executeOperation(
        address asset,
        uint256 amount,
        uint256 premium,
        address initiator,
        bytes calldata params
    ) external returns (bool) {
        require(msg.sender == address(aavePool), "Gecersiz cagri");
        
        LiquidationParams memory lParams = abi.decode(params, (LiquidationParams));
        // Borc aldigimiz fonlarin likidasyonda kullanilabilmesi icin havuza harcama yetkisi (approve) veriyoruz
        IERC20(lParams.debtAsset).approve(address(aavePool), lParams.debtToCover);
        // Esas likidasyon cagrisini yapiyoruz.
        // Son parametrenin false olmasi, aToken turevini degil, dogrudan ham teminati almak istedigimizi belirtir
        aavePool.liquidationCall(
            lParams.collateralAsset,
            lParams.debtAsset,
            lParams.userToLiquidate,
            lParams.debtToCover,
            false
        );
        // Bu asamada, el konulan teminat (orたちが ETH) artik kontratin bakiyesindedir
        // Yapilacak is: Teminati bir DEX (Uniswap/1inch) uzerinde tekrar borc alinan varliga (or. USDT) swap'lemek
        // Amac: Kredi anaparasini (amount) + flash loan komisyonunu (premium) amorti etmek
        
        uint256 totalOwed = amount + premium;
        
        // [Buraya Uniswap v3 / 1inch Router uzerindeki swap() mantigi eklenecektir]
        // Cikis bakiye degeri debtAsset cinsinden >= totalOwed olmalidir
        
        // Flash loan geri odemesini onayliyoruz (approve)
        IERC20(lParams.debtAsset).approve(address(aavePool), totalOwed);
        // Kontratta kalan net kari dogrudan contract owner'in cebine gonderiyoruz
        uint256 profit = IERC20(lParams.debtAsset).balanceOf(address(this));
        if (profit > 0) {
            IERC20(lParams.debtAsset).transfer(owner, profit);
        }
        return true;
    }
    // Kontratta sisen/sikisan herhangi bir token'i acil durum tahlisiyesi (withdraw) icin fonksiyon
    function withdrawToken(address _token) external onlyOwner {
        uint256 balance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(owner, balance);
    }
}

Az Bilinen Detaylar ve Ters Köşeler (Saf Alfa Bilgi)

Her şey bu kadar kolay olsaydı, her kod yazan bir haftada milyoner olurdu. İşin aslı, bu endüstrinin perde arkasındaki "karanlık orman" (dark forest) acımasız teknik engellerle doludur.

1. «Yumuşak Likidasyon» Pürüzü (Close Factor)

Bir balinanın hacmi on milyonlarca doları buluyorsa, pozisyonunun tamamını tek seferde silemezsiniz. Modern protokollerin çoğunda Close Factor adı verilen bir parametre bulunur (genellikle %50 ile sınırlıdır). Bu durum, tek bir işlemde kullanıcının borcunun en fazla yarısını kapatabileceğiniz anlamına gelir.

Eğer 20.000.000 $ borcu olan bir balina yakalarsanız, botunuzun en fazla 10.000.000 $ kapatacak bir işlem göndermesi gerekir. Borcun geri kalanı yeniden hesaplanır, Sağlık Faktörü (Health Factor - HF) biraz toparlar ve eğer pozisyon hâlâ risk bölgesindeyse, bir sonraki blokta tekrar likidasyona açık hale gelir.

2. Kahve Falı Oracle'lar ve «Hayalet» Likidasyonlar

Büyük oyuncular pozisyonlarını öylece başıboş bırakmazlar. Genellikle HF düşmeye başladığı an otomatik olarak marjin fonlaması (top-up) yapan merkeziyetsiz otomasyon sistemleriyle (Gelato network veya Chainlink Automation gibi) arkalarını sağlama alırlar.

Dahası, piyasanın kan gölüne döndüğü ekstrem volatilite anlarında, Ethereum ağı veya L2 ağları (Arbitrum, Base) tamamen tıkanır ve gas ücretleri tavan yapar (Gas Spike). Oracle, zincir üstü (on-chain) fiyatı 1-2 blok gecikmeyle güncelleyebilir. Zincir dışındaki (off-chain) spot türev fiyatlarına (örneğin Binance) bakan bir bot, HF < 1 sanarak anında likidasyon işlemi gönderebilir; fakat akıllı sözleşme seviyesinde on-chain oracle fiyatı henüz güncellemediği için işlem REVERT (başarısız) olur. Sonuç: Gerçekleşmeyen bir işlem için havaya ciddi bir gas ücreti yakmış olursunuz.

3. Özel RPC'ler ile Front-running Zırhı Kuşanmak

Botunuz Flashbots üzerinden bir paket (bundle) gönderdiğinde, kâr paylaşımı konusunda diğer searcher'lar ile kıran kırana bir yarışa girersiniz. Diyelim ki 10.000 $'lık bir likidasyon yakaladınız, ancak rakibiniz botunu kârın %99'unu doğrulayıcıya (validator) rüşvet (Gas Tip) olarak verecek şekilde ayarladıysa, bloğu o kapar — kendisi sadece 100 $ net kâr alsa bile — sizin işleminiz ise çöpe gider.

Stratejik Hack: Gas ücretlerinin komik derecede düşük ve hızın çok yüksek olduğu ağlarda (Base, Arbitrum, Solana) klasik Flashbots paketleri farklı çalışır veya alışılagelmiş formda bulunmaz. Oralarda kazanan, doğrulayıcılara fiziksel olarak en yakın olan (RPC node'una network ping'i en düşük olan) ve özel gRPC bağlantıları kullanarak deli gibi işlem bombardımanı (spamming) yapabilenlerdir.

Kontrol Listesi: Balina Likidasyonları Etrafında Strateji Kurma

Kendi izleme (monitoring) altyapınızı kurmak veya bu likidasyon dalgalarını manuel ya da yarı otomatik şekilde trade etmek istiyorsanız, şu algoritmayı adım adım takip edin:

  • Hedef Havuzu Toplama: Büyük para piyasalarından (Aave, Compound, Spark, Morpho, Radiant) borçlanan cüzdan adreslerini kazımak (scrape) için bir indexer script yazın. Teminat büyüklüğü 1.000.000 $'ı geçen adresleri filtreleyin.
  • Tetikleyici Hesaplayıcı: İzlenen balinaların mevcut pozisyon ağırlıklarını alan ve teminatın, HF'nin tam olarak 1.0000 olacağı kırılma fiyatını kuruşu kuruşuna hesaplayan bir matematik modülü yazın.
  • Alarm Entegrasyonu: Bu kritik noktaları borsaların emir defteri (order book) analiz araçlarına bağlayın. Piyasa fiyatı balinanın patlama noktasına %1.5'ten daha fazla yaklaştığı an, sistem en yüksek öncelikli sinyali çakmalıdır.
  • Kazanım Yolu Seçimi:
    • Sermayesi Güçlü Ekipler İçin: Saf bir MEV botu çalıştırmak, flash loan altyapısını hazır tutmak ve özel röleler (private relays) üzerinden blok alanı için kapışmak.
    • Retail (Küçük) Trader'lar İçin: Vadeli/sürekli (perps) piyasalarda agresif short pozisyonlar açarak, botların balinanın teminatını piyasaya zorunlu olarak boca edeceği (dump) an oluşacak şelale düşüşünden nemalanmak.

DeFi'deki likidasyon piyasası tamamen saf matematik ve yürütme (execution) hızı oyunudur. Blokzincir durumunu okumayı bilen ve kritik noktaların hesaplanmasını otomatikleştirenler, grafik üzerine çizgiler çizen klasik teknik analizcilerin her zaman fersah fersah önünde olacaktır.


FAQ

DeFi likidasyon botları, batık durumdaki (distressed) bir borçlunun borcunu kapatmak için gereken sermayenin tam miktarını tek bir atomik blokzincir işlemi içinde ödünç alarak flash loan eksize eder; böylece bot operatörünün önceden bir sermaye (upfront capital) bağlamasına gerek kalmaz. Akıllı sözleşme, Aave gibi bir borç verme havuzunda flashLoanSimple fonksiyonunu tetikler tetiklemez, gelen varlıklar doğrudan liquidationCall işlemini yürütmek üzere yönlendirilir ve teminat (collateral) indirimli bir fiyattan fırlatılıp kapatılır. Bot, ele geçirilen teminatı anında DEX agregatörleri veya AMM’ler üzerinden geçirerek borç alınan asete dönüştürür, ana parayı ve protokol komisyonunu (premium) geri öder ve işlem nihayete ermeden önce kalan arbitraj farkını (spread) operatörün güvenli cüzdanına postalar.

Oracle gecikmesi, off-chain spot fiyatlar ile on-chain fiyat durumları arasında bir uyumsuzluk yaratarak botların henüz on-chain Health Factor'ü kritik 1.0000 eşiğinin altına düşmemiş pozisyonları likidite etmeye çalışmasına neden olur; bu da REVERT opcode'ları yüzünden patlayan paketlere (failed execution bundles) ve çöp olan gas ücretlerine yol açar. Konsensüs ağları ve Layer 2 rollup'ları, belirli sapma eşiklerine (deviation thresholds) bağlı olarak deterministik gecikmeler veya güncelleme sınırlamaları yaşadığından, CEX'lerdeki yüksek frekanslı fiyat akışları bot simülasyonlarını genellikle erkenden tetikler. Profesyonel MEV searcher'ları, mempool'daki fiyat akışı işlemlerini backrun ederek, oracle güncellemesi sonrasındaki tam durum değişikliğini simüle ederek ve stratejilerinin rakip PGA (Priority Gas Auction) botlarına sızmasını (state leakage) önlemek için özel RPC relay'leri kullanarak bu açığı kapatır.

Close Factor, bir borçlunun ödenmemiş borcunun tek bir likidasyon işleminde geri ödenebilecek maksimum yüzdesini belirleyen protokol düzeyinde bir parametredir ve genellikle likidatörleri tek bir seferde toplam batık pozisyonun yalnızca %50'sini temizlemekle sınırlar. Bu yapısal engel, tek bir searcher'ın devasa kurumsal pozisyonları tek bir blokta tamamen yutmasını (absorb etmesini) önleyerek kalan teminat ve borcun, portföyün sağlık metriklerini kademeli olarak düzeltecek şekilde yeniden hesaplanmasını sağlar. Milyon dolarlık bir likidasyonun tüm değerini cebe indirmek için, otomatik arama motorlarının iteratif durum yürütme (iterative state execution) stratejileri uygulaması, kalan yükümlülükleri sürekli kontrol etmesi ve hedef risk profili tamamen ortadan kalkana kadar birbirini izleyen blok aralıklarında sonraki işlem payload'larını tetiklemesi gerekir.
Sying Yu

I am a blockchain developer specializing in building secure, scalable, and innovative decentralized solutions. My expertise covers smart contracts, payment systems, and integrating crypto with fiat to optimize financial workflows. I thrive on creating modern, efficient tools for the evolving digital economy....

Yorumunuzu paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlendi *