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.
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)
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.
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).
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.
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:
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!
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.
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.
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)
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.
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.
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!