Kapatmak için ESC'ye basın

Kripto Kredi Rehberi: LTV ve Likidasyon Riskleri Nedir?

Özet: Bu yazıda Web3 protokollerindeki (Aave v3, Morpho Blue) kripto borç verme ve tasfiye (liquidation) mekanizmalarını en ince ayrıntısına kadar inceliyoruz. Kritik metrikleri (Health Factor, LTV, Liquidation Threshold), Chainlink orakıllarının patladığı anlardaki slippage senaryolarını ele alıyor ve pozisyonları otomatik likide eden bir Python takip botunu masaya yatırıyoruz.

Kripto Borç Verme Nasıl Çalışır ve Likidasyon Riski Nedir?

Kripto kredisi dediğin şey, gişedeki memurun maaş bordronuza bakıp baba yadigarı daireyi ipotek ederek konut kredisi onayladığı klasik bankacılığa benzemez. Web3 dünyasında kimsenin adınız, kredi skorunuz ya da hayat planlarınız umrunda bile değildir. Burada sadece akıllı sözleşmelerin soğuk matematiği işler: teminatı (collateral) yatırırsın, aşırı teminatlı kredini (overcollateralized loan) çekersin, Health Factor'ü gözden kaçırırsan da likidasyon botları milisaniyeler içinde teminatını çerez niyetine yer.

Aave v3 veya Morpho Blue üzerindeki klasik kurguyu ele alalım. 6,000 USDC borç alabilmek için sisteme 10,000 dolar değerinde WBTC kitliyorsun. Neden mi? Bitcoin'leri satıp değer artış vergisi ödememek, aynı zamanda da sıradaki shitcoin'in to-the-moon yolculuğuna veya yeni madencilik ekipmanlarına sıcak nakit oluşturmak için. Kağıt üzerinde tam bir kutsal kase gibi duruyor, değil mi?

Derken piyasa 15 dakika içinde %18 gibi sert bir dump yiyor. Tahtalardan likidite bir anda çekiliyor. Chainlink orakılı ağdaki spam yüzünden fiyatı birkaç blok gecikmeyle güncelliyor ve senin pozisyon bir anda tasfiye cehennemine doğru serbest düşüşe geçiyor.

Likidasyonun Anatomisi: Teminat Neden Bir An Mühlet Vermeden Uçar?

7/24 gözünü ayırmaman gereken en kritik metrik Health Factor (HF). Formül son derece basit:

HF = ∑ (Collaterali × LTVi) / Total Borrowed

Eğer HF > 1 ise güvendesin. Ama HF ≤ 1 olduğu an, pozisyonun ilgili betiği (script) deploy etmiş ağdaki herhangi bir bot için doğrudan av haline gelir.

ParametreAçıklamaGerçek Örnek (ETH Havuzu)
Max LTVTeminat tutarına karşılık alınabilecek maksimum borç oranı80% (1000$ ETH karşılığında 800$ borç)
Liquidation Threshold (LT)Pozisyonun tasfiye edilebilir hale geldiği eşik değer82.5%
Liquidation BonusTasfiye eden botun teminattan elde ettiği indirim (ödül)5%
Reserve FactorProtokolün faiz gelirinden aldığı pay15%

Dur bir dakika, acele etme. Kağıt üzerinde %82.5 gayet emniyetli bir marj gibi görünebilir ama gerçek dünyada gizli slippage'ları ve mainnet gas ücretlerini hesaba katman gerekir. Push tipi bir orakıl güncellenmiş fiyatı sözleşmeye yolladığı an, MEV botları Flashbots bundle'larında sıraya çoktan girmiştir bile. Pozisyonunu %5 indirimle satın alır, Uniswap v3 üzerindeki bir flash loan ile borcu anında kapatır ve aradaki net kârı cebe indirirler.

Sonuç mu? Çoktan bir yerlerde harcadığın USDC'ler sende kalır ama WBTC'lerine elveda dersin. Protokol cezasını keser, bot spread'i kapar. Sen de ekside kalırsın.

Tasfiye Botu Betiği: Botlar Zayıf Noktanı Nasıl Görür?

