One or Zero?

興味のある様々なことについて

Lightning Network で必要不可欠な(だった) SIGHASH_NOINPUT について

何に使うのか

Lightning Network、乃至 Bidirectional Payment Channel では、最初に Funding Transaction(あるいは Opening Transaction) と行って、チャネルの参加者二人がそれぞれデポジットを行うようなトランザクションを作成します。詳細は省きますが、以後、それを用いてマイクロペイメントを行います。

 

Funding Transaction の output は 2-of-2 のマルチシグ(二人共が署名を行わなければ引き出せないようなscript )を用いているのですが、Funding Transaction に署名をしてブロードキャストしてしまった後、もし2者のどちらかが裏切ればそのBitcoin は永遠に引き出せなく成るという問題があります。そのため、実際には Funding Transaction の output を参照するようなトランザクションを作成します。

しかし、SegWit 以前は、未承認のtransaction output を input として次のトランザクションに参照することはBitcoinプロトコル上不可能でした。トランザクション展性という問題があったからです。SIGHASH_NOINPUT という新しいSIGHASHを用いれば、txid が改ざんされたとしてもトランザクションの有効性が失われない、ってことで提案されていたそうですが、今やSegWit のお陰でtxid を書き換えられる危険性はなくなったので必要なくなってしまったようです。さらに、SIGHASH_NOINPUTには、アドレスの再利用の際にリスクがあるようです。

参考

https://lightning.network/lightning-network-paper.pdf