用語集 / トランザクションと手数料
アウトポイント
- アウトポイントとは?
- アウトポイントとは、出力を作成したトランザクションの32バイトのIDと、そのトランザクション内での出力の位置を表す4バイトのインデックスを組み合わせて、ちょうど1つのトランザクション出力を特定する36バイトのポインタです。
ビットコインには口座番号がありません。そのため、すべての支払いでは、どのコインを使うのかを正確に示す必要があります。人間向けに書くと、このポインターはトランザクションID、コロン、番号の形になり、すべてのフルノードが保持する未使用アウトプットのデータベース全体の主キーとして機能します。2つのトランザクションが同じアウトポイントを指定した場合、有効になり得るのはそのうち1つだけであり、この単一のルールがコインの二重使用を防いでいます。
仕組み
アウトポイントはすべてのトランザクション入力の先頭にあり、ノードが支払いが許可されているかを確認するときに最初に参照するものです。
ネットワーク上では、区切り文字のない2つのフィールドで構成されます。まず32バイトのトランザクションハッシュ、次にリトルエンディアンで格納された4バイトのインデックスです。ハッシュは内部バイト順で書かれており、これはブロックエクスプローラーで表示される順序とは逆です。そのため、16進数の生のトランザクションでは、トランザクションIDが逆綴りで参照されているように見えます。これは初めて生の16進数を読む人を必ず戸惑わせますが、純粋に表示上の慣習であり、データの違いではありません。
インデックスは0から数えます。トランザクションの最初のアウトプットはインデックス0、2番目はインデックス1であり、:2で終わるものとして示されるコインは3番目のアウトプットです。このフィールドは4バイトなので、理論上の上限は4,294,967,295ですが、実際のトランザクションがそこに近づくことはありません。
1つの値が予約されています。マイナーへの支払いであるコインベーストランザクションには、32バイトのゼロと、すべてのビットが1のインデックス0xffffffffで構成されるアウトポイントを持つ入力が1つだけあります。この組み合わせは何も指しておらず、この入力が価値を移動させるのではなく新たに生み出すことを示します。
一意性は当然の前提とするのではなく、ルールによって強制する必要がありました。内容が同一の2つのコインベーストランザクションは同一のIDを生成し、その結果アウトポイントが重複しますが、これはビットコインの初期の歴史の中で2回発生しました。BIP30はこのパターンを直接禁止し、その後BIP34が、すべてのコインベーストランザクションの入力スクリプトにブロック高を含めることを要求し、内容が異なることを保証しました。BIP34は2013年3月のブロック227,931で強制されるようになりました。
どこで目にするか
アウトポイントは、残高ではなく特定のコインについて正確に話すときに扱う識別子です。
ウォレットのコイン管理画面では、保有資産がトランザクションIDとインデックスとして一覧表示されます。Bitcoin CoreのRPCインターフェースはこの2つのフィールドを組として扱います。listunspentはそれらを返し、gettxoutはそれらで検索し、createrawtransactionはそれらを期待します。ライトニングネットワークは、チャネルの永続的な名前として資金提供トランザクションのアウトポイントを使用します。そのため、ノードソフトウェアのチャネル識別子は、ハッシュの後に小さな番号が続く形に見えます。
また、紛争の際に引用するのに適したものでもあります。アドレスには何十回も支払いが行われている可能性があり、トランザクションには何十ものアウトプットがある可能性がありますが、アウトポイントは1つの時点における1つの金額の1つの支払いを指し、議論の余地となる曖昧さはありません。取引所から特定の入金を証明するよう求められた場合、これが会話を終わらせる精度の水準です。
アウトポイントvsアウトプットインデックス
アウトプットインデックスはアウトポイントの内部の1つのフィールドであり、その短縮名ではありません。インデックスだけでは何の情報も持ちません。数千万のトランザクションがインデックス0のアウトプットを持っており、その番号だけではどれを指すのか何も示さないからです。混乱はブロックエクスプローラーのインターフェースに由来します。そこではインデックスが"vout"というラベルで目立つ形で表示されるため、人々がポインター全体をvoutと呼ぶようになります。書き留めるときは両者を区別してください。トランザクションIDはどのトランザクションかを示し、インデックスはその中のどのアウトプットかを示し、両方が揃って初めてコインを特定します。