Develop with pleasure!

福岡でCloudとかBlockchainとか。

Simple Taproot Channel(Part 3)

Simple Taproot Channelの提案について、これまで

チャネルの開設フロー↓

techmedia-think.hatenablog.com

支払いの転送フロー↓

techmedia-think.hatenablog.com

とみてきたので、最後はチャネルの閉鎖フローの変更点について↓

https://github.com/lightning/bolts/blob/e25132d8de0164224578964fcd3f7328ddfc3281/bolt-simple-taproot.md#cooperative-closure

チャネルの閉鎖

チャネルを協力して閉鎖する場合の現状のフローは↓

アリス                           ボブ
         (1) shutdown
---------------------------------->
         (2) shutdown
<----------------------------------

      既存のHTLCの解決

        (3) closing_signed
---------------------------------->
        (4) closing_signed
<----------------------------------

手数料に同意しない場合の手数料の調整のため、3,4は何回か発生する可能性がある。

Simple Taproot Channelでも基本的なメッセージフローは変わらないけど、MuSig2で署名するために各メッセージにpublic nonceや部分署名をセットするフィールドが追加されている。

shutdownの拡張

協力してクロージング・トランザクションを作成するにあたって、ここでも両者はそのトランザクションに署名するために必要なpublic nonceを交換する必要がある。そのため、shutdownメッセージにもその互いのpublic nonceをセットして送信するためのTLV(shutdown_nonce)が追加されている。

closing_signedの拡張

もともとあったsignatureフィールドには空(64バイトのゼロ)をセットし、shutdownメッセージで交換したpublic nonceを使って集約nonceを計算し、MuSig2の部分署名を計算し、それを新しいTLV(partial_signature)にセットして送信する。

1ラウンドで完了

従来のフローでは、クロージング・トランザクションの手数料の交渉により何ラウンドかclosing_signedがやりとりされる余地があったけど、Simple Taproot Channelでは、手数料の交渉の余地はなく、イニシエーターによって送信された手数料を常に受け入れる仕様になっている。手数料の調整しようとすると、その都度、新しいpublic nonce生成して交換する必要が出てくるからか?

決められた手数料に不満がある場合は、CPFPしてねという方針になってる。

RBFのシグナリングを設定

Simple Taproot Channelのクロージング・トランザクションは更に、常にRBFのシグナリングを設定するようになってる。つまりインプットのnSequenceフィールドは0xfffffffd以下になる。

これは将来的にチャネル閉鎖のフローを変更して、RBFを使って別のクロージング・トランザクションと置換できるようにするためみたい。

以上が、チャネルの閉鎖フローの変更点。

Simple Taproot ChannelのPR自体はまだマージされていないので、まだ確定した仕様ではないけど、LNDとしてはこれをベースに今後Taproot AssetsやPTLCなどの開発を進めていく方針なのかな。

Part 1にも書いたけど、現状Simple Taproot Channelは未公開チャネルとしてしか使えないので、通常の公開チャネルとして使えるようにするために直近で必要なのは、ゴシッププロトコルをアップデート。これは↓のPRのドラフトで提案されてる。

github.com