Coinbase は、Coinbase 会社や通常の支払いではなく、合意に基づいたタイプの取引です。ブロックとともに、ノードはゼロ アウトポイント、BIP34 に基づく高さ、報酬上限、ゼロ ポジション、成熟度、および可能な SegWit コミットメントを検証します。個別に mempool に受け入れることはできません。
ブロックには少なくとも 1 つのトランザクションが含まれている必要があり、coinbase は最初のトランザクションのみにすることができます。 Bitcoin Core は、その正確な構造、つまり前の出力のハッシュに 32 個のゼロバイトを含む単一の入力と 0xffffffff のインデックスによってこれを認識します。この入力は既存の UTXO のロックを解除しないため、通常の署名や prevout 値はありません。トランザクションには、通常バージョン、ロックタイム、カスタム txid など、複数の出力を含めることができます。 [ビットコイン開発者リファレンス — Coinbase 入力] [ビットコイン開発者リファレンス — ブロック チェーン] [ビットコイン コア —transaction.h (IsCoinBase)]
Coinbase の出力の合計は、その金額にブロック内の他のすべての有効なトランザクションの手数料を加えた GetBlockSubsidy を超えることはできません。新しく発行された報酬コンポーネントのみが新しい SATOSHI を作成します。料金は既存のサトシを変換します。マイナーは請求できる額が少なくなり、その差は永久になくなりますが、1 人のサトシが制限を超えるとブロック全体が無効になります。コンセンサスは、プール、マイナー、または複数のスクリプト間の分割を決定しません。 [ビットコインコア — validation.cpp] [ビットコインコア — miner.cpp]
BIP34 以降、scriptSig コインベースは、最小限にエンコードされた CScript 番号として現在のブロックの高さで開始する必要があります。 scriptSig 全体は 2 ~ 100 バイトです。残りの部分には、追加のナンス、プール タグ、またはマージされたマイニング コミットメントが含まれる可能性がありますが、ルールの範囲外ではありません。高さまたは長さが正しくないとブロックが無効になり、埋め込まれた署名オペコードが sigop 制限を消費する可能性があります。 [ビットコイン開発者リファレンス — コインベースの入力] [BIP 34 — コインベースのブロックの高さ]
ASIC はヘッダーのノンスを変更しますが、32 ビット領域はすぐに使い果たされます。したがって、マイニング ソフトウェアは余分なノンスをコインベースに変換します。これにより、txid、マークル ルート トランザクション、およびその後のブロック ヘッダーが変更されるため、新しいハッシュ スペースが取得されます。プール プロトコルは、共有が衝突しないように、このスペースをワーカー間で分割します。余分なノンスはコーディネートの一部であり、余分な放出ではありません。 [ビットコインコア — miner.cpp] [BIP 22 — getblocktemplate] [Stratum V2 — マイニングプロトコル仕様]
Coinbase の出力は共通のロック スクリプトを使用し、複数のアドレスまたはポリシーに分割できます。プールは、回収アドレスに支払ったり、収益をすぐに分割したり、オペレーターのために出力を予約したりできます。ただし、ノードは契約書や実際の所有者ではなく、金額とスクリプトを検証します。支払いしきい値、PPS、FPPS、PPLNS、およびそれ以降の出金は、非プロトコル プール ルールです。 [ビットコインコア — miner.cpp] [BIP 22 — getblocktemplate]
ブロックに監視トランザクションが含まれている場合、BIP141 は 1 つの出力 (6a24aa21a9ed で始まる OP_RETURN と 32 バイトのコミットメント) にコインベース監視コミットメントを必要とします。 Coinbase 入力監視には、単一の 32 バイトの予約値が含まれています。一致する出力がさらにある場合、コンセンサスは最も高いインデックスを取得します。この出力は、監視マークル ルートをバインドします。鉱山労働者への報酬ではありません。 [BIP 141 — 隔離された証人の取り組み]
Coinbase の出力は、UTXO セット内の特別なフラグでマークされ、消費ブロックと作成ブロックの高さの差が COINBASE_MATURITY (今日では 100) に達した場合にのみ使用できます。 したがって、高さ H からの報酬はブロック H+100 で初めて使用できます。生成ブロックが最初にカウントされるため、ウォレットでは 1 回の確認の明らかな違いが表示される場合があります。成熟とは最終的なものではありません。 [ビットコインコア — consensus.h (COINBASE_MATURITY)]
マイニングされたブロックが再編成中に最も多くの作業を行ってアクティブなチェーンからドロップアウトすると、そのコインベースの出力はアクティブな UTXO セットから消えます。すでに満期報酬を消費した後続の取引も無効になる場合があります。 100 ブロックの遅延は、短い再編成によるダメージを制限しますが、不変性は保証されません。プールは、アクティブなチェーン、成熟度、マイナーへのコミットメントを個別に監視する必要があります。 [ビットコインコア — validation.cpp] [ビットコインコア — consensus.h (COINBASE_MATURITY)]
フルノードは検証中に位置ゼロのコインベースを必要とし、追加のコインベースを拒否し、scriptSigの長さとBIP34の高さをチェックし、他のトランザクションの手数料を計算し、新規発行と手数料を超える報酬を拒否します。また、価値の範囲、重み、証人のコミットメント、およびその後の支出の満期も検証します。高さとブロックコンテキストのない別のコインベースはメモリプールに属しません。 [ビットコイン コア —transaction.h (IsCoinBase)] [ビットコイン コア — validation.cpp] [BIP 141 —分離された証人コミットメント]
初期のブロックでは、高さがまだ必須ではなかったため、同じ txid コインベースを作成できました。 BIP30 は古いトランザクションの未使用の出力が上書きされるのを防ぎ、BIP34 は一般に最新のコインベースを独自の高さにします。 Genesis は歴史的な例外です。そのコインベースはシリアル化されたブロック内にありますが、初期化コードはその出力を使い捨ての UTXO データベースに入れることはありません。したがって、有名な50BTCは使用できません。 [BIP 30 — 重複トランザクション] [BIP 34 — コインベースのブロック高さ] [ビットコインコア —chainparams.cpp (ジェネシス構築)]
理解を深めるには、この項目とあわせて次もお読みください ブロック, ブロック報酬の新規発行分, トランザクション手数料, ビットコイン・マイニング, Block Template, Bitcoin. 次の項目からも参照されています ブロック報酬の新規発行分, 承認, Reorg, Stale Block.