Zaokrúhľovanie likvidity a neznižujúci sa invariant — vyšetrovanie a oprava
Dátum: 2025-10-25
Repozitár: BiatecCLAMM (projects/BiatecCLAMM)
Primárny súbor: contracts/BiatecClammPool.algo.ts
Súhrn pre používateľov
Dôležité: Pri pridávaní likvidity do poolov s existujúcimi poplatkami môžete dostať mierne menej LP tokenov, ako by naznačovala priama proporcia. Toto je zámerné a chráni pool pred únikom hodnoty prostredníctvom chýb zaokrúhľovania.
Čo by mali používatelia vedieť
- Typický dopad: Strata je < 0.0001% vášho vkladu
- Maximálna pozorovaná: ~10 základných jednotiek na operáciu (často menej ako $0.000001)
- Nezhromažďuje sa: Strata je lineárna s počtom operácií, nie exponenciálna
- Hodnota poolu sa zvyšuje: Napriek tomuto zaokrúhľovaniu vaše LP tokeny získavajú hodnotu z obchodných poplatkov
Prečo sa to deje
Pool používa kvadratickú rovnicu na zohľadnenie nahromadených poplatkov pri razení LP tokenov. Pozitívny koreň sa zaokrúhľuje nadol, aby sa zabezpečilo, že zaokrúhľovanie vždy uprednostňuje pool pred jednotlivými používateľmi. Toto zabraňuje útočníkom extrahovať hodnotu prostredníctvom opakovaných malých operácií.
Stratégie zmiernenia
- Hromadte svoje operácie: Vkladajte väčšie sumy menej často
- Akceptujte malé straty: Považujte ich za náklady na ochranu poplatkov
- Dlhodobý pohľad: Hodnota poolu sa stále zvyšuje z obchodných poplatkov v priebehu času
Príklad scenára
Vklad: 1,000,000 tokenov
Okamžité výber: 999,999.99 tokenov
Strata: 0.01 tokenov (0.000001%)
Táto malá strata je prijateľná, pretože:
- Zabraňuje poolu stratiť hodnotu
- Strata je deterministická a ohraničená
- Vaše LP tokeny sa oceňujú z obchodných poplatkov
- Alternatíva (únik poolu) by bola horšia pre všetkých LP
Technické hlboké ponorenie
Cieľ
Zabezpečiť, že uložená likvidita poolu (globálny stav Liquidity) sa nikdy nezmenší v dôsledku normálnych operácií (swapy, pridanie likvidity, distribúcia prebytočných aktív). Akákoľvek pozorovaná malá strata musí byť artefaktom celočíselného zaokrúhľovania, nie ekonomickou stratou. Odmietnuť iba skutočné, väčšie poklesy.
Súhrn problému
- Jest test pre scenár swapu s nulovým poplatkom zlyhal s tvrdením ako: "Likvidita sa musí zvýšiť po swap".
- Hlavná príčina: celočíselná aritmetika kombinovaná s škálovaním desatinných miest aktív a viacerými deleniami/odmocninami produkovala malé dolné zaokrúhľovacie posuny pri prepočítaní likvidity z bilancií. Toto sú algoritmické chyby skracovania (zaokrúhľovanie nadol) a nie ekonomické straty.