Daha altı ay önce Arbitrum üzerinde hatalı bir orakıl yüzünden 200 bin dolarlık mevduatın sadece üç blok içinde nasıl buhar olduğuna bizzat şahit oldum. Bir tasfiye betiği yazmak çocuk oyuncağıdır, ancak işi çözen şey milisaniyeler ve MEV rölelerine doğrudan erişimdir.

İşte LendingPool üzerindeki borçluyu izleyen ve HF birin altına düştüğü an anında işlemi hazırlayan Python ve web3.py tabanlı çalışan bir prototip:

import os
import time
from web3 import Web3
from web3.exceptions import ContractLogicError, TransactionNotFound

# ------------------------------------------------------------------------------
# 1. Konfigürasyon ve Bağlantı Kurulumu
# ------------------------------------------------------------------------------
RPC_URL = os.getenv("RPC_URL", "https://arb-mainnet.g.alchemy.com/v2/YOUR_API_KEY")
PRIVATE_KEY = os.getenv("PRIVATE_KEY", "0x_YOUR_PRIVATE_KEY")

w3 = Web3(Web3.HTTPProvider(RPC_URL))
if not w3.is_connected():
    raise RuntimeError("RPC bağlantısı patladı. RPC_URL adresini kontrol et kanka.")

ACCOUNT = w3.eth.account.from_key(PRIVATE_KEY)

# Arbitrum üzerindeki Aave v3 Kontratları
POOL_ADDRESS = Web3.to_checksum_address("0x794a61358D6845594F94dc1DB02A252b5b4814aD")
DATA_PROVIDER_ADDRESS = Web3.to_checksum_address("0x69FA0fee221AD11012B2f52097e8F6B7EAcF57E7")

TARGET_USER = Web3.to_checksum_address("0x0000000000000000000000000000000000000000")

COLLATERAL_ASSET = Web3.to_checksum_address("0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f")  # WBTC
DEBT_ASSET = Web3.to_checksum_address("0xaf88d065e77c8cC2239327C5EDb3A432268e5831")        # USDC

# ------------------------------------------------------------------------------
# 2. ABI Tanımları
# ------------------------------------------------------------------------------
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"
    },
    {
        "inputs": [
            {"internalType": "address", "name": "collateralAsset", "type": "address"},
            {"internalType": "address", "name": "debtAsset", "type": "address"},
            {"internalType": "address", "name": "user", "type": "address"},
            {"internalType": "uint256", "name": "debtToCover", "type": "uint256"},
            {"internalType": "bool", "name": "receiveAToken", "type": "bool"}
        ],
        "name": "liquidationCall",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]

DATA_PROVIDER_ABI = [
    {
        "inputs": [
            {"internalType": "address", "name": "asset", "type": "address"},
            {"internalType": "address", "name": "user", "type": "address"}
        ],
        "name": "getUserReserveData",
        "outputs": [
            {"internalType": "uint256", "name": "currentATokenBalance", "type": "uint256"},
            {"internalType": "uint256", "name": "currentStableDebt", "type": "uint256"},
            {"internalType": "uint256", "name": "currentVariableDebt", "type": "uint256"},
            {"internalType": "uint256", "name": "principalStableDebt", "type": "uint256"},
            {"internalType": "uint256", "name": "scaledVariableDebt", "type": "uint256"},
            {"internalType": "uint256", "name": "stableBorrowRate", "type": "uint256"},
            {"internalType": "uint256", "name": "liquidityRate", "type": "uint256"},
            {"internalType": "uint40", "name": "stableRateLastUpdated", "type": "uint40"},
            {"internalType": "bool", "name": "usageAsCollateralEnabled", "type": "bool"}
        ],
        "stateMutability": "view",
        "type": "function"
    }
]

ERC20_ABI = [
    {
        "inputs": [
            {"internalType": "address", "name": "owner", "type": "address"},
            {"internalType": "address", "name": "spender", "type": "address"}
        ],
        "name": "allowance",
        "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {"internalType": "address", "name": "spender", "type": "address"},
            {"internalType": "uint256", "name": "amount", "type": "uint256"}
        ],
        "name": "approve",
        "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], # FIX: Dönüş tipi bool olarak düzeltildi
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [{"internalType": "address", "name": "account", "type": "address"}],
        "name": "balanceOf",
        "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
        "stateMutability": "view",
        "type": "function"
    }
]

