Baru-baru ini, saat terlibat dalam proyek pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan mempelajari banyak keterampilan praktis dalam pengembangan kontrak. Sebagai seorang pengembang yang sebelumnya terutama mengembangkan kontrak NFT, ini adalah kali pertama saya mencoba pengembangan kontrak Defi. Di sini saya ingin berbagi beberapa tips kecil yang mungkin berguna bagi pengembang pemula.
Alamat Kontrak yang Dapat Diprediksi
Alamat kontrak yang biasanya dihasilkan dari penerapan tampak acak karena berkaitan dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi transaksi, yang sangat berguna dalam menentukan hak transaksi atau mendapatkan alamat pool.
Salah satu cara adalah menggunakan CREATE2 untuk membuat kontrak, dengan menambahkan parameter salt sehingga alamat yang dihasilkan dapat diprediksi. Rumus perhitungan alamat baru adalah:
Alamat baru = hash("0xFF", alamat pencipta, salt, initcode)
Menggunakan Fungsi Callback dengan Baik
Kontrak di Solidity dapat saling memanggil. Dalam beberapa skenario, metode A memanggil B, dan B memanggil kembali A dalam metode yang dipanggil, pola ini sangat berguna.
Misalnya, saat melakukan perdagangan di DEX tertentu, metode swap dari kontrak pool akan memanggil swapCallback dan mengirimkan jumlah Token yang sebenarnya dibutuhkan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi beberapa langkah panggilan. Ini memastikan integritas dan keamanan metode swap.
Menggunakan pengecualian untuk menyampaikan informasi
Dalam kode suatu DEX, gunakan try-catch untuk membungkus metode swap kontrak pool untuk mensimulasikan perdagangan dan memperkirakan Token yang dibutuhkan. Karena tidak ada pertukaran Token yang sebenarnya selama perkiraan, akan menyebabkan kesalahan. Dengan melempar kesalahan khusus dalam callback, kemudian menangkap dan menganalisis informasi kesalahan, kita dapat memperoleh hasil perkiraan.
Teknik ini menghindari modifikasi metode swap khusus untuk memperkirakan permintaan, menjaga logika tetap sederhana.
Masalah Akurasi Pengolahan Bilangan Besar
Dalam perhitungan harga dan likuiditas, untuk menghindari kehilangan presisi pada operasi pembagian, dapat dilakukan pergeseran kiri 96 bit ( yang setara dengan mengalikan dengan 2^96) sebelum melakukan perhitungan. Dengan cara ini, presisi dapat terjamin selama transaksi normal tidak mengalami overflow.
Perhitungan Pendapatan Mode Share
Saat mencatat pendapatan biaya LP, tidak mungkin untuk mencatat setiap LP dalam setiap transaksi, karena itu akan menghabiskan banyak Gas. Salah satu solusi adalah mencatat total biaya dan biaya yang harus dialokasikan per unit likuiditas. Saat LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki, mirip dengan dividen saham.
Penggabungan Data On-Chain dan Off-Chain
Tidak semua informasi perlu diunggah ke blockchain atau diambil dari blockchain. Misalnya, daftar kolam transaksi, informasi kolam, dll. bisa disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Ini dapat meningkatkan kinerja dan efisiensi. Tentu saja, transaksi kunci masih perlu dilakukan di blockchain.
Pembagian dan Penggunaan Kembali Kontrak
Proyek besar mungkin mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu kontrak yang dikerahkan, kontrak tersebut dapat dipecah menjadi beberapa kontrak untuk memudahkan pemeliharaan dengan menggunakan pewarisan. Selain itu, mempelajari cara memanfaatkan kontrak standar yang ada seperti ERC721 dapat meningkatkan efisiensi pengembangan.
Praktik adalah cara terbaik untuk belajar. Dengan mengimplementasikan versi DEX yang sederhana, kita dapat memahami lebih dalam tentang kode implementasi beberapa proyek kompleks dan mempelajari lebih banyak poin pengetahuan dari proyek nyata. Semoga tips kecil ini bermanfaat bagi pemula yang ingin belajar pengembangan kontrak.
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.
Tujuh Teknik Penting untuk Pengembangan Kontrak DEX yang Harus Dimiliki Pemula
Berbagi Tips Kecil untuk Pengembangan Kontrak
Baru-baru ini, saat terlibat dalam proyek pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan mempelajari banyak keterampilan praktis dalam pengembangan kontrak. Sebagai seorang pengembang yang sebelumnya terutama mengembangkan kontrak NFT, ini adalah kali pertama saya mencoba pengembangan kontrak Defi. Di sini saya ingin berbagi beberapa tips kecil yang mungkin berguna bagi pengembang pemula.
Alamat Kontrak yang Dapat Diprediksi
Alamat kontrak yang biasanya dihasilkan dari penerapan tampak acak karena berkaitan dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi transaksi, yang sangat berguna dalam menentukan hak transaksi atau mendapatkan alamat pool.
Salah satu cara adalah menggunakan CREATE2 untuk membuat kontrak, dengan menambahkan parameter salt sehingga alamat yang dihasilkan dapat diprediksi. Rumus perhitungan alamat baru adalah:
Alamat baru = hash("0xFF", alamat pencipta, salt, initcode)
Menggunakan Fungsi Callback dengan Baik
Kontrak di Solidity dapat saling memanggil. Dalam beberapa skenario, metode A memanggil B, dan B memanggil kembali A dalam metode yang dipanggil, pola ini sangat berguna.
Misalnya, saat melakukan perdagangan di DEX tertentu, metode swap dari kontrak pool akan memanggil swapCallback dan mengirimkan jumlah Token yang sebenarnya dibutuhkan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi beberapa langkah panggilan. Ini memastikan integritas dan keamanan metode swap.
Menggunakan pengecualian untuk menyampaikan informasi
Dalam kode suatu DEX, gunakan try-catch untuk membungkus metode swap kontrak pool untuk mensimulasikan perdagangan dan memperkirakan Token yang dibutuhkan. Karena tidak ada pertukaran Token yang sebenarnya selama perkiraan, akan menyebabkan kesalahan. Dengan melempar kesalahan khusus dalam callback, kemudian menangkap dan menganalisis informasi kesalahan, kita dapat memperoleh hasil perkiraan.
Teknik ini menghindari modifikasi metode swap khusus untuk memperkirakan permintaan, menjaga logika tetap sederhana.
Masalah Akurasi Pengolahan Bilangan Besar
Dalam perhitungan harga dan likuiditas, untuk menghindari kehilangan presisi pada operasi pembagian, dapat dilakukan pergeseran kiri 96 bit ( yang setara dengan mengalikan dengan 2^96) sebelum melakukan perhitungan. Dengan cara ini, presisi dapat terjamin selama transaksi normal tidak mengalami overflow.
Perhitungan Pendapatan Mode Share
Saat mencatat pendapatan biaya LP, tidak mungkin untuk mencatat setiap LP dalam setiap transaksi, karena itu akan menghabiskan banyak Gas. Salah satu solusi adalah mencatat total biaya dan biaya yang harus dialokasikan per unit likuiditas. Saat LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki, mirip dengan dividen saham.
Penggabungan Data On-Chain dan Off-Chain
Tidak semua informasi perlu diunggah ke blockchain atau diambil dari blockchain. Misalnya, daftar kolam transaksi, informasi kolam, dll. bisa disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Ini dapat meningkatkan kinerja dan efisiensi. Tentu saja, transaksi kunci masih perlu dilakukan di blockchain.
Pembagian dan Penggunaan Kembali Kontrak
Proyek besar mungkin mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu kontrak yang dikerahkan, kontrak tersebut dapat dipecah menjadi beberapa kontrak untuk memudahkan pemeliharaan dengan menggunakan pewarisan. Selain itu, mempelajari cara memanfaatkan kontrak standar yang ada seperti ERC721 dapat meningkatkan efisiensi pengembangan.
Praktik adalah cara terbaik untuk belajar. Dengan mengimplementasikan versi DEX yang sederhana, kita dapat memahami lebih dalam tentang kode implementasi beberapa proyek kompleks dan mempelajari lebih banyak poin pengetahuan dari proyek nyata. Semoga tips kecil ini bermanfaat bagi pemula yang ingin belajar pengembangan kontrak.