Mempelajari eksploitasi kontrak pintar masa lalu sangat baik untuk menjadi pengembang Solidity yang lebih baik. Saya telah menghabiskan beberapa waktu baru-baru ini untuk meninjau banyak eksploitasi yang telah terjadi selama beberapa tahun terakhir. Memahami akar penyebab peretasan adalah cara yang bagus untuk mempelajari cara berpikir secara berbeda tentang menulis kode. Ini juga memberi Anda intuisi yang lebih baik untuk komponen mana yang paling penting saat melihat basis kode baru. Saya merekomendasikan siapa pun yang ingin meningkatkan game Solidity mereka untuk melalui eksploitasi masa lalu di @RektHQ atau memeriksa dokumen @phylaxsystems, di mana kami memiliki rincian peretasan dan bagaimana pernyataan dapat mencegahnya. Dengan mempelajari peretasan sebelumnya ini, saya menyadari bahwa seringkali eksploitasi dimungkinkan karena pemeriksaan yang hilang dalam kode atau perhitungan yang salah yang menyebabkan protokol memasuki status yang tidak dimaksudkan. Setelah eksploitasi terjadi, bug sering tampak jelas. Kita perlu memastikan bahwa protokol memiliki waktu yang lebih mudah untuk mengidentifikasi ini. Banyak protokol akan mendapat manfaat dari menghabiskan waktu untuk mendefinisikan invarian dan memastikan bahwa ini tidak dapat dilanggar. Menulis pernyataan adalah cara yang bagus untuk memastikan bahwa invarian ini tidak pernah dapat dilanggar. Eksploitasi terbaru yang saya habiskan waktu untuk mencari adalah eksploitasi Abracadabra dari Maret 2025 di mana ~$13 juta hilang: Bug: sendValueInCollateral() mengekstrak token nyata tetapi lupa memperbarui variabel akuntansi internal Exploit: orderValueInCollateral() terus melaporkan nilai jaminan yang sama bahkan setelah token dihapus Hasil: Penyerang meminjam terhadap "jaminan hantu" berulang kali sampai dana terkuras Pernyataan yang memeriksa invarian sederhana bahwa "jaminan yang dilaporkan" cocok dengan "jaminan aktual" akan mencegah peretasan.
937