W mrocznym lesie Solany, gdy otrzymujesz sygnał aktualizacji konta z modułu Scout, rywalizacja wchodzi w ostatnie milisekundy. Jeśli musisz wysłać transakcję z powrotem do węzła RPC w celu "symulacji" w celu uzyskania oferty, szansa często zostaje już wykorzystana przez konkurentów, którzy dokonali obliczeń lokalnie.

Prawdziwy profesjonalista Searcher nigdy nie czeka na odpowiedź RPC. Przechowuje on lokalnie kopię stanu AMM w pamięci i natychmiast po otrzymaniu danych binarnych oblicza optymalną cenę za pomocą modelu matematycznego.

Ten artykuł rozłoży na czynniki sposób budowy wydajnego lokalnego silnika wyceny dla Raydium (CPMM) i Orca (CLMM).

1. Kluczowa idea: lokalne obliczenia vs. symulacje RPC

1.1 Dlaczego wybrać lokalne ceny?

  • Ekstremalne opóźnienie: symulacja RPC zwykle wymaga 50ms-200ms, podczas gdy lokalne czyste obliczenia potrzebują tylko mikrosekund.

  • Zdolność równoległa: lokalne obliczenia nie zużywają wydajności węzłów RPC, mogą natychmiast przeszukiwać tysiące ścieżek arbitrażu.

  • Deterministyczność: poprzez analizę surowych danych konta (Account Data) możesz uzyskać kontrolę nad stanem na niższym poziomie niż podczas symulacji.

2. Raydium (CPMM): sztuka stałych iloczynów

Standardowa pula Raydium stosuje klasyczną formułę x×y=k. Mimo że logika jest prosta, w realizacji inżynieryjnej należy zająć się niewielkimi odchyleniami w precyzji i opłatach.

2.1 Kluczowa formuła wyceny

W przypadku scenariuszy z opłatami, całkowita wersja formuły do obliczenia amount_out to:

  1. Wejście z opłatą: AmountInwith_fee=AmountIn×(FeeDenominator−FeeNumerator)AmountInwith_fee​=AmountIn×(FeeDenominator−FeeNumerator)

  2. Obliczanie wyniku: AmountOut=AmountInwith_fee×ReserveoutReservein×FeeDenominator+AmountInwith_feeAmountOut=Reservein​×FeeDenominator+AmountInwith_fee​AmountInwith_fee​×Reserveout​​

2.2 Gra o precyzję: Konieczność U256

Na Solana liczba tokenów to zazwyczaj u64. Jednak podczas obliczania wspomnianego wzoru w liczniku (Numerator) dwa duże u64 mnożone razem natychmiast prowadzą do przepełnienia.

  • Rozwiązanie: Wprowadzenie U256 do warstwy obliczeniowej. Choć oficjalna biblioteka Rust tego nie dostarcza, dzięki makro uint lub bibliotece primitive-types możemy zapewnić absolutną precyzję obliczeń nawet przy bardzo dużej zmienności (duże wejścia).

3. Orca Whirlpool (CLMM): precyzyjna analiza skoncentrowanej płynności

W przeciwieństwie do CPMM, model skoncentrowanej płynności Orca (CLMM) jest znacznie bardziej złożony. Obejmuje nie tylko ceny, ale także Tick (zakres cenowy) i głębokość płynności.

3.1 Reprezentacja ceny: Q64.64 sqrtPrice

Orca używa ceny pierwiastkowej (sqrtPrice) i przechowuje ją w formacie zmiennoprzecinkowym Q64.64.

  • Formuła: Price=(sqrtPriceX64264)2Price=(264sqrtPriceX64​)2

  • Podczas analizy musimy obsługiwać bardzo duże liczby całkowite 128-bitowe, wydobywając prawdziwe ceny za pomocą operacji przesunięcia.

3.2 Ekstremalna analiza: Metoda przesunięcia Offset

Struktura konta Orca Whirlpool jest bardzo duża (zawiera wiele zestawów nagród, parametrów opłat itp.), jeśli użyjesz pełnej deserializacji (Borsh Deserialize), straty wydajności są ogromne.
Przemysłowe rozwiązanie optymalizacyjne:
Bezpośrednie lokalizowanie binarnych danych konta za pomocą przesunięcia (Offset). Ponieważ struktura puli jest stała, możemy bezpośrednio odczytać kluczowe bajty:

  • data[49..65] -> Płynność (Liquidity)

  • data[65..81] -> Cena (sqrtPrice)

  • data[81..85] -> Aktualny Tick
    Ten sposób jest ponad 10 razy szybszy niż pełna analiza.

