用語集 / マイニングとコンセンサス
コンセンサス
- コンセンサスとは?
- ビットコインにおけるコンセンサスとは、同一のルールに従ってそれぞれ独立に運用されるノードが1つのチェーン、すなわち最も多くのプルーフ・オブ・ワークを蓄積した有効なチェーンについて合意している状態を指します。
誰も投票せず、誰も指揮を執りません。各ノードはすべてのブロックを同じルールブックに照らして検証し、その後、最も多くの作業を積んだ有効なチェーンに従います。これにより、ゼロから同期するノートパソコンでも、2009年1月3日まで遡る同一の履歴を正確に再構築できます。ビットコインを購入するとき、送られたビットコインが実際に自分のものであるかを決めるのは、この仕組みです。
仕組み
合意は、投票を行うのではなく、2つの問いを決まった順序で投げかけることで成立します。
1つ目の問いは有効性です。ノードはブロックを受け取ると、単独で検証します。署名、金額、マークルルート、マイナーが請求するブロック補助金、ブロックの重さ、タイムスタンプです。検証に通らないものはその場で破棄され、その生成に費やされた電力の量は関係ありません。2つ目の問いは、有効な選択肢の中からの選択です。競合する2つの履歴がどちらも検証を通る場合、ノードはヘッダー全体で合計した作業量が最も大きい方を保持します。これはブロック数が最も多い方とは同じではありません。難しいブロックからなる短い枝が、易しいブロックからなる長い枝に勝ります。
欠けているものに注目してください。ノードは決して意見を交換せず、選好を表明せず、互いを数えることもありません。ブロックとトランザクションを中継し、届いたものに同じ検証を適用し、検証が決定論的であるため同じ結論に至ります。合意は、全員が別々に計算を行うことの副産物であり、だからこそこのネットワークには、不正に操作されうる定足数も、召喚されうる委員会も存在しません。
短時間の不一致は日常的なものです。2人のマイナーがたまたま1秒差以内に解を見つけ、世界の半分が一方のブロックを先に見るため、数分間は2つの候補先端が存在します。次のブロックが決着をつけ、一方の枝は陳腐化したブロックとして放棄され、そのトランザクションはメモリプールに戻ります。深い不一致は興味深い事例であり、ノードが異なるルールを実行しているときにのみ起こります。ルールを厳しくすれば、古いソフトウェアは新しいソフトウェアが生成するすべてを依然として受け入れます。これがソフトフォークであり、Taprootは2021年11月にその形で導入され、何も分裂させませんでした。ルールを緩めれば、2つのグループは恒久的に異なるチェーンに従います。これがハードフォークであり、Bitcoin Cashが分離した2017年8月1日にまさに起こったことです。
ビットコインを購入するときにこれが重要な理由
合意は、ビットコインの残高を、保有している誰かからの約束ではなく、あなた自身のものにする仕組みです。
チェーンはアウトプットと、それを消費できる鍵について合意します。口座保有者という概念はありません。ビットコインを取引所に置いている間、合意が見るのは取引所のアドレスだけであり、あなたの請求権はその企業のデータベースの1行であり、ノードではなく契約法によって執行されます。自分が鍵を管理するウォレットに移せば、立場は逆転します。世界的なルールブックがあなたの消費権限を直接認めるようになり、サポートチケット、凍結、破綻のいずれもそれを変えません。これが自己管理を支える論拠のすべてであり、信頼ではなく合意についての主張です。
フォークはこの区別を可視化します。2017年8月1日に自分で鍵を管理していた人は、両方のチェーンでビットコインを管理する結果になりました。両方のチェーンが同じアウトプットの履歴を継承したからです。プラットフォームを通じて保有していた人は、そのプラットフォームが選んだことを受けることになり、新しい資産を計上するまで数週間かかったところもあれば、まったく対応しなかったところもあります。同じ論理が将来のあらゆる分裂にも当てはまります。
合意はまた、規制とは異なる意味で世界的です。当サイトの231か国の国別ガイドは、何が合法か、何を報告しなければならないか、どのプラットフォームがあなたを受け入れるかについて大きく異なりますが、そのいずれも台帳には届きません。ドイツで購入したビットコインとナイジェリアで購入したビットコインは同じルールで検証され、同じUTXOセットに存在し、ノードから見て区別できません。国境で変わるのは、誰があなたに売るかと、あなたが税務当局に何を負うかであり、ネットワークが何を有効とみなすかではありません。
ビットコインが2つのチェーンで動いた2013年3月の6時間
2013年3月11日にマイニングされたブロック225,430は、あるバージョンのソフトウェアには受け入れられ、その前のバージョンには拒否されました。
Bitcoin 0.8はデータベースをBerkeley DBからLevelDBに切り替え、その際に、古いデータベースが大きなブロックを処理する際に取得できるロック数に関する文書化されていない制限を静かに削除しました。そのブロックはこの制限を超えていました。0.7を実行するノードはそれを拒否し、0.8を実行するノードはその上に構築し、ネットワークは約6時間にわたって2つのチェーンを維持しました。決済処理業者OKPayに対して約10,000ドルの二重支払いが1件成立しました。
その解決は、どのプロトコル文書にも書かれていないことを示しています。開発者は、より制限の厳しいチェーンが勝つようにマイニングプールに0.7へのダウングレードを求め、プールはそれに応じ、すでに報酬を受け取っていたブロックを破棄しました。バージョン0.8.1はほどなく、生成するブロックに500,000バイトの一時的な上限を設けてリリースされ、BIP50が事後分析として書かれました。この出来事は、ビットコインのルールとは展開されたソフトウェアが実際に執行するものであり、バグも含まれること、そしてソフトウェアがそれ自体と矛盾するときには人間が選択しなければならないことの、標準的な証拠です。
合意vs合意ルール
合意は結果であり、合意ルールはそこに至るための基準です。ルールはコードに書かれた有効性検証の固定された一覧であり、互換性のあるソフトウェアを実行する全員にとって同一です。合意は、その一覧を届いたブロックに適用した変化する結果であり、だからこそ2つの正直なノードが、ほぼ同時のブロックの後で異なる先端を持ち、一時的に合意から外れながらも、ルールについては完全に一致できるのです。ルールを変えれば可能な合意も変わり、何も変えなければ、新しい作業が届くたびに合意は10分ごとに動き続けます。