39 / 736CBTX

コインベース取引

採掘したブロックの報酬を割り当てる取引

Bitcoin に中央の金庫がないなら、誰がマイナーに報酬を払うのでしょうか。マイナーはブロックの先頭に特別な取引を置いて報酬を記し、他のノードが上限を超えていないか検証します。この取引が coinbase です。

Coinbase 取引は、許された新規ビットコインと他の取引の手数料からなるブロック報酬を割り当てます。普通の支払いと違い、以前受け取った資金を使う取引ではありません。ただし、有効なブロックの一部としてのみ有効で、報酬はすぐには使えません。取引所 Coinbase ではなく、取引の種類を表す名前です。

アンナが採掘用のブロック候補を準備しているとします。利用者の支払いを集め、その前に報酬の受取人を指定する特別な取引を置きます。この例では、規則が新規発行を 3.125 BTC まで認め、選んだ支払いの手数料が 0.075 BTC あります。したがってアンナが受け取れるのは最大 3.2 BTC です。この先頭の取引が coinbase です。ただ書き込んだだけでは報酬は得られません。ブロックは採掘の要件と他のすべての条件を満たす必要があり、受け取ったノードが自分で検証します。多く取り過ぎていれば、発見までにどれほど電力を費やしていてもブロック全体を拒否します。中央の口座から報酬が振り込まれるわけではありません。採用されたブロックの中で共通の規則に従って新しいコインが生まれます。例の 3.2 BTC のうち新しいのは 3.125 BTC だけで、残りは利用者の負担です。これは報酬の例であり利益ではありません。採掘費用はまだ引いていません。 [6] [4]

認められた新規発行分を Block Subsidy と呼び、Halving で定期的に半減します。Satoshi はビットコインの最小単位です。一方、手数料は選んだ支払いに左右されるので、二つのブロックの報酬が同じとは限りません。 報酬の上限は、その高さで認められる新規発行分と、ブロック内の他の有効な取引の手数料を合計したものです。Bitcoin Core は前者を GetBlockSubsidy で計算します。供給量を増やすのは新規発行分だけで、手数料は既存の satoshi です。少なく受け取ることはできますが、差額を後で請求できません。受け取らなかった新規発行分は発行されず、未回収の手数料は永久に使えなくなります。上限を 1 satoshi でも超えるとブロック全体が無効です。 [4] [6]

報酬は複数のマイナーの作業をまとめるプールに送られることもよくあります。ロックスクリプトは、出力を後で使うための条件を定める短いプログラムです。PPS、FPPS、PPLNS はプールが参加者に収入を分ける方式の名前です。 出力には通常のロックスクリプトを使います。報酬を一つの集約アドレスに送ることも、複数の受取人に分けることも、プール運営者の取り分を設けることも可能です。ノードが調べるのは金額と支出条件であり、契約や実際の所有者ではありません。PPS、FPPS、PPLNS、最低支払額、参加者への後日の送金はプールの規則で、Bitcoin の合意ルールではありません。 [6] [7]

アンナはブロック内の報酬を見られても、まだ電気代を払えません。取引所による留保ではなく、Bitcoin の規則が待機を要求します。ブロック高はブロックの位置を示す番号で、ここでの H は報酬を生み出したブロックの高さです。 COINBASE_MATURITY は、支出を含むブロックの高さと出力を作った高さの差を 100 以上と定めます。高さ H の出力を初めて使える有効なブロックは H+100 です。作成ブロック自体が最初の確認に数えられるため、ウォレットの確認数は違って見えることがあります。基準は高さの差で、時間の見積もりではありません。この条件を満たしても、ブロックが将来チェーンから外れない保証にはなりません。 [5]

再編では、ノードが採掘の累積作業量の多い別の有効な分岐へ移ります。UTXO は未使用の出力、つまり個々の使える金額です。報酬は、その作成ブロックとともにこの記録から消えることがあります。 再編により元のブロックが、累積作業量の最も多い有効な現行チェーンから外れる場合があります。その coinbase 出力は現行の UTXO 集合から消え、報酬を使う後続取引も影響を受け得ます。100 ブロックの待機は短い再編の影響を抑えますが、絶対的な保証ではありません。プールは、現行チェーン上の報酬、使用できる状態、マイナーへの支払義務を区別する必要があります。 [4] [5]

正確な形式を読むために用語を整理します。入力は通常使う資金を指し、出力は金額と使用条件を定めます。txid は取引の識別子、バージョンは形式を示し、locktime は取引を含められる時点を制限できます。 ブロックには少なくとも一つの取引が必要で、coinbase になれるのは最初の取引だけです。入力は一つで、過去の出力への参照が null になっています。ハッシュはゼロの 32 バイト、インデックスは 0xffffffff です。この参照を outpoint と呼びますが、実際には過去の出力を使わないため、その支出を認める通常の署名は検証しません。それでも取引には txid、バージョン、locktime、一つ以上の出力があります。 [1] [2] [3]

