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
Saya ingin berbagi sesuatu yang cukup penting yang mungkin belum sepenuhnya Anda pahami - yaitu celah reentrancy dalam smart contract. Jika Anda sedang mengembangkan dapp atau bekerja dengan blockchain, hal ini adalah hal yang harus diketahui.
Apa masalah dasar dari reentrancy? Itu terjadi ketika sebuah smart contract memanggil kontrak lain, dan kontrak tersebut dapat memanggil kembali kontrak asal saat masih berjalan. Penyerang dapat memanfaatkan waktu ini untuk mencuri uang.
Bayangkan ContractA memiliki 10 Ether dan ContractB telah mengirimkan 1 Ether ke sana. Ketika ContractB memanggil fungsi penarikan, ContractA akan memeriksa apakah saldo lebih besar dari 0, jika ya, maka mengirim Ether kembali. Tapi di sini adalah masalah - ContractA hanya memperbarui saldo setelah mengirim uang. Jadi saat pengiriman, jika ContractB memiliki fungsi fallback, ia bisa memanggil kembali fungsi penarikan ContractA. Karena saldo belum diperbarui, pemeriksaan akan berhasil lagi, dan ia akan menerima 1 Ether lagi. Loop ini berlanjut sampai ContractA kehabisan semua.
Saya akan tunjukkan tiga cara untuk melindungi kontrak dari serangan reentrancy ini.
Cara pertama adalah menggunakan modifier nonReentrant. Ide dasarnya sangat sederhana - Anda mengunci kontrak saat fungsi sedang berjalan. Jika ada yang mencoba memanggil fungsi tersebut lagi, akan ditolak karena kontrak sedang terkunci. Anda harus menjalankan seluruh kode lalu membuka kunci, dan saat itu pemeriksaan akan gagal.
Cara kedua adalah menggunakan pola Checks-Effects-Interactions. Alih-alih memperbarui saldo setelah mengirim uang, Anda memperbaruinya segera setelah pemeriksaan tetapi sebelum pengiriman. Dengan cara ini, bahkan jika kontrak lain memanggil kembali, saldo sudah menjadi 0, sehingga pemeriksaan akan gagal. Itulah mengapa urutan sangat penting - pemeriksaan dulu, lalu efek diperbarui, terakhir berinteraksi dengan kontrak lain.
Cara ketiga adalah membuat sebuah GlobalReentrancyGuard terpisah, yang sangat berguna jika Anda memiliki banyak kontrak yang berinteraksi satu sama lain. Alih-alih melindungi setiap fungsi, Anda membuat sebuah kontrak guard bersama, menyimpan status kunci di satu tempat. Ketika kontrak mana pun mencoba memanggil fungsi yang dilindungi, ia akan memeriksa dengan guard ini. Jika guard mengatakan kontrak sedang terkunci, transaksi akan ditolak. Cara ini sangat kuat karena mencegah reentrancy tidak hanya dalam satu kontrak tetapi juga antar banyak kontrak.
Saya menyarankan Anda menerapkan ketiga teknik ini sesuai situasi. Untuk fungsi penarikan atau transfer aset, selalu gunakan nonReentrant atau Checks-Effects-Interactions. Dan jika proyek Anda memiliki sistem kontrak yang kompleks, pertimbangkanlah GlobalReentrancyGuard sebagai lapisan perlindungan tambahan.
Ini adalah salah satu celah paling umum yang menyebabkan kerugian besar, jadi memahami reentrancy sangat penting jika Anda ingin menulis smart contract yang aman.