4. Projekt architektury: Warstwa wyceny

Aby warstwa strategii (Strategy) nie musiała się martwić o matematyczne różnice między różnymi DEX, musimy zbudować jednolity silnik wyceny:

flowchart LR
RawData[Surowe dane konta] -->|Analiza| AMMState[Obraz pamięci AMM]
AMMState -->|Kwota wejściowa| LocalMath[Model matematyczny lokalny]
LocalMath -->|Wynik| AmountOut[Zorganizowana wycena]

subgraph "Lokalna warstwa mocy obliczeniowej"
LocalMath
AMMState
end

Ten silnik będzie w czasie rzeczywistym utrzymywał saldo skarbca. Gdy Scout usłyszy jakąkolwiek zmianę w skarbcu, silnik wyceny natychmiast przeliczy pełną wycenę tej pary tokenów.

5. Optymalizacja inżynieryjna: szybkość z detali

  1. Obliczenia z zerową alokacją: W trakcie obliczeń staraj się unikać alokacji pamięci (Heap Allocation), używaj natywnych typów na stosie.

  2. Partia żądań RPC: Chociaż wycena jest lokalna, saldo skarbca musi być zsynchronizowane. Użyj getMultipleAccounts, aby jednocześnie pobrać wszystkie związane stany skarbca, zmniejszając liczbę wędrówek sieciowych.

  3. Preobliczenia: W przypadku stałych parametrów, takich jak stawki, zakończ analizę w fazie zimnego uruchamiania, nie obliczaj ich na każdej milisekundzie w gorącej ścieżce.

6. Prezentacja techniczna: logika wyceny CPMM (wersja Python)

Chociaż środowisko produkcyjne dąży do ekstremalnej wydajności Rust, jego podstawowa logika matematyczna może być jasno demonstrowana w Pythonie:

# Symulacja obliczeń lokalnych o wysokiej wydajności
def calculate_local_quote(amount_in, res_in, res_out, fee_pct=0.0025):
"""
Lokalna wycena CPMM: x * y = k
"""
# Symulacja obliczeń U256, aby zapobiec przepełnieniu
fee_numerator = int(fee_pct * 10000)
fee_denominator = 10000

# 1. Oblicz efektywną kwotę wejściową po odjęciu opłat
amount_in_with_fee = amount_in * (fee_denominator - fee_numerator)

# 2. Oblicz wynik według wzoru
numerator = amount_in_with_fee * res_out
denominator = (res_in * fee_denominator) + amount_in_with_fee

amount_out = numerator // denominator

# 3. Oblicz wpływ ceny (Price Impact)
price_impact = (amount_out / res_out) if res_out > 0 else 1

return amount_out, price_impact

# Symulacja: 1 SOL na USDC, w puli jest 1000 SOL / 100,000 USDC
out, impact = calculate_local_quote(1 10*9, 1000 10*9, 100000 10*6)
print(f"[*] Szacowany wynik: {out / 10**6} USDC")
print(f"[*] Wpływ ceny: {impact:.4%}")

7. Podsumowanie: moc obliczeniowa to zysk

W świecie Solana MEV zdolności do wyceny lokalnej decydują o poziomie konkurencji.

  • Początkujący gracze polegają na symulacjach RPC, mogą tylko zbierać resztki rosołu.

  • Gracze średniego poziomu realizują lokalizację CPMM.

  • Zaawansowani gracze mogą precyzyjnie analizować każdy Tick CLMM i wdrażać zatomizowany arbitraż z Jito.

Następny krok zapowiedzi

Teraz, gdy mamy „zmysł (Scout)” i „mózg (AMM Math)”, czas na najbardziej ekscytującą część: jak opracować strategię arbitrażu między DEX? W obliczu złożonej sytuacji z wieloma ścieżkami i protokołami, jak znaleźć tę najbardziej zyskowną ścieżkę?

Ten artykuł został napisany przez Levi.eth. Na Solanie, każda linia optymalizacji wzoru matematycznego może przekształcić się w rzeczywisty zysk na łańcuchu.

JTO
JTOUSDT
0.411
+1.28%
SOL
SOLUSDT
143.82
+0.67%