Tips Kecil untuk Pengembangan Kontrak: Pengalaman yang Dipelajari dari Kode Uniswap
Baru-baru ini, saat berpartisipasi dalam proyek tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan belajar banyak poin menarik. Sebagai seorang pemula yang sebelumnya hanya mengembangkan kontrak NFT sederhana, percobaan kali ini dalam mengembangkan kontrak DeFi sangat bermanfaat bagi saya. Berikut saya akan berbagi beberapa tips praktis yang saya percaya akan sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Alamat Kontrak yang Dapat Diprediksi
Alamat yang diperoleh dari penyebaran kontrak biasanya terlihat acak karena terkait dengan nonce. Namun dalam beberapa kasus, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, seperti menentukan hak akses transaksi atau mendapatkan alamat pool.
Salah satu metode implementasi adalah dengan menggunakan CREATE2 untuk membuat kontrak. Dengan menambahkan parameter salt, alamat kontrak yang dihasilkan menjadi dapat diprediksi. Logika untuk menghasilkan alamat baru adalah: hash("0xFF", alamat pencipta, salt, initcode).
Menggunakan Fungsi Callback dengan Baik
Dalam Solidity, kontrak dapat saling memanggil. Salah satu skenario umum adalah A memanggil metode B, dan B memanggil kembali A dalam metode yang dipanggil. Ini sangat berguna dalam beberapa kasus.
Misalnya, di suatu DEX, ketika Anda memanggil metode swap dari kontrak pool untuk melakukan transaksi, ia akan memanggil kembali swapCallback, dengan jumlah token yang sebenarnya diperlukan untuk transaksi ini yang telah dihitung. Panggilan perlu mentransfer token yang diperlukan ke dalam kontrak pool dalam callback, dan bukan membagi metode swap. Ini dapat memastikan keamanan metode swap dan eksekusi yang lengkap, tanpa perlu pencatatan variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk melakukan estimasi transaksi
Dalam beberapa kasus, kita perlu mensimulasikan metode swap untuk memperkirakan jumlah token yang diperlukan untuk transaksi, tetapi saat memperkirakan, token tidak akan benar-benar ditukar, sehingga akan terjadi kesalahan. Salah satu cara yang cerdik untuk menangani ini adalah dengan melempar kesalahan khusus dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan mengurai informasi yang dibutuhkan dari pesan kesalahan.
Metode ini tampaknya sedikit curang, tetapi sangat praktis. Ini menghindari perombakan metode swap untuk memperkirakan permintaan perdagangan, menjadikannya lebih sederhana secara logika.
Menggunakan Bilangan Besar untuk Mengatasi Masalah Presisi
Dalam skenario yang melibatkan perhitungan harga dan likuiditas, kita perlu menghindari kehilangan presisi yang disebabkan oleh operasi pembagian. Salah satu teknik umum adalah dengan menggeser ke kiri 96 bit (setara dengan mengalikan dengan 2^96) selama proses perhitungan, kemudian melakukan operasi pembagian. Dengan cara ini, kita dapat memastikan presisi tanpa mengalami overflow dalam transaksi normal.
Meskipun secara teori masih akan ada sedikit kehilangan akurasi, biasanya hanya kehilangan unit terkecil, yang dapat diterima.
Menghitung Pendapatan dengan Metode Share
Untuk skenario yang memerlukan pencatatan pendapatan biaya untuk penyedia likuiditas (LP), kita tidak dapat mencatat biaya untuk setiap LP pada setiap transaksi, karena ini akan menghabiskan banyak gas. Metode yang efisien adalah dengan mencatat total biaya dan biaya yang harus dialokasikan untuk setiap unit likuiditas.
Saat menarik biaya dari LP, Anda hanya perlu menghitung biaya yang dapat ditarik berdasarkan likuiditas yang dimiliki. Ini mirip dengan bagaimana pemegang saham menghitung pendapatan yang dapat ditarik saat ini berdasarkan laba per saham perusahaan yang historis dan pendapatan saat penarikan terakhir.
Memanfaatkan Data Off-Chain Secara Rasional
Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Misalnya, daftar kolam transaksi, informasi kolam, dll. dapat disimpan di database tradisional dan disinkronkan secara berkala dari blockchain.
Banyak penyedia RPC blockchain juga menawarkan antarmuka tingkat lanjut, yang memungkinkan akses data tertentu dengan lebih cepat dan ekonomis. Antarmuka ini biasanya memanfaatkan caching untuk meningkatkan kinerja dan efisiensi.
Pelajari Pemisahan Kontrak dan Penggunaan Kontrak Standar
Sebuah proyek mungkin terdiri dari beberapa kontrak yang sebenarnya diterapkan. Bahkan jika hanya satu kontrak yang diterapkan, kita juga dapat memecah kode menjadi beberapa kontrak melalui cara pewarisan untuk pemeliharaan.
Selain itu, memanfaatkan kontrak standar yang sudah ada (seperti ERC721) dapat meningkatkan efisiensi pengembangan. Misalnya, kontrak ERC721 dapat digunakan untuk mengelola posisi likuiditas, yang tidak hanya nyaman tetapi juga dapat meningkatkan efisiensi pengembangan.
Ringkasan
Praktik adalah metode belajar terbaik. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat membantu Anda memahami lebih dalam tentang implementasi kode DEX, serta mempelajari lebih banyak poin pengetahuan dari proyek nyata. Baik Anda tertarik pada pengembangan proyek Web3 atau DeFi, terlibat langsung akan menjadi pengalaman belajar yang berharga.
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.
16 Suka
Hadiah
16
5
Posting ulang
Bagikan
Komentar
0/400
StablecoinEnjoyer
· 08-09 08:07
Tidak heran DEX bisa bermain dengan baik, create2 sangat keren~
Lihat AsliBalas0
OnchainArchaeologist
· 08-09 07:19
Alamat prediksi bagian ini masih harus mengandalkan create2
Lihat AsliBalas0
Layer2Observer
· 08-09 07:17
Secara teknis, CREATE2 memang elegan, tetapi ada risiko keamanan.
7 Teknik Pengembangan Kontrak: Belajar Praktik Keuangan Desentralisasi dari Kode DEX
Tips Kecil untuk Pengembangan Kontrak: Pengalaman yang Dipelajari dari Kode Uniswap
Baru-baru ini, saat berpartisipasi dalam proyek tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal dan belajar banyak poin menarik. Sebagai seorang pemula yang sebelumnya hanya mengembangkan kontrak NFT sederhana, percobaan kali ini dalam mengembangkan kontrak DeFi sangat bermanfaat bagi saya. Berikut saya akan berbagi beberapa tips praktis yang saya percaya akan sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Alamat Kontrak yang Dapat Diprediksi
Alamat yang diperoleh dari penyebaran kontrak biasanya terlihat acak karena terkait dengan nonce. Namun dalam beberapa kasus, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, seperti menentukan hak akses transaksi atau mendapatkan alamat pool.
Salah satu metode implementasi adalah dengan menggunakan CREATE2 untuk membuat kontrak. Dengan menambahkan parameter salt, alamat kontrak yang dihasilkan menjadi dapat diprediksi. Logika untuk menghasilkan alamat baru adalah: hash("0xFF", alamat pencipta, salt, initcode).
Menggunakan Fungsi Callback dengan Baik
Dalam Solidity, kontrak dapat saling memanggil. Salah satu skenario umum adalah A memanggil metode B, dan B memanggil kembali A dalam metode yang dipanggil. Ini sangat berguna dalam beberapa kasus.
Misalnya, di suatu DEX, ketika Anda memanggil metode swap dari kontrak pool untuk melakukan transaksi, ia akan memanggil kembali swapCallback, dengan jumlah token yang sebenarnya diperlukan untuk transaksi ini yang telah dihitung. Panggilan perlu mentransfer token yang diperlukan ke dalam kontrak pool dalam callback, dan bukan membagi metode swap. Ini dapat memastikan keamanan metode swap dan eksekusi yang lengkap, tanpa perlu pencatatan variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk melakukan estimasi transaksi
Dalam beberapa kasus, kita perlu mensimulasikan metode swap untuk memperkirakan jumlah token yang diperlukan untuk transaksi, tetapi saat memperkirakan, token tidak akan benar-benar ditukar, sehingga akan terjadi kesalahan. Salah satu cara yang cerdik untuk menangani ini adalah dengan melempar kesalahan khusus dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan mengurai informasi yang dibutuhkan dari pesan kesalahan.
Metode ini tampaknya sedikit curang, tetapi sangat praktis. Ini menghindari perombakan metode swap untuk memperkirakan permintaan perdagangan, menjadikannya lebih sederhana secara logika.
Menggunakan Bilangan Besar untuk Mengatasi Masalah Presisi
Dalam skenario yang melibatkan perhitungan harga dan likuiditas, kita perlu menghindari kehilangan presisi yang disebabkan oleh operasi pembagian. Salah satu teknik umum adalah dengan menggeser ke kiri 96 bit (setara dengan mengalikan dengan 2^96) selama proses perhitungan, kemudian melakukan operasi pembagian. Dengan cara ini, kita dapat memastikan presisi tanpa mengalami overflow dalam transaksi normal.
Meskipun secara teori masih akan ada sedikit kehilangan akurasi, biasanya hanya kehilangan unit terkecil, yang dapat diterima.
Menghitung Pendapatan dengan Metode Share
Untuk skenario yang memerlukan pencatatan pendapatan biaya untuk penyedia likuiditas (LP), kita tidak dapat mencatat biaya untuk setiap LP pada setiap transaksi, karena ini akan menghabiskan banyak gas. Metode yang efisien adalah dengan mencatat total biaya dan biaya yang harus dialokasikan untuk setiap unit likuiditas.
Saat menarik biaya dari LP, Anda hanya perlu menghitung biaya yang dapat ditarik berdasarkan likuiditas yang dimiliki. Ini mirip dengan bagaimana pemegang saham menghitung pendapatan yang dapat ditarik saat ini berdasarkan laba per saham perusahaan yang historis dan pendapatan saat penarikan terakhir.
Memanfaatkan Data Off-Chain Secara Rasional
Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Misalnya, daftar kolam transaksi, informasi kolam, dll. dapat disimpan di database tradisional dan disinkronkan secara berkala dari blockchain.
Banyak penyedia RPC blockchain juga menawarkan antarmuka tingkat lanjut, yang memungkinkan akses data tertentu dengan lebih cepat dan ekonomis. Antarmuka ini biasanya memanfaatkan caching untuk meningkatkan kinerja dan efisiensi.
Pelajari Pemisahan Kontrak dan Penggunaan Kontrak Standar
Sebuah proyek mungkin terdiri dari beberapa kontrak yang sebenarnya diterapkan. Bahkan jika hanya satu kontrak yang diterapkan, kita juga dapat memecah kode menjadi beberapa kontrak melalui cara pewarisan untuk pemeliharaan.
Selain itu, memanfaatkan kontrak standar yang sudah ada (seperti ERC721) dapat meningkatkan efisiensi pengembangan. Misalnya, kontrak ERC721 dapat digunakan untuk mengelola posisi likuiditas, yang tidak hanya nyaman tetapi juga dapat meningkatkan efisiensi pengembangan.
Ringkasan
Praktik adalah metode belajar terbaik. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat membantu Anda memahami lebih dalam tentang implementasi kode DEX, serta mempelajari lebih banyak poin pengetahuan dari proyek nyata. Baik Anda tertarik pada pengembangan proyek Web3 atau DeFi, terlibat langsung akan menjadi pengalaman belajar yang berharga.
Berdasarkan kepribadianmu, keluarkan komentar:
Jangan berpura-pura deh, pengganda Uni tipis