Belakangan ini, dalam proses pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak teknik pengembangan kontrak yang berguna. Sebagai seorang pengembang yang pernah mengembangkan kontrak NFT sederhana, percobaan kali ini dalam pengembangan kontrak Defi sangat bermanfaat bagi saya. Teknik-teknik ini seharusnya sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Alamat Kontrak yang Dapat Diprediksi
Biasanya, saat menyebarkan kontrak, akan menghasilkan alamat yang tampaknya acak, karena terkait dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi yang terkait dengan transaksi, seperti untuk menentukan izin transaksi atau mendapatkan alamat pool.
Salah satu metode praktis adalah menggunakan CREATE2 untuk membuat kontrak. Dengan menambahkan parameter salt, alamat kontrak yang dibuat dapat diprediksi. Logika pembuatan alamat baru adalah: hash("0xFF", alamat pembuat, salt, initcode). Cara ini memungkinkan kita untuk mengetahui alamatnya sebelum membuat kontrak.
Memanfaatkan Fungsi Callback
Kontrak di Solidity dapat saling memanggil. Dalam beberapa skenario, A memanggil metode B, dan B memanggil kembali A dalam metode yang dipanggil, pola ini sangat berguna.
Misalnya saat berdagang, kontrak kolam akan memanggil swapCallback, yang mengirimkan jumlah Token yang sebenarnya dibutuhkan untuk transaksi ini. Panggilan perlu mentransfer Token ke kontrak kolam dalam callback. Cara ini memastikan keamanan dan integritas metode swap, tanpa perlu mencatat variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk memperkirakan transaksi
Dalam memperkirakan perdagangan, kita perlu mensimulasikan metode swap tetapi tidak benar-benar menukar Token. Salah satu cara cerdik adalah dengan melemparkan kesalahan khusus dalam callback perdagangan, lalu menangkap kesalahan ini dan mengekstrak informasi yang diperlukan darinya. Metode ini menghindari kebutuhan untuk memodifikasi metode swap khusus untuk memperkirakan perdagangan, menjadikan logika lebih sederhana.
Masalah Presisi yang Diselesaikan oleh 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, dapat menjamin presisi dalam trading normal tanpa overflow. Meskipun secara teoritis masih akan ada kehilangan presisi yang sangat kecil, namun sudah dapat diterima.
Menghitung Keuntungan dengan Metode Share
Untuk perhitungan pendapatan biaya transaksi LP, tidak mungkin mencatat setiap LP untuk setiap transaksi, karena ini akan menghabiskan banyak Gas. Salah satu cara yang baik adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan per unit likuiditas. Ketika LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki, mirip dengan prinsip dividen saham.
Penggabungan Data On-chain dan Off-chain
Tidak semua informasi perlu dicatat di blockchain atau diambil dari blockchain. Seperti daftar kolam perdagangan, informasi kolam, dll. dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Dengan cara ini, kinerja dan efisiensi dapat ditingkatkan, serta biaya dapat dikurangi. Tentu saja, transaksi kunci masih perlu dilakukan di blockchain.
Pemisahan Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar diterapkan. Meskipun hanya menerapkan satu kontrak, kode juga dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.
Pada saat yang sama, memanfaatkan kontrak standar yang sudah ada ( seperti ERC721) dapat meningkatkan efisiensi pengembangan. Misalnya, menggunakan ERC721 untuk mengelola posisi, baik nyaman dan dapat menggunakan kembali kode yang sudah matang.
Ringkasan
Pengembangan praktis adalah cara terbaik untuk belajar. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat memberi Anda pemahaman yang lebih dalam tentang implementasi kode Uniswap dan mempelajari lebih banyak poin pengetahuan dalam proyek nyata. Semoga pengalaman berbagi ini bermanfaat bagi Anda.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
12 Suka
Hadiah
12
3
Bagikan
Komentar
0/400
gas_fee_trauma
· 11jam yang lalu
Kontrak ini sulit, bro.
Lihat AsliBalas0
SchrodingerAirdrop
· 11jam yang lalu
Renaissance saya terlahir kembali di perdagangan yang tidak biasa
Pengembangan Kontrak Lanjutan: 7 Tips Berguna Mendukung Proyek Defi
Tips dan Pengalaman dalam Pengembangan Kontrak
Belakangan ini, dalam proses pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak teknik pengembangan kontrak yang berguna. Sebagai seorang pengembang yang pernah mengembangkan kontrak NFT sederhana, percobaan kali ini dalam pengembangan kontrak Defi sangat bermanfaat bagi saya. Teknik-teknik ini seharusnya sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Alamat Kontrak yang Dapat Diprediksi
Biasanya, saat menyebarkan kontrak, akan menghasilkan alamat yang tampaknya acak, karena terkait dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi yang terkait dengan transaksi, seperti untuk menentukan izin transaksi atau mendapatkan alamat pool.
Salah satu metode praktis adalah menggunakan CREATE2 untuk membuat kontrak. Dengan menambahkan parameter salt, alamat kontrak yang dibuat dapat diprediksi. Logika pembuatan alamat baru adalah: hash("0xFF", alamat pembuat, salt, initcode). Cara ini memungkinkan kita untuk mengetahui alamatnya sebelum membuat kontrak.
Memanfaatkan Fungsi Callback
Kontrak di Solidity dapat saling memanggil. Dalam beberapa skenario, A memanggil metode B, dan B memanggil kembali A dalam metode yang dipanggil, pola ini sangat berguna.
Misalnya saat berdagang, kontrak kolam akan memanggil swapCallback, yang mengirimkan jumlah Token yang sebenarnya dibutuhkan untuk transaksi ini. Panggilan perlu mentransfer Token ke kontrak kolam dalam callback. Cara ini memastikan keamanan dan integritas metode swap, tanpa perlu mencatat variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk memperkirakan transaksi
Dalam memperkirakan perdagangan, kita perlu mensimulasikan metode swap tetapi tidak benar-benar menukar Token. Salah satu cara cerdik adalah dengan melemparkan kesalahan khusus dalam callback perdagangan, lalu menangkap kesalahan ini dan mengekstrak informasi yang diperlukan darinya. Metode ini menghindari kebutuhan untuk memodifikasi metode swap khusus untuk memperkirakan perdagangan, menjadikan logika lebih sederhana.
Masalah Presisi yang Diselesaikan oleh 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, dapat menjamin presisi dalam trading normal tanpa overflow. Meskipun secara teoritis masih akan ada kehilangan presisi yang sangat kecil, namun sudah dapat diterima.
Menghitung Keuntungan dengan Metode Share
Untuk perhitungan pendapatan biaya transaksi LP, tidak mungkin mencatat setiap LP untuk setiap transaksi, karena ini akan menghabiskan banyak Gas. Salah satu cara yang baik adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan per unit likuiditas. Ketika LP menarik, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki, mirip dengan prinsip dividen saham.
Penggabungan Data On-chain dan Off-chain
Tidak semua informasi perlu dicatat di blockchain atau diambil dari blockchain. Seperti daftar kolam perdagangan, informasi kolam, dll. dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain. Dengan cara ini, kinerja dan efisiensi dapat ditingkatkan, serta biaya dapat dikurangi. Tentu saja, transaksi kunci masih perlu dilakukan di blockchain.
Pemisahan Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar diterapkan. Meskipun hanya menerapkan satu kontrak, kode juga dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.
Pada saat yang sama, memanfaatkan kontrak standar yang sudah ada ( seperti ERC721) dapat meningkatkan efisiensi pengembangan. Misalnya, menggunakan ERC721 untuk mengelola posisi, baik nyaman dan dapat menggunakan kembali kode yang sudah matang.
Ringkasan
Pengembangan praktis adalah cara terbaik untuk belajar. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat memberi Anda pemahaman yang lebih dalam tentang implementasi kode Uniswap dan mempelajari lebih banyak poin pengetahuan dalam proyek nyata. Semoga pengalaman berbagi ini bermanfaat bagi Anda.