ビットコインの 2MB フォークは、コードを 1 行変更するだけの問題でしょうか?

ビットコインの 2MB フォークは、コードを 1 行変更するだけの問題でしょうか?

ビットコインのブロックサイズ制限を 1 メガバイト (1MB) から 2 メガバイト (2MB) に増やすのは、一見簡単に思えるかもしれません。ソースコード内の数字「1」を「2」に変更するだけで完了する、そうですよね?

スムーズなアップグレードを気にしなければ、おそらくそれはそれほど単純なことでしょう。次のコード行を変更するだけです (src/consensus/consensus.h 内)。

 ... MAX_BLOCK_SIZE=1000000

に:

 ... MAX_BLOCK_SIZE=2000000

変更後に Bitcoin Core を再コンパイルして実行すると、動作します。コンピュータはブロックチェーン全体をダウンロードし、ネットワーク上の他のコンピュータと問題なく相互運用できるようになります。

コンピュータがトランザクションをブロックに組み立てている場合(単独でマイニングしている場合、またはマイニング プールのオペレーターである場合)、状況はさらに複雑になります。この記事の残りの部分では、その複雑さについて説明します。これにより、問題についての理解が深まり、コンセンサス レイヤーへの変更が安全であることが保証されるようになります。

Github には、コードを並べて比較できる便利な機能があります。 2MB フォークのコード変更を確認するには、https://github.com/bitcoin/bitcoin/compare/v0.11.2…gavinandresen:two_mb_bump にアクセスしてください。次のような画面が表示されます。

ブロック サイズの増加を実装する「コミット」(コード変更のグループ)は 5 つあります。最初の David Harding のコミットは無視してください。これは Bitcoin Core 0.11.2 の最後のコミットです。

22 個のファイルに変更があり、約 900 行の新しいコードが追加されました。そのうち半分以上 (500 行) は、新しいコードが適切に動作することを確認するための新しいテストでした。

最初のコミットは「2MB のブロック サイズ増加のための最小限のコンセンサス/マイナーの変更」であり、20 行の新しいコードが含まれています。変更点の 1 つは、 MAX_BLOCK_SIZEが 1,000,000 バイトから 2,000,000 バイトに変更されたことです。残りの変更は、マイナーがより大きなブロックを生成しても安全かどうかを確認するために必要です。 80 バイトのブロック ヘッダーのタイムスタンプに基づいて、古いまたは新しい最大ブロック サイズを返す新しい MaxBlockSize() メソッドが定義されています。ブロックの高さや最後の 11 ブロックの平均時間などではなく、タイムスタンプを使用する理由を説明するブログ記事を 1 つ書くこともできますが、今日はやめておきます。

コンセンサスの変更は main.cpp の 2816 行目に記述されており、MAX_BLOCK_SIZE ではなく CheckBlock() メソッドと新しい MaxBlockSize() メソッドを使用して、ブロックが大きすぎるかどうかを判断します。マイナーがより大きなブロックを作成できるように、miner.cpp の CreateNewBlock() 関数と 'getblocktemplate' RPC にも同様の変更が加えられました。

次のコミット(「テスト インフラストラクチャの修正」)では、いくつかの機能が追加され、Bitcoin ソース コードのテストに使用されるコードの脆弱性が修正されました。

コードテストコードには 2 つのレベルがあります。ユニット テストは src/test/ のツリーに配置され、C++ で記述され、非常に低レベルで、コードの各部分が適切に動作することを確認するために使用されます。 qa/rpc-tests/ のツリーには回帰テストもあります。これらは Python で記述されており、RPC (リモート プロシージャ コール) インターフェイスのコマンド ライン実行「-regtest モード」を使用して、すべてが正しく動作していることを確認します。

「マイナーの投票と猶予期間後の 2 メガバイトのフォーク」はこれまでで最大のコミットであり、約 700 行の新しいコードが含まれています。ロールアウト ルールを実装します。つまり、コンピューティング能力の 75% が特別なビット ブロック バージョン番号を持つブロックを生成し、その 28 日後に、より大きなブロックの生成が許可されます。

