7 Tip Praktis untuk Belajar Pengembangan Kontrak DEX Utama

Berbagi Tips Kecil dalam Pengembangan Kontrak: Pengalaman yang Dipelajari dari Uniswap

Baru-baru ini saat mengembangkan proyek bursa terdesentralisasi, saya merujuk pada implementasi kode dari DEX terkenal, dan belajar banyak poin berguna. Sebagai seorang pemula yang baru saja memasuki pengembangan kontrak Defi, teknik-teknik ini sangat menginspirasi saya, dan saya yakin ini juga akan membantu teman-teman lain yang ingin belajar pengembangan kontrak pintar.

Web3 Pemula Seri: Tip kecil pengembangan kontrak yang saya pelajari dari kode Uniswap

Alamat Kontrak yang Dapat Diprediksi

Alamat yang diperoleh dari penerapan kontrak biasanya terlihat acak karena terkait dengan nonce. Namun dalam beberapa skenario, kita perlu menyimpulkan alamat kontrak melalui informasi transaksi, seperti menentukan izin transaksi atau mendapatkan alamat kolam likuiditas.

Ini dapat dicapai dengan membuat kontrak menggunakan metode CREATE2. Cara spesifiknya adalah dengan menambahkan parameter salt saat membuat kontrak:

soliditas pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());

Alamat kontrak yang dihasilkan dengan cara ini dapat diprediksi, mengikuti logika berikut:

Alamat baru = hash("0xFF", alamat pencipta, salt, initcode)

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

Penggunaan Fungsi Callback yang Rasional

Dalam beberapa skenario, pemanggilan saling antar kontrak sangat berguna. Misalnya, metode A memanggil B, dan B memanggil kembali A dalam metode yang dipanggil.

Dalam DEX tertentu, saat memanggil metode swap untuk melakukan transaksi, ia akan memanggil swapCallback dengan Token yang diperlukan untuk transaksi kali ini. Panggilan harus mentransfer Token yang diperlukan ke dalam pool transaksi dalam callback, bukan memecah metode swap. Ini memastikan bahwa metode swap dieksekusi secara lengkap, tanpa perlu catatan variabel yang rumit untuk menjamin keamanan.

Menggunakan Penyampaian Informasi yang Tidak Biasa

Dalam memperkirakan transaksi, kita perlu mensimulasikan metode swap, tetapi tidak akan benar-benar menukar Token, sehingga akan muncul kesalahan. Sebuah DEX mencapai perkiraan dengan melemparkan kesalahan khusus dalam fungsi callback transaksi, kemudian menangkap kesalahan tersebut dan menganalisis informasi yang diperlukan.

Metode ini tampaknya licik, tetapi sangat praktis. Tidak perlu mengubah metode swap untuk memperkirakan permintaan, logikanya lebih sederhana.

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

Menggunakan Bilangan Besar untuk Mengatasi Masalah Presisi

Dalam kode yang melibatkan perhitungan, harus menghindari kehilangan presisi saat melakukan operasi pembagian. Beberapa DEX sering menggunakan "<< FixedPoint96.RESOLUTION" operasi, setara dengan mengalikan 2^96. Menggeser ke kiri dan kemudian melakukan pembagian dapat memastikan presisi tanpa overflow.

solidity uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; amount0 = numerator1 * numerator2 / (sqrtRatioBX96 * sqrtRatioAX96);

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

Menghitung Pendapatan dengan Metode Share

Untuk perhitungan pendapatan biaya transaksi penyedia likuiditas (LP), tidak mungkin untuk mencatat setiap transaksi, karena ini akan menghabiskan banyak Gas. Beberapa DEX menggunakan cara mencatat total biaya transaksi dan setiap likuiditas yang seharusnya mendapatkan bagian dari biaya transaksi.

Saat menarik biaya LP, jumlah yang dapat ditarik dihitung berdasarkan likuiditas yang dimiliki. Mirip dengan memiliki saham perusahaan, saat menarik keuntungan, Anda hanya perlu mengetahui hasil historis per saham dan hasil saat penarikan terakhir.

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

Memilih Cara Mendapatkan Informasi dengan Bijak

Penyimpanan di blockchain relatif mahal, tidak semua informasi perlu disimpan di blockchain atau diambil dari blockchain. Misalnya, daftar kolam transaksi, informasi, dan sebagainya dapat disimpan di database biasa dan disinkronkan secara berkala dari blockchain.

Beberapa penyedia RPC blockchain menawarkan antarmuka canggih untuk mendapatkan data dengan lebih cepat. Namun, transaksi kunci tetap harus dilakukan di blockchain.

Pembagian Kontrak dan Penggunaan Kembali Kontrak Standar

Sebuah proyek mungkin terdiri dari beberapa kontrak, bahkan jika hanya satu kontrak yang diterapkan, itu dapat dipecah menjadi beberapa kontrak untuk pemeliharaan melalui pewarisan.

Kontrak pengelolaan posisi NFT dari suatu DEX mewarisi beberapa kontrak:

solidity kontrak NonfungiblePositionManager adalah INonfungiblePositionManager, Multicall, PeripheryImmutableState, PoolInitializer, ManajemenKecairan, PeripheryValidation, SelfPermit, ERC721Permit {...}

Pada saat yang sama, ia juga menggunakan kontrak standar ERC721 dari OpenZeppelin, yang memudahkan pengelolaan posisi dan meningkatkan efisiensi pengembangan.

Ringkasan

Mengembangkan versi sederhana dari bursa terdesentralisasi secara langsung, dapat membantu Anda memahami implementasi kode dari proyek yang sudah matang dengan lebih mendalam, dan mempelajari lebih banyak poin pengetahuan praktis. Semoga tips kecil ini menginspirasi Anda, semoga pengembangan Anda berjalan lancar!

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

UNI3.93%
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
  • 6
  • Posting ulang
  • Bagikan
Komentar
0/400
NFTArchaeologisvip
· 08-07 00:10
Menyalin buta juga merupakan salah satu cara belajar
Lihat AsliBalas0
OnlyOnMainnetvip
· 08-05 15:56
Jangan lupa praktik di Testnet
Lihat AsliBalas0
TokenGuruvip
· 08-05 15:55
Sumber kode dibahas dengan sangat mendalam
Lihat AsliBalas0
BlockchainTherapistvip
· 08-05 15:49
Teknik yang bagus dan sangat berguna
Lihat AsliBalas0
TaxEvadervip
· 08-05 15:40
CREATE2 benar-benar bagus, teman
Lihat AsliBalas0
SchroedingerGasvip
· 08-05 15:32
Hari ini gas sangat murah
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)