Anterior, nu am știut ce este PancakeSwap Infinity, astăzi m-am liniștit și am citit documentația, următoarele sunt doar înțelegerea mea personală
▰▰▰▰▰▰
Protocolul V2/V3 există de mulți ani, cred că toată lumea este deja foarte familiarizată cu el, iar Infinity (poate fi considerat V4) este mai flexibil și deschis decât înainte, având trei caracteristici principale
Arhitectură singleton - Toate piscinele de lichiditate sunt într-un singur contract Vault, este un mare seif
Contabilitate lightning - Folosind caracteristica EIP-1153, se calculează mai întâi și apoi se face plata, tranzacțiile în mai multe etape au, de asemenea, avantaje unice și economisesc Gas
HOOK - În întreaga durată de viață a piscinei (adică inițializarea piscinei, schimbul, adăugarea de lichiditate, eliminarea lichidității etc.), se pot adăuga funcționalități personalizate, de exemplu, dacă ești membru al cuiva, poți beneficia de un fee mai mic
▰▰▰▰▰▰
Care sunt diferențele în procesul de tranzacție față de V2/V3?
V2/V3 sunt ca un **automat de vânzare**: introduceți banii, automatul dă produsul, trebuie să fie o tranzacție imediată și echilibrată.
Infinity este ca un **bancomat cu un registru super mare**: intrați (Lock), puteți depune, retrage sau schimba monede, chiar dacă în timpul procesului banii trec prin 10.000 de tranzacții, banca înregistrează doar conturile. Când ieșiți (Unlock), se face un bilanț pentru a verifica dacă contul este echilibrat.
▰▰▰▰▰▰
Note detaliate
Următorul pas este interpretarea documentației, care reprezintă o învățare mai profundă (logică înainte de cod).
▰▰
Nivelul contabil & depozitul Vault
Nucleul acestui protocol este Vault; toate pool-urile se află în acest contract de depozit, folosind o metodă de tip "înregistrare înainte, ajustare la final". În cazul tranzacțiilor cu mai multe etape (Hop 1 → Hop 2 → Hop 3), nu este necesar să transferați tokenuri în timpul procesului; este suficient să faceți un singur transfer la final pentru diferența netă, economisind semnificativ în costuri de Gas.
Pasul procesului de tranzacție este: vault.lock() pentru a obține o cheie de la depozit; depozitul va face un callback lockAcquired(...), similar cu callback-ul de tip flash loan din V2/V3. Apoi puteți efectua toate operațiile necesare, cum ar fi Swap sau modifyLiquidity, iar la final, folosiți una dintre cele patru metode: take(), settle(), mint() sau burn() pentru a verifica soldul final cu depozitul.
Delta de tip BalanceDelta este ca o factură, care înregistrează cât datorați Pool-ului sau cât vă datoră Pool-ul; direcția fluxului de fonduri este determinată de semnul lui delta. Dacă delta.amount0() > 0 sau delta.amount0() < 0, efectuați operațiile corespunzătoare.
De obicei, o valoare mai mare decât 0 înseamnă că protocolul vă datoră tokenuri; puteți folosi vault.take pentru a prelua tokenurile, sau puteți face mint pentru a le depune în depozit, sau clear pentru a elimina diferența de sold (a aduce la zero). Această funcționalitate este folosită de obicei când costul de Gas depășește valoarea tokenului ERC20.
Dacă este mai mic decât 0, înseamnă că datorați tokenuri pool-ului; trebuie să sincronizați starea prin vault.sync(...), apoi să transferați tokenurile în depozit, iar apoi să folosiți settle() pentru a închide contul, astfel încât depozitul sau contabilul să compare soldurile și să efectueze ajustarea.
Acest proces este asemănător cu intrarea într-un magazin Sam’s Club: folosiți abonamentul pentru a intra, alegeți lapte, carne de vită, peni, deja începeți să datorați magazinului, iar la final ajungeți la casă pentru verificare, transfer de plată și închidere a facturii.
Exemplu de cod de pe site

▰▰
Manager de pooluri
Dacă Vault este un **depou uriaș (responsabil pentru stocarea fondurilor)**, atunci PoolManager este procesorul central care gestionează regulile depozitului și calculează toate rezultatele tranzacțiilor — **procesorul central (responsabil pentru logică de afaceri)**.
PoolManager este un contract singleton. Infinity are în acest moment două logici AMM: CLPoolManager și BinPoolManager.
- CLPoolManager este lichiditatea centralizată de dinainte de V3, pe care o cunoașteți foarte bine, cu o serie de concepte precum Tick, sqrtPriceX96 etc.
- BinPoolManager este tipul de jurnal al lichidității cunoscut în prezent ca Liquidity Book: este foarte asemănător cu lichiditatea centralizată din V3, dar împarte lichiditatea în Bins discrete, fiecare fiind asociat unei prețuri fixe. Furnizorii de lichiditate pot oferi lichiditate într-unul sau mai multe Bins.
Site-ul oficial are o imagine foarte bună care explică acest concept.

Deși există două logici diferite, în Infinity, toate pool-urile vor fi împachetate într-un singur contract PoolManager (CL și Bin au două adrese de contract), unde:
PoolKey este o structură care descrie fiecare pool.
PoolId este o valoare de tip bytes32, derivată din PoolKey.
Initializing este folosit pentru inițializarea pool-ului.
Toate evenimentele principale de lichiditate, cum ar fi swap, modifyLiquidities etc., au loc în acest contract.
▰▰
Infinity Universal Router și Permit2
Site-ul oficial explică și eficiența Infinity Universal Router și Permit 2, care permit autorizarea rapidă și tranzacții în v2, v3,
Procesul de schimb în Infinity, pentru cei interesați, poate fi studiat separat în documentație.
| Vault | 0x238a358808379702088667322f80aC48bAd5e6c4 |
| CLPoolManager | 0xa0FfB9c1CE1Fe56963B0321B32E7A0302114058b |
| BinPoolManager | 0xC697d2898e0D09264376196696c51D7aBbbAA4a9 |
| CLPositionManager | 0x55f4c8abA71A1e923edC303eb4fEfF14608cC226 |
| CLQuoter | 0xd0737C9762912dD34c3271197E362Aa736Df0926 |
| BinQuoter | 0xC631f4B0Fc2Dd68AD45f74B2942628db117dD359 |
| MixedQuoter | 0x2dCbF7B985c8C5C931818e4E107bAe8aaC8dAB7C |

