用語集 / トランザクションと手数料
トランザクションID
別名はTxid、トランザクションハッシュ、取引IDです。
- トランザクションIDとは?
- トランザクションIDとは、ビットコインのトランザクションを2回SHA-256でハッシュ化して得られる64桁の16進数の指紋であり、この支払いを誰もが指す際に使う識別子です。
識別子を割り当てる者はいません。識別子はトランザクション自体の内容から導かれるため、1サトシを変更するだけでまったく別の識別子になります。値の長さは32バイトで、64桁の16進数文字列として表示され、どのブロックエクスプローラーでもバイト順を逆にして表示されます。これは、あなたと取引所のサポート担当者が同じ支払いを見るための唯一の文字列です。
仕組み
トランザクションIDの導出は2つの手順で完了し、秘密情報は必要ありません。トランザクションを生のバイト形式にシリアライズし、それを2回SHA-256に通すと、得られた32バイトが識別子になります。生のバイトを持っている人なら誰でも同じ結果を計算できるため、識別子を予約したり、要求したり、偽造したりすることはできません。
表示順は、多くの人が最初につまずく点です。Bitcoinは内部では一方向でハッシュを扱い、もう一方の向きで表示するため、エクスプローラーで見えるバイトはファイル内のバイトを逆にしたものになります。開発者向けツールが逆さまに見える文字列を表示しても、何も問題はありません。
SegWitは識別子を2つに分けました。BIP141が2017年8月24日のブロック481,824で有効になって以降、トランザクションIDはウィットネスデータを除いたトランザクションに対して計算され、wtxidという2つ目の識別子が署名を含むすべてを対象にします。理由は展性です。以前は、トランザクションを中継する誰もが署名を再エンコードでき、お金の行き先はそのままで識別子だけが変わってしまいました。Mt. Goxは2014年2月に消えたコインの原因を展性のせいにしましたが、DeckerとWattenhoferの研究が実際の攻撃を測定したところ、取引所が出金を停止するまでに展性に起因すると認められたのは386BTCのみで、失った数十万枚のコインとは桁が違いました。
識別子は、ブロックがコミットする対象でもあります。ブロック内のすべてのトランザクションIDはブロックヘッダーに保存されたマークルルートにハッシュ化されるため、マイナーが後からある支払いを別の支払いにこっそりすり替えることはできません。
ビットコインを購入するときにこれが重要な理由
トランザクションIDは、2つの企業の間の隙間を越えて残る唯一の証拠です。CoinbaseまたはBitstampからの出金が届かないとき、これを提示するまでサポートチケットは進みませんし、手元にあればチケットはもう不要です。文字列を任意のブロックエクスプローラーに貼り付ければ、送金先、手数料、承認数を自分で確認できます。遅延が取引所の処理待ちなのかネットワーク側なのかを知る最速の方法でもあります。
逆のケースが危険です。トランザクションIDは支払いが存在することを証明するだけで、あなた宛てに送られたこと、承認されること、送信者が名乗るとおりの人物であることは証明しません。個人間取引のマーケットプレイスでは、エクスプローラー画面のスクリーンショットを見せられ、そのトランザクションのいずれかの送金先が自分たちの管理するアドレスに支払っているかを確認しないまま商品を渡してしまう売り手がよくいます。アドレスを確認し、金額を確認し、承認数を確認してください。この順序です。
未承認の識別子も消えることがあります。完全なreplace-by-feeは現代のBitcoin Coreにおける既定の中継ポリシーであるため、送信者は同じ支払いの競合するバージョンをブロードキャストでき、そのバージョンは別の識別子を持ちます。Bitcoin Coreはまた、336時間(14日)を超えて保持したトランザクションを破棄します。エクスプローラーが「transaction not found」と表示するのは通常、この2つのどちらかが起きたという意味であり、コインが失われたという意味ではありません。
ジェネシスブロックのトランザクションIDを読む
ビットコインで最も古いトランザクションIDは4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33bで、2009年1月3日にマイニングされたブロックに含まれる唯一のトランザクションです。このブロックにはトランザクションが1つしか含まれていないため、ブロックのマークルルートは同一の文字列になります。これはコミットメントの仕組みを最も明確に示す例です。
このトランザクションは公開鍵に50BTCを支払いますが、Bitcoin Coreはこの送金先を未使用の出力の集合に加えなかったため、この識別子が指すお金は決して動かせません。また、コインベースフィールドの中に新聞の見出し「The Times 03/Jan/2009 Chancellor on brink of second bailout for banks」を含んでいます。
依存関係は一方向です。この見出しの文字を1つ変えるだけで、トランザクションIDもマークルルートも見分けがつかないものになります。だからこそ識別子はラベルではなく指紋なのです。識別子を自分で選ぶことはできず、新しい識別子を生み出さずにトランザクションを編集することもできません。
トランザクションID vsビットコインアドレス
アドレスは宛先であり、トランザクションIDは出来事の記録です。アドレスは事前に渡したり再利用したりできますが、識別子はトランザクションが構築された後にしか存在しません。トランザクションIDにコインを送ることは不可能で、ウォレットはアドレスのチェックサム検証に通らないこの文字列を理由に試行を拒否します。サポートを装う詐欺師はこの混同を悪用し、「あなたのトランザクションID」を尋ねたうえで自分たちのアドレスを渡してきます。
トランザクションID vsアウトポイント
トランザクションIDはトランザクション全体を指し、1回の取引所のバッチで300人に支払うこともあります。アウトポイントはその中の1つの送金先を指し、識別子、コロン、出力インデックスの形で書かれます。コイン管理画面、ハードウェアウォレットの確認、PSBTファイルはすべてアウトポイントで扱うため、識別子だけではどのコインを指すのかを特定できません。