本稿の読者の中にどれくらい視聴者がいらっしゃるかわかりませんが、今月からビットコイナー反省会のレギュラーになりました。先日の放送で視聴者から寄せられた質問に「国家等が51%攻撃して不正なトランザクションを含むチェーンを伸ばしたらハードフォークするのか?」というものがありました。

これは表面的には国家による攻撃ベクトルの検討、あるいはノードがトランザクションやブロックをどのように扱うかについての質問ですが、この質問への回答を考えるとビットコインの本質に突き当たるように感じたので今日はビットコインでなぜフォークが発生するのか、そしてフォークできることがなぜ本質的に重要なのかについて書きます。

💡
ちなみに冒頭の質問に対する私の回答をまとめると「不正なトランザクションが含まれるのであれば正常なノードは認めないから国家のノードがハードフォークした形になる」になります。

Don't Trust, Verify

ビットコイナーがよく使うスローガンで一番有名なフレーズかもしれないDon't Trust, Verifyというものがあります。和訳は「信用せず検証すべし」、でしょうか。

ビットコイン以前にも、通貨を発行したり、データを保存したり、台帳を管理するシステムは無数に存在していました。しかし、データの正しさを保証する信頼される中央なしに各参加者がデータを検証・保管する構造や、検証可能なコストを用いて誰にでもデータの追記を可能にするPoWの仕組みがDon't Trust, Verifyを可能にしているのです。

すなわち、ビットコインの一番根本的な価値というのは「不正な通貨発行によって自分の資産が毀損されていない」「不正な送金処理によって自分の資産が盗まれていない」という2点を他者に頼らず自分自身で検証できることです。そしてソフトウェアがこの検証に使うルールセットの中でブロックの不正検知に使うものをコンセンサスルールといいます。

💡
他にもポリシールールと呼ばれるノード毎に異なってもチェーン自体のコンセンサスは取れるものなど、各ノードは様々なルールを決めて監視しています

自分でルールが守られているか検証することができる、これがビットコインの最たる特徴の1つなのです。

(もう1つ挙げるなら誰にでもマイニングができることによって誰の許可も得ずにトランザクションを含めることができ、それを阻止するには大きなコストがかかることです。)

フォークできることの重要性

💡
ここでの「フォーク」はブロックチェーンの最新ブロックについてノード間で意見が分かれ、その後もどちらかに合わせることなく分岐した両方のチェーンが継続する状況について話しています。

さて、ビットコインの本質は自分でルールが守られているか検証できることと書きました。もし他のノードのコンセンサスルールと異なるものを採用していたらいずれノード間で正当性について正面から意見が割れるブロックが誕生し、それぞれのブロックチェーン観がフォークしてしまう可能性があります。

この状況は、Aさんのノードが正当とみなす最新のブロックをBさんのノードが拒み、Bさんのノードが正当とみなす最新のブロックをAさんのノードが拒むという状況です。また、そこに至る過程のブロックが拒まれていれば、最新のブロックがどうであろうが関係ありません。「拒む」にはPoWの仕事量がより少ないから正当ではない、というような場合もあります。

もちろん、意図的でないフォークはバグなので歓迎されるものではありません。ところが、意図的なフォークができることは実は重要です。

冒頭で紹介した質問に対して、宮本丈氏は「ビットコインにはソフトウェアに定義されたコンセンサスルールのみでなく社会的コンセンサスが存在する」と説明しました。要するに、これは「ビットコインの概念」が共有されており、ソフトウェアで実装されているのはその概念なので、もし動作に違いがあれば概念が優先される、と言い換えることができるかもしれません。

例えば2010年にビットコインが1800億枚以上発行されてしまうバグが発見されましたが、すぐにソフトウェアのアップデートによるフォークによって修正されたのは「ビットコインは2100万枚まで」という認識が普遍的に共有されていたからでしょう。もし現在同じことが起こったとして、ほぼ確実に同様の対処がされると思います。(当時とは比較にならない混乱が生まれそうですが!)

また、ビットコインの社会的コンセンサスが自分に合わないと思うならフォークして出ていくこともできます。自分が守りたいビットコインのルールは自分で決める、ということです。今年の春にJeremy Rubin氏がOP_CTVのソフトフォークのシグナリングを始めようと言い出した際に、URSF (User-Resisted Soft Fork)という概念を提唱する反対派がいました。これはノードがOP_CTVの導入準備完了を示すブロックを拒否するという方法で、厳密にはOP_CTVの使用ではなく導入プロセスを邪魔しようというものですが、フォークが発生する可能性のある行動です。OP_CTVのシグナリング開始はその後取り下げられました。

もちろん必ずしも自分が主流派の支持を得るとは限らないので、よほど多くの支持を集めない限りフォークしたところでそれで終わりでしょう。

ちなみにJeremy Rubin氏はURSFにも興味があるようで、任意のソフトフォーク導入のシグナリングをしたブロックを拒否するのに使えるforkdというソフトを公開しています。(あくまでコンセプトに近いものですが)

GitHub - JeremyRubin/forkd
Contribute to JeremyRubin/forkd development by creating an account on GitHub.

まとめ

・ビットコインのいいところは自分自身のノードで不正が起こっていないか検証できること

・なにが不正かは広く共有される「ビットコインの概念」が最優先だがソフトウェア的にはコンセンサスルールで決まっている

・フォークできることによって概念とコンセンサスルールの差異を突いた攻撃に対処したり、気に入らない使い方を邪魔しようとできる

・大多数のユーザーの支持を得ないことには意図的なフォークを起こしてもあまり意味はない

おまけ

Jeremy Rubin氏に関する豆知識を1つ。

彼はMITに在学していた2013年にTidbitというサービスを開発してリリースしました。これが何かというと、ウェブブラウザで広告を表示する代わりにユーザーにマイニングをさせるソフト、つまりCoinhiveの原型のようなものです。

これがアメリカ・ニュージャージー州に訴えられ、電子フロンティア財団の協力のもと最終的には罰金ゼロの示談の条件としてサービス終了したようです。日本ではCoinhive事件が2019-2021年までかかって無罪を勝ち取りましたが、原型となるサービスや法的問題がそんなに昔から存在していたこと、Jeremy Rubin氏が関わっていたことに驚きました。

Rubin v. New Jersey (Tidbit)
Jeremy Rubin, a 19 year old MIT student in Massachusetts, developed a computer program called Tidbit with some classmates as part of the Node Knockout Hackaton in November 2013. Tidbit allows users to mine for Bitcoins on a client’s computer as a replacement for traditional advertising. Tidbit was..…