メインコンテンツへスキップ
Skip to content

トランザクションの深層

UTXOモデル、トランザクション構造、手数料、署名検証——ビットコイン送金の全メカニズム。

UTXOモデル:口座残高ではない

  • ビットコインには「口座残高」という概念がありません。代わりにUTXO(Unspent Transaction Output=未使用トランザクション出力)モデルを使用します。
  • あなたの「残高」とは、あなたのアドレスに紐づくすべての未使用出力の合計です。100円玉3枚と500円玉1枚を持っているようなもので、「残高800円」という抽象的な数字ではなく、具体的な「コイン」の集まりです。
  • 送金時は、一つ以上のUTXOを「入力」として消費し、新しい「出力」(受取人への送金 + お釣り)を生成します。消費されたUTXOは使用済みとなり、二度と使用できません。
  • このモデルの利点:二重支払いの検出が容易、並列処理が可能、プライバシー管理がしやすい(コインコントロール)。銀行口座モデルとは根本的に異なるパラダイムです。

トランザクション構造

  • バージョン番号(4バイト):現在は1が標準。OP_CHECKSEQUENCEVERIFYを使用する場合は2。
  • 入力(TxIn):前のトランザクションの出力への参照。「前のトランザクションハッシュ」(32バイト)、「出力インデックス」(4バイト)、「scriptSig」(署名と公開鍵を含む解錠スクリプト)、「シーケンス番号」(4バイト)で構成されます。
  • 出力(TxOut):送金先と金額の指定。「金額」(8バイト、satoshi単位)と「scriptPubKey」(施錠スクリプト)で構成されます。
  • ロックタイム(4バイト):特定のブロック高さまたはタイムスタンプまでトランザクションが有効にならない条件を設定できます。
  • SegWitトランザクションの場合、署名データ(witness)がトランザクション本体から分離されます。これによりブロック容量が実質的に拡大し、トランザクション展性(malleability)の問題も解決しました。

トランザクション検証プロセス

  • トランザクションの検証は2段階で行われます:①入力のscriptSigを実行 → ②参照される出力のscriptPubKeyをscriptSigの結果を使って実行。最終的にスタックの先頭がtrue(非ゼロ)であれば有効。
  • 標準的なP2PKH検証の流れ:署名と公開鍵がscriptSigに含まれる → 公開鍵がハッシュ化され、scriptPubKey内のハッシュと一致するか確認 → 署名が有効か検証 → すべてOKなら取引承認。
  • マイナーはメモリプール(mempool)内の未確認トランザクションから、手数料の高いものを優先してブロックに含めます。
  • 重要:入力の合計値から出力の合計値を引いた差額が取引手数料になります。出力に含めなかった金額は永久に失われるため、必ずお釣り用の出力を作成する必要があります。

手数料の仕組み

  • ビットコインの取引手数料は送金額ではなく、トランザクションのデータサイズ(バイト数)に基づきます。1 BTC の送金も0.001 BTCの送金も、同じサイズなら同じ手数料です。
  • 手数料率は「sat/vB」(satoshi per virtual byte)で表されます。SegWitトランザクションはwitnessデータが割引されるため、同じ機能でも手数料が安くなります。
  • RBF(Replace-By-Fee):シーケンス番号が0xFFFFFFFF未満の場合、より高い手数料で同じ入力を使う新しいトランザクションに置き換え可能です。「手数料が低すぎて確認が遅い」場合の救済策。
  • CPFP(Child-Pays-For-Parent):低手数料の未確認トランザクションの出力を使って、高手数料の子トランザクションを作成。マイナーは親子セットを一緒にマイニングするインセンティブが生まれます。

確認と最終性

  • 0確認:トランザクションは送信されたがまだブロックに含まれていない状態。二重支払いのリスクがあります(レース攻撃、フィニー攻撃)。
  • 1確認:最初のブロックに含まれた状態。小額取引にはほぼ十分ですが、ベクター76攻撃のリスクが残ります。
  • 6確認:慣例的に「最終確定」とみなされる基準。ネットワークハッシュレートの10%を持つ攻撃者でも成功確率は約0.1%に低下します。
  • 高額取引では100確認以上が推奨される場合もあります。確認数の選択は、取引金額と相手の信頼度に応じたリスク管理です。
  • 平均確認時間は約10分(1ブロック)ですが、実際にはブロック生成間隔にはばらつきがあり、数秒〜1時間以上になることもあります。

SegWitとその影響

  • Segregated Witness(SegWit、BIP-141)は2017年8月に有効化されたソフトフォークで、ビットコインの最も重要なプロトコルアップグレードの一つです。
  • 署名データ(witness)をトランザクション本体から分離し、ブロックサイズの上限を1MBから4MW(メガウェイト)に実質拡大。同じブロックにより多くの取引を含められるようになりました。
  • トランザクション展性(malleability)の問題を解決。これにより、Lightning Networkなどの支払いチャネル技術が安全に構築できるようになりました。
  • SegWitアドレスは「bc1q」で始まるBech32形式を使用し、手数料の割引を受けられます。2026年時点で、全トランザクションの約85〜87%がSegWitを使用しています。

関連トピック