Dasar
Spot
Perdagangkan kripto dengan bebas
Perdagangan Margin
Perbesar keuntungan Anda dengan leverage
Konversi & Investasi Otomatis
0 Fees
Perdagangkan dalam ukuran berapa pun tanpa biaya dan tanpa slippage
ETF
Dapatkan eksposur ke posisi leverage dengan mudah
Perdagangan Pre-Market
Perdagangkan token baru sebelum listing
Futures
Akses ribuan kontrak perpetual
CFD
Emas
Satu platform aset tradisional global
Opsi
Hot
Perdagangkan Opsi Vanilla ala Eropa
Akun Terpadu
Memaksimalkan efisiensi modal Anda
Perdagangan Demo
Pengantar tentang Perdagangan Futures
Bersiap untuk perdagangan futures Anda
Acara Futures
Gabung acara & dapatkan hadiah
Perdagangan Demo
Gunakan dana virtual untuk merasakan perdagangan bebas risiko
Peluncuran
CandyDrop
Koleksi permen untuk mendapatkan airdrop
Launchpool
Staking cepat, dapatkan token baru yang potensial
HODLer Airdrop
Pegang GT dan dapatkan airdrop besar secara gratis
Pre-IPOs
Buka akses penuh ke IPO saham global
Poin Alpha
Perdagangkan aset on-chain, raih airdrop
Poin Futures
Dapatkan poin futures dan klaim hadiah airdrop
Investasi
Simple Earn
Dapatkan bunga dengan token yang menganggur
Investasi Otomatis
Investasi otomatis secara teratur
Investasi Ganda
Keuntungan dari volatilitas pasar
Soft Staking
Dapatkan hadiah dengan staking fleksibel
Pinjaman Kripto
0 Fees
Menjaminkan satu kripto untuk meminjam kripto lainnya
Pusat Peminjaman
Hub Peminjaman Terpadu
Promosi
AI
Gate AI
Partner AI serbaguna untuk Anda
Gate AI Bot
Gunakan Gate AI langsung di aplikasi sosial Anda
GateClaw
Gate Blue Lobster, langsung pakai
Gate for AI Agent
Infrastruktur AI, Gate MCP, Skills, dan CLI
Gate Skills Hub
10RB+ Skills
Dari kantor hingga trading, satu platform keterampilan membuat AI jadi lebih mudah digunakan
GateRouter
Pilih secara cerdas dari 40+ model AI, dengan 0% biaya tambahan
Belajar dari kode Uniswap tentang teknik pengembangan kontrak, jauh lebih menarik daripada buku teks
Baru-baru ini saat membuat tutorial pengembangan bExchange terdesentralisasi, saya mendalami cara implementasi Uniswap V3, dan menemukan beberapa cara penulisan yang benar-benar keren. Sebelumnya saya hanya pernah menulis kontrak NFT sederhana, ini adalah kali pertama saya benar-benar mengulik kode kontrak DeFi, dan banyak hal yang layak dibagikan kepada teman-teman yang ingin belajar tentang Uniswap.
Pertama, saya ingin menyebut satu hal yang paling mengejutkan—apakah alamat kontrak bisa diprediksi?
Biasanya, alamat kontrak yang di-deploy terlihat acak, tapi Uniswap menggunakan trik pintar. Mereka menambahkan parameter salt saat membuat kontrak, memakai opcode CREATE2, sehingga alamat yang dihasilkan bisa diprediksi. Caranya adalah seperti ini: “pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());” dalam kode. Keuntungan dari ini adalah, cukup tahu pasangan token dan fee, kita bisa menghitung alamat kontrak pool tanpa harus benar-benar deploy dulu. Ini sangat berguna untuk verifikasi izin transaksi atau cepat menemukan pool.
Desain callback function juga sangat cerdas.
Di Uniswap, saat kamu memanggil metode swap untuk melakukan transaksi, kontrak akan memanggil fungsi swapCallback, mengirimkan jumlah token yang diperlukan, dan kamu akan mentransfer token ke sana dalam callback. Keuntungan dari ini adalah seluruh logika transaksi berjalan lengkap, tanpa perlu memecah menjadi beberapa langkah atau menyimpan variabel kompleks untuk keamanan. Singkatnya, A memanggil B, lalu B saat dipanggil kembali memanggil A, membentuk lingkaran tertutup.
Metode estimasi transaksi juga cukup hack—menggunakan error untuk mengirim pesan.
Karena saat estimasi transaksi, transaksi tidak benar-benar menukar token, maka akan error. Pendekatan Uniswap adalah melempar error khusus dalam callback, lalu tangkap dengan try-catch, dan parsing data dari pesan error tersebut. Terlihat agak kasar, tapi sangat praktis, tanpa perlu mengubah metode swap, kita bisa menambahkan fitur estimasi.
Solusi untuk masalah presisi juga patut dipelajari.
Saat menghitung pertukaran token, jika langsung dibagi, akan kehilangan presisi. Uniswap melakukan dengan menggeser angka 96 bit ke kiri (seperti mengalikan dengan 2^96), lalu melakukan pembagian, dan kemudian menghilangkan 2^96 dari hasilnya. Dengan cara ini, dalam rentang uint256, presisi tetap terjaga dan tidak overflow. Variabel seperti sqrtRatioAX96 dan sqrtRatioBX96 di kode menunjukkan pendekatan ini, terlihat rumit tapi logikanya jelas.
Cara menghitung pendapatan fee juga sangat cerdas.
Daripada mencatat fee setiap LP setiap transaksi (yang akan menghabiskan banyak gas), lebih baik mencatat total fee dan proporsi distribusi untuk setiap liquidity provider. Saat LP menarik, mereka tinggal mengalikan jumlah liquidity yang dimiliki dengan total fee per saham yang tercatat, sehingga bisa menghitung pendapatannya, mirip seperti pembagian dividen berdasarkan saham. Metode perhitungan Share ini banyak digunakan di berbagai proyek.
Penting juga untuk tidak semua data harus di-chain.
Daftar pool, info dasar, dan data lain bisa disimpan di database tradisional, dan sinkronisasi secara berkala dari chain sudah cukup, tidak perlu panggilan RPC secara langsung setiap saat. Banyak layanan blockchain saat ini menyediakan API tingkat tinggi yang memungkinkan pengambilan data lebih cepat dan murah, ini juga merupakan pendekatan yang sama.
Terakhir, tentang organisasi kode.
Proyek besar biasanya membagi kontrak menjadi beberapa bagian untuk memudahkan pemeliharaan, dan Uniswap mengikuti prinsip ini. Selain itu, manfaatkan kontrak standar seperti OpenZeppelin ERC721 untuk mengelola posisi, sehingga pengembangan lebih efisien dan kode lebih terpercaya.
Sejujurnya, membaca artikel sebanyak apapun tidak akan seefektif belajar langsung praktek. Saat membuat bExchange versi sederhana, kamu benar-benar memahami mengapa Uniswap merancangnya seperti itu. Kursus WTF-DApp didasarkan pada ide ini, membimbingmu langkah demi langkah menyelesaikan proyek praktis belajar Uniswap, dan saya yakin ini akan sangat membantu pengembangan kontrakmu.