ポピュラーサイエンス: ビットコインの新しいブロック生成のプロセス
これは、ブロガーの鉱山ポピュラーサイエンスアルバムの前回に続く 2 番目のコンテンツです。「ビットコイン取引のプロセス」、開始から確認までのビットコイン取引の全プロセスを分析することで、ビットコインマイニングの全体像を把握し続けます。
存在する
存在する「ビットコイン取引のプロセス」最初の記事で、ビットコインの取引情報がどのように構成されているかはすでにわかりましたが、この情報はどのようにしてビットコインの新しいブロックに入力されるのでしょうか?
次に、ブロガーは、新しいビットコインブロックが生成されるプロセスを通じて、ビットコインブロックがどのように取引情報を記録および確認するかを説明します。
まずアムウェイになるために必要な知識ポイントをいくつか紹介します。
トランザクションプール, 英語名:mempool、メモリプールとも呼ばれ、確認されるトランザクションを保存するために使用されます。各ビットコインマイニングノードには独自の独立したトランザクションプールがあります。トランザクションプールのサイズにより、最小トランザクション手数料率(手数料率)はトランザクションに含まれる単位量当たりの手数料であり、単位はSat/B、つまりBバイトトランザクションごとの手数料は×Satoshi bitcoin、以下同じ) 各ノードのトランザクションプールは異なるさまざまな制限があるため。マイナー(マイニングプール)は、予備ブロックを構築する際に、パッケージ化するトランザクションをトランザクションプールから選択する必要があります。トランザクション プールは頻繁に呼び出されるため、そのデータはノード サーバの RAM に保存されるため、トランザクション プールの容量はそれほど大きくなりません。
マイニングノード, ビットコインネットワークにおいて、ビットコイントランザクションとブロックの記録と検証に参加するのは、ビットコインデータを保存するノードです。これらのノードの中には、記録と検証作業に参加するだけでなく、新しいビットコインブロックの作成にも参加し、新しいブロックを構築し、PoW ワークロード証明を通じて簿記権を競い合い、新しいブロックを作成する権限を取得するものもあります。ノードはマイニングノードです。初期のマイニングノードにはマイナーとマイニングプールがありましたが、現在ではビットコインマイニングの難易度が高いため、単一のマイナーが簿記の権利を獲得して新しいブロックを作成することは困難です。現在、主要なビットコイン マイニング ノードは、F2Pool、Poolin、BTC.com、Antpool、Slushpool などのマイニング プールです。
UTXOライブラリ、ビットコインノードはノードのすべてのトランザクション情報をスキャンしてUTXOクラスターを構築します。これには、未使用の UTXO がすべて含まれます。新しいブロックが生成されるたびに、UTXO ライブラリは新しいブロックで消費された UTXO を自身のリストから削除し、新しく生成された UTXO を自身のリストに追加します。
コインベースの報酬副題
確認されるトランザクションは、最初にトランザクション プールに入ります。
ビットコイントランザクションを開始したい場合、トランザクション開始者はトランザクション情報を構築します。このときのトランザクション情報が確認対象のトランザクションになります。トランザクション入力情報(未使用の UTXO が正しい秘密鍵で署名されている) およびトランザクション出力情報(新しいウォレットアドレスをロックするUTXOの確認待ち)。
画像の説明
図1 確認対象のトランザクションがトランザクションプールに入る
確認する必要がある取引情報には次のものが含まれます。
トランザクションに有効な入力および出力ウォレット アドレスが含まれているかどうか。
トランザクション量がブロックの最大量より小さいかどうか (ビットコインブロックの最大量は現在 1M です)。
入力 UTXO が正当であるかどうか (ノードの UTXO ライブラリと比較して、入力 UTXO が使用されていない)。
トランザクションの総インプットと総アウトプットが妥当であるかどうか (総インプット ≥ 総アウトプット)。
トランザクションの入力に Coinbase からの報酬があるかどうかを判断し、報酬に対応する通貨を使用するには、少なくとも 100 回のブロック確認が必要です。
トランザクション プールに重複したトランザクションがないことを確認します。
副題
マイニングノードはトランザクションプールからトランザクションを選択し、予備ブロックを構築します。
マイニング ノードが予備ブロックを構築し、新しいブロックを生成する準備をしたい場合、優先度に従ってトランザクションを並べ替え、確認するトランザクションをトランザクション プールから取得します。通常、リザーブブロックは優先度の高いトランザクション用に特定のスペースを予約し、残りのスペースは、高から低までの取引手数料率(Sat/B)に従ってブロックを埋めるか、トランザクションプール内のトランザクションを使い切るために使用されます。 。
画像の説明
で、
で、「マジックナンバー」値が 0xD9B4BEF9 である定数です。「ブロックサイズ」このブロック内のすべてのデータの合計容量です。「ブロックヘッダー」これはブロック全体の短縮情報とみなすことができ、マイニングに使用されるブロック情報はブロック ヘッダーです。「トランザクションカウンター」ブロック内のトランザクションの数を記録するために使用されます。「取引データ」これは、Coinbase の報酬部分を含む、ブロックに含まれるすべての取引情報であり、一般に、この部分のデータがブロック全体のスペースの大部分を占めます。
ビットコイン ブロックでは、ブロック ヘッダーが最も重要な情報です。これには、ブロック全体のすべての特性情報が含まれます。
ブロックのバージョン番号。ブロックを作成したビットコイン ノードのバージョン情報は、ビットコイン プロトコルのアップグレードと更新を追跡するために使用されます。
前のブロックのハッシュ。親ブロック ハッシュとも呼ばれ、前のブロックを見つけるために使用されます。各ブロックには前のブロックのハッシュ値が含まれており、ブロックにわずかな変更を加えると、後続のブロックのハッシュ値に大きな変更が生じます。これらのブロックは非常に連動しているため、すべてのビットコイン ブロックが確実に単一のチェーン構造を形成し、これを効果的に防止できます。ビットコインブロックデータの悪意のある改ざん。
マークルルートハッシュ画像の説明
図3 トランザクションデータのマークルツリー構造
ハッシュ アルゴリズムの機密性により、トランザクション全体のマークル ツリー内のトランザクション データにわずかな変化が生じると、リンク効果が生じ、マークル ツリーのルート ハッシュ値に大きな変化が生じます。したがって、トランザクションデータのマークルルートハッシュ値(MerkleRoot Hash)は、ブロック内のトランザクションデータを参照するために使用されるトランザクション全体のフィンガープリントとみなすことができます。
タイムスタンプ。準備ブロックを作成する時間。
現在のターゲットハッシュ乱数
乱数。ナンスとも呼ばれます。ブロックヘッダー情報では、ブロックのバージョン番号、前のブロックのハッシュ値、MerkleRoot ハッシュ値、タイムスタンプ、および現在のターゲットハッシュはすべて既知の情報であり、比較的固定されており、自由に変更するのは不便であることがわかります。 。したがって、準備ブロックのハッシュ値を調整したい場合は、変数データ、つまり乱数を導入する必要があります。乱数を変更することで、準備ブロックのハッシュ値を調整することができる。
マイニングノードは準備ブロックを構築した後、ブロックヘッダー情報をマイナーに送信します。マイナーはブロックヘッダー内の乱数を継続的に調整することで準備ブロックのハッシュ値を変更します。準備ブロックのハッシュ値がlow ビットコイン ネットワークの現在のターゲット ハッシュ レートでは、このブロックは正当な新しいブロックです。
参考文献:
参考文献:
ビットコインのソースコード分析
ビットコインブロックのヘッダー構造解析:
ビットコインのターゲットハッシュレート
ビットコインのブロック構造
ビットコインをマスターする


