7 Tip Pengembangan Kontrak Uniswap: Dari Alamat yang Dapat Diprediksi hingga Keseimbangan on-chain dan off-chain

robot
Pembuatan abstrak sedang berlangsung

Tips Kecil untuk Pengembangan Kontrak: Pengalaman yang Dipelajari dari Kode Uniswap

Baru-baru ini, saat menulis tutorial untuk bursa terdesentralisasi, saya merujuk pada implementasi Uniswap V3 dan belajar banyak poin menarik. Sebagai pemula yang baru mengenal pengembangan kontrak Defi, teknik-teknik ini sangat menginspirasi saya, dan saya yakin ini juga akan membantu teman-teman lain yang ingin belajar tentang pengembangan kontrak pintar.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Alamat kontrak yang dapat diprediksi

Alamat kontrak yang biasanya dikerahkan terlihat acak, karena terkait dengan nonce. Namun dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi pasangan perdagangan, seperti menentukan izin perdagangan atau mendapatkan alamat kolam.

Uniswap membuat kontrak dengan menggunakan metode CREATE2, menambahkan parameter salt. Alamat kontrak yang dihasilkan dapat diprediksi, mengikuti logika "alamat baru = hash('0xFF', alamat pencipta, salt, initcode)."

Menggunakan Fungsi Callback dengan Bijak

Dalam Solidity, kontrak dapat saling memanggil. Terkadang kontrak A memanggil metode kontrak B, dan B kemudian memanggil kembali metode A, yang sangat berguna dalam beberapa skenario.

Misalnya, dalam alur transaksi Uniswap, ketika memanggil metode swap dari kontrak UniswapV3Pool, ia akan memanggil kembali swapCallback, dan mengirimkan jumlah Token yang sebenarnya dibutuhkan. Pihak yang memanggil perlu mentransfer Token yang diperlukan dalam panggilan balik, ini memastikan integritas dan keamanan logika transaksi secara keseluruhan.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try catch untuk merealisasikan estimasi transaksi

Dalam kontrak Quoter Uniswap, gunakan try catch untuk membungkus eksekusi metode swap dari UniswapV3Pool. Ini dilakukan untuk mensimulasikan estimasi transaksi yang dibutuhkan Token, tetapi saat estimasi tidak akan benar-benar menukar Token, sehingga akan terjadi kesalahan.

Uniswap melakukan ini dengan melemparkan kesalahan khusus di dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan mengurai informasinya. Meskipun metode ini terlihat seperti jalan pintas, namun sangat praktis, tanpa perlu mengubah metode swap khusus untuk memperkirakan permintaan.

Masalah Presisi Pengolahan Angka Besar

Kode Uniswap melibatkan banyak perhitungan, seperti menghitung jumlah Token yang akan ditukar berdasarkan harga dan likuiditas saat ini. Untuk menghindari kehilangan presisi dalam operasi pembagian, proses perhitungan sering menggunakan "<< FixedPoint96.RESOLUTION" yang setara dengan mengalikan 2^96.

Metode ini dapat menjamin bahwa transaksi normal tidak meluber (biasanya dihitung dengan uint256), sambil juga menjaga akurasi. Meskipun secara teori masih mungkin ada kehilangan akurasi pada unit terkecil, namun hal itu sudah dapat diterima.

Web3 Pemula Seri: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Menghitung Pendapatan dengan Cara Share

Uniswap perlu mencatat pendapatan biaya dari penyedia likuiditas (LP). Untuk menghindari pencatatan biaya untuk setiap LP pada setiap transaksi (yang menghabiskan banyak Gas), Uniswap menggunakan metode cerdas.

Dalam struktur Position, feeGrowthInside0LastX128 dan feeGrowthInside1LastX128 didefinisikan untuk mencatat biaya pertumbuhan setiap posisi pada saat terakhir biaya diambil, yang seharusnya diterima per unit likuiditas. Dengan cara ini, hanya total biaya dan alokasi per unit likuiditas yang perlu dicatat, dan biaya yang dapat diambil oleh LP dihitung berdasarkan likuiditas yang dimiliki.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Keseimbangan dalam Mendapatkan Informasi di Dalam dan Di Luar Rantai

Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Seperti banyak antarmuka yang dipanggil oleh frontend Uniswap adalah antarmuka Web2 tradisional.

Daftar kolam perdagangan, informasi kolam perdagangan, dll. dapat disimpan di database biasa, disinkronkan secara berkala dari rantai. Tidak perlu memanggil antarmuka RPC layanan rantai atau node secara real-time untuk mendapatkan data terkait.

Beberapa penyedia RPC blockchain menawarkan antarmuka tingkat lanjut untuk mendapatkan data dengan lebih cepat dan murah. Antarmuka ini biasanya meningkatkan kinerja dan efisiensi melalui caching.

Pemisahan Kontrak dan Penggunaan Kontrak Standar

Sebuah proyek mungkin terdiri dari beberapa kontrak yang telah diterapkan secara nyata. Meskipun hanya menerapkan satu kontrak, kode dapat dipelihara dengan membagi menjadi beberapa kontrak melalui pewarisan.

Misalnya, kontrak NonfungiblePositionManager Uniswap mewarisi beberapa kontrak. Di mana kontrak ERC721Permit secara langsung menggunakan kontrak standar ERC721 dari OpenZeppelin, yang memudahkan pengelolaan posisi dalam bentuk NFT dan meningkatkan efisiensi pengembangan.

Kesimpulan

Praktik adalah metode pembelajaran terbaik. Dengan mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi, kita dapat memahami kode implementasi Uniswap dengan lebih mendalam, serta mempelajari lebih banyak poin pengetahuan dalam proyek nyata. Semoga pengalaman ini dapat membantu teman-teman yang bercita-cita untuk mengembangkan proyek Web3 dan Defi.

Web3 Pemula Seri: Tip Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

UNI-0.94%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 6
  • Bagikan
Komentar
0/400
StableNomadvip
· 15jam yang lalu
secara statistik, uniswap masih memiliki basis kode yang paling bersih...hanya bilang
Lihat AsliBalas0
StablecoinAnxietyvip
· 15jam yang lalu
Alamat dapat diprediksi, ini sangat penting!
Lihat AsliBalas0
PumpStrategistvip
· 15jam yang lalu
Wah, DEX juga memainkan trik Mesin Oracle, dan kemampuan untuk bermain dengan dana besar semakin meningkat.
Lihat AsliBalas0
ZkProofPuddingvip
· 15jam yang lalu
pro sangat menguasai kontraknya
Lihat AsliBalas0
ILCollectorvip
· 15jam yang lalu
Jangan meniru Uni Rug Pull peringkat pertama
Lihat AsliBalas0
FudVaccinatorvip
· 15jam yang lalu
Kepastian wawasan berharga telah menjadi milik.
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)