Tips Kecil untuk Pengembangan Kontrak: Pengalaman Berharga yang Dipelajari dari Kode Uniswap
Baru-baru ini, saat mengembangkan tutorial untuk bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan mempelajari banyak poin menarik. Sebagai seorang pemula yang sebelumnya hanya mengembangkan kontrak NFT sederhana, percobaan pertama saya dalam pengembangan kontrak Defi, keterampilan ini seharusnya sangat membantu bagi pengembang yang ingin memulai.
Mari kita lihat beberapa trik kecil yang berguna ini, beberapa di antaranya bahkan bisa disebut sebagai keahlian yang luar biasa.
Alamat penyebaran kontrak yang dapat diprediksi
Alamat kontrak yang biasanya diterapkan terlihat acak, karena berkaitan dengan nonce. Namun, dalam beberapa situasi, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, yang sangat berguna dalam menentukan izin transaksi atau mendapatkan alamat pool.
Anda dapat menggunakan metode CREATE2 untuk membuat kontrak dengan menambahkan parameter salt, sehingga alamat yang dihasilkan dapat diprediksi. Logika pembuatan alamat adalah: alamat baru = hash("0xFF", alamat pencipta, salt, initcode).
Menggunakan Fungsi Callback dengan Cerdas
Dalam Solidity, kontrak dapat saling memanggil. Terkadang metode A memanggil B, dan B mengembalikan panggilan ke A dalam metode yang dipanggil, ini berguna dalam beberapa skenario.
Misalnya, saat melakukan transaksi, metode swap dari kontrak pool akan memanggil swapCallback, dengan jumlah Token yang sebenarnya dibutuhkan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi dua langkah panggilan. Ini memastikan eksekusi lengkap dan keamanan metode swap.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk melakukan estimasi transaksi
Dalam memperkirakan transaksi, kita perlu mensimulasikan swap tetapi tidak benar-benar menukar Token. Dapat melempar kesalahan khusus dalam callback, kemudian menangkap dan mengurai data yang diperlukan dari informasi kesalahan. Dengan cara ini, tidak perlu mengubah metode swap untuk kebutuhan estimasi, logika menjadi lebih sederhana.
Mengatasi Masalah Presisi dengan Bilangan Besar
Dalam perhitungan yang kompleks, untuk menghindari kehilangan presisi dalam pembagian, Anda dapat terlebih dahulu menggeser ke kiri 96 bit ( yang setara dengan mengalikan 2^96), kemudian setelah perhitungan, geser ke kanan. Dengan cara ini, presisi dapat dijamin tanpa melampaui batas. Kehilangan presisi pada unit terkecil biasanya dapat diterima.
Menghitung Pendapatan dengan Metode Share
Untuk perhitungan hasil LP, tidak perlu mencatat setiap transaksi. Dapat mencatat total biaya transaksi dan setiap bagian yang harus diterima oleh likuiditas, dan saat LP menarik, dihitung berdasarkan likuiditas yang dimiliki. Mirip dengan dividen saham, hanya perlu mengetahui riwayat penghasilan per saham dan waktu penarikan terakhir.
Penyimpanan Informasi Di Luar Rantai
Penyimpanan di blockchain relatif mahal, tidak semua informasi perlu disimpan di blockchain. Misalnya, daftar pool transaksi dan informasi lainnya dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Beberapa antarmuka RPC tingkat lanjut juga menyediakan cara pengambilan data yang lebih cepat dan murah.
Pembagian kontrak yang wajar, memanfaatkan standar yang ada
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu yang dikerahkan, itu dapat dipecah menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan. Selain itu, standar kontrak yang ada seperti ERC721 dapat digunakan untuk meningkatkan efisiensi pengembangan.
Ringkasan
Membuat versi sederhana DEX secara langsung, dapat memahami implementasi kode dengan lebih mendalam, dan mempelajari lebih banyak poin pengetahuan praktis dalam proyek nyata. Disarankan kepada teman-teman yang tertarik untuk mencoba mengikuti tutorial terkait langkah demi langkah, saya yakin akan ada banyak manfaat.
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.
Analisis Sumber Uniswap: 7 Tips Pengembangan Kontrak untuk Membantu Pemula DEX
Tips Kecil untuk Pengembangan Kontrak: Pengalaman Berharga yang Dipelajari dari Kode Uniswap
Baru-baru ini, saat mengembangkan tutorial untuk bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan mempelajari banyak poin menarik. Sebagai seorang pemula yang sebelumnya hanya mengembangkan kontrak NFT sederhana, percobaan pertama saya dalam pengembangan kontrak Defi, keterampilan ini seharusnya sangat membantu bagi pengembang yang ingin memulai.
Mari kita lihat beberapa trik kecil yang berguna ini, beberapa di antaranya bahkan bisa disebut sebagai keahlian yang luar biasa.
Alamat penyebaran kontrak yang dapat diprediksi
Alamat kontrak yang biasanya diterapkan terlihat acak, karena berkaitan dengan nonce. Namun, dalam beberapa situasi, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, yang sangat berguna dalam menentukan izin transaksi atau mendapatkan alamat pool.
Anda dapat menggunakan metode CREATE2 untuk membuat kontrak dengan menambahkan parameter salt, sehingga alamat yang dihasilkan dapat diprediksi. Logika pembuatan alamat adalah: alamat baru = hash("0xFF", alamat pencipta, salt, initcode).
Menggunakan Fungsi Callback dengan Cerdas
Dalam Solidity, kontrak dapat saling memanggil. Terkadang metode A memanggil B, dan B mengembalikan panggilan ke A dalam metode yang dipanggil, ini berguna dalam beberapa skenario.
Misalnya, saat melakukan transaksi, metode swap dari kontrak pool akan memanggil swapCallback, dengan jumlah Token yang sebenarnya dibutuhkan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi dua langkah panggilan. Ini memastikan eksekusi lengkap dan keamanan metode swap.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk melakukan estimasi transaksi
Dalam memperkirakan transaksi, kita perlu mensimulasikan swap tetapi tidak benar-benar menukar Token. Dapat melempar kesalahan khusus dalam callback, kemudian menangkap dan mengurai data yang diperlukan dari informasi kesalahan. Dengan cara ini, tidak perlu mengubah metode swap untuk kebutuhan estimasi, logika menjadi lebih sederhana.
Mengatasi Masalah Presisi dengan Bilangan Besar
Dalam perhitungan yang kompleks, untuk menghindari kehilangan presisi dalam pembagian, Anda dapat terlebih dahulu menggeser ke kiri 96 bit ( yang setara dengan mengalikan 2^96), kemudian setelah perhitungan, geser ke kanan. Dengan cara ini, presisi dapat dijamin tanpa melampaui batas. Kehilangan presisi pada unit terkecil biasanya dapat diterima.
Menghitung Pendapatan dengan Metode Share
Untuk perhitungan hasil LP, tidak perlu mencatat setiap transaksi. Dapat mencatat total biaya transaksi dan setiap bagian yang harus diterima oleh likuiditas, dan saat LP menarik, dihitung berdasarkan likuiditas yang dimiliki. Mirip dengan dividen saham, hanya perlu mengetahui riwayat penghasilan per saham dan waktu penarikan terakhir.
Penyimpanan Informasi Di Luar Rantai
Penyimpanan di blockchain relatif mahal, tidak semua informasi perlu disimpan di blockchain. Misalnya, daftar pool transaksi dan informasi lainnya dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Beberapa antarmuka RPC tingkat lanjut juga menyediakan cara pengambilan data yang lebih cepat dan murah.
Pembagian kontrak yang wajar, memanfaatkan standar yang ada
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu yang dikerahkan, itu dapat dipecah menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan. Selain itu, standar kontrak yang ada seperti ERC721 dapat digunakan untuk meningkatkan efisiensi pengembangan.
Ringkasan
Membuat versi sederhana DEX secara langsung, dapat memahami implementasi kode dengan lebih mendalam, dan mempelajari lebih banyak poin pengetahuan praktis dalam proyek nyata. Disarankan kepada teman-teman yang tertarik untuk mencoba mengikuti tutorial terkait langkah demi langkah, saya yakin akan ada banyak manfaat.