1315 Agustus 2010
Hari ketika 184 miliar bitcoin tercipta
Satu transaksi lolos dari pemeriksaan nilai dan menciptakan jumlah bitcoin yang jauh melampaui pasokan yang direncanakan. Perbaikan hadir dalam hitungan jam, tetapi insiden ini menunjukkan bahwa aturan moneter bergantung pada keandalan kode yang menjalankannya.
Pada Minggu, 15 Agustus 2010, Jeff Garzik menyoroti blok 74 638 yang baru ditambang dan sebuah jumlah yang seharusnya tidak ada. Satu transaksi telah membuat dua output, masing-masing bernilai lebih dari 92 miliar BTC. Jika dijumlahkan, nilainya hampir sembilan ribu kali pasokan Bitcoin yang direncanakan. Pada pukul 18:08:49 UTC, Garzik membuka utas di forum berjudul “Strange block 74638” dan mengunggah data bloknya. Dalam beberapa menit, jelas bahwa ini bukan kesalahan penjelajah blok atau tanda desimal yang salah tempat. Jaringan telah menerima blok yang melanggar aturan moneternya sendiri. Agar pengguna tetap percaya bahwa koin tidak dapat dibuat sesuka hati, mereka harus menemukan kesalahannya, memperbaiki perangkat lunak, dan meyakinkan cukup banyak peserta untuk melanjutkan cabang riwayat yang berbeda.
Blok aneh 74 638
Tulisan Garzik singkat dan langsung ke pokok persoalan. Ia menunjukkan hash transaksi dan dua output yang sangat besar. Hasil printblock yang kemudian dipasang dalam diskusi yang sama mencatat nilainya secara tepat: masing-masing berisi 92 233 720 368,54275808 BTC. Blok itu juga memuat transaksi coinbase terpisah yang membayar penambang 50,51 BTC. Dibandingkan dengan imbalan dasar yang biasanya hanya lima puluh bitcoin, kedua output tersebut tampak tidak masuk akal: seseorang baru saja menciptakan lebih dari 184 miliar unit.
Identitas pembuat transaksi dan penjelasan terbukanya tidak diketahui. Catatan rantai yang tersimpan menunjukkan apa yang terjadi, tetapi tidak siapa yang memanfaatkan celah itu atau apa tujuannya. Menuduh peretas tertentu berarti menambahkan klaim yang tidak didukung sumber. Yang jelas, transaksi tersebut dirancang untuk memanfaatkan kelemahan validasi.
Jaringan menerima hal ini karena kode lama memeriksa masing-masing hasil keluaran dan kemudian jumlahnya. Setiap salah satu hasil keluaran besar muat dalam tipe numerik yang digunakan, tetapi ketika dijumlahkan bersama-sama, melebihi batas atasnya. Angka melipat ke area negatif dan pemeriksaan berikutnya salah menganggap bahwa tidak ada nilai positif yang tidak sah yang dibuat.
Serangan ini tidak memalsukan tanda tangan, mengubah transaksi lama, atau mengambil alih mayoritas hashrate. Penyerang memanfaatkan cara implementasi perangkat lunak menangani bilangan bulat. Aturan matematisnya benar: jumlah yang dikeluarkan tidak boleh melebihi jumlah yang masuk. Namun, karena overflow, program gagal menjalankannya sesuai maksud semula.
Blok sudah menjadi bagian dari rantai terbaik. Setiap simpul yang menggunakan versi yang salah menganggapnya sebagai valid dan penambang lainnya dapat membangun di atasnya. Oleh karena itu, pengungkapan publik saja tidak cukup. Komunitas harus bereaksi lebih cepat sebelum sejarah yang rusak menyebar dan hasil keluaran besar mulai beredar lebih jauh.
Kesalahan antara aturan dan mesin
Batas 21 juta sering disebut sebagai hukum Bitcoin yang tidak dapat diubah. Insiden ini memperlihatkan maknanya dengan lebih tepat. Batas itu merupakan bagian dari aturan konsensus yang harus diterapkan dengan benar oleh setiap program dan setiap simpul penuh. Jika semua versi perangkat lunak simpul yang umum digunakan memiliki kesalahan implementasi yang sama, untuk sementara semuanya dapat menerima keadaan yang bertentangan dengan aturan semula.
Overflow pada bilangan bulat adalah masalah lama dalam pemrograman. Register komputer memiliki rentang terbatas. Ketika batasnya terlampaui, hasil perhitungan dapat beralih ke ujung lain dari garis bilangan. Bagi sistem akuntansi, detail ini sangat penting. Jumlah harus diperiksa selama proses perhitungan, bukan hanya setelah selesai, dan setiap nilai harus tetap berada dalam rentang yang diizinkan.
Karena itu, Bitcoin Core saat ini melakukan beberapa pemeriksaan terpisah. Nilai keluaran tidak boleh negatif atau melebihi pasokan maksimum, dan jumlah kumulatif diperiksa lagi setiap kali ada penambahan. Baris kode ini bukan sekadar bentuk kehati-hatian abstrak. Di baliknya ada pengalaman nyata: satu pengamanan yang hilang pernah membuat jaringan mencatat transaksi yang mustahil secara ekonomi.
Kesalahan ini juga menunjukkan perbedaan antara spesifikasi dan harapan masyarakat. Tidak ada orang di forum yang serius mengklaim bahwa koin raksasa tersebut sah hanya karena perangkat lunak lama menerimanya. Peserta sepakat bahwa itu adalah pelanggaran terhadap aturan yang dimaksud. Namun kesepakatan ini membutuhkan sarana teknis: versi baru yang menolak blok yang rusak.
Di sini kode dan manusia bertemu. Kode menentukan secara deterministik blok mana yang diterima oleh simpul. Manusia menentukan kode mana yang mereka instal ketika mereka menemukan ketidaksesuaian dengan aturan yang dimaksud. Insiden tersebut bukanlah sebuah pemungutan suara tentang emisi baru; itu adalah sebuah lomba untuk memulihkan kembali aturan yang sudah dianggap oleh komunitas sebagai dasar sistem.
Luapan itu berbahaya justru karena mesin tidak melihat keabsurdan yang langsung dikenali manusia. Prosesor bekerja dengan angka yang disimpan dalam ruang terbatas; jika perhitungan melampaui batasnya, hasilnya bisa terbalik ke bagian lain dari rentang. Kode lama mengontrol masing-masing keluaran, tetapi saat penjumlahan tidak menjaga jumlah berjalan dalam batas yang aman. Oleh karena itu, transaksi tersebut lolos melalui beberapa kondisi yang secara lokal masuk akal, namun tetap melanggar makna keseluruhan mereka. Perbaikannya harus konkret: tidak cukup menulis di komentar bahwa bitcoin tidak akan pernah lebih dari 21 juta. Setiap simpul membutuhkan aturan yang benar-benar dapat menegakkan pernyataan itu dalam setiap perhitungan.
Perbaikan di Bawah Tekanan
Setelah pengumuman, rekomendasi untuk berhenti menerima transaksi dan tidak menambang sementara waktu muncul di forum. Setiap blok baru di atas transaksi yang rusak akan meningkatkan jumlah pekerjaan yang harus ditinggalkan. Di jaringan tanpa sakelar sentral, Satoshi tidak bisa menghentikan penambangan. Ia hanya bisa mengeluarkan perbaikan dan meyakinkan operator untuk menjalankannya.
Versi 0.3.10 mengenalkan kontrol jumlah yang tepat dan menolak blok 74 638. Simpul yang diperbaiki kembali ke titik valid terakhir yang sama dan penambang mulai membangun cabang alternatif tanpa transaksi inflasi. Dua sejarah bersaing selama beberapa waktu berdasarkan akumulasi kerja komputasi pada masing-masing cabang.
Satoshi kemudian mengumumkan bahwa rantai yang benar telah mendahului rantai yang salah. Perangkat lunak yang diperbarui melakukan reorganisasi rantai, sehingga blok bermasalah hilang dari riwayat aktif. Transaksi dari cabang yang ditinggalkan dapat kembali ke antrean dan dimasukkan lagi kemudian, selama transaksi itu sendiri valid. Namun, keluaran bernilai sangat besar tadi tidak dapat lolos pemeriksaan baru.
Perbaikan ini memiliki konsekuensi. Penambang di cabang yang ditinggalkan kehilangan imbalan dan pengguna harus menerima bahwa beberapa jam sejarah tidak akan dilanjutkan. Pada tahun 2010, jaringan masih kecil dan koordinasi berlangsung cepat. Intervensi serupa di ekosistem yang jauh lebih besar akan berarti lebih banyak partisipan ekonomi, varian perangkat lunak, serta perselisihan tentang di mana tepatnya letak batas perbaikan.
Cepatnya respons sering digambarkan sebagai campur tangan ajaib Satoshi. Padahal, respons itu terdiri atas langkah-langkah yang dapat ditelusuri: Garzik mengumumkan masalahnya, orang lain menganalisis overflow, pengembang menyiapkan perubahan, operator memasang versi baru klien Bitcoin, dan penambang memberikan kerja pada cabang yang benar. Pembuat perangkat lunak dapat mengusulkan perbaikan, tetapi jaringanlah yang harus benar-benar mengadopsinya.
Aturan yang paling keras membutuhkan pengembangan yang paling rendah hati
Setelah perbaikan, jumlah bitcoin yang sah kembali ke batas yang dimaksud, dan miliaran bitcoin akibat kesalahan tadi tidak bisa dibelanjakan pada rantai yang diteruskan. Insiden itu tidak menyebabkan inflasi permanen. Meski begitu, ini bukan sekadar kejadian aneh dalam versi beta. Kepercayaan pada aturan moneter berasal dari program yang berulang kali diperiksa, bukan dari slogan.
Bitcoin seringkali dibandingkan dengan sistem di mana otoritas pusat mengubah penawaran dengan keputusan. Namun, di sini juga, orang-orang tidak menghilang. Pengembang menulis implementasi, reviewer mencari kesalahan, operator memilih versi, dan penambang membuat urutan blok. Perbedaannya adalah campur tangan tersebut bersifat terbuka dan setiap simpul dapat menolak aturan yang tidak mereka setujui.
Peristiwa ini juga menjelaskan kehati-hatian yang digunakan saat ini untuk mengubah kode konsensus. Optimalisasi aritmatika kecil dapat memiliki dampak moneter. Pengujian, kontrol implementasi lebih banyak, dan tinjauan lambat bukanlah birokrasi tambahan; mereka adalah pertahanan melawan pengulangan momen ketika beberapa bit mengubah miliaran dari nomor yang tidak dapat diterima menjadi tampaknya sah.
Jeff Garzik tidak membuat jaringan menjadi aman dengan hanya satu postingan di forum, tetapi menunjukkan kelebihan buku besar publik. Setiap orang bisa melihat blok yang aneh, menghitung ulang outputnya, dan memeriksa perbaikannya. Kesalahan tidak disembunyikan dalam database internal operator. Kesalahan itu terbuka untuk seluruh komunitas bersama dengan bukti bahwa simpul lama menerimanya.
Batas pasokan bertahan melewati insiden ini, tetapi tidak dengan cara yang mungkin dibayangkan dari kata “tidak berubah”. Perangkat lunaknya tetap bisa gagal. Pemulihan berhasil karena kegagalan itu terlihat, ada aturan bersama untuk dijadikan acuan, dan cukup banyak peserta menerapkan perbaikan. Kisah 184 miliar bitcoin tidak menyangkal pasokan yang tetap. Kisah ini menunjukkan apa yang benar-benar diperlukan untuk mempertahankannya.
Peristiwa ini juga mengingatkan bahwa keterbukaan kode sendiri tidak menghilangkan kesalahan. Sumber terbuka memungkinkan orang-orang menelusuri, membandingkan, dan memperbaiki masalah tanpa menunggu satu pemasok tunggal, tetapi yang menentukan adalah perhatian para peserta tertentu. Seseorang harus memperhatikan angka-angka yang mustahil, seseorang menemukan kondisi yang cacat, dan operator harus menerima pembaruan. Transparansi menciptakan kemungkinan pengawasan; barulah tindakan yang mengubahnya menjadi pertahanan jaringan. Karena itu, kisah ini tetap penting bahkan bertahun-tahun kemudian: keamanan Bitcoin tidak terletak pada gagasan program awal yang sempurna, melainkan pada kombinasi aturan yang presisi, verifikasi independen, dan kemampuan untuk merespons kesalahan tanpa menyembunyikannya.
Tokoh dan konsep dalam Atlas
Sumber dan batas kisah
- 01BitcoinTalk — Strange block 74638
Peringatan asli dari Jeff Garzik, hasil keluaran yang tepat, analisis kelebihan nilai dan garis waktu reaksi.
- 02BitcoinTalk — overflow bug SERIOUS
Koordinasi pengembangan pada masa itu, perbaikan kesalahan validasi, dan transisi ke rantai yang diperbaiki.
- 03Bitcoin Core — transaction consensus checks
Implementasi saat ini melakukan kontrol jangkauan dari masing-masing hasil dan jumlahnya.