1つの送金に複数のウォレット(eCash Mint)の資産を組み合わせて使えるようになる?Multinuteral Payments
皆さんは様々なウォレットを試してみた結果、細かい資金が分散してしまったことはありませんか?少なくとも私は20個近くのライトニングウォレットを試したことがあり、そのうちいくつかには未だに少額の残高があります。(もう使わないだろうなと思ったときだけ全額を別のウォレットへと移すため。)
ところがこのように資金が分散すると、いざ送金したいときに困る場合があります。例えば10万sats送金したいのに、ウォレットAに7万sats、ウォレットBに5万sats、ウォレットCに4万sats…というふうに、組み合わせたら送れるのに1つのウォレットからは送れない場合です。こういうときは一段階目としてまず自分自身の資金を1箇所にまとめる送金をしてからライトニング送金するという面倒な手順を踏むことになります。
しかし、自分から自分への送金というのは無駄でしかありません。直接複数のウォレットから1つのインボイスに対して分割送金できないのでしょうか?
まさにその発想で生まれたコンセプトがECashのオープンソース実装であるCashuで今後使えるようになるMultinuteral Paymentsです。
・ライトニングのマルチパスペイメント(MPP・AMP)とは
・複数のウォレットのユースケースよりはCashuとの相性が抜群
・CashuはカストディアルLNウォレット規格の1つの未来かもしれない
ライトニングのマルチパスペイメント(MPP・AMP)とは
ライトニングにおける送金の一番基本的な形は、1つのインボイスに対して送金者から宛先ノードまでの経路を1つ決め、送金額全額を1つのHTLCとしてバケツリレーしていくものです。
ところが、各ライトニングチャネルの送金額こそ公開情報ですが、その金額のバランス(どちらかのノードへの偏り)はそのチャネルを共有している2つのノードしか知りません。そのため、試行してみた結果送金ができず、新たな経路を求める必要が出てくることがあります。特に送金額が大きくなるほどこの問題は顕著です。
そこで、大きな金額をより小さい単位に分割してそれぞれ別の経路で送れるようにできないか?というのがマルチパスペイメントの概念です。2020年に使われるようになったMPP (Multi-Path Payments)では通常のインボイスに対して支払う際に、同じpreimageを使った経路を途中で分岐・合流させるものでした。ただ、同じpreimageを使う弊害としてプライバシーの問題(分割している同一の送金ということがバレる)やpreimageの使いまわしに伴う決済絡みのトラブルが発生しやすい問題がありました。
2021年に使われるようになったAMP (Atomic Multi-Path Payments)ではMPPにひと工夫加えることでこれらの問題を解決しました。MPPと異なり、AMPは送金者がインボイスを生成する、いわゆるプッシュ型の送金なので、宛先のノードID程度の情報で送金ができます。(一応AMPインボイスという概念はあります)
AMPの工夫は複数の送金それぞれのプリイメージを「実際のプリイメージを改変したもの」にして、それが全て揃うと宛先ノードが実際のプリイメージを逆算できるようになるというものです。これによって各送金を紐づけるプライバシーの問題が軽減されるほか、preimageの使いまわしによる決済問題も発生しません。送金はかならず全て成功するか、全て失敗するので、中途半端な金額を送ってしまうおそれはありません。ただしプッシュ型送金あるあるで、preimageを生成したのが送金者であるゆえに(preimageにコミットしたインボイスを必要としないゆえに)インボイスとpreimageの所有をもって送金の事実を証明することができません。


複数のウォレットのユースケースよりはCashuとの相性が抜群
冒頭の状況を振り返ってみましょう。実際のMPP・AMPは1つのウォレットからの送金を想定していますが、「自分が持っているウォレット」という集合を1つのノードとして見た場合、MPP・AMPを使えばシンプルに資金を組み合わせて送金できるとわかります。
例えるなら、自分が使っている全てのウォレットにつながっている1つの仮想的なノード(”自分”)があり、送金はそのノードから行われるようなイメージです。
実際のライトニングウォレットでこれをやろうと思うと、どれでpreimageを生成し改変して、送金の全体像をそれぞれのウォレット間でどう共有して…というように結構複雑なエンジニアリングの問題が発生しますし、ユーザー体験としても大量の操作が必要になってしまいそうでよくありません。(結局例のように自分宛てに一度送金して資金をまとめるほうが簡単)
ところがその問題が発生しない上にメリットを享受できるタイプのライトニングウォレットがあります。Cashuを使ったeCashウォレットです。
本稿でもよく触れているeCashはビットコインを預けることでプライバシーの高い状態で送受金できるカストディアルな技術で、CashuはMintと呼ばれるサーバーを立ち上げるためのOSSです。ユーザーは1つのMintだけを利用して他のMintに送金するときはライトニングを使うこともできますし、複数のMintに資金を分散させておくこともできます。
そして複数のMintに資金を分散させていても、ユーザーは1つのウォレットから多数のMintに接続してUI的には一元管理することができます。
しかしながら、これまでだとライトニング送金をする際に結局1つのMintに必要な金額を集めなければいけませんでした。ただ、UIアプリが1つなため、ライトニングウォレットが複数ある状況では困難だったpreimageの生成・改変や複数の送金経路の管理などが簡単に実現できるというわけです。なんなら送金額の全体像をそれぞれのMintに伝える必要はないため、ライトニング送金を代行してくれるMintに対してのプライバシーも強化されます。
ちなみに上記記事でも紹介していますが、LNBitsのデモサーバー上にある多数のCashu mintで実際のビットコインを扱われていることが嫌気され、今月中にLNBitsのデモサーバーからCashu機能が削除されます。もしlegend.lnbits.comで始まるURLのMintにsatsがある方は退避させないとGOXします。
CashuはカストディアルLNウォレット規格の1つの未来かもしれない
このように、Cashuウォレットの「複数のMintにある資金を一元管理する」という特徴が、完全に独立している複数のライトニングウォレット(カストディアル・ノンカストディアル含む)と比べてMPP・AMPを活用するのに最適なアーキテクチャなのが非常に興味深く便利であるというお話でした。
ライトニングウォレットに関しては、ノンカストディアルなものであれば上手いこと仮想的なチャネル(送金ではなく制御専用のチャネルや通信経路)のようなもので1つのアプリから一元管理できるようにできなくはないかもしれませんが、ネットワークグラフの取得をどこからするかなど課題も考えられます。無駄も多いですし、preimageを改変していくAMPの特徴からカストディアルウォレットにも対応してもらうのはさらに大変で、あまり現実的ではありません。
Cashuを使ったeCashにも必ずカストディアルであるという弱点はあります。しかし、現状のライトニングの利用の大半がカストディアルウォレットを経由したものであるというのも真実でしょう。(自分のライトニングノードでCashuを動かせば自分専用のMintを作ることもできます。)将来にわたってライトニングノードを自前で用意するユーザーというのはかなりのヘビーユーザー層に限られる可能性が小さくない中、eCash/Cashuが提案する付加価値がどんどん魅力的になっていっているように感じます。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。


ディスカッション