126 / 736WU

Block Weight

ブロックの重み

待機中の支払いがすべて同じブロックに入らないのはなぜでしょう。満杯のブロックでもバイト数が違う理由と、ネットワークが受け入れるデータ量の上限を説明します。

Block Weight は、Bitcoin がブロックの容量使用量を測る方法です。ブロックとは共通の履歴に追加される取引のまとまりで、データの部分ごとに異なる重みで数えます。重みには一定の上限がありますが、取引件数や送金額を定めるものではありません。

Transaction Fees:サイズと手数料取引の仮想サイズ、指定した料率での手数料、選択通貨でのおおよその価値を見積もります。

アンナが Bitcoin を送っても、次のブロックにその支払いが入らないことがあります。それだけでお金が消えたとはいえません。未承認の取引は、各ノードが持つ待機場所である Mempool に残っているかもしれません。ノードは、取引やブロックを検証し、ネットワークの他の参加者と通信するソフトウェアです。マイナーは限られた容量に入れる取引を選び、小さめのブロックを作ることもできます。手数料は動機づけであって、特定の支払いを入れる命令ではありません。Block Weight が説明するのは、その選択にかかる制約の一つです。遅延の原因すべてではありません。 [1] [7]

上限は 4 000 000 WU で、この値ちょうどまで認められます。WU は重みの単位です。Full Node は Bitcoin のルールを自ら検証し、上限を超えたブロックを拒否します。手数料が高くても、採掘に必要な計算上の証明である Proof of Work が正しくても救済されません。その証明を見つけることと、有効なブロックを構成することの両方が必要です。容量はマイナーの希望だけでは決まりません。 [1] [3] [4]

バイトはデータ量を表す一般的な単位です。SegWit は、コインを使う権限を示すデータの一部、たとえば署名を分離しました。この部分を witness と呼びます。基本データの一バイトは 4 WU、完全な witness 形式で追加される一バイトは 1 WU です。その形式に含まれる補助フィールド marker と flag も後者に入ります。すべてのバイトを同じように数えず、取引の基本構造を保ちながら検証データを収める余地を設けています。 [1] [2]

署名は、送り手が特定のコインを使う権利を示します。その条件はスクリプトという短いプログラムに記されています。witness の重みが小さいからといって、検証するノードが必要な署名やスクリプト条件を無視してよいわけではありません。データは完全な形式にも残っています。これは容量の数え方のルールであり、処理負荷、通信量、保存容量が同じ割合で減るという意味ではありません。 [1] [4]

シリアライズとは、コンピューターが交換できる正確なバイト列としてブロックを書き表すことです。witness を除いたサイズを B、完全なサイズを T とします。BIP 141 の式は W = 3 × B + T です。基本データは T にも含まれるため、合計で四倍に数えられます。witness 形式で増えたデータは一度だけ数えます。式の対象は通常の支払いだけではなく、ブロック全体です。 [1] [8]

例として B = 500000、T = 2500000 バイトなら、W = 4000000 WU になります。別の構成で B = 750000、T = 1750000 バイトとしても、W = 4000000 WU です。これは計算例であって実測したブロックではありません。重みは同じでも、後者の送信バイト数は少なくなります。したがって「満杯のブロックは必ず 4 MB」という説明は誤りです。入る取引件数も一定ではありません。 [1]

ブロックは利用者の支払いを並べただけのものではありません。80 バイトのヘッダーがあり、前のブロックへの参照や取引の要約などを含みます。その後に、可変長の整数表現である CompactSize で記した取引件数が続きます。最初の取引は、マイナーの報酬に使う特別な Coinbase Transaction です。ここでの名前は取引所を指しません。これらもすべて計算に入るため、残りの取引の重みを足しただけではブロック全体の重みになりません。 [5] [7] [8]

ウォレットは、ビットコインを受け取ったり送ったりするためのアプリや機器です。通常は、取引の仮想サイズを vByte 単位で扱います。取引全体の重みを 4 で割り、端数を切り上げた値です。使う容量に対する手数料を比べるのに役立ちます。ただし、こうして丸めた取引サイズを足しても正確なブロックの重みにはなりません。単位が違い、取引ごとに切り上げがあり、ブロック固有の構造部分も欠けるからです。送金額が大きいこと自体は、データ量の多さを意味しません。 [1] [8]

重みだけではノードの仕事すべてを表せません。適用されるルールには、署名検証演算の重み付きコストを 80 000 単位までとする制限もあります。これはブロック内の全署名を単純に数えたものではありません。Taproot とともに導入されたスクリプト言語 Tapscript には入力ごとの別の予算があります。入力とは以前受け取ったコインを使う取引の部分です。その署名操作は上述の従来のブロック全体の制限には加算されません。BIP 342 がこの別の制約を説明しています。重みの上限を守れば、どれほど重い検証でも許されるわけではないのです。 [1] [3] [9]

ブロックエクスプローラーは、特定のネットワークの取引やブロックを調べるためのアプリです。Bitcoin Core v29.0 の getblock は、size、strippedsize、weight などを返します。順に完全なバイト数、witness を除いたサイズ、重みです。chainwork も表示されることがありますが、これはチェーンに積み重なった計算上の仕事量であり、データの重みではありません。普段の利用では容量と価格を区別しましょう。Block Weight はブロック空間を制限し、実際の手数料は取引サイズと選んだ料率に左右されます。どの値も、それだけで承認時刻を約束しません。 [6]

理解を深めるには、この項目とあわせて次もお読みください vByte, Witness Data, SegWit, ブロックサイズ戦争, Bitcoin, Full Node. 次の項目からも参照されています Signet, vByte, Witness Data, Ordinals Inscriptions.

DOC · 001BIP 141 — Segregated Witness仕様 DOC · 002BIP 144 — SegWit peer services仕様 DOC · 003Bitcoin Core v29.0 — consensus limits文書 DOC · 004Bitcoin Core v29.0 — validation文書 DOC · 005Bitcoin Developer Reference — Block chain文書 DOC · 006Bitcoin Core — getblock RPC文書 DOC · 007Bitcoin Core v29.0 — Block assembly文書 DOC · 008Bitcoin Core v29.0 — Block and transaction weight文書 DOC · 009BIP 342 — Validation of Taproot Scripts仕様
改訂日: 一次資料を優先 · 投資助言ではありません