高さはブロックの位置を示す番号です。BIP34 は Bitcoin が規則を採用した提案の名前、scriptSig は入力のデータ欄、CScript はスクリプトの命令や数の表現方法です。 BIP34 は scriptSig の先頭に、最小限の符号化を施した CScript 数値としてブロック高を置くよう求めます。フィールド全体は 2–100 バイトです。その後には extra nonce、プールの識別情報、マージマイニング用データなどを置けます。高さや長さが不正ならブロックは拒否されます。入力は通常の解除スクリプトとして実行されませんが、含まれる署名オペコードが署名操作数の上限 sigops に数えられることはあります。 [1] [9]

採掘では、ブロックの短い要約であるヘッダーのハッシュ、つまりデジタル指紋を繰り返し計算します。Nonce は変更する数値、Merkle root は取引をまとめた指紋です。取引を変えると新しい試行ができます。 ブロックヘッダーの nonce は 32 ビットしかなく、採掘装置はすぐに候補を調べ尽くします。そこでソフトウェアは coinbase 内の extra nonce も変更します。txid、Merkle 木のルート、ブロックヘッダーが変わり、別のハッシュ探索空間が生まれます。プールは装置間で作業を分担し、同じ候補を無駄に調べないようにします。Extra nonce が追加のコインを発行するわけではありません。 [6] [7] [12]

SegWit は署名など一部の検証データを witness という部分に分けます。Commitment はデータへの検証可能な結び付けで、追加の支払いではありません。以下はその結び付けの技術的な形式です。 ブロックに witness データがある場合、BIP141 は、それらに暗号学的に結び付く witness commitment を coinbase 出力に要求します。スクリプトは 6a24aa21a9ed で始まり、OP_RETURN、36 バイトを積む命令、印 aa21a9ed を表します。続く 32 バイトは、witness Merkle root と予約値を連結して二重 SHA-256 を計算したハッシュです。Coinbase 入力の witness は、この 32 バイトの予約値一つだけを含む必要があります。複数の出力が一致するなら最大インデックスのものを使います。使える報酬の支払いではなく、witness データがないブロックでは任意です。 [10]

Full Node は Bitcoin の規則を自分で検証するコンピューターです。ブロック重量は許されたデータ容量の使用量を表し、Mempool は普通の未承認取引を手元に保管します。報酬の検査もブロック全体の検証の一部です。 Full Node は最初の位置に coinbase を要求し、同じブロックにある追加の coinbase を拒否します。scriptSig、BIP34 の高さ、金額範囲、ブロック重量、手数料、必要な witness commitment を確認します。出力合計は認められた発行分と手数料を超えてはならず、後の支出は成熟条件を満たす必要があります。マイナーが好きな金額を自分に与えても有効にはなりません。所属ブロックなしに coinbase が mempool に入ることはありません。 [3] [4] [10]

Genesis Block は Bitcoin の始まりのブロックです。その特殊性や昔の重複識別子は、現在の普通の規則を歴史上のすべての例に区別なく当てはめられないことを示します。 高さの記録が必須になる前は、異なる coinbase に同じ txid が付くことがありました。BIP30 は古い未使用出力の上書きを防ぎ、BIP34 は通常の現代のブロックに区別のための高さを加えます。Genesis Block は例外です。保存されたブロック内に coinbase はありますが、初期化時に出力が使用可能になっていません。最初の 50 BTC は使用できず、通常の 100 ブロック待機とは異なります。 [8] [9] [11]

理解を深めるには、この項目とあわせて次もお読みください Block, Block Subsidy, Transaction Fees, マイニング, Block Template, Bitcoin. 次の項目からも参照されています Block Subsidy, 承認, Reorg, Stale Block.

DOC · 001Bitcoin Developer Reference — Coinbase input文書 DOC · 002Bitcoin Developer Reference — Block chain文書 DOC · 003Bitcoin Core — transaction.h (IsCoinBase)文書 DOC · 004Bitcoin Core — validation.cpp文書 DOC · 005Bitcoin Core — consensus.h (COINBASE_MATURITY)文書 DOC · 006Bitcoin Core — miner.cpp文書 DOC · 007BIP 22 — getblocktemplate仕様 DOC · 008BIP 30 — Duplicate transactions仕様 DOC · 009BIP 34 — Block height in coinbase仕様 DOC · 010BIP 141 — Segregated Witness commitment仕様 DOC · 011Bitcoin Core — chainparams.cpp (genesis construction)文書 DOC · 012Stratum V2 — Mining Protocol specification仕様
改訂日: 一次資料を優先 · 投資助言ではありません