75%28天のはかなり恣意的な選択です。私は恣意的な選択が嫌いです。主な理由は、それぞれの選択について異なる意見が出る(「バイクシェディング」とも呼ばれ、細かい点や周辺的な問題にこだわりすぎて主要な問題を無視する)ことと、無益な問題について何日も議論することだからです。これらの数字がなぜ良い選択であると考えるのかについては、別のブログ投稿で説明しました。

マイナーの投票と猶予期間のコードは、Bitcoin XT 用に私が書いた BIP 101 実装から派生したもので、3 つのレベルでテストされています。

block_size_tests.cpp に新しい単体テストがあります。 CheckBlock() 呼び出しをテストし、古いサイズ制限または新しいサイズ制限とまったく同じブロック、または古いブロック サイズ制限または新しいブロック サイズ制限より 1 バイト大きいブロックを作成し、そのタイムスタンプが、より大きなブロックが許可される時間の前か後か (または正確に) に基づいて、ブロックが受け入れられるかどうかをテストします。

新しい回帰テストbigblocks.pyもあります。 4 つの bitcoind のコピーを実行し、開発者のマシン上でテスト専用のブロックチェーンを作成し (–regtest モードでは、ブロックはオンザフライで作成されます)、次にフォーク アクティベーション コードをテストして、マイナーの投票が正しくカウントされ、ブロックチェーンの再構築が適切に処理され、移行期間後により大きなブロックを作成できることを確認しました。これにより、2018 年 1 月の期限までにハッシュレートの 75% が変更を受け入れない場合、コード全体が壊れていると報告されることも保証されます。

私の開発時間のほとんどは、回帰テストとユニットテストの実施に費やされています。その後、回帰テストと単体テストに合格すると、テスト ネットワークでさらにテストが行​​われました。コードを書くのは簡単な部分です。

最後に、ロールアウト コードのこの部分は、8MB ブロックと Bitcoin XT テスト ネットワーク (中国のグレート ファイアウォールを含む) で広範なテストを実行した Jonathan Toomim によって検証されました。

コードの変更点の調査を続けましょう…

main.cpp のIsSuperMajority()関数にもいくつかの変更があり、block.h の新しい VersionKnown() 関数も追加されています。これらは、さまざまな変更をサポートするブロックの数をカウントするために使用される関数です。ブロックサイズが増加すると、BIP 009 およびさまざまなソフトフォーク BIP (68、112、113、141) の「バージョン ビット」と同時に発生する可能性があります。

新しいコード(テスト以外)の最大量はtxdb.cppにあります。マイナーの投票が成功すると、トリガーとなるブロックのハッシュがブロックチェーン インデックスに書き込まれます。これは厳密には必須ではありませんが、コードのこの部分はブロックチェーン内のすべてのブロック ヘッダーをスキャンして、投票が実行されるたびに投票が成功したかどうかを判断します。情報の一部をブロックチェーン インデックス データベースに保存するよりも効率的です。

残念ながら、これらすべての可能性のあるコード変更を記述するには、コードを記述するよりもはるかに時間がかかります。ここで説明するコミットがあと 2 つあります。

「正確な sigop/sighash の計算と制限」は重要です。これがないと、ブロック サイズの制限を増やすと危険になる可能性があるためです。昨年 11 月に開催された DevCore カンファレンスでの私のプレゼンテーションで詳細の一部を確認できますが、基本的に、サトシはトラ​​ンザクションの署名方法について十分に考慮していなかったため、ビットコインは検証コストが高すぎる非常に大きなトランザクションを作成する可能性がありました。このコミットでは、いくつかの技術的負債をクリーンアップし、トランザクションの検証に費やされた作業量を追跡する新しいValidationCostTrackerを実装し、それを新しい制限 (MAX_BLOCK_SIGHASH) と組み合わせて使用​​することで、ネットワークを混乱させようとして検証に非常にコストのかかるブロックを作成できないようにしました。

検証にコストのかかるブロックを作成しないようにする強いインセンティブがあります (マイナーはブロックができるだけ早くネットワークを通過することを望み、孤立ブロック率を最小限に抑えるために懸命に働きます)。ただし、セキュア コーディングの原則の 1 つは「ベルトとサスペンダー」です (プロフェッショナルな印象を与えたい場合やサスペンダーという用語が気に入らない場合は、代わりに「多層防御」という用語を使用してください)。