pool = w3.eth.contract(address=POOL_ADDRESS, abi=POOL_ABI)
data_provider = w3.eth.contract(address=DATA_PROVIDER_ADDRESS, abi=DATA_PROVIDER_ABI)
debt_token = w3.eth.contract(address=DEBT_ASSET, abi=ERC20_ABI)

tx_in_flight = False

# ------------------------------------------------------------------------------
# 3. Güvenli Gas ve Nonce Yardımcı Fonksiyonları
# ------------------------------------------------------------------------------
def get_fee_parameters():
    """baseFeePerGas olmayan ağlar için fallback içeren EIP-1559 parametre sorgusu."""
    latest_block = w3.eth.get_block('latest')
    base_fee = latest_block.get('baseFeePerGas')
    
    if base_fee is not None:
        max_priority_fee = w3.to_wei(0.1, 'gwei')
        max_fee = base_fee * 2 + max_priority_fee
        return {
            'maxFeePerGas': max_fee,
            'maxPriorityFeePerGas': max_priority_fee
        }
    else:
        # Legacy ağlar / özel L2 yapıları için fallback
        return {'gasPrice': w3.eth.gas_price}

def ensure_allowance(required_amount: int) -> bool:
    """Allowance durumunu kontrol edip zorunlu receipt status kontrolüyle approve atar."""
    current_allowance = debt_token.functions.allowance(ACCOUNT.address, POOL_ADDRESS).call()
    if current_allowance >= required_amount:
        return True

    print("[*] Allowance yetersiz. Approve işlemi ateşleniyor...")
    nonce = w3.eth.get_transaction_count(ACCOUNT.address, 'pending')
    
    tx_params = {
        'chainId': w3.eth.chain_id,
        'from': ACCOUNT.address,
        'nonce': nonce,
        **get_fee_parameters()
    }
    
    tx = debt_token.functions.approve(POOL_ADDRESS, 2**256 - 1).build_transaction(tx_params)
    signed_tx = w3.eth.account.sign_transaction(tx, PRIVATE_KEY)
    tx_hash = w3.eth.send_raw_transaction(signed_tx.raw_transaction)
    
    receipt = w3.eth.wait_for_transaction_receipt(tx_hash, timeout=30)
    if receipt['status'] == 1:
        print(f"[+] Approve işlemi {receipt['blockNumber']} blok numarasıyla başarıyla onaylandı")
        return True
    else:
        print(f"[!] HATA: Approve işlemi patladı (reverted)!")
        return False

