ビットコインのブロックサイズ制限を 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 つは、 コンセンサスの変更は 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 日後に、より大きなブロックの生成が許可されます。 マイナーの投票と猶予期間のコードは、Bitcoin XT 用に私が書いた BIP 101 実装から派生したもので、3 つのレベルでテストされています。 block_size_tests.cpp に新しい単体テストがあります。 CheckBlock() 呼び出しをテストし、古いサイズ制限または新しいサイズ制限とまったく同じブロック、または古いブロック サイズ制限または新しいブロック サイズ制限より 1 バイト大きいブロックを作成し、そのタイムスタンプが、より大きなブロックが許可される時間の前か後か (または正確に) に基づいて、ブロックが受け入れられるかどうかをテストします。 新しい回帰テスト 私の開発時間のほとんどは、回帰テストとユニットテストの実施に費やされています。その後、回帰テストと単体テストに合格すると、テスト ネットワークでさらにテストが行われました。コードを書くのは簡単な部分です。 最後に、ロールアウト コードのこの部分は、8MB ブロックと Bitcoin XT テスト ネットワーク (中国のグレート ファイアウォールを含む) で広範なテストを実行した Jonathan Toomim によって検証されました。 コードの変更点の調査を続けましょう… main.cpp の 新しいコード(テスト以外)の最大量は 残念ながら、これらすべての可能性のあるコード変更を記述するには、コードを記述するよりもはるかに時間がかかります。ここで説明するコミットがあと 2 つあります。 「正確な sigop/sighash の計算と制限」は重要です。これがないと、ブロック サイズの制限を増やすと危険になる可能性があるためです。昨年 11 月に開催された DevCore カンファレンスでの私のプレゼンテーションで詳細の一部を確認できますが、基本的に、サトシはトランザクションの署名方法について十分に考慮していなかったため、ビットコインは検証コストが高すぎる非常に大きなトランザクションを作成する可能性がありました。このコミットでは、いくつかの技術的負債をクリーンアップし、トランザクションの検証に費やされた作業量を追跡する新しい 検証にコストのかかるブロックを作成しないようにする強いインセンティブがあります (マイナーはブロックができるだけ早くネットワークを通過することを望み、孤立ブロック率を最小限に抑えるために懸命に働きます)。ただし、セキュア コーディングの原則の 1 つは「ベルトとサスペンダー」です (プロフェッショナルな印象を与えたい場合やサスペンダーという用語が気に入らない場合は、代わりに「多層防御」という用語を使用してください)。 最後のコミット「過剰な sighash トランザクションを中継またはマイニングしない」は、もう 1 つの「万全の対策」スタイルのセキュリティ対策です。非常に大規模で検証コストのかかるトランザクションを拒否する制限はすでに設定されていますが、このコミットでは別のチェックが追加され、巧妙な攻撃者がマイナーを騙してブロックに非常にコストのかかるトランザクションを入れさせることが絶対にできないようになります。 もしあなたがこれを乗り越えられるなら、あなたは私よりも集中力が持続する人です。この記事を読んでいる非プログラマーの皆さんにとって、この記事から「1」から「2」に進むときに注意すべき点を学んでいただければ幸いです。 元記事: http://gavinandresen.ninja/a-guided-tour-of-the-2mb-fork |
<<: ロシアから繰り返し質問:ロシア大統領顧問はビットコインの使用は違法だと主張
>>: テロリズムは、EU がビットコインの規制を強化するための単なる口実なのでしょうか?
最近、陝西省の多くの企業のウェブサイトに JS ウェブマイニングトロイの木馬が埋め込まれています。 ...
ダイヤモンド工場の労働者の息子である彼は、かつてはインドのグジャラート州アフマダーバード郊外の小さな...
出典:中国人民銀行...
日本のビットコイン取引所ビットポイントは水曜日、Nippon Payと提携し、中国で最も人気のある3...
強力なコンビである米国上院と下院は、過去2日間にわたり、データプライバシー、超国家通貨、規制上の課題...
メキシコ中央銀行総裁は、規制に備えるためにビットコインの「実験」を実施したと述べた。銀行がビットコイ...
韓国ブロックチェーン協会が主導する暗号通貨の自主規制イニシアチブには現在66社の会員企業が参加してい...
最近、Bitmain が設立した Ant Training Academy の第 2 レベル コース...
編集者注: この記事は Unitimes (ID: Uni-times) からのもので、元のリンク:...
東京に本社を置くGMOインターネットグループの伝統的な事業は、ドメイン名登録やウェブホスティングとい...
市場が下落していた1月9日の朝、主要な仮想通貨メディアは悪いニュースを報じた。「米国司法省が押収した...
アジアにおけるビットコインの利用増加により、一部の政府や財務省は暗号通貨の規制を検討し始めている。特...
最近、電子決済技術の影響が注目され始めています。多くのイベントの中で、Appleのモバイル決済サービ...
デジタル通貨取引プラットフォームがIPOを通じて従来の証券取引所に上場した。これによって誕生した「世...
私たちはデジタル時代に生きています。誰もがテクノロジーを愛し、テクノロジーが産業革新の唯一の原動力で...