用語集 / マイニングとコンセンサス
ブロックsigop上限
- ブロックsigop上限とは?
- ブロックsigop上限は、ビットコインの各ブロックの署名操作コストを80,000単位に制限するもので、4,000,000の重量単位のサイズ予算とは別に計上される検証予算です。
BIP-141で規定されています。
署名の検証にはノードの時間がかかるため、コンセンサスはその作業をブロックの容量に割り当てるのではなく、独自の予算で計測します。BIP141はこの計測値を80,000単位に定め、従来の署名操作1回をその4単位として価格付けし、以前の上限20,000を4倍にしました。通常の単一鍵またはTaprootの出金では数単位しか消費しないため、この上限はビットコインを移動するほぼすべての人にとって見えない存在です。
仕組み
ブロックsigop上限は累積の合計値であり、ノードがブロックを接続する際にトランザクションごとに加算され、合計が80,000を超えたブロックは無効になります。
これを算出するために何かが実行されるわけではありません。ノードはスクリプトのバイト列を走査してオペコードを数えるため、使用時に決して通らない分岐にある署名検証も満額で計上されます。この悲観的な扱いは意図的なものです。ノードは何かを検証する前に、そのブロックが処理可能かどうかを知る必要があります。
3つの集計が合算され、それらはすべて同じトランザクションに帰着するわけではありません。レガシーの集計は、トランザクション自身の入力スクリプトと自身の出力スクリプトを読み、4倍します。そのためscriptPubKeyに書かれた操作は、後でそれを使用する者ではなく、その出力を作成する者に請求されます。pay to script hashの集計は、使用する入力が明らかにするredeem scriptを読み、これも4倍します。ウィットネスの集計は額面どおりに数えます。P2WPKH入力は1単位、P2WSHスクリプトはP2SHの場合とまったく同じように請求されます。
これらの走査の間の1つの違いが実際のコストを左右します。P2SHとウィットネスの読み取りは、BIP141の割引を適用します。すなわちOP_1からOP_16が先行するOP_CHECKMULTISIGは、一律の20ではなく1から16として数えられます。レガシーの走査はこれを決して適用しません。素の2-of-3マルチシグ出力には全20操作、すなわち予算の80単位が請求され、しかも作成時に請求されます。
Tapscriptはこの予算から完全に外れました。BIP342はtapscriptの署名操作をブロック全体の80,000から除外し、代わりに各スクリプトに独自の割当を与えました。50単位に、その入力のウィットネスのシリアライズされたサイズを加えたもので、実際の署名が付いた状態で署名オペコードが実行されるたびに50ずつ減ります。50は、400万の重量を8万のsigopで割った値であり、2つの上限の比率です。
どこで見られるか
リレーポリシーは、ネットワークのルールよりもはるかに早い段階で、それより厳しい3つのBitcoin Coreの定数を通じてブロックsigop上限に達します。
1つのトランザクションが請求できるのは、ブロック予算の5分の1、すなわち16,000単位までです。標準のpay to script hash入力が明らかにできるredeem scriptに含められる署名操作は15個までです。3つ目の集計は、ウィットネス以外の操作を、それが置かれている場所ではなく実際に実行され得る場所で読み取り、トランザクションあたり2,500を超えるとリレーを止めます。これは使用されるscriptPubKeyを読み、ブロック全体の集計では作成時にすでに請求済みです。
この上限は手数料にも及びます。Bitcoin Coreのbytespersigop設定は、既定値20で、トランザクションの重量を、実際の重量とsigopコストの20倍のうち大きい方で置き換えます。そのため、サイズの割に署名操作の多いトランザクションは、実際よりも大きいものとして価格付けされます。素のマルチシグ出力を作成することが、これに引っかかる通常の方法です。
マイナーは、重量と並ぶ第2の制約としてこの予算に直面します。BIP342はtapscriptを除外した理由としてこれを挙げています。2つの上限は、1つの上限よりもブロックの構築を難しくします。Coreはテンプレートを埋める前に、coinbase出力用として400単位を確保します。
ブロックsigop上限vsブロック重量
ブロック重量はデータを数え、ブロックsigop上限は検証作業を数え、ブロックはどちらかの上限に達した時点で満杯になります。通常のブロックが最初に達する上限は重量です。P2WPKH入力は1単位しかかからず、Taprootの使用はまったく何も加えないためです。したがってsigop予算が結果を左右するのは、旧式のスクリプトを詰め込んだブロックの場合だけです。一方の上限を他方で割ると、署名操作1回あたり50重量単位になります。これはBIP342がtapscript予算の価格付けに再利用した比率であり、バイト数と署名検証の間の為替レートに最も近いものです。