# ------------------------------------------------------------------------------
# 4. Ana Likidasyon Çağrı Mantığı
# ------------------------------------------------------------------------------
def execute_liquidation(user_address: str):
    global tx_in_flight
    if tx_in_flight:
        print("[!] Lokal süreç kilitli (zaten havada bekleyen bir işlem var).")
        return

    # FIX #9: Maliyetli hazırlıklara girmeden önce seri HF kontrolü
    account_data = pool.functions.getUserAccountData(user_address).call()
    health_factor = account_data[5] / 10**18
    if health_factor >= 1.0:
        print(f"[-] İptal: Pozisyonun HF değeri güncellendi: {health_factor:.6f} (>= 1.0)")
        return

    # FIX #11: USDC cinsinden net borcun hesaplanması
    reserve_data = data_provider.functions.getUserReserveData(DEBT_ASSET, user_address).call()
    actual_debt_tokens = reserve_data[1] + reserve_data[2]  # stable + variable
    
    if actual_debt_tokens == 0:
        print("[!] Seçilen tokende kapatılacak borç yok.")
        return

    debt_to_cover = actual_debt_tokens // 2

    # Kendi USDC bakiyemizi kontrol ediyoruz
    our_balance = debt_token.functions.balanceOf(ACCOUNT.address).call()
    if our_balance < debt_to_cover:
        print(f"[!] Bakiyede yeterli USDC yok. Gereken: {debt_to_cover}, Mevcut: {our_balance}")
        debt_to_cover = our_balance
        if debt_to_cover == 0:
            return

    # FIX #8: Approve işleminin başarı durumunu doğrula
    if not ensure_allowance(debt_to_cover):
        return

    # Hesap içi çakışmaları önlemek adına 'pending' nonce kullanıyoruz
    nonce = w3.eth.get_transaction_count(ACCOUNT.address, 'pending')
    tx_params = {
        'chainId': w3.eth.chain_id,
        'from': ACCOUNT.address,
        'nonce': nonce,
        **get_fee_parameters()
    }

    # FIX #5: İşlem paketlenmeden hemen önce simülasyon çalıştır
    try:
        estimated_gas = pool.functions.liquidationCall(
            COLLATERAL_ASSET,
            DEBT_ASSET,
            user_address,
            debt_to_cover,
            False
        ).estimate_gas(tx_params)
        
        tx_params['gas'] = int(estimated_gas * 1.2)
    except ContractLogicError as e:
        print(f"[!] Akıllı kontrat liquidationCall simülasyonunu reddetti: {e}")
        return
    except Exception as e:
        print(f"[!] Gas tahmini sırasında hata çıktı: {e}")
        return

    # Pakatleme ve ağa gönderme
    try:
        tx_in_flight = True
        tx_data = pool.functions.liquidationCall(
            COLLATERAL_ASSET,
            DEBT_ASSET,
            user_address,
            debt_to_cover,
            False
        ).build_transaction(tx_params)

        signed_tx = w3.eth.account.sign_transaction(tx_data, PRIVATE_KEY)
        tx_hash = w3.eth.send_raw_transaction(signed_tx.raw_transaction)
        print(f"[+] İşlem ağa gönderildi! Tx Hash: {tx_hash.hex()}")
        
        # FIX #10: Likidasyon fişinin (receipt) durum analizi
        receipt = w3.eth.wait_for_transaction_receipt(tx_hash, timeout=30)
        if receipt['status'] == 1:
            print(f"[BAŞARILI] Pozisyon {receipt['blockNumber']} blok numarasıyla başarıyla tasfiye edildi!")
        else:
            print(f"[BAŞARISIZ] İşlem kazıldı ama REVERT döndü (Status 0). Gas çöp oldu.")

    except Exception as e:
        print(f"[!] Gönderim sırasında kritik hata: {e}")
    finally:
        tx_in_flight = False

# ------------------------------------------------------------------------------
# 5. İzleme (Monitoring)
# ------------------------------------------------------------------------------
def monitor_user(user_address: str):
    account_data = pool.functions.getUserAccountData(user_address).call()
    health_factor = account_data[5] / 10**18
    
    print(f"Hedef: {user_address} | Health Factor: {health_factor:.6f}")

    if health_factor < 1.0:
        print("[!] TASFİYE EDİLECEK POZİSYON YAKALANDI!")
        execute_liquidation(user_address)

if __name__ == "__main__":
    while True:
        try:
            monitor_user(TARGET_USER)
            time.sleep(1)
        except KeyboardInterrupt:
            print("\n Bot kullanıcı tarafından durduruldu.")
            break
        except Exception as e:
            print(f"HATA: {e}")
            time.sleep(3)

L2 ağlarında mempool falan yoktur. Hiç yoktur. Her şey FCFS (ilk gelen ilk alır) mantığıyla çalışır. Erken kalkan yol alır.

Ve senin betiğin time.sleep(1) yüzünden beklerken, özel HFT botları doğrulayıcının (validator) çalıştığı sunucu kabininde doğrudan soketler üzerinden bağlanmıştır bile. Bir margin call'u manuel olarak yenme şansın SIFIRDIR.

Kâr Aslında Nerede Gizli (ve Neden Herkes Borç Almaya Devam Ediyor?)

Peki neden insanlar böyle bir riske giriyor?

  • Faiz Oranı Arbitrajı (Interest Rate Arbitrage). A platformundan %4 APY ile USDT borç alıp, B platformundaki Vault'a %12 APY ile yatırıyorsun. %8'lik fark senin kârın. Ancak burada akıllı sözleşme riski devreye giriyor: B platformu depeg olursa veya reentrancy saldırısıyla patlarsa, A platformuna gerçek para borçlu kalırsın.
  • Likidite Devri ve Teminatın Tokenlaştırılması. Pendle veya Morpho gibi protokollere bakın. stETH yatırıp stablecoin alıyorsun, onlarla da sabit getirili PT (Principal Tokens) topluyorsun. Karmaşık mı? Evet. Getirili mi? LST tokenlarının orakıllarında bir sorun yaşanana kadar kesinlikle evet.
  • Vergi Optimizasyonu. Kârı realize etmek = vergi ödemek demektir. Değeri artan bir varlığı teminat gösterip kredi çekmek = satış işleminin gerçekleşmemesi demektir. Satış yoksa vergi de yok. Pratik mi? Kesinlikle.

