Przez długi czas nie wiedziałem, czym jest PancakeSwap Infinity, dziś postanowiłem spokojnie przeczytać dokumentację, poniżej przedstawiam swoje osobiste zrozumienie
▰▰▰▰▰▰
Protokół V2/V3 istnieje już od wielu lat, wierzę, że wszyscy są już bardzo zaznajomieni, a Infinity (można uznać za V4) w porównaniu do wcześniejszych wersji jest bardziej elastyczne i otwarte, ma trzy główne cechy
Architektura singleton - wszystkie pule płynności znajdują się w jednej umowie Vault, to jest duży skarbiec
Błyskawiczne rozliczenie - wykorzystując cechę EIP-1153, najpierw obliczamy, a potem rozliczamy, transakcje wieloetapowe mają również unikalne zalety i oszczędzają gaz
HOOK - W całym cyklu życia puli (tj. inicjalizacja puli, wymiana, dodawanie płynności, usuwanie płynności itp.) można dodać funkcje dostosowane, na przykład jako członek możesz uzyskać niską opłatę
▰▰▰▰▰▰
Jakie są różnice w procesie transakcyjnym w porównaniu do V2/V3?
V2/V3 jest jak **automat do sprzedaży**: wrzucasz monetę, maszyna wypuszcza towar, musisz natychmiast rozliczyć.
Infinity jest jak **bank z super księgą**: wchodzisz (Lock), możesz wpłacać, wypłacać, wymieniać waluty, nawet jeśli w międzyczasie fundusze przepływały dziesięć tysięcy razy, bank tylko prowadzi księgowość. Kiedy wychodzisz (Unlock), rozliczasz, czy saldo twojego konta jest wyzerowane.
▰▰▰▰▰▰
Szczegółowe notatki
Następnie są notatki dotyczące interpretacji dokumentu, co jest bardziej dogłębną nauką (logika przed kodem).
▰▰
Warstwa księgowa & Skarbiec Vault
Rdzeniem tego protokołu jest Vault, wszystkie Puli są w tym kontrakcie skarbca, poprzez sposób "najpierw prowadzenie księgowości, potem rozliczenie". Jeśli są to transakcje z wieloma skokami (Hop 1 -> Hop 2 -> Hop 3), w międzyczasie nie ma potrzeby rzeczywistego przenoszenia tokenów, wystarczy na końcu przelać różnicę netto, co znacznie oszczędza gaz.
Kroki procesu transakcji to: vault.lock() uzyskuje blokadę od skarbca, skarbiec zwróci lockAcquired(……) (podobnie jak callback pożyczki błyskawicznej w V2/V3), następnie możesz przeprowadzić wszystkie wymagane operacje, takie jak Swap, modifyLiquidity, w tym miejscu, a na końcu porównać ostateczne saldo z jednym z czterech sposobów: take(), settle(), mint() lub burn().
Delta BalanceDelta jest jak rachunek, który rejestruje, ile jesteś winien Puli, lub ile Pool jest Ci winien. Na podstawie wartości delta, decydujesz o kierunku przepływu funduszy, delta.amount0() > 0 lub delta.amount0() < 0 wykonujesz swoje operacje.
Zwykle większe niż 0 oznacza, że protokół jest Ci winny tokeny, możesz vault.take, aby wziąć tokeny, lub możesz mint, aby wpłacić do skarbca oraz clear, aby usunąć różnicę salda (zresetować na zero). Zwykle używasz tej funkcji, gdy koszty gazu przekraczają wartość ERC20.
Jeśli jest mniejsze niż 0, to oznacza, że jesteś winien tokeny puli. Musisz zsynchronizować stan poprzez vault.sync(…) i następnie przenieść tokeny do skarbca, a na końcu użyć settle() do rozliczenia, aby skarbiec lub księgowość mogły porównać saldo tokenów do rozliczenia.
Ten proces jest podobny do wizyty w supermarkecie Sam's. Wchodzisz z kartą członkowską, wybierasz mleko, wołowinę, kijek byka, już zacząłeś być winny supermarketowi, a na końcu idziesz do kasy na rozliczenie, dokonując płatności, a na końcu wykonujesz rozliczenie.
Przykładowy kod z oficjalnej strony

▰▰
Zarządzanie PoolManagerem
Jeśli Vault to **gigantyczny skarbiec (odpowiedzialny za przechowywanie funduszy)**, to PoolManager jest **centralnym procesorem (odpowiedzialnym za logikę biznesową)** zarządzającym zasadami skarbca i obliczającym wyniki wszystkich transakcji.
PoolManager to również kontrakt singleton, Infinity tym razem ma dwie logiki AMM, CLPoolManager i BinPoolManager.
- CLPoolManager to wcześniej znana V3 centralna płynność, z wieloma pojęciami takimi jak Tick, sqrtPriceX96 i innymi.
- BinPoolManager jest obecnie bardzo popularnym rodzajem księgi płynności typu Liquidity Book. Jest bardzo podobny do V3 centralnej płynności, ale rozdziela płynność na różne dyskretne Biny, gdzie każdemu przedziałowi przypisana jest stała cena. Dostawcy płynności mogą dostarczać płynność do jednego lub więcej przedziałów.
Na oficjalnej stronie znajduje się bardzo dobre zdjęcie, które to wyjaśnia.

Chociaż są dwie różne logiki, w Infinity wszystkie pule będą zapakowane w jeden kontrakt PoolManager (adresy dwóch kontraktów CL i Bin), gdzie:
PoolKey to struktura, która opisuje każdy zbiornik.
PoolId to wartość typu bytes32, wywodząca się z PoolKey.
Initializing służy do inicjowania puli.
Wszystkie główne zdarzenia płynności, takie jak swap, modifyLiquidities i inne, odbywają się w tym kontrakcie.
▰▰
Infinity Universal Router i Permit2
Oficjalna strona wyjaśnia także efektywny Infinity Universal Router i Permit 2, które szybko przyznają uprawnienia oraz działają w v2, v3,
Infinity przeprowadza proces wymiany, zainteresowani mogą samodzielnie zbadać dokumentację.
| Vault | 0x238a358808379702088667322f80aC48bAd5e6c4 |
| CLPoolManager | 0xa0FfB9c1CE1Fe56963B0321B32E7A0302114058b |
| BinPoolManager | 0xC697d2898e0D09264376196696c51D7aBbbAA4a9 |
| CLPositionManager | 0x55f4c8abA71A1e923edC303eb4fEfF14608cC226 |
| CLQuoter | 0xd0737C9762912dD34c3271197E362Aa736Df0926 |
| BinQuoter | 0xC631f4B0Fc2Dd68AD45f74B2942628db117dD359 |
| MixedQuoter | 0x2dCbF7B985c8C5C931818e4E107bAe8aaC8dAB7C |

