SIGHASHタイプとそのユースケース
昨年末Taprootのアクティベイトが完了し、ほっと一息ついたのも束の間、界隈では次期ソフトフォークへ含めるBIPについて盛んにディスカッションがされています。BIP118やBIP119が比較的アクティブに討論されているといった感じでしょうか(提唱者が頑張っている感じ)。BIP118はライトニングネットワークのプロトコルを簡素化できるEltooでも必要な改善案で、SIGHASH_ANYPREVOUTと呼ばれる新しいSIGHASH
タイプを規定したものです。
SIGHASH
は署名をするデータ領域を指定するためのものですが、今までこのSIGHASHについて深く考えることがなかったのでそのユースケースについて調べてみました。以下のサイトでは各SIGHASHタイプとその応用やユースケースについて解説されていてわかりやすかったです。
Bitcoin's Signature Types - SIGHASH | Raghav Sood | It's a blog
オンチェーン上でのアセット販売
例えば、SIGHASH_SINGLE | SIGHASH_ANYONECANPAYを使うことで、オンチェーン上でのアセット販売をトラストレスにすることができます。例えば、アリスはあるNFTを持っていて、それを1BTCで販売することを考えます。アリスはインプットに自身が保有するNFTを、アウトプットに自身のアドレスへ1BTCを、というTxを作り、SIGHASHタイプにSINGLE | ANYONECANPAYを指定して署名をします。現時点では1BTCに相当するインプットがないので不正なTxです。このTxをWebサイト等へ掲載します。NFTを1BTCで購入したいボブがWebサイトでこのTxを見つけました。ボブは、このTxに対して自身が保有する1BTCをインプットに、NFTを受け取るアドレスをアウトプットに追加して署名をし、このTxをブロードキャストすることで、アセットの販売が完了します。
クラウドファンディング
この他にクラウドファンディングにもSIGHASHタイプを活用することができます。基本的な仕組みは上記のアセット販売と同じで、クラファンを募る募集者は目標金額をアウトプットにセットして署名をする。あとは支援者が各自出資金額をインプットに追加して署名をしていき、目標金額に達成するとこのクラファンTxをブロードキャストすることができます[1]。
アセット販売やクラウドファンディングはその取引自体はトラストレス、アトミックに実行できることが分かりました。アトミックに実行できることは大切ですが、さらに時限を考慮する必要があります。