Hal-Hal yang Harus Diketahui Pengembang Web3: Pengalaman Berharga yang Didapat dari Kontrak Uniswap
Baru-baru ini, saat saya menulis tutorial pengembangan bursa terdesentralisasi, saya melakukan penelitian mendalam tentang implementasi kode Uniswap V3 dan mendapatkan banyak pengalaman. Sebagai seorang pemula yang baru mengenal pengembangan kontrak Defi, tips-tips ini jelas sangat berharga bagi saya. Saya yakin pengalaman ini juga akan sangat bermanfaat bagi teman-teman lain yang ingin memulai pengembangan kontrak pintar.
Trik Memprediksi Alamat Kontrak
Dalam keadaan normal, alamat yang diperoleh setelah menerapkan kontrak tampak acak dan sulit diprediksi. Namun, di Uniswap, kita dapat menyimpulkan alamat kontrak melalui pasangan perdagangan dan informasi terkait. Ini sangat berguna dalam menentukan hak perdagangan atau mendapatkan alamat kolam.
Uniswap menggunakan metode CREATE2 untuk membuat kontrak, dengan menambahkan parameter "salt" agar alamat yang dihasilkan dapat diprediksi. Logika pembuatan alamat yang spesifik adalah: alamat baru = hash("0xFF", alamat pencipta, salt, initcode).
Memanfaatkan Fungsi Callback
Dalam beberapa skenario, saling memanggil antara kontrak sangat berguna. Misalnya, metode A memanggil B, B dalam metode yang dipanggil memanggil kembali A.
Di Uniswap, ketika memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan transaksi, ia akan memanggil swapCallback, yang mengirimkan jumlah Token yang diperlukan yang telah dihitung. Panggilan harus mentransfer Token yang diperlukan ke UniswapV3Pool dalam callback. Desain ini memastikan keamanan dan integritas logika dari metode swap, tanpa perlu pencatatan variabel yang rumit.
Penyampaian Informasi Abnormal, implementasi try-catch untuk perkiraan transaksi
Dalam kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dibungkus dalam try-catch untuk mensimulasikan swap guna memperkirakan Token yang dibutuhkan untuk transaksi. Karena pada saat perkiraan tidak akan ada pertukaran Token yang sebenarnya, akan terjadi kesalahan. Uniswap melemparkan kesalahan khusus dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan mengurai informasi yang diperlukan darinya.
Metode ini tampaknya merupakan jalan pintas, tetapi sangat praktis. Tidak perlu mengubah metode swap khusus untuk memperkirakan kebutuhan perdagangan, logikanya jauh lebih sederhana.
Operasi Bilangan Besar Mengatasi Masalah Presisi
Dalam kode Uniswap, terdapat banyak logika perhitungan, seperti menghitung jumlah Token yang dipertukarkan berdasarkan harga saat ini dan likuiditas. Untuk menghindari kehilangan presisi akibat operasi pembagian, proses perhitungan sering menggunakan operasi "<< FixedPoint96.RESOLUTION", yaitu menggeser ke kiri 96 bit, setara dengan mengalikan 2^96. Dengan asumsi tidak ada overflow dalam transaksi normal, ( biasanya dihitung menggunakan uint256 ), metode ini dapat secara efektif menjamin presisi.
Perhitungan Keuntungan Mekanisme Share
Uniswap perlu mencatat pendapatan biaya dari penyedia likuiditas LP(. Jelas, tidak mungkin untuk mencatat biaya secara terpisah untuk setiap LP di setiap transaksi, karena ini akan menghabiskan banyak Gas.
Solusi Uniswap adalah mendefinisikan feeGrowthInside0LastX128 dan feeGrowthInside1LastX128 dalam struktur Position, yang mencatat biaya yang seharusnya diterima setiap unit likuiditas saat biaya ditarik terakhir kali dari setiap posisi.
Metode ini hanya perlu mencatat total biaya transaksi dan biaya yang harus dialokasikan per unit likuiditas. Saat LP menarik, biaya yang dapat ditarik dapat dihitung berdasarkan likuiditas yang dimiliki. Ini mirip dengan pemegang saham yang menghitung pendapatan yang dapat ditarik saat ini berdasarkan pendapatan per saham perusahaan yang telah ada dan pendapatan saat penarikan terakhir.
![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Pertimbangan untuk Mendapatkan Informasi di Blockchain
Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Misalnya, banyak antarmuka yang dipanggil oleh situs web frontend Uniswap adalah antarmuka Web2 tradisional.
Daftar kolam perdagangan, informasi kolam perdagangan, dan lainnya dapat disimpan di database biasa, beberapa mungkin perlu disinkronkan secara berkala dari rantai. Tidak perlu memanggil antarmuka RPC layanan rantai atau node secara real-time untuk mendapatkan data terkait.
Tentu saja, transaksi kunci harus dilakukan di atas rantai. Sekarang banyak penyedia RPC blockchain yang menawarkan antarmuka tingkat lanjut, yang memungkinkan untuk mendapatkan data tertentu dengan lebih cepat dan lebih ekonomis.
Pemisahan Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar diterapkan. Meskipun hanya ada satu kontrak yang diterapkan, kita juga dapat memecah kode menjadi beberapa kontrak untuk pemeliharaan melalui cara pewarisan.
Misalnya, kontrak NonfungiblePositionManager Uniswap mewarisi beberapa kontrak. Selain itu, kontrak ERC721Permit secara langsung menggunakan kontrak standar ERC721 dari OpenZeppelin. Ini tidak hanya memudahkan pengelolaan posisi melalui NFT, tetapi juga meningkatkan efisiensi pengembangan dengan memanfaatkan kontrak standar yang ada.
Kesimpulan
Praktik membawa pengetahuan sejati. Terlibat langsung dalam pengembangan versi sederhana dari bursa terdesentralisasi dapat memberi Anda pemahaman yang lebih mendalam tentang implementasi kode Uniswap, sekaligus mempelajari lebih banyak poin pengetahuan yang ada dalam proyek nyata. Jika Anda tertarik dengan pengembangan proyek Web3 dan DeFi, tidak ada salahnya merujuk ke kursus praktis terkait, untuk menyelesaikan bursa sederhana langkah demi langkah. Percayalah, ini akan sangat bermanfaat bagi pembelajaran Anda.
![Web3 Pemula Seri: 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.
6 Suka
Hadiah
6
4
Bagikan
Komentar
0/400
AirdropHunter9000
· 17jam yang lalu
Defi bukanlah permainan turun ke nol... yang paham pasti paham
Lihat AsliBalas0
TokenAlchemist
· 17jam yang lalu
lmao bayangkan tidak tahu tentang CREATE2 untuk alamat deterministik... ngmi tbh
Lihat AsliBalas0
RugpullAlertOfficer
· 17jam yang lalu
Ini jelas adalah tutorial pemula tanpa dasar.
Lihat AsliBalas0
AllTalkLongTrader
· 17jam yang lalu
Tidak melihat kode melihat alamat Apakah ini malas atau tinggi
7 Teknik Utama untuk Menganalisis Smart Contract Uniswap: Wajib Baca untuk Pengembang Web3
Hal-Hal yang Harus Diketahui Pengembang Web3: Pengalaman Berharga yang Didapat dari Kontrak Uniswap
Baru-baru ini, saat saya menulis tutorial pengembangan bursa terdesentralisasi, saya melakukan penelitian mendalam tentang implementasi kode Uniswap V3 dan mendapatkan banyak pengalaman. Sebagai seorang pemula yang baru mengenal pengembangan kontrak Defi, tips-tips ini jelas sangat berharga bagi saya. Saya yakin pengalaman ini juga akan sangat bermanfaat bagi teman-teman lain yang ingin memulai pengembangan kontrak pintar.
Trik Memprediksi Alamat Kontrak
Dalam keadaan normal, alamat yang diperoleh setelah menerapkan kontrak tampak acak dan sulit diprediksi. Namun, di Uniswap, kita dapat menyimpulkan alamat kontrak melalui pasangan perdagangan dan informasi terkait. Ini sangat berguna dalam menentukan hak perdagangan atau mendapatkan alamat kolam.
Uniswap menggunakan metode CREATE2 untuk membuat kontrak, dengan menambahkan parameter "salt" agar alamat yang dihasilkan dapat diprediksi. Logika pembuatan alamat yang spesifik adalah: alamat baru = hash("0xFF", alamat pencipta, salt, initcode).
Memanfaatkan Fungsi Callback
Dalam beberapa skenario, saling memanggil antara kontrak sangat berguna. Misalnya, metode A memanggil B, B dalam metode yang dipanggil memanggil kembali A.
Di Uniswap, ketika memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan transaksi, ia akan memanggil swapCallback, yang mengirimkan jumlah Token yang diperlukan yang telah dihitung. Panggilan harus mentransfer Token yang diperlukan ke UniswapV3Pool dalam callback. Desain ini memastikan keamanan dan integritas logika dari metode swap, tanpa perlu pencatatan variabel yang rumit.
Penyampaian Informasi Abnormal, implementasi try-catch untuk perkiraan transaksi
Dalam kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dibungkus dalam try-catch untuk mensimulasikan swap guna memperkirakan Token yang dibutuhkan untuk transaksi. Karena pada saat perkiraan tidak akan ada pertukaran Token yang sebenarnya, akan terjadi kesalahan. Uniswap melemparkan kesalahan khusus dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan mengurai informasi yang diperlukan darinya.
Metode ini tampaknya merupakan jalan pintas, tetapi sangat praktis. Tidak perlu mengubah metode swap khusus untuk memperkirakan kebutuhan perdagangan, logikanya jauh lebih sederhana.
Operasi Bilangan Besar Mengatasi Masalah Presisi
Dalam kode Uniswap, terdapat banyak logika perhitungan, seperti menghitung jumlah Token yang dipertukarkan berdasarkan harga saat ini dan likuiditas. Untuk menghindari kehilangan presisi akibat operasi pembagian, proses perhitungan sering menggunakan operasi "<< FixedPoint96.RESOLUTION", yaitu menggeser ke kiri 96 bit, setara dengan mengalikan 2^96. Dengan asumsi tidak ada overflow dalam transaksi normal, ( biasanya dihitung menggunakan uint256 ), metode ini dapat secara efektif menjamin presisi.
Perhitungan Keuntungan Mekanisme Share
Uniswap perlu mencatat pendapatan biaya dari penyedia likuiditas LP(. Jelas, tidak mungkin untuk mencatat biaya secara terpisah untuk setiap LP di setiap transaksi, karena ini akan menghabiskan banyak Gas.
Solusi Uniswap adalah mendefinisikan feeGrowthInside0LastX128 dan feeGrowthInside1LastX128 dalam struktur Position, yang mencatat biaya yang seharusnya diterima setiap unit likuiditas saat biaya ditarik terakhir kali dari setiap posisi.
Metode ini hanya perlu mencatat total biaya transaksi dan biaya yang harus dialokasikan per unit likuiditas. Saat LP menarik, biaya yang dapat ditarik dapat dihitung berdasarkan likuiditas yang dimiliki. Ini mirip dengan pemegang saham yang menghitung pendapatan yang dapat ditarik saat ini berdasarkan pendapatan per saham perusahaan yang telah ada dan pendapatan saat penarikan terakhir.
![Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Pertimbangan untuk Mendapatkan Informasi di Blockchain
Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Misalnya, banyak antarmuka yang dipanggil oleh situs web frontend Uniswap adalah antarmuka Web2 tradisional.
Daftar kolam perdagangan, informasi kolam perdagangan, dan lainnya dapat disimpan di database biasa, beberapa mungkin perlu disinkronkan secara berkala dari rantai. Tidak perlu memanggil antarmuka RPC layanan rantai atau node secara real-time untuk mendapatkan data terkait.
Tentu saja, transaksi kunci harus dilakukan di atas rantai. Sekarang banyak penyedia RPC blockchain yang menawarkan antarmuka tingkat lanjut, yang memungkinkan untuk mendapatkan data tertentu dengan lebih cepat dan lebih ekonomis.
Pemisahan Kontrak dan Penggunaan Kembali Kontrak Standar
Sebuah proyek mungkin mencakup beberapa kontrak yang benar-benar diterapkan. Meskipun hanya ada satu kontrak yang diterapkan, kita juga dapat memecah kode menjadi beberapa kontrak untuk pemeliharaan melalui cara pewarisan.
Misalnya, kontrak NonfungiblePositionManager Uniswap mewarisi beberapa kontrak. Selain itu, kontrak ERC721Permit secara langsung menggunakan kontrak standar ERC721 dari OpenZeppelin. Ini tidak hanya memudahkan pengelolaan posisi melalui NFT, tetapi juga meningkatkan efisiensi pengembangan dengan memanfaatkan kontrak standar yang ada.
Kesimpulan
Praktik membawa pengetahuan sejati. Terlibat langsung dalam pengembangan versi sederhana dari bursa terdesentralisasi dapat memberi Anda pemahaman yang lebih mendalam tentang implementasi kode Uniswap, sekaligus mempelajari lebih banyak poin pengetahuan yang ada dalam proyek nyata. Jika Anda tertarik dengan pengembangan proyek Web3 dan DeFi, tidak ada salahnya merujuk ke kursus praktis terkait, untuk menyelesaikan bursa sederhana langkah demi langkah. Percayalah, ini akan sangat bermanfaat bagi pembelajaran Anda.
![Web3 Pemula Seri: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(