Naciśnij ESC, aby zamknąć

Matematyka JIT Liquidity: Jak boty MEV liczą zysk w Uniswap v3

To jest drugi artykuł z naszej serii „Drapieżniki w pulach: sztuka i matematyka płynności JIT”. Tutaj przechodzimy od teorii „kradzieży” do chłodnej kalkulacji: jak algorytm w 200 milisekund decyduje, czy warto wejść do gry.

Jeśli pierwszy artykuł był o „co to jest”, ten dotyczy „ile to kosztuje”. Aby atak JIT nie zamienił się w dobroczynność dla górników/walidatorów, bot musi rozwiązać równanie z pięcioma niewiadomymi szybciej, niż zostanie wykopany blok.

1. Płynność (L): główna zmienna

W Uniswap v3 płynność to nie tylko suma tokenów, ale współczynnik L, który określa, ile aktywów przesunie się przy zmianie ceny. Wzór na swap (inwariant):

formule-jt
 

Dla bota JIT kluczowe jest obliczenie, jaką część całkowitego L w danym przedziale cenowym (ticku) powinien zająć.

Wzór na udział w prowizji (Fshare):

Fshare = Ljit / Lpool + Ljit

Gdzie:

  • Ljit  — płynność wnoszona przez bota.
  • Lpool — istniejąca płynność pasywnych LP w docelowym ticku.

Zasada praktyczna: Aby zgarnąć 95% prowizji, płynność bota musi być 19 razy większa niż bieżąca płynność puli w tym zakresie.

 

2. Obliczanie zysku ze swapu (Gross Profit)

Bot widzi w mempoolu transakcję użytkownika o wartości $S$ (w tokenach). Znając kategorię prowizji puli ($\phi$, np. 0,05% lub 0,3%), oblicza całkowitą prowizję transakcji:

formule-jt-2
 

Oczekiwany brutto zysk bota (Pgross):

formule-jt-3
 

 

3. Uwzględnienie „podatku gazowego” (koszty operacyjne)

W przeciwieństwie do pasywnego LP, który płaci gaz raz na miesiące, bot JIT płaci gaz dwukrotnie w jednym bloku (lub jedną drogą transakcję z wieloma wywołaniami).

Koszty gazu (Cgas):

  • mint(): ~150k–200k gas.
  • decreaseLiquidity() + collect(): ~120k–180k gas.
  • Dodatkowo opłata priorytetowa dla Flashbots, aby zagwarantować trafienie do bloku.

Na Ethereum Mainnet przy cenie gazu 30 gwei, całkowite koszty mogą wynosić $50–$150. Na L2 (Arbitrum/Polygon) koszty są minimalne ($0,10–$0,50), ale konkurencja o mikro-swap jest wyższa.

 

4. Obliczanie punktu rentowności (Break-even Point)

Atak ma sens tylko wtedy, gdy:

formule-jt-4
 

Gdzie Cslippage  to straty przy wycofaniu płynności (impermanent loss podczas jednego swapu), a Copportunity  to koszt kapitału (np. odsetki od Flash Loan).

Mało znany fakt: Doświadczeni boty uwzględniają „Shadow Slippage”. Kiedy bot wlewa dużą płynność, cena staje się „sztywniejsza”. Jeśli swap użytkownika jest duży, bot może wlać mniej płynności, aby cena przesunęła się mocniej, planując arbitraż w następnym bloku. Ale dla czystego JIT — im więcej płynności, tym lepiej.

 

5. Praktyczny przykład obliczeń (Mainnet)

  • Pula: ETH/USDC (0,05%)
  • Swap użytkownika: $500,000.
  • Aktualne Lpool  w ticku: $2,000,000.
  • Bot wlewa  Ljit: $18,000,000.
  • Łączna prowizja: $500,000 x 0.0005 = $250.
  • Udział bota: 18M / 18M + 2M = 90%.
  • Dochód bota: $250 x 0.9 = $225.
  • Koszt gazu: $120 (średnie warunki).
  • Zysk netto: $225 - $120 = $105 na blok.

Wydaje się mało? Najlepsze boty przeprowadzają 500–1000 takich ataków dziennie. To $50,000–$100,000 zysku netto dziennie, praktycznie bez ryzyka rynkowego.

 

6. Niestandard techniczny: wybór szerokości ticka

Bot nigdy nie ustawia szerokiego zakresu. Im węższy zakres (ticki), tym wyższa koncentracja kapitału i wyższe $L$ przy tej samej ilości tokenów.

Standard JIT: tickLower i tickUpper z różnicą 1 minimalnego kroku (np. 10 punktów dla puli 0,05%).

Obliczanie płynności z ilości tokenów (TypeScript/Ethers):

import { LiquidityAmounts } from '@uniswap/v3-sdk';
import { JSBI } from '@uniswap/sdk-core';
function calculateJitLiquidity(amount0, amount1, currentPrice, tickLower, tickUpper) {
    const sqrtRatioX96 = encodePriceSqrt(currentPrice);
    const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);
    const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);
    return LiquidityAmounts.getLiquidityForAmounts(
        sqrtRatioX96,
        sqrtRatioAX96,
        sqrtRatioBX96,
        amount0,
        amount1,
        false
    );
}

 

Podsumowanie artykułu

Matematyka JIT to bitwa o efektywność. Jeśli zobaczysz, że w puli z 1% prowizji nagle spada rentowność — sprawdź mempool. Najprawdopodobniej działa tam bot, który obliczył swoje $L$ na 50 razy bardziej efektywne niż twoje.

W następnym artykule: Przejdziemy od wzorów do sprzętu i kodu. Przeanalizujemy architekturę smart contracta wykonującego te obliczenia w locie i dowiemy się, dlaczego Rust wyparł wszystkie inne języki w tej niszy.


Mistrzostwo Płynności JIT: Kompletny Przewodnik po MEV w Uniswap: Część 2 z 5

Astra EXMON

Astra is the official voice of EXMON and the editorial collective dedicated to bringing you the most timely and accurate information from the crypto market. Astra represents the combined expertise of our internal analysts, product managers, and blockchain engineers.

...

Dodaj opinię

Twój adres e-mail nie zostanie opublikowany. Obowiązkowe pola są oznaczone*