Uniswap Sumber Kode Terungkap: 7 Teknik Pengembangan Kontrak untuk Membantu Pemula Defi To da moon

robot
Pembuatan abstrak sedang berlangsung

Berbagi Keterampilan Pengembangan Kontrak: Belajar dari Kode Sumber Uniswap

Baru-baru ini saat menulis tutorial pengembangan bursa terdesentralisasi, saya merujuk pada implementasi kode Uniswap V3 dan belajar banyak poin pengetahuan yang berharga. Sebagai pengembang yang pertama kali mencoba mengembangkan kontrak Defi, teknik-teknik ini akan sangat membantu bagi pemula yang ingin belajar pengembangan kontrak.

Berikut adalah beberapa tips yang saya pelajari, beberapa di antaranya bahkan bisa disebut sebagai trik yang cerdik.

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

Alamat penyebaran kontrak yang dapat diprediksi

Biasanya, alamat yang diperoleh dari penerapan kontrak terlihat acak, karena terkait dengan nonce, sehingga alamat kontrak sulit diprediksi. Namun, dalam beberapa skenario, kita dapat menyimpulkan alamat kontrak hanya dengan menggunakan pasangan perdagangan dan informasi terkait. Ini sangat berguna dalam menentukan izin transaksi atau mendapatkan alamat pool.

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

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

Menggunakan Fungsi Callback dengan Bijak

Dalam beberapa skenario, kontrak A memanggil metode kontrak B, dan B memanggil kembali A dalam metode yang dipanggil, cara ini sangat berguna.

Misalnya, dalam Uniswap, saat memanggil metode swap dari kontrak UniswapV3Pool untuk bertransaksi, ia akan memanggil kembali swapCallback, dengan mengirimkan Token yang dibutuhkan untuk transaksi yang telah dihitung. Pihak yang memanggil perlu mentransfer Token yang diperlukan untuk transaksi ke UniswapV3Pool dalam panggilan kembali, bukan memecah metode swap menjadi dua bagian untuk dipanggil oleh pihak yang memanggil. Ini memastikan keamanan metode swap, menjamin seluruh logika dieksekusi secara utuh, tanpa perlu pencatatan variabel yang rumit untuk memastikan keamanan.

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

Di kontrak Quoter Uniswap, metode swap dari UniswapV3Pool dieksekusi dengan membungkusnya menggunakan try catch. Ini dilakukan untuk mensimulasikan metode swap untuk memperkirakan token yang diperlukan untuk transaksi. Karena pada saat perkiraan tidak ada pertukaran token yang sebenarnya, maka akan terjadi kesalahan. Uniswap menangani kesalahan khusus yang dilemparkan dalam fungsi callback transaksi, dan kemudian menangkap kesalahan tersebut untuk mengurai informasi yang diperlukan dari pesan kesalahan.

Metode ini terlihat seperti jalan pintas, tetapi sangat praktis. Tidak perlu mengubah metode swap untuk memperkirakan permintaan perdagangan, logikanya lebih sederhana.

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

Menggunakan bilangan besar untuk menyelesaikan masalah presisi

Dalam kode Uniswap terdapat banyak logika perhitungan, seperti menghitung Token yang ditukar berdasarkan harga dan likuiditas saat ini. Untuk menghindari kehilangan presisi saat melakukan operasi pembagian, proses perhitungan sering menggunakan operasi "<< FixedPoint96.RESOLUTION", yaitu menggeser ke kiri 96 bit, setara dengan mengalikan dengan 2^96. Setelah digeser ke kiri, operasi pembagian dilakukan, menjaga presisi dalam kondisi transaksi normal tanpa overflow.

Menghitung Pendapatan dengan Metode Share

Di Uniswap, perlu untuk mencatat pendapatan biaya dari penyedia likuiditas LP( ). Jelas tidak mungkin untuk mencatat biaya untuk setiap LP di setiap transaksi, karena ini akan menghabiskan banyak Gas.

Solusi Uniswap adalah mencatat feeGrowthInside0LastX128 dan feeGrowthInside1LastX128 dalam struktur Position, yang menunjukkan biaya yang seharusnya diterima setiap likuiditas saat biaya ditarik terakhir kali. Cukup catat total biaya dan biaya yang harus dibagikan kepada setiap likuiditas, biaya yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki saat LP menarik. Ini mirip dengan memiliki saham perusahaan, saat menarik keuntungan, Anda hanya perlu mengetahui penghasilan per saham perusahaan yang telah terjadi dan penghasilan saat penarikan terakhir.

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

Informasi yang tidak diperlukan tidak perlu diambil dari rantai

Penyimpanan di blockchain relatif mahal, dan tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Banyak antarmuka yang dipanggil oleh situs web depan Uniswap adalah antarmuka Web2 tradisional.

Daftar kolam perdagangan, informasi kolam perdagangan, dan sebagainya dapat disimpan di basis data biasa, beberapa mungkin perlu disinkronkan secara berkala dari rantai, tetapi 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.

Pembagian kontrak yang rasional, memanfaatkan kontrak standar yang ada

Sebuah proyek dapat mencakup beberapa kontrak yang benar-benar diterapkan. Bahkan jika hanya ada satu kontrak yang diterapkan, kode tersebut dapat dibagi menjadi beberapa kontrak untuk pemeliharaan melalui cara pewarisan.

Misalnya, kontrak NonfungiblePositionManager Uniswap mewarisi beberapa kontrak. Ketika melihat implementasi kontrak ERC721Permit, ditemukan bahwa ia secara langsung menggunakan kontrak @openzeppelin/contracts/token/ERC721/ERC721.sol. Dengan cara ini, posisi dapat dikelola dengan mudah melalui cara NFT, dan standar kontrak yang ada dapat dimanfaatkan untuk meningkatkan efisiensi pengembangan.

Ringkasan

Praktik adalah metode belajar yang terbaik. Mencoba untuk mengimplementasikan versi sederhana dari bursa terdesentralisasi sendiri dapat membantu memahami kode implementasi Uniswap dengan lebih mendalam dan mempelajari lebih banyak poin pengetahuan dari proyek nyata.

Web3 Pemula Seri: 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
  • 6
  • Bagikan
Komentar
0/400
PoolJumpervip
· 1jam yang lalu
Kontrak pro tolong
Lihat AsliBalas0
IntrovertMetaversevip
· 07-06 09:37
Kembali lagi dengan kontrak berjangka.
Lihat AsliBalas0
SerumSurfervip
· 07-06 09:37
Sumber kode v3 ini semuanya cukup keren.
Lihat AsliBalas0
FlyingLeekvip
· 07-06 09:36
Tampaknya bagus, berharap akan dipermainkan.
Lihat AsliBalas0
LiquidityWhisperervip
· 07-06 09:31
Akhirnya saya bisa memahami kode uniV3
Lihat AsliBalas0
GateUser-75ee51e7vip
· 07-06 09:10
Kode ini cukup menarik ya
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)