ビットコインの開発者は、変更がコンセンサスルールや実行中のネットワークプロトコルに影響を与えないようにするにはどうすればよいですか?

Dec 17 2020

ビットコインのコンセンサスルールは、すべてのノードによって個別に適用されることを理解しています。ただし、ほとんどの人はデフォルトバージョンのビットコインコアを実行しているため、ビットコイン開発者による実装が最も重要になります。

だから私の質問はタイトルにあります:実装がコンセンサスルールやネットワークプロトコルに影響を与えないことをどのように保証しますか?

また、ビットコインの各バージョンが細心の注意と広範なテストを経てリリースされていることも理解していますが、これには体系的な慣行があるかどうか疑問に思っています。任意のポインタをいただければ幸いです。

回答

9 MCCCS Dec 17 2020 at 16:49

"最大限の努力"。正式な証明は役に立ちません。他のよく書かれたソフトウェアと同じように、テストを書くことしかできません。

彼らはまた、このようなLevelDBなど、いくつかの依存関係のフォークを維持し、そのようにそれらのいくつかを更新しないのBerkeleyDB。

何が悪かったかを参照してください。特に2013年のハードフォークは、変更されていないコンセンサスプロトコルを保証できれば発生しなかったでしょう。

5 MichaelFolkson Dec 17 2020 at 21:17

長期的なコアコントリビューターは、コアコードベースのどの部分がネットワーク上のノード間のコンセンサスに影響を与えるか、または影響を与える可能性があるかについての一般的な理解を持っています。ただし、コンセンサスは「滑りやすい」ものであり、過去に、コンセンサスが重要であるとは見なされていなかったが、重要であることが判明した変更が行われた例があります。MCCCSは、上記の回答でこれらの例のいくつかを強調しています。

Pieter Wuilleは、2020年1月にChaincodeLabsポッドキャストに何がコンセンサスで何がそうでないかを定義するという課題について話し合いました。

それから学んだことの1つは、コンセンサスルールが何であるかを指定することは本当に難しいことです。それはあなたが試すことができないという意味ではありませんが、あなたが使用しているデータベース層の構成設定が実際にビットコインの暗黙的に定義されたコンセンサスルールに意味的に漏れていると誰が思ったでしょう。もちろん、それは人為的失敗に起因すると考えることができます。ドキュメントを読んで、それを知っておくべきでした。

意図的にコンセンサスに寄与するコードベースの部分を抽象化しようとする際の境界について話すことができますが、バグがリークする可能性があるため、このコードがコンセンサスコードに影響を与えないことを明確に言うのは非常に困難です。そこで学ぶべきことの1つは、コンセンサスシステムでの使用を目的としたソフトウェアが本当に必要だと思います。コンセンサスシステムでは、すべての人が正しく行動すれば、誰もが正しい答えを受け入れるだけでなく、誰もが何であるかについて同意する必要があります。ロックステップの無効なデータ。