コベナンツとSIGHASH_ANYPREVOUTを活用したTapLeaf Channel

Adopting Bitcoinのあるセッションで紹介されていたChannel Addresses他についての備忘録。

登壇者は先月LNDの脆弱性を見つけて巨大なトランザクションを放火したBurakさん。トーク内容は以下の3つ。

  • Channel Addresses
  • TapLeaf Channels
  • Factory Swaps

Channel Addessesに関してはこちらの記事に詳細が記載されていますが、他の仕組みについては資料が見つけられませんでした。

Channel Addresses

Channel Addressesは特別なビットコインアドレスで、第三者に渡して支払いなどに使うことができ、第三者がそのアドレスへ送金すると、自分と予め指定したLSPとの間でペイメントチャネルを開設することができるものです。ペイメントチャネルは2者間で対話的に開設する必要がありますが、非対話的に開設する手法がいくつかあります。1つはSIGHASH_NOINPUTを使った方法で、もう1つはOP_CTVを使った方法ですが、どちらの方法も事前に金額(チャネルキャパシティや払い戻し金額)を確定させておかないといけません。そこでChannel Addressesの登場です。ただ、Channel Addressesを実現するには、SIGHASH_NOINPUTに加えてさらに3つの新しいOPコード OP_TXHASHOP_CHECKSIGFROMSTACKOP_SUB64が必要になるみたいです。

TapLeaf Channels

TapLeaf Channelsは、基本的にはChannel Factoryと同じ仕組みですが、TAPLEAF_UPDATE_VERIFY(TLUV)を使います(これもソフトフォークが必要な新規OPコードですね笑)。TLUVを使うことで他のチャネルに影響を与えずにチャネルを閉鎖することができます。

また、TapLeaf Channelsの各リーフには上記で紹介したChannel Addressesベースのスクリプトテンプレートを埋め込むのが特徴です。

1つのUTXOを複数人で共有していますが、コベナンツを使うことで各チャネルのキャパシティを強要させることができます。(通常のChannel Factoryの場合、Allocationのインプットをアンロックした場合、アウトプットに指定する送金先アドレスや金額は任意にできてしまいます。そのため、Factoryの全参加者は事前に協調してCommitmentを作成する必要があります。)

以下の図のEltooクロージャは、チャネルの残高更新、協調閉鎖、強制閉鎖の3つの状態変化に対して使用します。このEltooクロージャはChannels Addressesのものと少し違っており、カスタムsighashプリイメジによって構成されています。なぜなら、チャネルが閉鎖されると新しいFactoryのマークル木ハッシュ値が作成されアウトポイントが変わるからです。なので、インプットの替わりにchannel_idとアウトプット用スクリプトテンプレートを結合したsighashプリイメジを使っています。

以下の図は、あるチャネルを協調閉鎖した時のトランザクションです。Factory New Stateのアウトポイントが新しくなりますが、各TapLeaf Channelは現状のチャネルを維持したままLN上での送受信が可能となっています。

Channel Factoryの場合、チャネルを強制閉鎖した場合、HookとAllocationトランザクションもオンチェーンに展開されるので、他のチャネル参加者は協調的にチャネル閉鎖したりする必要があります(Commitmentを展開してもよい)。また、チャネルが協調閉鎖する場合でも、他のチャネルの参加者は協調的に新しいHook、Allocation、Commitmentトランザクションを作成する必要があります。なぜならAllocationやCommitmentが参照するアウトポイントが変わってしまうからで、これがTapLeaf Channelとの大きな違いではないでしょうか。

TapLeaf Channelでは、Channel #2を閉鎖した場合でも他のチャネルに影響を与えることなく、Channel #1や#3をそのまま使うことができます。なぜかというと、各TapLeaf Channelのアウトポイントは、、、SIGHASH_ANYPREVOUTの恩恵でeltooトランザクションの署名はどのUTXOに対してもバインドさせることができるからです。

Factory Swaps

Factory Swapsは、TapLeaf Channels間でサブマリンスワップをするものです。サブマリンスワップといっても、ただのオンチェーン・オフチェーン交換ではなく、実際には既存チャネルから新規チャネルへのスワップに、しかも同じFactory内でのチャネル開設になります。これも今までにないユーザー体験で興味深いと思います。

---

TapLeaf Channelの特徴は各チャネルが独立しており、その内の1つのチャネルが閉鎖されたとしても他のチャネルはオンチェーンTXを作ることなく、そのままチャネルが使える点だと思います。そのためには、いくつかの新規OPコードが必要になるので実現可能性は低い気がしますが(笑)それにしてもコベナンツは面白いですね!

Remaining : 0 characters / 0 images
100

Sign up / Continue after login

Related stories

Writer

ちょビットコイナー nostr id: npub1l83ycz54gng3nd8suvww43fardjsca37x7z5rcwlmeqzudg027fqe9hwaa

Share

Popular stories

LNノードの運用益はどれぐらい?パート1

1796

【Muun】ちょっと変わったライトニング搭載ノンカストディアルウォレット

1190

LNノードの運用益はどれぐらい?パート3

1087