MAX_BLOCK_SIGHASH 、もう 1 つの厄介な恣意的な制限です。これは1.3 GBに設定されており、現在この制限に達するブロックがないほど十分に大きいですが、検証に数分かかるポイズン ブロックを作成できるほど十分に小さいです。

最後のコミット「過剰な sighash トランザクションを中継またはマイニングしない」は、もう 1 つの「万全の対策」スタイルのセキュリティ対策です。非常に大規模で検証コストのかかるトランザクションを拒否する制限はすでに設定されていますが、このコミットでは別のチェックが追加され、巧妙な攻撃者がマイナーを騙してブロックに非常にコストのかかるトランザクションを入れさせることが絶対にできないようになります。

もしあなたがこれを乗り越えられるなら、あなたは私よりも集中力が持続する人です。この記事を読んでいる非プログラマーの皆さんにとって、この記事から「1」から「2」に進むときに注意すべき点を学んでいただければ幸いです。

元記事: http://gavinandresen.ninja/a-guided-tour-of-the-2mb-fork
ギャビン・アンドレセン
翻訳者: Satuoxi
出典(翻訳):バビット情報(http://www.8btc.com/guided-tour-of-the-2mb-fork ‎)


<<:  ロシアから繰り返し質問:ロシア大統領顧問はビットコインの使用は違法だと主張

>>:  テロリズムは、EU がビットコインの規制を強化するための単なる口実なのでしょうか?

推薦する

マイニングコードの共通ルーチンの一覧

最近、陝西省の多くの企業のウェブサイトに JS ウェブマイニングトロイの木馬が埋め込まれています。 ...

ダイヤモンド工場労働者の息子から10億ドル規模のブロックチェーンプロジェクトの責任者へ:Polygonの創設者たちの成長

ダイヤモンド工場の労働者の息子である彼は、かつてはインドのグジャラート州アフマダーバード郊外の小さな...

そのリズムは天の意志に反する!日本でもAlipayとWeChatを使ってビットコインで支払えるようになりました

日本のビットコイン取引所ビットポイントは水曜日、Nippon Payと提携し、中国で最も人気のある3...

米下院がフェイスブックを批判「通貨発行は「必須」ではない」

強力なコンビである米国上院と下院は、過去2日間にわたり、データプライバシー、超国家通貨、規制上の課題...

メキシコ中央銀行はビットコインをテストし、さらなる規制の達成を期待

メキシコ中央銀行総裁は、規制に備えるためにビットコインの「実験」を実施したと述べた。銀行がビットコイ...

韓国のビットコイン取引所25社が自主規制計画に参加、日本の規制枠組みから学ぶ意向

韓国ブロックチェーン協会が主導する暗号通貨の自主規制イニシアチブには現在66社の会員企業が参加してい...

PoWマイニングのリスク分析と対策

編集者注: この記事は Unitimes (ID: Uni-times) からのもので、元のリンク:...

日本のインターネット大手GMOはビットコインマイニングに3億2000万ドルを投資し、マイニング業界に革命を起こすために独自のチップを開発する予定だ

東京に本社を置くGMOインターネットグループの伝統的な事業は、ドメイン名登録やウェブホスティングとい...

「米国司法省がシルクロードビットコインの販売を承認した」というニュースはどの程度真実なのでしょうか?

市場が下落していた1月9日の朝、主要な仮想通貨メディアは悪いニュースを報じた。「米国司法省が押収した...

ナイジェリア中央銀行がビットコインを規制する計画

アジアにおけるビットコインの利用増加により、一部の政府や財務省は暗号通貨の規制を検討し始めている。特...

人民日報:新技術がデジタル通貨の進化を先導し、良貨が悪貨を駆逐

最近、電子決済技術の影響が注目され始めています。多くのイベントの中で、Appleのモバイル決済サービ...

Coinbaseの爆発的なパフォーマンスと将来への懸念

デジタル通貨取引プラットフォームがIPOを通じて従来の証券取引所に上場した。これによって誕生した「世...

ワールドワイドウェブコンソーシアム(W3C)はブロックチェーンセミナーを開催し、ブロックチェーン技術の公開標準の策定を求めた。

私たちはデジタル時代に生きています。誰もがテクノロジーを愛し、テクノロジーが産業革新の唯一の原動力で...