btc: coinbaseトランザクション
2025/03/25
はじめに
特殊なトランザクションである coinbaseトランザクションについて。
こちらの記事を読んでいて、coinbaseトランザクションのことが気になったのだ。
どういうトランザクションか
coinbaseトランザクションはブロックの先頭に配置されるトランザクションである。
そのブロックのマイニング報酬を受け取るためのトランザクションで、 INPUT に UTXO を持たない特殊な形をしている。
segwit 時代になってからはブロックヘッダにある merkle root hash とは別に WTXID で作った witness root hash を使った commitment hash を配置するようになった。
UTXO が INPUT にならない?
特定の UTXO は使われず、ダミーの値を入れておく。
通常のトランザクションは INPUT と OUTPUT + fee の合計が一致するが、そうならない。
OUTPUT にはマイニング報酬と承認したトランザクションの全手数料を割り当てることができる。
手数料が高いトランザクションの方が承認されやすいのはマイナーが手数料をもらえるからである。
TXID が重複?
2012年くらいまで、coinbaseトランザクションは決め事がそこまで多くなかった。
INPUT が UTXO ではなかったのでまったく同じトランザクションデータが許されることになってしまい、
実際にいくつか作られてしまった。
その反省で今は scriptSig にブロック高を入れないといけなくなったので重複しないようになったけれども、 それまでに作られたトランザクションのいくつかが将来のブロック高と同じ構造を持っていて 同じ TXID を持った coinbaseトランザクションが作られてしまう可能性がありますよ、というお話だ。
可能性はあるが、まず coinbaseトランザクションを作ることができる立場である、という高すぎる山がある。
しかも該当するブロック高はいくつかあるけれども、直近の 20年先の 1ブロックを逃したらまた 20年後だ。
2078年はまあまあ多いけど、それでも 6件。
まあ、そのときのマイニング環境がどうなっているか分からんけど難しいとは思う(攻撃するのが)。
witness root hash
TXID はトランザクションの witness が除外されるが、WTXID は全部計算する。
WTXID はどこに使われるんだろうと思っていたが、たぶん coinbaseトランザクションの commitment hash しか見つけられなかった。
おわりに
coinbaseトランザクションを自作することはほとんどないだろう。
とはいえこれも Bitcoinのしくみの 1つなので、なんとなくでも覚えておかないと困ることがあるかもしれない。