Analisis Kode Uniswap V3: 7 Tips Pengembangan Kontrak yang Berguna

Tips Kecil Pengembangan Kontrak yang Dipelajari dari Kode Uniswap

Belakangan ini, saat menulis tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak poin berharga. Sebagai seorang pengembang yang sebelumnya hanya mengembangkan kontrak NFT sederhana, percobaan pengembangan kontrak Defi kali ini memberikan banyak pengalaman baru. Saya yakin trik-trik kecil ini akan sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.

Selanjutnya, mari kita lihat beberapa tips pengembangan yang berguna ini, beberapa di antaranya bahkan dapat dianggap sebagai trik yang luar biasa.

Seri Pemula Web3: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Alamat penyebaran kontrak yang dapat diprediksi

Biasanya, alamat yang diperoleh dari penyebaran kontrak tampak acak karena terkait dengan nonce, sehingga alamat kontrak sulit diprediksi. Namun, dalam beberapa kasus, kita perlu menyimpulkan alamat kontrak melalui pasangan perdagangan dan informasi terkait, seperti menentukan izin transaksi atau mendapatkan alamat kolam, dll.

Uniswap menggunakan metode CREATE2 dengan menambahkan parameter salt untuk membuat kontrak, sehingga alamat kontrak yang dibuat dapat diprediksi. Logika pembuatan alamat adalah: alamat baru = hash("0xFF", alamat pembuat, salt, initcode).

Seri Pemula Web3: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Memanfaatkan Fungsi Callback

Dalam Solidity, kontrak dapat saling memanggil. Dalam beberapa skenario, sangat berguna bagi A untuk memanggil metode B, dan B untuk memanggil kembali A dalam metode yang dipanggil.

Di Uniswap, saat memanggil metode swap dari kontrak UniswapV3Pool untuk melakukan perdagangan, ia akan memanggil kembali swapCallback, yang akan menerima Token yang dihitung diperlukan untuk transaksi ini. Pihak yang memanggil perlu mentransfer Token yang diperlukan untuk transaksi ke UniswapV3Pool dalam callback, bukan memisahkan metode swap menjadi dua bagian yang harus dipanggil oleh pihak pemanggil. Ini memastikan keamanan metode swap, menjamin bahwa seluruh logika dieksekusi secara utuh, tanpa perlu mencatat variabel yang rumit untuk memastikan keamanan.

Menggunakan pengecualian untuk menyampaikan informasi, menggunakan try catch untuk melakukan estimasi transaksi

Dalam beberapa kontrak Uniswap, metode swap dari UniswapV3Pool dibungkus dengan try catch untuk dieksekusi. Ini bertujuan untuk mensimulasikan metode swap untuk memperkirakan Token yang diperlukan untuk transaksi. Karena tidak ada pertukaran Token yang sebenarnya terjadi saat perkiraan, maka akan terjadi kesalahan. Uniswap melemparkan kesalahan khusus dalam fungsi callback transaksi dan kemudian menangkap kesalahan tersebut, menguraikan informasi yang diperlukan dari pesan kesalahan.

Metode ini tampaknya sedikit licik, tetapi sangat praktis. Tidak perlu memodifikasi metode swap untuk memperkirakan permintaan perdagangan, logikanya juga lebih sederhana.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Menggunakan angka besar untuk mengatasi masalah presisi

Kode Uniswap memiliki banyak logika perhitungan, seperti menghitung token yang ditukar berdasarkan harga dan likuiditas saat ini. Untuk menghindari kehilangan presisi yang disebabkan oleh operasi pembagian, seringkali digunakan operasi << FixedPoint96.RESOLUTION dalam proses perhitungan, yaitu menggeser ke kiri 96 bit, setara dengan mengalikan 2^96. Setelah digeser ke kiri, operasi pembagian dilakukan, yang memastikan presisi di bawah kondisi transaksi normal tanpa overflow.

Meskipun secara teori masih akan ada kehilangan presisi, tetapi biasanya hanya kehilangan unit terkecil, yang dapat diterima.

Menghitung Pendapatan dengan Cara Share

Di Uniswap, perlu mencatat pendapatan biaya dari LP (penyedia likuiditas). Jelas tidak mungkin untuk mencatat biaya masing-masing LP pada 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 likuiditas saat menarik biaya terakhir kali untuk setiap posisi.

Singkatnya, Anda hanya perlu 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 memiliki saham perusahaan, ketika menarik hasil saham, Anda hanya perlu mengetahui laba per saham perusahaan dalam sejarah dan hasil dari penarikan terakhir.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Tidak semua informasi perlu diperoleh dari rantai

Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diperoleh dari blockchain. Misalnya, banyak antarmuka yang dipanggil oleh situs web front-end Uniswap adalah antarmuka Web2 tradisional.

Daftar kolam perdagangan, informasi kolam perdagangan, dan sebagainya dapat disimpan di database biasa, beberapa mungkin perlu disinkronkan secara berkala dari rantai, tetapi tidak perlu memanggil secara real-time antarmuka RPC yang disediakan oleh layanan rantai atau node untuk mendapatkan data terkait.

Tentu saja, transaksi kunci harus dilakukan di blockchain.

Pelajari pemisahan kontrak, manfaatkan kontrak standar yang ada

Sebuah proyek mungkin terdiri dari beberapa kontrak yang sebenarnya diterapkan. Bahkan jika hanya ada satu kontrak yang diterapkan, kita dapat memecah kontrak menjadi beberapa kontrak dengan cara pewarisan untuk pemeliharaan.

Misalnya, beberapa kontrak di Uniswap mewarisi beberapa kontrak. Dalam implementasinya, kontrak @openzeppelin/contracts/token/ERC721/ERC721.sol digunakan secara langsung, sehingga memudahkan pengelolaan posisi melalui cara NFT dan dapat memanfaatkan kontrak standar yang sudah ada untuk meningkatkan efisiensi pengembangan.

Ringkasan

Mengembangkan secara langsung lebih dapat memperdalam pemahaman dibandingkan membaca artikel. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi akan memberi Anda pemahaman yang lebih dalam tentang implementasi kode Uniswap, serta mempelajari lebih banyak poin pengetahuan dalam proyek nyata.

Web3 Pemula Series: Tips Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap

Lihat Asli
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.
  • Hadiah
  • 4
  • Bagikan
Komentar
0/400
ForumLurkervip
· 07-10 04:37
Pro, bisakah Anda menjelaskan lebih rinci tentang teknik ini?
Lihat AsliBalas0
BearMarketGardenervip
· 07-09 08:14
Pemula, mulai dari membuat obat.
Lihat AsliBalas0
MissedAirdropAgainvip
· 07-09 08:10
Sudah mau buka buku lagi? Baru saja selesai menggulir nft masih belum cukup.
Lihat AsliBalas0
Web3Educatorvip
· 07-09 07:53
ok siswa, biar saya jelaskan ini dengan cepat...
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)