いかにマルチパスペイメントの送金速度を向上させるか?Boomerang、Spearのアプローチ
ライトニングネットワークなどについてアカデミックな論文が発表されても、ツイッターなどで話題になることはそれほどありません。そもそも論文を読みたい人、読める人が少ないということもあるでしょうが、学者タイプとOSS開発者タイプのオーバーラップが小さいことも理由かもしれません。実際、論文の多くは「ビットコインをこう変えたら」「LNをこう変えたら」実現できるという、少し厳し目の前提を必要とするものが多いように思います。(LNに関しては今からでも将来の方向性に大きな影響を及ぼし得ると思いますが)
さて、今日はその中で面白いと思った、LNのマルチパスペイメントのトータルでの安定性を向上させる2つの提案、BoomerangとSpearについて書きます。現在のLNでそのまま使うことはできませんが、思考実験や可能性の探究としてお楽しみください。
マルチパスペイメントの課題
LNで送金をする際に、まるごとの金額を中継するために十分な流動性のある経路が存在しない場合があります。このとき、支払いをいくつかの小さな支払いに分割し、様々な経路を通して送金することをマルチパスペイメントといいます。これは既に利用できる機能です。
マルチパスペイメントはLNで安定して送金できる金額を増やしましたが、いくつか課題があります。たくさんの支払いに分割することによって手数料が少し余分にかかるのは安定性向上の対価として仕方ないとしても、一番問題なのは「一部の送金が失敗したり時間がかかると、全額の送金に時間がかかる、または失敗する」ことです。せっかくのライトニングネットワークですが、中継ノードが落ちていたりして途中で送金が引っかかってしまう(stuck payment)と解消に数分かかることもあり、アプリケーションもこれを前提とした設計が必要になったり、UX面で問題になります。そしてマルチパスペイメントは多数の支払いに分割するため、引っ掛かりが発生する確率も高くなってしまいやすいです。
送金相手をトラストできる場合は引っかかったりした分があっても足りるように少し余分に送金をして、実際の請求額より多く支払った分はキャンセルしてもらうことはできるでしょう。しかし、送金相手をトラストできないシチュエーションも数多くあります。
したがってマルチパスペイメントにとって、分割した送金の一部がスタックしたりすることは大きな課題なのです。
秘密分散を利用するBOOMERANG
上で実際より少し余分に送金をするアプローチを紹介しましたが、実際に受け取られる金額が正確な金額になることをトラストレスに保証できないか?というのがBoomerangとSpearの発想です。Boomerangにおいては、秘密分散を利用します。
秘密分散とは、n個の情報(シェア)のうちm個のシェアが集まれば秘密情報を復元できるというマルチシグのような技術です。仮想通貨ウォレットでシャミア秘密分散法を利用しているものが話題になったこともありましたね。
抽象度の高いままで言えば、Boomerangは分割した送金のそれぞれに対して決済時に返却されるプリイメージがある秘密情報のシェアとなっており、もし閾値以上の分割送金が決済された場合には、復元できる秘密情報を使ってその決済を巻き戻せるという仕組みです。このため、分割送金の金額は一定である必要があります。
また、決済を巻き戻す機能のために、HTLCに代わるBoomerang Contractという特殊な中継方法が必要です。Boomerang Contractはアダプタ署名を使ってBitcoin Scriptで実装可能ではあるようですが、中継ノードへの導入が必要になるため、マルチパスペイメント用途で使い物になるには大多数のノードの対応が必要になるでしょう。現時点でまだHTLCに代わる仕組み(PTLCなど)への移行が始まってすらいないので、これはほとんど非現実的に高いハードルと言えます。
Boomerangを発明した研究者らのシミュレーションによると、送金の所要時間が40%短縮され、ノードが決済する時間あたり資金量が2倍になる効果があったそうです。
https://www.semanticscholar.org/.../c40cde96c1346c521d49f...
BOOMERANGの欠点を改善したSPEAR
さて、Boomerangの一番大きな欠点は明らかにBoomerang Contractの必要性です。現実世界で使おうと思ったら、現在の仕組みで実現可能とまではいかなくても、せめて対応しやすい必要があるでしょう。そこで別の研究者がSpearというアイデアを発表しました。Spearの特徴は、送金を受け取るために送金者の協力が必要な、インタラクティブなプロトコルであることです。
具体的には、SpearではHTLCの代わりに使用するものは提案者が「H2TLC」と呼ぶ、1つではなく2つのプリイメージで支払いが可能になるコントラクトです。送金者・受取人のそれぞれがプリイメージを生成し、最終的に決済される総額が正しい金額になるように送金者がプリイメージを受取人に(LNの外で)開示していきます。受取人は2つのプリイメージを中継ノードに公開しますが、プリイメージが2つある以外はその後の流れも普通のHTLCと同様です。
決済に送金者の協力が必要なため、HTLCの到達ではなく送金者からのプリイメージの到達をもって決済となる仕組みなのですが、秘密分散を用いるBoomerangと比較して計算量が少なく、通信の往復数も減り、分割した送金の金額がバラバラでも問題ありません。(実際、効率を追求するなら経路によって金額を変えたほうが良いでしょう)
一方でBoomerangと比較した欠点は協力的プロトコルであるが故の通信経路の確保が必要な点でしょう。LNノード間のP2P通信や、ブラウザからLNノードへの通信ができることを考えると、この点の実装負担もそれほど大きなものではなさそうだとは思います。
https://dl.acm.org/doi/10.1145/3479722.3480997
まとめ
・プリイメージの生成に秘密分散を利用することで、一定数以上の分割送金が決済されたときに送金者が復元した秘密情報を使ってその決済を却下できるBoomerang Contractが記述できる。トラストレス性は高いが、実際にLNに導入するハードルは果てしなく高いように感じられる。
・一方でHTLCとほぼ同じだが、送金者もプリイメージを1つ提供する「H2TLC」というものを導入すれば、送金者と受取人が協力的に分割送金を最終的に必要な分だけ決済するシンプルなSpearプロトコルも実現できる。
マルチパスペイメントの送金速度を改善するために余分に送金し、余った分の決済を阻止するという目的を達成するのに2つの全く異なるアプローチがあって個人的には非常に興味深かったです。こういう頭の体操をする余地がたくさんあるので、これからもLN上で面白いアプリケーションやDefi (P2Pfi)が生まれてくると実感しています。
Spearプロトコルの論文は無料で読めるところがなかったので仕方なく課金しましたが、ほぼ予想してた内容だったのでちょっと損した気分です。(H2TLCというネーミングに15ドル払わされました)
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション