Analisis Kode Uniswap: 7 Tips Pengembangan Smart Contract

robot
Pembuatan abstrak sedang berlangsung

Tips Kecil untuk Pengembangan Kontrak: Pengalaman yang Dipelajari dari Kode Uniswap

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

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

Alamat penyebaran kontrak yang dapat diprediksi

Alamat yang dihasilkan dari penyebaran kontrak biasanya tampak acak dan sulit untuk diprediksi. Namun dalam beberapa kasus, kita perlu menginferensikan alamat kontrak melalui informasi terkait transaksi, seperti menentukan hak transaksi atau mendapatkan alamat kolam.

Uniswap menggunakan metode CREATE2 untuk membuat kontrak, menambahkan parameter salt agar alamat dapat diprediksi. Logika pembuatan alamat baru adalah: hash("0xFF", alamat pembuat, salt, initcode). Metode ini membuat alamat kontrak menjadi dapat diprediksi, sangat berguna.

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

Menggunakan Fungsi Callback dengan Cerdas

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

Transaksi swap Uniswap menggunakan mekanisme callback. Metode swap UniswapV3Pool akan memanggil swapCallback, dengan jumlah Token yang diperlukan sebenarnya. Pihak yang memanggil harus mentransfer Token dalam callback, memastikan bahwa metode swap dieksekusi dengan lengkap dan aman, tanpa perlu pencatatan variabel yang rumit.

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

Dalam kontrak Quoter Uniswap, metode swap UniswapV3Pool dibungkus dengan try catch. Ini dilakukan untuk mensimulasikan swap guna memperkirakan Token yang diperlukan untuk transaksi, tetapi pada saat perkiraan tidak akan terjadi pertukaran Token yang sebenarnya sehingga akan menghasilkan kesalahan.

Uniswap menangani dengan melempar kesalahan khusus dalam fungsi callback, kemudian menangkap kesalahan tersebut dan mengurai informasi yang diperlukan darinya. Metode ini terlihat seperti akal, tetapi sangat praktis, tanpa harus mengubah metode swap khusus untuk memperkirakan permintaan, logikanya lebih sederhana.

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

Mengatasi masalah presisi dengan angka besar

Dalam kode Uniswap, terdapat banyak perhitungan, seperti menghitung jumlah Token yang ditukar berdasarkan harga dan likuiditas saat ini. Untuk menghindari kehilangan presisi saat operasi pembagian, proses perhitungan sering menggunakan operasi "<< FixedPoint96.RESOLUTION", yang artinya menggeser ke kiri 96 bit, setara dengan mengalikan dengan 2^96.

Menggeser ke kiri dan kemudian melakukan pembagian dapat memastikan akurasi dalam transaksi normal tanpa overflow. Meskipun secara teoritis masih akan ada sedikit kehilangan akurasi, namun sudah dapat diterima.

Menghitung Pendapatan dengan Cara Share

Uniswap perlu mencatat keuntungan biaya dari penyedia likuiditas LP(. Jelas bahwa tidak mungkin untuk mencatat biaya untuk setiap LP pada setiap transaksi, karena akan menghabiskan banyak Gas.

Solusinya adalah dengan mencatat feeGrowthInside0LastX128 dan feeGrowthInside1LastX128 dalam struktur Position, yang menunjukkan biaya yang seharusnya diterima setiap unit likuiditas saat biaya ditarik terakhir kali untuk setiap posisi.

Cukup catat total biaya transaksi dan biaya transaksi yang dialokasikan per unit likuiditas, biaya transaksi yang dapat ditarik dapat dihitung berdasarkan likuiditas yang dimiliki saat LP menarik. Mirip dengan memiliki saham, saat menarik keuntungan, Anda hanya perlu mengetahui keuntungan per saham historis dan keuntungan saat penarikan terakhir.

![Seri Pemula Web3: Tip Kecil Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Tidak semua informasi perlu diambil dari rantai

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 basis data biasa, beberapa perlu disinkronkan secara berkala dari rantai, tetapi tidak perlu memanggil data secara real-time dari rantai atau antarmuka RPC node.

Banyak penyedia RPC blockchain juga menawarkan antarmuka tingkat lanjut yang memungkinkan akses data tertentu dengan lebih cepat dan murah. Antarmuka ini biasanya memanfaatkan caching untuk meningkatkan kinerja dan efisiensi.

Tentu saja, transaksi kunci masih dilakukan di blockchain.

Pelajari Pemisahan Kontrak dan Memanfaatkan Kontrak Standar yang Ada

Sebuah proyek dapat mencakup beberapa kontrak yang sebenarnya dikerahkan. Bahkan jika hanya satu kontrak yang dikerahkan, kode dapat dipisahkan menjadi beberapa kontrak melalui pewarisan untuk pemeliharaan.

Seperti kontrak NonfungiblePositionManager dari Uniswap yang mewarisi beberapa kontrak. Kontrak ERC721Permit langsung menggunakan implementasi ERC721 dari OpenZeppelin, yang tidak hanya memudahkan pengelolaan posisi dengan NFT, tetapi juga meningkatkan efisiensi pengembangan.

Ringkasan

Mengembangkan versi sederhana dari bursa terdesentralisasi secara langsung dapat membantu Anda memahami implementasi Uniswap dengan lebih mendalam dan mempelajari lebih banyak poin pengetahuan dari proyek praktis. Pembelajaran teori memang penting, tetapi pengalaman praktik jauh lebih berharga. Semoga tips kecil ini dapat membantu Anda dalam perjalanan pengembangan kontrak.

![Web3 Pemula Series: Tips Kecil dalam Pengembangan Kontrak yang Saya Pelajari dari Kode Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

UNI-1.72%
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.
  • Hadiah
  • 7
  • Bagikan
Komentar
0/400
GasWastervip
· 07-16 11:49
Semua yang belajar kontrak harus melihat
Lihat AsliBalas0
MissedAirdropAgainvip
· 07-16 07:39
Belajar kontrak sudah terlambat...
Lihat AsliBalas0
YieldWhisperervip
· 07-14 20:20
melihat pola yang persis sama di dyydx pada 2020... tidak ada yang baru sejujurnya
Lihat AsliBalas0
MEVictimvip
· 07-14 20:18
Apakah pengetahuan yang konyol ini benar-benar berguna?
Lihat AsliBalas0
VitaliksTwinvip
· 07-14 20:14
Ada sesuatu yang cukup nyata
Lihat AsliBalas0
ForkLibertarianvip
· 07-14 20:13
Uniswap bermain trik baru?
Lihat AsliBalas0
QuorumVotervip
· 07-14 20:00
Tulisannya bagus, sudah diatur untuk belajar.
Lihat AsliBalas0
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)