ビットコイン技術 入門

TXIDとは何か

ビットコイントランザクションID(TXID)の定義、生成原理、実例、マリアビリティ問題とSegWitによる解決策まで。TXIDを理解すれば、ビットコイン取引追跡の核心を把握できます。

· 2分

ビットコインを送ったり受け取ったりすると、64桁の文字列が1つ生成されます。これが**TXID(Transaction ID、トランザクション識別子)**です。取引所の出金確認画面に表示される長いハッシュ値、ウォレットアプリの取引履歴のリンク、いずれもTXIDを指しています。TXIDはビットコインネットワークで発生するすべての取引を一意に識別する核心的なツールです。

TXIDの定義

TXIDはビットコイントランザクションに付与される64桁の16進数ハッシュ値です。すべてのトランザクションは固有のTXIDを持ちます。同一のTXIDを持つ2つの異なるトランザクションは存在しません。

例 TXID:
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

この64桁の文字列は0〜9の数字とa〜fのアルファベットのみで構成されます。これは256ビットのハッシュ値を16進数で表現したものです。ビットコインブロックチェーンのどこからでも、この値1つで特定の取引を正確に見つけ出すことができます。

TXIDはどのように生成されるのか

TXIDは任意に付与されるものではありません。トランザクションデータ自体から数学的に導出されます。

生成過程

  1. トランザクションのすべてのデータ(入力、出力、金額、ロックスクリプトなど)をシリアライズ(serialize)してバイト配列にします。
  2. このバイト配列にSHA-256ハッシュ関数を2回適用します(double SHA-256)。
  3. 結果のハッシュ値の**バイト順序を反転(reverse)**させます。
Rawトランザクションデータ
  → SHA-256を適用
  → SHA-256を再度適用
  → バイト順序を反転
  → TXID(64桁の16進数)

バイト順序を反転させる理由は、ビットコインが内部的にリトルエンディアン(little-endian)形式を使用しますが、人間が読む際にはビッグエンディアン(big-endian)形式が自然なためです。

この過程が意味する重要な性質があります。**トランザクションデータが1ビットでも変わるとTXIDが完全に変わります。**ハッシュ関数の雪崩効果(avalanche effect)のおかげです。したがってTXIDはトランザクション内容のデジタル指紋の役割を果たします。

有名なトランザクションのTXID

ビットコインの歴史で有名なトランザクションをTXIDで調べることができます。

サトシ・ナカモトの初送金(2009年1月12日)

サトシ・ナカモトがハル・フィニー(Hal Finney)に10 BTCを送った最初のビットコインP2P取引です。

f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

ビットコインピザ取引(2010年5月22日)

ラスロ・ハニエツ(Laszlo Hanyecz)がピザ2枚に10,000 BTCを支払った取引です。ビットコインで実物商品を購入した最初の事例であり、この日は「ビットコインピザデー」として記念されています。

a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

これらのTXIDをtxid.ukの検索欄に入力すると、トランザクションの詳細内容を直接確認できます。

TXID vs アドレス vs ブロックハッシュ

ビットコインには似たような見た目の長い文字列がいくつかの種類あります。混同しやすいため、違いを整理します。

項目TXIDアドレス(Address)ブロックハッシュ(Block Hash)
識別対象個別トランザクションビットコインの受信先個別ブロック
長さ64桁(16進数)25〜62桁(エンコーディングにより異なる)64桁(16進数)
先頭文字不規則1, 3, bc1q, bc1p先頭に0が連続
一意性トランザクションごとに1つ再利用可能だが非推奨ブロックごとに1つ
生成時点トランザクション生成時ウォレットで事前生成ブロック採掘時
a1075db5...5d48d1A1zP1eP...ivfNa00000000...a3b1e

TXIDとブロックハッシュはどちらも64桁の16進数なので外見が似ています。ブロックハッシュは先頭に0が複数連続する特徴があります。これはProof of Work(作業証明)で要求される難易度条件のためです。

TXIDマリアビリティ(Transaction Malleability)

TXIDがトランザクションデータのハッシュであるという点は、1つの問題を引き起こしました。**トランザクションマリアビリティ(malleability、可変性)**問題です。

問題の原因

SegWit以前のビットコインでは、署名(signature)データがTXID計算の範囲に含まれていました。問題はECDSA署名の特性上、同一の秘密鍵で同一のメッセージに対して、数学的に有効でありながらバイト表現が異なる署名を作り出せるという点です。