Ancak insanlar kaskat (zincirleme) tasfiyeleri unutuyor. Mayıs 2021 düşüşünde ve FTX'in çöküşünde, teminat fiyatları botların borçları kapatma hızından daha hızlı düştüğü için koskoca protokoller batık borçla (bad debt) baş başa kaldı ve ödeme aczine düştü. Günün sonunda olan, sadece faiz kazanmak için stablecoin'lerini borç veren masum mevduat sahiplerine oldu.

İzole Marjin Havuzları vs Cross-Margin: Mayın Nerede Gizli?

Birçok acemi, sırf risk yönetimi mimarisini bilmediği için duvara tosluyor. DeFi'da temel olarak iki farklı yaklaşım var: Cross-Margin (ortak havuz) ve Isolated Markets (Morpho veya Euler v2 gibi izole piyasalar).

Cross-Margin'de (Aave'deki varsayılan mod) tüm teminat portföyün tek bir kalkan gibi çalışır. WBTC, ETH ve DAI yatırıp karşılığında USDC borçlandın diyelim. Sadece WBTC çökerse, DAI tamponun seni kurtarır. Kullanışlı mı? Kesinlikle. Ama teminatındaki varlıklardan biri dibe vurursa (2022'deki stETH depeg'ini veya herhangi bir bridged token'ın patlamasını hatırlayın), TÜM pozisyonunu beraberinde sürükler. A'dan Z'ye tamamen likide olursun.

İzole havuzlarda ise riski belirli bir pariteye hapsedersin. Örneğin, özel bir wstETH / USDC kasası (vault) düşünün.

[Mevduatın] ---> [İzole Havuz A (ETH/USDC)]  ---> Risk sadece Havuz A ile sınırlı
            ---> [İzole Havuz B (PEPE/USDC)] ---> PEPE patlarsa = Kayıp sadece Havuz B'de

Havuz B'deki rastgele bir shitcoin %99 çakılsa bile, sadece Havuz B'ye yatırdığın kadarını kaybedersin. Havuz A'da duran ana Ethereum'un tamamen güvendedir.

Evet, üç farklı pozisyonu yönetmek tam bir baş ağrısı. Gas ücretleri de cabası. Ancak yüksek volatilitede çalışırken canını kurtaracak tek mantıklı strateji budur.

Kahinler (Oracles): Akıllı Sözleşme Hacklenmeden Nasıl REKT Olursunuz?

Bir borç verme (lending) protokolünün akıllı sözleşmesi kendi başına kör ve sağırdır. ETH'nin şu anki anlık fiyatının kaç olduğundan haberi bile yoktur; kahine (oracle) körü körüne güvenir. İşte film tam da burada kopuyor.

Teminatları kül eden başlıca kahin zafiyetleri şunlardır:

  • Stale Prices (Bayat / Gecikmiş Fiyatlar). Kahin her saniye fiyat güncellemez (bu gas masrafından dolayı sağlayıcıyı batırır). Bunun yerine örneğin %0.5'lik bir sapmada veya 24 saatte bir (heartbeat) fiyatı iter. Eğer piyasa 3 saniyede %5'lik ani bir iğne atıp hemen toparlarsa, kahin fiyatı TAM DİP NOKTADA güncelleyebilir. Sözleşme "0.99 HF" değerini görür görmez likidasyonculara yeşil ışık yakar ve pozisyonun patlar. Piyasa hemen geri sıçrar ama sen elinde patlayan pozisyonla kalakalırsın.
  • Illiquid DEX Feeds (Spot Fiyat Manipülasyonu). Eğer protokol, likiditesi düşük bir token için Uniswap v3 tabanlı bir TWAP kahini kullanıyorsa, bir balina tek bir büyük satış emriyle fiyatı tabana çekebilir. Bu durum lending tarafında bir likidasyon dalgası başlatır ve balina sonra o varlığı ucuza geri toplar. Tam bir klasik katakulli.

Aşağıdaki tablo, teminat çöküşünün farklı seviyelerinde likidasyon anındaki gerçek kayıp matematiğini göstermektedir (%75 başlangıç LTV ve %5 Likidasyon Bonusu ile):

Teminat Fiyatındaki DüşüşHealth Factor (Sağlık Faktörü)Pozisyon DurumuBorç Alanın Başlangıç Mevduatından Kaybı
-%51.26Güvenli%0 (sadece teminattaki gerçekleşmemiş zarar)
-%151.13Risk Bölgesi%0 (ek teminat eklenmeli)
-%250.99LİKİDASYON~%15-20 (likidasyon cezası + spread)
-%40 (Flash Crash)< 0.80Tamamen Sıfırlanma (Wipeout)%100 teminat kaybı (geriye sadece çekilen borç kalır)

Hayatta Kalma Reçetesi: Borç Alırken Sıfırlanmamak İçin Checklist

Merkeziyetsiz borçlanma işine giriyorsan katı hijyen kuralların olmalı. Ben bu kuralları birkaç acı revert ve zorunlu kapanıştan sonra kendi canım yanarak tecrübe ettim.

  • HF Değerini Minimum 1.5 - 1.8 Arasında Tut. 1.05 HF ile bıçak sırtında oynamayı unut. Grafikteki en ufak kırmızı iğnede tahtalıköyü boylarsın.
  • Teminat Eklemeyi Otomatize Et (Self-Kicker). Gelato Automation veya Chainlink Automation gibi servisleri kullan. HF 1.2'nin altına düştüğünde cüzdanındaki stablecoin'leri sözleşmeye aktarıp borcun bir kısmını kapatacak basit bir bot yaz.
  • Kahinleri Takip Et. Havuzunda hangi kahinin kullanıldığını adın gibi bil. Chainlink push-type ise heartbeat süresine bak. Pyth ise güven aralıklarını (confidence intervals) kontrol et.
  • Perp'ler ile Hedging Yap. ETH teminat gösterip borç mu aldın? Borçlandığın tutar kadar türev borsalarda 1x kaldıraçla ETH short pozisyonu aç. Bu, riskini dolar bazında kilitler (delta-neutral).

Kripto kredisi, sermaye verimliliğini artırmak için muazzam bir kaldıraçtır; ancak tecrübesiz ellerde saatli bir giyotine dönüşür. Sözleşmenin senin piyasa beklentilerine hiç ama hiç saygısı yoktur.

Bu blog yazısını şununla özetleyin:

FAQ

Aave v3 protokolünde tasfiye işlemi, borç alan kullanıcının Health Factor değeri 1,0 seviyesinin altına düştüğünde otomatik olarak tetiklenir. Harici tasfiye botları Pool sözleşmesi üzerindeki liquidationCall fonksiyonunu çağırarak kullanıcının toplam borcunun %50'ye kadar olan kısmını öder ve karşılığında %1 ile %15 arasında değişen tasfiye primi (liquidation bonus) eklenmiş teminat varlığını devralır.

Health Factor değeri, yatırılan toplam teminatın ETH cinsinden değerinin ağırlıklı tasfiye eşiği (Liquidation Threshold) ile çarpılması ve elde edilen sonucun toplam borcun ETH cinsinden değerine bölünmesiyle hesaplanır. Pozisyonun tasfiyeye girmesini önlemek için kullanıcıların piyasa oynaklığını takip ederek Pool sözleşmesine ek teminat yatırmaları veya repay fonksiyonunu kullanarak borçlarını kısmen ödemeleri gerekir.

Tasfiye işlemlerinde net kârlılık, elde edilen teminat primi ile EIP-1559 mekanizması altındaki gaz maliyetleri ve DEX takaslarındaki fiyat kayması (slippage) arasındaki farka bağlıdır. Geliştiriciler, işlem göndermeden önce estimateGas yöntemiyle statik simülasyon çalıştırarak maxFeePerGas ve maxPriorityFeePerGas parametrelerinin elde edilecek net kârı aşmadığını doğrular.
Piter Wacker

I am a trading specialist with expertise in market analysis, risk management, and investment strategies. I focus on identifying opportunities, executing trades with discipline, and delivering consistent results.

...

Yorumunuzu paylaşın

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