用語集 / トランザクションと手数料
SIGHASH_ANYONECANPAY
- SIGHASH_ANYONECANPAYとは?
- SIGHASH_ANYONECANPAYは、他のすべてのインプットをダイジェストから取り除く修飾子であり、署名は自身が消費する1つのコインのみを対象とし、他の参加者が自由にトランザクションへ加わることができます。
これは独立したモードではありません。このフラグは値128を持ち、3つの基本モードのいずれかに加えられて129、130、131を生成します。そして各組み合わせは、署名者が見知らぬ他人による変更をどこまで許容するかについて、異なる問いに答えるものです。その真価を発揮するのは、クラウドファンディングとオーディナルズのマーケットプレイスの2つの場面です。
仕組み
この修飾子を設定すると、ダイジェストのインプット側は1つのエントリー、すなわち消費されるアウトポイント、そのシーケンス番号、そして解除するスクリプトだけに縮小されます。
他のすべてのインプットは計算から消えます。このルールの下で署名する者は、他に何人がコインを拠出したのか、どの順序で拠出したのか、その後さらに追加されるのかを、知ることも気にすることもありません。また、後からインプットを追加しても、以前に作成された署名を無効にすることはできません。この性質こそが機能のすべてであり、署名を収集可能にするものです。複数の人が、異なる時点に、異なるマシン上でそれぞれ独立して署名し、誰かがその断片を集めて1つの有効なトランザクションにまとめることができます。
アウトプット側は引き続き基本モードが支配し、3つの組み合わせは大きく異なる挙動を示します。
- 129は、全アウトプットのルールを伴う修飾子であり、「自分のコインを投入し、支払いはまさにこのリストどおりでなければならない」という意味です。インプットは追加できますが、アウトプットは追加できません。
- 130は、アウトプットなしのルールを伴う修飾子であり、プロトコルが許す最も弱い署名です。コインを1つ投入するだけで、最終的にどこへ何が行くのかについては一切表明しません。
- 131は、単一アウトプットのルールを伴う修飾子であり、「自分のコインを投入し、自分のインデックスのアウトプットを受け取らなければならない」という意味です。それ以外はすべて未確定のままです。
見られる場面
この修飾子を本格的に用いる構成は2つあり、どちらも、すでに署名済みの内容を壊さずに見知らぬ他人が資金を追加できることに依存しています。
1つ目はアシュアランス契約であり、クラウドファンディングの出資約束をビットコインで実現したものです。各支援者は、プロジェクトへの支払いを含む固定のアウトプットリストに対して値129で署名し、各出資約束が1つのインプットとなります。トランザクションは、約束されたインプットがアウトプットを満たしたときに初めて有効になるため、資金調達目標はエスクロー業者ではなく算術によって自らを強制します。目標に届かないキャンペーンは、単に有効なトランザクションを生成しないだけです。コインは決して動かないため、出資約束にも撤回にも費用はかかりません。
2つ目は、事前署名されたマーケットプレイスのオファーです。売り手は、自身のインスクリプションまたはルーン(rune)のアウトプットと希望価格に対して値131で署名し、その結果を部分的に署名されたトランザクションとして公開します。買い手は誰でも、自身のインプット、自身のお釣り、そして手数料を加えてそれを完成させます。出品用のコントラクトも、カストディアンも、決済自体を信頼する取引相手も不要です。
ただし警告が付きます。公開されたメモリプールに置かれた値130は、最初に拾った者が無償で手に入れられる資金であり、安全な組み合わせとは1ビットしか違いません。署名コードをレビューする場合は、基本モードがハードコードされた定数であり、可変が許されるのは修飾子の部分だけであることを確認してください。
フラグバイトの読み方
sighashフラグのバイトを2つの半分に分けると、もはや不可解ではなくなります。下位ビットが基本モードを示し、1は全アウトプット、2はアウトプットなし、3は一致する単一のアウトプットを表します。値128を持つ上位ビットが修飾子です。したがって、81で終わる署名は他のインプット以外のすべてを対象とし、83はマーケットプレイスのルールであり、修飾子のない単なる01は、支出のたびに自身のウォレットが生成する通常の支払いです。