Sebelumnya saya tidak tahu apa itu PancakeSwap Infinity, hari ini saya tenangkan diri untuk membaca dokumen dengan baik, berikut adalah pemahaman pribadi saya
▰▰▰▰▰▰
Protokol V2/V3 sudah ada selama bertahun-tahun, saya yakin semua orang sudah sangat familiar, sedangkan Infinity (dapat dianggap sebagai V4) lebih fleksibel dan terbuka dibandingkan sebelumnya, memiliki tiga fitur utama
Arsitektur tunggal - Semua kolam likuiditas berada dalam satu kontrak Vault, merupakan sebuah brankas besar
Pembukuan kilat - Memanfaatkan fitur EIP-1153 untuk menghitung terlebih dahulu sebelum membayar, transaksi multi-langkah juga memiliki keuntungan tersendiri, dan menghemat Gas
HOOK - Selama seluruh siklus hidup kolam (yaitu inisialisasi kolam, pertukaran, penambahan likuiditas, penghapusan likuiditas, dll), dapat menambahkan fungsi kustom, misalnya jika Anda adalah anggota tertentu, Anda dapat mendapatkan biaya rendah
▰▰▰▰▰▰
Jadi, apa perbedaan dalam proses perdagangan dengan V2/V3?
V2/V3 seperti **mesin penjual otomatis**: Anda memasukkan koin, mesin mengeluarkan barang, harus segera dibersihkan.
Infinity seperti **bank dengan buku besar super**: Anda masuk (Lock), di dalamnya Anda bisa menyimpan uang, menarik uang, menukar mata uang, bahkan jika proses di tengah memindahkan dana telah terjadi seribu kali, bank hanya mencatat. Ketika Anda keluar (Unlock), melakukan penyelesaian apakah saldo akun Anda seimbang.
▰▰▰▰▰▰
Catatan rinci
Selanjutnya adalah catatan interpretasi dokumen, juga merupakan pembelajaran yang lebih dalam (logika kode sebelumnya).
▰▰
Tingkat akuntansi & brankas Vault
Inti dari protokol ini adalah Vault, semua Pool ada dalam kontrak brankas ini, melalui metode 'catat terlebih dahulu, hitung kemudian', jika ini adalah transaksi multi-lompatan (Hop 1 -> Hop 2 -> Hop 3), tidak perlu memindahkan token secara aktual di tengah, hanya perlu menyelesaikan selisih bersih terakhir dengan transfer, yang sangat menghemat Gas.
Langkah-langkah proses perdagangan adalah: vault.lock() untuk mendapatkan kunci dari brankas, brankas akan mengembalikan kunci dengan kunciAcquired(……) (mirip dengan callback pinjaman kilat V2/V3), kemudian Anda dapat melakukan semua proses yang diperlukan seperti Swap, modifyLiquidity untuk mengubah operasi likuiditas di dalamnya, akhirnya dengan menggunakan salah satu dari empat metode take(), settle(), mint() atau burn() untuk mencocokkan saldo akhir dengan brankas.
BalanceDelta delta ini seperti tagihan, mencatat berapa banyak yang Anda hutang kepada Pool, atau berapa banyak yang Pool hutang kepada Anda, berdasarkan tanda positif atau negatif delta untuk menentukan aliran dana, delta.amount0() > 0 atau delta.amount0() < 0 untuk melakukan operasi Anda.
Biasanya lebih besar dari 0 berarti protokol berutang token kepada Anda, Anda dapat mengambil token dengan vault.take, atau dapat mint untuk menyimpan di brankas serta clear untuk menghapus selisih saldo (kembali ke nol) biasanya menggunakan fitur ini hanya saat biaya gas melebihi nilai erc20.
Jika kurang dari 0, itu berarti Anda berutang token kepada kolam, Anda perlu menyinkronkan status melalui vault.sync(…) dan kemudian memindahkan token ke brankas, dan akhirnya menggunakan settle() untuk menyelesaikan, membiarkan brankas atau akuntan membandingkan saldo token untuk penyelesaian.
Proses ini mirip dengan pergi ke supermarket Sam, Anda masuk dengan keanggotaan, memilih susu, daging sapi, dan daging sapi, Anda sudah mulai berutang kepada supermarket, akhirnya Anda pergi ke kasir untuk perhitungan, melakukan pembayaran transfer, dan akhirnya menyelesaikan pencairan.
Kode contoh resmi

▰▰
PoolManager manajemen kolam
Jika Vault adalah **brankas raksasa (bertanggung jawab atas pengelolaan dana)**, maka PoolManager adalah **pengolah pusat (bertanggung jawab atas logika bisnis)** yang mengelola aturan brankas dan menghitung semua hasil transaksi.
PoolManager juga merupakan kontrak singleton, Infinity kali ini memiliki dua logika AMM, CLPoolManager dan BinPoolManager.
- CLPoolManager adalah likuiditas terpusat sebelumnya V3, yang sudah sangat dikenal, dengan konsep-konsep seperti Tick, sqrtPriceX96 dan lainnya.
- BinPoolManager adalah jenis buku besar likuiditas yang sangat populer saat ini, sangat mirip dengan likuiditas terpusat V3, tetapi mendistribusikan likuiditas ke dalam Bins yang berbeda, setiap kategori diberikan harga tetap. Penyedia likuiditas dapat menyediakan likuiditas ke satu atau beberapa kategori.
Situs resmi memiliki gambar yang sangat baik untuk menjelaskan ini.

Meskipun ada dua logika berbeda, tetapi di Infinity, semua kolam akan dibungkus dalam satu kontrak PoolManager (alamat dua kontrak CL Bin), di mana:
PoolKey adalah struktur yang menggambarkan setiap kolam.
PoolId adalah nilai tipe bytes32, diturunkan dari PoolKey menjadi PoolId.
Initializing digunakan untuk menginisialisasi kolam.
Termasuk semua peristiwa likuiditas utama seperti swap, modifyLiquidities, dll., semua dilakukan dalam kontrak ini.
▰▰
Infinity Universal Router dan Permit2
Situs resmi juga menjelaskan tentang Infinity Universal Router dan Permit 2 yang efisien, yang dapat memberikan izin dengan cepat dan di v2, v3.
Infinity melakukan proses pertukaran, yang tertarik dapat mempelajari dokumen secara terpisah.
| Vault | 0x238a358808379702088667322f80aC48bAd5e6c4 |
| CLPoolManager | 0xa0FfB9c1CE1Fe56963B0321B32E7A0302114058b |
| BinPoolManager | 0xC697d2898e0D09264376196696c51D7aBbbAA4a9 |
| CLPositionManager | 0x55f4c8abA71A1e923edC303eb4fEfF14608cC226 |
| CLQuoter | 0xd0737C9762912dD34c3271197E362Aa736Df0926 |
| BinQuoter | 0xC631f4B0Fc2Dd68AD45f74B2942628db117dD359 |
| MixedQuoter | 0x2dCbF7B985c8C5C931818e4E107bAe8aaC8dAB7C |