Belakangan ini, saya sedang mempelajari proses pengembangan bursa terdesentralisasi, merujuk pada beberapa implementasi kode dari proyek-proyek terkenal, dan mempelajari banyak poin menarik. Sebagai pengembang yang mencoba pertama kali mengembangkan kontrak Defi, tips-tips kecil ini sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Mari kita lihat beberapa trik cerdik ini, beberapa bahkan dapat disebut sebagai teknik yang aneh dan rumit.
alamat penyebaran kontrak yang dapat diprediksi
Alamat yang biasanya dihasilkan oleh penyebaran kontrak tampak acak, karena terkait dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, seperti menentukan hak transaksi atau mendapatkan alamat kolam.
Salah satu metode adalah menggunakan CREATE2 untuk membuat kontrak, menambahkan parameter salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); Dengan cara ini, alamat kontrak yang dibuat dapat diprediksi, logika pembangunnya adalah alamat baru = hash("0xFF", alamat pembuat, salt, initcode).
Menggunakan Fungsi Callback dengan Cerdik
Kontrak dalam Solidity dapat saling memanggil. Salah satu pola adalah A memanggil metode B, dan B mengembalikan panggilan ke A dalam metode yang dipanggil, yang sangat berguna dalam beberapa skenario.
Misalnya, saat memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan transaksi, itu akan memanggil kembali swapCallback, dengan memasukkan Token yang dihitung diperlukan untuk transaksi ini. Pihak yang memanggil perlu mentransfer Token yang dibutuhkan untuk transaksi ke UniswapV3Pool dalam callback, dan bukan membagi metode swap menjadi dua bagian. Ini memastikan keamanan dan eksekusi lengkap dari metode swap, tanpa perlu pencatatan variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try catch untuk melakukan estimasi transaksi
Dalam beberapa kontrak, estimasi transaksi dilakukan dengan melempar kesalahan khusus dalam fungsi callback transaksi, lalu menangkap kesalahan tersebut dan mengurai informasi yang diperlukan dari pesan kesalahan. Metode ini tampaknya merupakan jalan pintas, tetapi sangat praktis, tanpa perlu mengubah metode swap untuk estimasi kebutuhan transaksi, logikanya lebih sederhana.
Masalah ketepatan solusi angka besar
Dalam skenario yang melibatkan banyak perhitungan, seperti menghitung token yang ditukar berdasarkan harga dan likuiditas saat ini, perlu menghindari kehilangan presisi yang disebabkan oleh operasi pembagian. Salah satu cara adalah dengan menggunakan operasi pergeseran kiri, seperti << FixedPoint96.RESOLUTION, yang setara dengan mengalikan 2^96. Setelah pergeseran kiri, lakukan operasi pembagian, yang memastikan presisi selama transaksi normal tidak terjadi overflow.
Cara berbagi untuk menghitung keuntungan
Untuk skenario yang memerlukan pencatatan LP( penyedia likuiditas ) pendapatan biaya transaksi, tidak mungkin untuk mencatat biaya untuk setiap LP pada setiap transaksi, karena ini akan menghabiskan banyak Gas.
Salah satu solusi adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan untuk setiap likuiditas. Ketika LP menarik biaya, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki. Ini mirip dengan mekanisme pemegang saham yang menarik dividen.
keseimbangan informasi on-chain dan off-chain
Tidak semua informasi perlu diambil dari blockchain. Penyimpanan di blockchain relatif mahal, banyak informasi dapat disimpan di basis data tradisional, seperti daftar kolam transaksi, informasi kolam transaksi, dan lain-lain. Data ini dapat disinkronkan secara berkala dari blockchain, tanpa perlu memanggil antarmuka RPC layanan blockchain atau node secara real-time.
Beberapa penyedia RPC blockchain menawarkan antarmuka tingkat lanjut yang memungkinkan akses data tertentu dengan lebih cepat dan lebih ekonomis. Antarmuka ini biasanya memanfaatkan cache untuk meningkatkan kinerja dan efisiensi.
Pemisahan Kontrak dan Pemanfaatan Kontrak Standar
Sebuah proyek dapat mencakup beberapa kontrak yang benar-benar dideploy. Meskipun hanya ada satu kontrak yang benar-benar dideploy, kode juga dapat dipecah menjadi beberapa kontrak untuk pemeliharaan melalui cara pewarisan.
Selain itu, memanfaatkan kontrak standar yang sudah ada, seperti ERC721, dapat meningkatkan efisiensi pengembangan kontrak. Ini tidak hanya memudahkan pengelolaan, tetapi juga dapat memanfaatkan standar yang sudah matang untuk meningkatkan kecepatan dan keamanan pengembangan.
Ringkasan
Pengembangan praktis adalah cara yang paling efektif untuk belajar tentang pengembangan kontrak. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi akan membantu Anda memahami lebih dalam tentang penerapan kode proyek terkenal, dan juga akan memberikan Anda lebih banyak pengetahuan tentang proyek nyata. Praktik langsung, saya percaya ini pasti akan membantu Anda.
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.
18 Suka
Hadiah
18
6
Posting ulang
Bagikan
Komentar
0/400
ServantOfSatoshi
· 08-12 16:04
Teknik jitu, ini kan hanya menyebutkan tindakan yang mencolok.
Lihat AsliBalas0
mev_me_maybe
· 08-11 22:32
Apa rahasia besar yang ditemukan oleh pemula? Hanya hal-hal yang sudah sering dibicarakan.
Lihat AsliBalas0
CommunityLurker
· 08-11 16:39
Pemula adalah ya, disarankan untuk berlatih hello world terlebih dahulu.
Lihat AsliBalas0
Blockwatcher9000
· 08-10 12:50
Bicara dengan baik, itu adalah keterampilan, sebenarnya semua adalah berbagai macam trik.
Lihat AsliBalas0
OnChainDetective
· 08-10 12:46
Telah lama mempelajari penerapan create2. Metode ini sepertinya digunakan untuk menanam ranjau.. yang mengerti pasti mengerti.
Lihat AsliBalas0
ContractExplorer
· 08-10 12:42
Menemukan celah baru adalah yang paling mengasyikkan, berlomba dengan celah.
7 tips praktis untuk membantu Anda menguasai pengembangan smart contract
Tips cerdas dalam pengembangan kontrak
Belakangan ini, saya sedang mempelajari proses pengembangan bursa terdesentralisasi, merujuk pada beberapa implementasi kode dari proyek-proyek terkenal, dan mempelajari banyak poin menarik. Sebagai pengembang yang mencoba pertama kali mengembangkan kontrak Defi, tips-tips kecil ini sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.
Mari kita lihat beberapa trik cerdik ini, beberapa bahkan dapat disebut sebagai teknik yang aneh dan rumit.
alamat penyebaran kontrak yang dapat diprediksi
Alamat yang biasanya dihasilkan oleh penyebaran kontrak tampak acak, karena terkait dengan nonce. Namun, dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi terkait transaksi, seperti menentukan hak transaksi atau mendapatkan alamat kolam.
Salah satu metode adalah menggunakan CREATE2 untuk membuat kontrak, menambahkan parameter salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); Dengan cara ini, alamat kontrak yang dibuat dapat diprediksi, logika pembangunnya adalah alamat baru = hash("0xFF", alamat pembuat, salt, initcode).
Menggunakan Fungsi Callback dengan Cerdik
Kontrak dalam Solidity dapat saling memanggil. Salah satu pola adalah A memanggil metode B, dan B mengembalikan panggilan ke A dalam metode yang dipanggil, yang sangat berguna dalam beberapa skenario.
Misalnya, saat memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan transaksi, itu akan memanggil kembali swapCallback, dengan memasukkan Token yang dihitung diperlukan untuk transaksi ini. Pihak yang memanggil perlu mentransfer Token yang dibutuhkan untuk transaksi ke UniswapV3Pool dalam callback, dan bukan membagi metode swap menjadi dua bagian. Ini memastikan keamanan dan eksekusi lengkap dari metode swap, tanpa perlu pencatatan variabel yang rumit.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try catch untuk melakukan estimasi transaksi
Dalam beberapa kontrak, estimasi transaksi dilakukan dengan melempar kesalahan khusus dalam fungsi callback transaksi, lalu menangkap kesalahan tersebut dan mengurai informasi yang diperlukan dari pesan kesalahan. Metode ini tampaknya merupakan jalan pintas, tetapi sangat praktis, tanpa perlu mengubah metode swap untuk estimasi kebutuhan transaksi, logikanya lebih sederhana.
Masalah ketepatan solusi angka besar
Dalam skenario yang melibatkan banyak perhitungan, seperti menghitung token yang ditukar berdasarkan harga dan likuiditas saat ini, perlu menghindari kehilangan presisi yang disebabkan oleh operasi pembagian. Salah satu cara adalah dengan menggunakan operasi pergeseran kiri, seperti << FixedPoint96.RESOLUTION, yang setara dengan mengalikan 2^96. Setelah pergeseran kiri, lakukan operasi pembagian, yang memastikan presisi selama transaksi normal tidak terjadi overflow.
Cara berbagi untuk menghitung keuntungan
Untuk skenario yang memerlukan pencatatan LP( penyedia likuiditas ) pendapatan biaya transaksi, tidak mungkin untuk mencatat biaya untuk setiap LP pada setiap transaksi, karena ini akan menghabiskan banyak Gas.
Salah satu solusi adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan untuk setiap likuiditas. Ketika LP menarik biaya, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki. Ini mirip dengan mekanisme pemegang saham yang menarik dividen.
keseimbangan informasi on-chain dan off-chain
Tidak semua informasi perlu diambil dari blockchain. Penyimpanan di blockchain relatif mahal, banyak informasi dapat disimpan di basis data tradisional, seperti daftar kolam transaksi, informasi kolam transaksi, dan lain-lain. Data ini dapat disinkronkan secara berkala dari blockchain, tanpa perlu memanggil antarmuka RPC layanan blockchain atau node secara real-time.
Beberapa penyedia RPC blockchain menawarkan antarmuka tingkat lanjut yang memungkinkan akses data tertentu dengan lebih cepat dan lebih ekonomis. Antarmuka ini biasanya memanfaatkan cache untuk meningkatkan kinerja dan efisiensi.
Pemisahan Kontrak dan Pemanfaatan Kontrak Standar
Sebuah proyek dapat mencakup beberapa kontrak yang benar-benar dideploy. Meskipun hanya ada satu kontrak yang benar-benar dideploy, kode juga dapat dipecah menjadi beberapa kontrak untuk pemeliharaan melalui cara pewarisan.
Selain itu, memanfaatkan kontrak standar yang sudah ada, seperti ERC721, dapat meningkatkan efisiensi pengembangan kontrak. Ini tidak hanya memudahkan pengelolaan, tetapi juga dapat memanfaatkan standar yang sudah matang untuk meningkatkan kecepatan dan keamanan pengembangan.
Ringkasan
Pengembangan praktis adalah cara yang paling efektif untuk belajar tentang pengembangan kontrak. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi akan membantu Anda memahami lebih dalam tentang penerapan kode proyek terkenal, dan juga akan memberikan Anda lebih banyak pengetahuan tentang proyek nyata. Praktik langsung, saya percaya ini pasti akan membantu Anda.