例えば、AliceがBobに1 BTCを送るトランザクション(TXID: abc123)を作成すると、第三者が署名部分を改変して効力は同一だがTXIDが異なるトランザクション(TXID: def456)を作ることができました。改変されたバージョンが先にブロックに含まれると、Aliceのソフトウェアは元のTXIDを見つけられず、送信失敗と誤認する可能性がありました。

2014年のMt. Gox取引所事件でこの問題が議論されました。マリアビリティが資金流出の直接原因だったかについては議論がありますが、プロトコルレベルの弱点であるという認識は広く共有されました。

SegWitによる解決

2017年に活性化された**SegWit(Segregated Witness)**アップグレードは、署名データをトランザクションのメイン構造から分離(segregate)して別の領域(witness)に配置しました。TXID計算時に署名データが除外されるため、署名を改変してもTXIDは変わりません。

SegWit以前:
  TXID = hash(入力 + 出力 + 署名)  ← 署名改変時にTXID変更

SegWit以後:
  TXID  = hash(入力 + 出力)         ← 署名と無関係
  WTXID = hash(入力 + 出力 + 署名)  ← 署名を含むバージョン

SegWit以後は**WTXID(Witness TXID)**という概念が追加されました。WTXIDは署名データを含む完全なトランザクションのハッシュです。一般的な使用では依然としてTXIDを使いますが、ノード間のトランザクション伝播などの内部処理ではWTXIDが活用されます。

実習:txid.ukでTXIDを検索する

TXIDがわかっていれば、ブロックエクスプローラーで該当トランザクションのすべての情報を確認できます。

検索方法:

  1. txid.ukにアクセスし、検索欄にTXID 64桁を貼り付けます
  2. トランザクション詳細ページで入力/出力構造、手数料、承認数、含まれるブロック高を確認します
  3. viz.txid.ukでトランザクションの入出力関係をネットワークグラフで視覚化できます — ビットコインピザ取引のTXIDを入力して10,000 BTCの流れを直接追跡してみましょう
  4. tx.txid.ukでRawトランザクションの16進数をデコードすると、TXIDがどの構造から導出されたかを確認できます

TXIDと承認(Confirmation)

TXIDはトランザクションが生成される瞬間に決まります。しかしTXIDが存在するからといって、取引が完了したわけではありません。

トランザクションのライフサイクル

トランザクション生成(TXID確定)
  → メモリプール(Mempool)に伝播(未確認状態)
  → マイナーがブロックに含める(1承認)
  → 後続ブロックの追加(2、3、...承認)
状態意味TXIDの存在
未確認(Unconfirmed)メモリプールで待機中。まだブロックに含まれていないあり
1承認ブロックに含まれたあり
6承認慣行的に「最終確定」と見なされるあり

未確認状態の意味: 未確認トランザクションはまだブロックチェーンに記録されていません。理論的にはマイナーが当該トランザクションをブロックに含めない可能性もあり、RBF(Replace-By-Fee)で置き換えられることもあります。そのため高額の取引では最低1承認、一般的には6承認を待つのが安全です。

txid.ukでTXIDを検索すると、現在の承認数をリアルタイムで確認できます。未確認状態であれば「Unconfirmed」と表示されます。

TXIDの実用的な活用

  • 取引確認: ビットコインを送った後、相手にTXIDを伝えれば、ブロックエクスプローラーで取引状態を直接確認できます。
  • 取引所の入出金追跡: 取引所の出金時に発行されるTXIDで入金遅延の原因を調べます。
  • 紛争解決: ブロックチェーンに記録されたTXIDは偽造できない客観的証拠となります。
  • UTXO参照: トランザクションの入力(Input)は以前のTXIDと出力インデックス(vout)を組み合わせて、消費するUTXOを指定します。
入力の例:
  以前のTXID: a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
  出力インデックス(vout): 0

まとめ

TXIDはビットコイントランザクションの一意の識別子で、トランザクションデータにdouble SHA-256ハッシュを適用して生成される64桁の16進数値です。すべてのビットコイン取引はTXIDで追跡でき、ブロックエクスプローラーで入出力構造、手数料、承認状態を確認するために使用されます。SegWit以前にはマリアビリティ問題が存在しましたが、SegWitが署名データを分離することで解決されました。TXIDはビットコインネットワークの透明性と検証可能性を支える最も基本的な単位です。

関連記事:

関連記事