Tips Pengembangan Smart Contract yang Dipelajari dari Kode Uniswap
Baru-baru ini saat menulis tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak teknik menarik dalam pengembangan smart contract. Sebagai pengembang yang mencoba mengembangkan kontrak DeFi untuk pertama kalinya, teknik-teknik ini akan sangat membantu pemula yang ingin belajar pengembangan kontrak.
Alamat kontrak yang dapat diprediksi
Biasanya alamat yang diperoleh dari penyebaran kontrak terlihat acak, karena berkaitan dengan nonce. Namun dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi transaksi yang setara, misalnya untuk menentukan hak akses transaksi atau mendapatkan alamat kolam.
Uniswap menggunakan metode CREATE2 untuk membuat smart contract, menambahkan parameter salt agar alamat dapat diprediksi. Logika pembuatan alamat baru adalah: hash("0xFF", alamat pembuat, salt, initcode). Metode ini membuat alamat contract dapat dihitung sebelumnya.
Memanfaatkan Fungsi Callback dengan Baik
Kontrak dalam Solidity dapat saling memanggil. Dalam beberapa skenario, metode A memanggil B, dan B dalam metode yang dipanggil memanggil kembali A, pola ini sangat praktis.
Misalnya, saat melakukan transaksi dengan metode swap Uniswap, akan memanggil swapCallback, yang meneruskan jumlah Token yang sebenarnya diperlukan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi dua langkah panggilan. Ini memastikan eksekusi lengkap metode swap tanpa perlu mencatat variabel yang rumit untuk menjamin keamanan.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk memperkirakan transaksi
Dalam kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dibungkus dengan try-catch. Ini dilakukan untuk mensimulasikan swap guna memperkirakan jumlah Token yang dibutuhkan, tetapi saat perkiraan tidak ada pertukaran Token yang sebenarnya, sehingga akan terjadi kesalahan.
Uniswap melemparkan kesalahan khusus dalam callback perdagangan, kemudian menangkap kesalahan tersebut dan menganalisis informasi yang diperlukan darinya. Metode ini menghindari perluasan metode swap untuk memperkirakan permintaan, membuat logika lebih sederhana.
Operasi Bilangan Besar Mengatasi Masalah Presisi
Uniswap melibatkan banyak perhitungan, seperti menghitung jumlah Token yang ditukar berdasarkan harga dan likuiditas. Untuk menghindari kehilangan presisi dalam perhitungan pembagian, proses perhitungan sering menggunakan << FixedPoint96.RESOLUTION, yaitu menggeser ke kiri 96 bit, yang setara dengan mengalikan dengan 2^96.
Geser ke kiri dan kemudian lakukan pembagian, dapat memastikan akurasi di bawah prasyarat tidak ada overflow dalam transaksi normal. Meskipun secara teori masih ada sedikit kehilangan akurasi, namun sudah dapat diterima.
Cara Berbagi Menghitung Keuntungan
Uniswap perlu mencatat pendapatan biaya untuk penyedia likuiditas LP(. Jelas tidak mungkin mencatat biaya untuk setiap LP setiap kali transaksi, karena itu akan menghabiskan banyak Gas.
Solusinya adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan untuk setiap unit likuiditas. Biaya yang dapat ditarik LP dihitung berdasarkan likuiditas yang dimiliki, mirip dengan dividen saham.
![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Membedakan informasi on-chain dan off-chain
Penyimpanan di blockchain relatif mahal, tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Banyak antarmuka yang dipanggil oleh frontend Uniswap adalah antarmuka Web2 tradisional.
Daftar kolam perdagangan, informasi, dll dapat disimpan di database biasa, secara berkala disinkronkan dari blockchain. Tidak perlu memanggil antarmuka RPC secara real-time untuk mendapatkan data terkait. Tentu saja, transaksi kunci tetap dilakukan di blockchain.
Pembagian Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek dapat mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu kontrak yang dikerahkan, kode dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.
Seperti kontrak NonfungiblePositionManager Uniswap yang mewarisi beberapa kontrak. Di mana ERC721Permit langsung menggunakan kontrak ERC721 OpenZeppelin, yang memudahkan pengelolaan posisi melalui NFT, sekaligus meningkatkan efisiensi pengembangan.
Ringkasan
Mengembangkan sendiri jauh lebih efektif daripada hanya membaca artikel. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat membantu memahami dengan lebih mendalam implementasi kode Uniswap dan mempelajari poin-poin penting dalam proyek nyata.
![Web3 Pemula Series: Tips kecil pengembangan kontrak yang saya pelajari dari kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(
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.
21 Suka
Hadiah
21
7
Bagikan
Komentar
0/400
PoolJumper
· 07-28 02:11
Zero infrastruktur melakukan beberapa
Lihat AsliBalas0
OldLeekConfession
· 07-27 04:18
Kamu bisa membuatku mengerti, itu sudah hebat...
Lihat AsliBalas0
OnchainGossiper
· 07-27 03:51
Disarankan untuk berlatih secara praktis~
Lihat AsliBalas0
BagHolderTillRetire
· 07-25 17:02
Akhirnya menemukan jalan keluar untuk mengatasi situasi saya terjebak.
Lihat AsliBalas0
PanicSeller69
· 07-25 17:00
V3 masih ada sesuatu yang menarik! Ayo!
Lihat AsliBalas0
degenonymous
· 07-25 16:58
Kabar baik untuk para coder
Lihat AsliBalas0
AirdropDreamBreaker
· 07-25 16:56
Pengembangan tidak sebaik mencuri kode secara langsung
Analisis 7 Teknik Pengembangan Kontrak Uniswap untuk Meningkatkan Efisiensi Proyek Keuangan Desentralisasi
Tips Pengembangan Smart Contract yang Dipelajari dari Kode Uniswap
Baru-baru ini saat menulis tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak teknik menarik dalam pengembangan smart contract. Sebagai pengembang yang mencoba mengembangkan kontrak DeFi untuk pertama kalinya, teknik-teknik ini akan sangat membantu pemula yang ingin belajar pengembangan kontrak.
Alamat kontrak yang dapat diprediksi
Biasanya alamat yang diperoleh dari penyebaran kontrak terlihat acak, karena berkaitan dengan nonce. Namun dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi transaksi yang setara, misalnya untuk menentukan hak akses transaksi atau mendapatkan alamat kolam.
Uniswap menggunakan metode CREATE2 untuk membuat smart contract, menambahkan parameter salt agar alamat dapat diprediksi. Logika pembuatan alamat baru adalah: hash("0xFF", alamat pembuat, salt, initcode). Metode ini membuat alamat contract dapat dihitung sebelumnya.
Memanfaatkan Fungsi Callback dengan Baik
Kontrak dalam Solidity dapat saling memanggil. Dalam beberapa skenario, metode A memanggil B, dan B dalam metode yang dipanggil memanggil kembali A, pola ini sangat praktis.
Misalnya, saat melakukan transaksi dengan metode swap Uniswap, akan memanggil swapCallback, yang meneruskan jumlah Token yang sebenarnya diperlukan. Panggilan harus mentransfer Token dalam callback, dan bukan membagi swap menjadi dua langkah panggilan. Ini memastikan eksekusi lengkap metode swap tanpa perlu mencatat variabel yang rumit untuk menjamin keamanan.
Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try-catch untuk memperkirakan transaksi
Dalam kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dibungkus dengan try-catch. Ini dilakukan untuk mensimulasikan swap guna memperkirakan jumlah Token yang dibutuhkan, tetapi saat perkiraan tidak ada pertukaran Token yang sebenarnya, sehingga akan terjadi kesalahan.
Uniswap melemparkan kesalahan khusus dalam callback perdagangan, kemudian menangkap kesalahan tersebut dan menganalisis informasi yang diperlukan darinya. Metode ini menghindari perluasan metode swap untuk memperkirakan permintaan, membuat logika lebih sederhana.
Operasi Bilangan Besar Mengatasi Masalah Presisi
Uniswap melibatkan banyak perhitungan, seperti menghitung jumlah Token yang ditukar berdasarkan harga dan likuiditas. Untuk menghindari kehilangan presisi dalam perhitungan pembagian, proses perhitungan sering menggunakan << FixedPoint96.RESOLUTION, yaitu menggeser ke kiri 96 bit, yang setara dengan mengalikan dengan 2^96.
Geser ke kiri dan kemudian lakukan pembagian, dapat memastikan akurasi di bawah prasyarat tidak ada overflow dalam transaksi normal. Meskipun secara teori masih ada sedikit kehilangan akurasi, namun sudah dapat diterima.
Cara Berbagi Menghitung Keuntungan
Uniswap perlu mencatat pendapatan biaya untuk penyedia likuiditas LP(. Jelas tidak mungkin mencatat biaya untuk setiap LP setiap kali transaksi, karena itu akan menghabiskan banyak Gas.
Solusinya adalah mencatat total biaya transaksi dan biaya yang harus dialokasikan untuk setiap unit likuiditas. Biaya yang dapat ditarik LP dihitung berdasarkan likuiditas yang dimiliki, mirip dengan dividen saham.
![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Membedakan informasi on-chain dan off-chain
Penyimpanan di blockchain relatif mahal, tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Banyak antarmuka yang dipanggil oleh frontend Uniswap adalah antarmuka Web2 tradisional.
Daftar kolam perdagangan, informasi, dll dapat disimpan di database biasa, secara berkala disinkronkan dari blockchain. Tidak perlu memanggil antarmuka RPC secara real-time untuk mendapatkan data terkait. Tentu saja, transaksi kunci tetap dilakukan di blockchain.
Pembagian Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek dapat mencakup beberapa kontrak yang benar-benar dikerahkan. Bahkan jika hanya satu kontrak yang dikerahkan, kode dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.
Seperti kontrak NonfungiblePositionManager Uniswap yang mewarisi beberapa kontrak. Di mana ERC721Permit langsung menggunakan kontrak ERC721 OpenZeppelin, yang memudahkan pengelolaan posisi melalui NFT, sekaligus meningkatkan efisiensi pengembangan.
Ringkasan
Mengembangkan sendiri jauh lebih efektif daripada hanya membaca artikel. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi dapat membantu memahami dengan lebih mendalam implementasi kode Uniswap dan mempelajari poin-poin penting dalam proyek nyata.
![Web3 Pemula Series: Tips kecil pengembangan kontrak yang saya pelajari dari kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(