7 Tips Pengembangan Kontrak yang Berguna untuk Mendukung Proyek DEX

Ringkasan Tips Kecil untuk Pengembangan Kontrak

Baru-baru ini, saat mengembangkan bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan belajar banyak teknik pengembangan kontrak yang berguna. Sebagai seorang pemula yang baru mengenal pengembangan kontrak Defi, teknik-teknik ini memberikan saya banyak inspirasi, dan saya yakin ini juga akan membantu teman-teman lain yang ingin belajar pengembangan kontrak.

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

Alamat kontrak yang dapat diprediksi

Alamat yang dihasilkan dari penyebaran kontrak biasanya tampak acak dan sulit untuk diprediksi. Namun, dalam beberapa situasi, kita perlu menyimpulkan alamat kontrak melalui informasi perdagangan, seperti menentukan izin perdagangan atau mendapatkan alamat kolam.

Ini dapat dicapai dengan menggunakan metode CREATE2 untuk membuat kontrak. Cara spesifiknya adalah dengan menambahkan parameter salt saat membuat kontrak:

solidity pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());

Alamat kontrak yang dibuat seperti ini dapat diprediksi, logika pembuatannya adalah:

alamat baru = hash("0xFF", alamat pencipta, salt, initcode)

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

Menggunakan Fungsi Callback

Dalam beberapa skenario, saling memanggil antara kontrak sangat berguna. Misalnya A memanggil metode B, dan B dalam metode yang dipanggil tersebut memanggil kembali A.

Sebagai contoh perdagangan, ketika memanggil metode swap dari kontrak kolam, ia akan memanggil kembali swapCallback, yang memasukkan jumlah Token yang diperlukan yang telah dihitung. Panggil harus mentransfer Token ke dalam kontrak kolam dalam panggilan kembali, ini memastikan eksekusi lengkap dan keamanan metode swap tanpa perlu pencatatan variabel yang rumit.

Menggunakan Exception untuk Mengirim Informasi

Dalam memperkirakan perdagangan, kita perlu mensimulasikan metode swap tetapi tidak benar-benar menukar Token. Kita dapat melempar kesalahan khusus dalam fungsi callback perdagangan, lalu menangkap kesalahan tersebut dan menguraikan informasi yang diperlukan darinya.

Metode ini tampaknya cerdik, tetapi sangat praktis. Tidak perlu mengubah metode swap secara khusus untuk memperkirakan perdagangan, logikanya lebih sederhana.

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

Masalah Akurasi Penyelesaian Angka Besar

Dalam perhitungan harga dan likuiditas, untuk menghindari kehilangan presisi akibat operasi pembagian, dapat digunakan operasi pergeseran kiri ( yang setara dengan mengalikan dengan 2^96).

Contoh:

solidity numerator1 = FullMath.mulDiv(likuiditas << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96);

Dengan cara ini, akurasi dapat dijamin dalam transaksi normal tanpa meluap. Meskipun secara teori masih ada sedikit kehilangan akurasi, namun sudah dapat diterima.

Metode Berbagi untuk Menghitung Keuntungan

Untuk menghindari pencatatan biaya transaksi untuk semua LP setiap kali transaksi dilakukan, dapat menggunakan cara Share.

Cukup catat total biaya transaksi dan biaya yang harus dibagikan kepada setiap likuiditas. Saat LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki, mirip dengan dividen saham.

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

Penggunaan Data Off-Chain yang Rasional

Tidak semua informasi perlu dicatat di blockchain atau diambil dari blockchain. Misalnya, daftar kolam perdagangan, informasi dasar, dan sebagainya dapat disimpan di database biasa dan disinkronkan secara berkala.

Beberapa antarmuka RPC tingkat lanjut juga menyediakan cara pengambilan data yang dioptimalkan dengan cache, yang dapat meningkatkan kinerja dan efisiensi.

Pembagian dan Penggunaan Kembali Kontrak

Proyek besar dapat dibagi menjadi beberapa kontrak yang dapat diterapkan secara nyata, atau dibagi menjadi beberapa kontrak pemeliharaan melalui pewarisan.

Sementara itu, kontrak standar yang ada seperti ERC721 dapat digunakan kembali, meningkatkan efisiensi pengembangan. Misalnya:

solidity kontrak NonfungiblePositionManager adalah INonfungiblePositionManager, PeripheryImmutableState, PoolInitializer, ManajemenLikuiditas, PeripheryValidation, Multicall, ERC721Permit, PeripheryPayments, NFTDescriptor { // ... }

Belajar implementasi kode dari proyek-proyek yang baik dan mencoba untuk mengembangkan sendiri, dapat memberikan pemahaman yang lebih mendalam tentang bursa terdesentralisasi. Semoga tips kecil ini bermanfaat untuk pengembangan kontrak Anda!

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

UNI-6.77%
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
LayerZeroEnjoyervip
· 08-01 16:48
BTC sudah habis digoreng masih mempelajari defi
Lihat AsliBalas0
degenwhisperervip
· 08-01 00:26
Salin langsung kode uni
Lihat AsliBalas0
GateUser-40edb63bvip
· 07-29 21:17
Hook kontrak pintar ini sangat canggih ya
Lihat AsliBalas0
PoetryOnChainvip
· 07-29 21:03
Sebenarnya hanya menyalin uni saja...
Lihat AsliBalas0
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)