Bagaimana pengembang Bitcoin memastikan bahwa modifikasinya tidak memengaruhi aturan konsensus atau protokol jaringan yang berjalan?
Saya memahami bahwa aturan konsensus Bitcoin diberlakukan oleh setiap node secara individual . Namun, kebanyakan orang menjalankan versi default dari Bitcoin Core, yang membuat implementasi yang dilakukan oleh pengembang Bitcoin menjadi sangat penting.
Jadi pertanyaan saya ada di judulnya: bagaimana mereka menjamin implementasi tidak mempengaruhi aturan konsensus atau protokol jaringan?
Meskipun saya juga memahami bahwa setiap versi Bitcoin dirilis dengan sangat hati-hati dan pengujian ekstensif, saya tetap bertanya-tanya apakah ada praktik sistematis untuk ini. Pointer apa pun akan sangat dihargai.
Jawaban
"Usaha terbaik". Bukti formal tidak membantu. Yang dapat dilakukan seseorang hanyalah menulis tes, seperti perangkat lunak lain yang ditulis dengan baik.
Mereka juga memelihara fork dari beberapa dependensi seperti LevelDB dan tidak mengupdate beberapa di antaranya seperti BerkeleyDB .
Lihat Apa yang Salah . Terutama hardfork 2013 tidak akan terjadi jika mereka dapat memastikan protokol konsensus yang tidak berubah.
Kontributor Inti jangka panjang memiliki pemahaman umum tentang bagian mana dari sentuhan basis kode Inti atau yang berpotensi memengaruhi konsensus antar node di jaringan. Namun, konsensus itu "licin" dan ada contoh di masa lalu di mana perubahan dibuat yang tidak dianggap kritis pada saat itu tetapi ternyata menjadi konsensus. MCCCS menyoroti beberapa contoh ini dalam jawaban di atas.
Pieter Wuille membahas tantangan dalam menentukan apa itu konsensus dan apa yang tidak di podcast Chaincode Labs pada Januari 2020.
Salah satu hal yang menurut saya dipelajari dari hal itu adalah menentukan apa aturan konsensus Anda sangat sulit. Itu tidak berarti Anda tidak dapat mencoba tetapi siapa yang mengira bahwa pengaturan konfigurasi di lapisan database yang Anda gunakan sebenarnya bocor secara semantik ke dalam aturan konsensus yang didefinisikan secara implisit Bitcoin. Anda tentu saja dapat menghubungkannya dengan kegagalan manusia. Kami seharusnya sudah membaca dokumentasi dan mengetahuinya.
Kita dapat berbicara tentang batasan dalam mencoba mengabstraksi bagian basis kode yang secara sengaja berkontribusi pada konsensus, tetapi sangat sulit untuk mengatakan dengan jelas bahwa kode ini tidak berdampak pada kode konsensus karena bug dapat bocor. Menurut saya salah satu hal yang perlu dipelajari adalah Anda benar-benar menginginkan perangkat lunak yang dimaksudkan untuk digunakan dalam sistem konsensus di mana Anda tidak hanya memiliki persyaratan bahwa jika setiap orang berperilaku dengan benar, semua orang menerima jawaban yang benar tetapi juga semua orang akan setuju tentang apa itu bagian yang tidak valid dari data di lockstep.