Pengungkapan Kode Uniswap: 7 Teknik Pengembangan Kontrak untuk Membantu Pemula Defi

Teknik Pengembangan Kontrak yang Dipelajari dari Kode Uniswap

Baru-baru ini, saat menulis tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan mempelajari banyak poin penting yang berharga. Sebagai pengembang yang pertama kali mencoba mengembangkan kontrak Defi, keterampilan ini akan sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.

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

Alamat penyebaran kontrak yang dapat diprediksi

Alamat yang dihasilkan dari penyebaran kontrak biasanya tampak acak, karena berkaitan dengan nonce. Namun dalam beberapa kasus, kita perlu menyimpulkan alamat kontrak melalui pasangan perdagangan dan informasi terkait, seperti menentukan izin transaksi atau mendapatkan alamat kolam.

Uniswap menggunakan metode CREATE2 untuk membuat kontrak, dengan menambahkan parameter salt sehingga alamat yang dihasilkan dapat diprediksi. Logika perhitungan alamat baru adalah: hash("0xFF", alamat pencipta, salt, initcode).

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

Memanfaatkan Fungsi Callback

Kontrak di Solidity dapat saling memanggil. Dalam beberapa skenario, memanggil metode B dari A dan B memanggil kembali A dalam metode yang dipanggil sangat berguna.

Di Uniswap, saat memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan transaksi, itu akan memanggil kembali swapCallback, yang mengirimkan Token yang sebenarnya dibutuhkan untuk transaksi ini. Panggilan harus mentransfer Token yang diperlukan ke UniswapV3Pool dalam panggilan kembali, bukan membagi metode swap menjadi dua bagian. Ini memastikan keamanan dan eksekusi lengkap dari metode swap, tanpa perlu mencatat variabel yang rumit.

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

Dalam kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dibungkus dengan try catch saat dieksekusi. Ini bertujuan untuk mensimulasikan perkiraan token yang diperlukan untuk transaksi swap, tetapi pada saat perkiraan tidak akan terjadi pertukaran token yang sebenarnya, sehingga akan terjadi kesalahan.

Uniswap memanfaatkan dengan melempar kesalahan khusus dalam fungsi callback perdagangan, kemudian menangkap kesalahan ini untuk mengurai informasi yang diperlukan dari pesan kesalahan. Metode ini tampaknya merupakan jalan pintas, tetapi sangat praktis, tidak perlu mengubah metode swap untuk memperkirakan permintaan perdagangan, dan logikanya juga lebih sederhana.

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

Menggunakan Bilangan Besar untuk Mengatasi Masalah Presisi

Dalam kode Uniswap terdapat banyak logika perhitungan, seperti menghitung token yang ditukar berdasarkan harga saat ini dan likuiditas. Untuk menghindari kehilangan presisi dalam operasi pembagian, proses perhitungan sering menggunakan operasi "<< FixedPoint96.RESOLUTION", yaitu menggeser ke kiri 96 bit, yang setara dengan mengalikan dengan 2^96.

Melakukan operasi pembagian setelah pergeseran ke kiri dapat memastikan akurasi dalam transaksi normal tanpa overflow. Meskipun secara teori masih akan ada kehilangan akurasi unit terkecil, ini dapat diterima.

Menghitung Pendapatan dengan Cara Share

Uniswap perlu mencatat pendapatan biaya dari penyedia likuiditas LP(. Untuk menghindari konsumsi Gas yang besar dengan mencatat biaya untuk setiap penyedia likuiditas pada setiap transaksi, Uniswap menggunakan metode yang cerdas.

Struktur Position berisi feeGrowthInside0LastX128 dan feeGrowthInside1LastX128, yang mencatat biaya terakhir yang harus diterima oleh setiap likuiditas saat biaya ditarik dari setiap posisi. Cukup catat total biaya dan biaya yang harus dialokasikan untuk setiap likuiditas, saat LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki.

![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Strategi Pengambilan Informasi di Blockchain

Tidak semua informasi perlu diambil dari blockchain. Penyimpanan di blockchain relatif mahal, banyak informasi dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain.

Seperti daftar kolam perdagangan, informasi kolam perdagangan, dll., dapat disimpan dalam database biasa, tanpa perlu memanggil antarmuka RPC layanan rantai atau node secara real-time. Tentu saja, transaksi kunci tetap dilakukan di rantai.

Pembagian Kontrak dan Penggunaan Kontrak Standar

Sebuah proyek mungkin mencakup beberapa kontrak yang sebenarnya dikerahkan. Bahkan jika hanya ada satu kontrak yang sebenarnya dikerahkan, kode tersebut juga dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.

Misalnya, kontrak NonfungiblePositionManager dari Uniswap mewarisi beberapa kontrak. Dengan menggunakan kontrak ERC721 dari OpenZeppelin, ini memudahkan pengelolaan posisi melalui NFT dan meningkatkan efisiensi pengembangan.

Kesimpulan

Praktik adalah metode belajar terbaik. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat membantu memahami implementasi kode Uniswap dengan lebih mendalam dan mempelajari lebih banyak poin pengetahuan dalam proyek nyata. Jika tertarik dalam pengembangan proyek Web3 dan Defi, Anda bisa merujuk ke kursus praktis terkait untuk secara bertahap menyelesaikan versi sederhana dari bursa.

![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

UNI-2.38%
DEFI-3.22%
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
  • 5
  • Posting ulang
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • 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)