インバウンドキャパシティの入手方法
Lightning Networkを触っていて、Inbound Capacityが欲しいと思ったので調べたことをまとめる。
不正確な文面があればコメント頂けると嬉しいです。できる限り早急に修正します。
Inbound Capacityとは
Lightningとは、2者間でbitcoinをやりとりするチャネルを通して、オフチェーンでbitcoinをやりとりするネットワークのことである。Lightningの各チャネルごとに存在する「いくらまで相手からbitcoinを受け取れるか」の額をInbound Capacityとよぶ。
Lightningでは、各ユーザー同士がそれぞれ0以上の任意の額のbitcoinを持ち寄ってチャネルを開き、bitcoinをOn-chainで送金する代わりに、お互いの収支簿を付けることで資金の移動を記録する。そして任意のタイミングで片方(および双方)がチャネルをCloseでき、その時トータルで移動した額がOn-chain上で清算される。よって、片方の持ち分がマイナスになるような取引、つまり自分が持ち寄った金額を超えた送金や、相手が持ち寄った金額を超えた受け取りをすることができない。
実世界の例をあげる。AliceはBobとお金をやり取りしようとしている。Aliceは現金を100万円を持っており、Bobは現金を1万円しか持っていない。2人合わせて101万円の日本円を持っているが、実際にAliceができるのはBobに100万円を渡すか1万円貰うかである。これは101万円のCapacityを持ったチャネルが開設されており、Aliceから見て100万円のOutbound Capacityと1万円のInbound Capacityを持った状態に相当する。逆にBobから見れば1万円のOutbound Capacityと100万円のInbound Capacityを持った状態に相当する。
ここで、新規のLightningユーザーがチャネルを開く時は、Aliceのような状態が容易に起こりうる。一緒にbitcoinを持ち寄ってくれる親切なLightningユーザーがいないとき、新規ユーザーは一方的に”100万円”を持ちだして勝手にチャネルを開くことになる。つまりOutbound Capacityを得るのは簡単であり、Inbound Capacityの入手性だけが問題になる。
Inbound Capacityの用途
次に、どのような人がどのようなチャネル上のInbound Capacityを必要としているか見ていく。
ケース1: Lightning上での受け取り
AliceがLightning決済で何かを売っているとする。この場合Aliceは物品やサービスと引き換えにLightning上でbitcoinを受け取る必要がある。AliceはこのためにInbound Capacityを必要とする。
マルチパス決済
この場合、Inbound Capacityが複数のチャネルにまたがっていても、ルーティングがスムーズに行えれば問題ない。例えば、Aliceがそれぞれ10,000satsのInbound Capacityを持ったチャネルを5個持っていれば、45,000satsの受け取りをすることは理論上可能である。支払い経路を分割することでこれを可能にする技術をマルチパス決済(MPP)という。
ケース2: ルーティング
ルーティングはあるノードAから別のノードBへの支払いを中継し、手数料を徴収する営為である。つまり、AからBTCを受け取り、Bに同額を支払う必要がある。例えば100,000satsをルーティングするには、Aと自分とのチャネルに100,000satsのInbound Capacityが、Bと自分とのチャネルに100,000satsのOutbound Capacityが必要になる。
ルーティングとリバランス
ここでA→Bのルーティングばかり発生してしまうとA,BのCapacityはそれぞれOutbound、Inboundに偏ってしまい、それ以上A→Bに中継できなくなってしまう。これを何らかの方法で(たとえば自分でB→Aの送金を発生させるなど)変化させることをリバランスという。
A→Bの支払いとB→Aの支払いを両方とも効率よく中継したいのなら、In/Out Capacityが50:50になるよう調整するのが一つの手である。どの程度リバランスを実施するか、割合をどう保つかは個々の状況と戦略によるだろう。
注釈:リバランスはInbound/Outbound Capacityの調整全般というより広い意味で使われる。
Inbound Capacityを手に入れる
この章では実際にInbound Capacityを手に入れる方法をいくつか列挙していく。各方法の具体的な実行手順については省略する。
個別の方法論に移る前に、すべての方法に共通する注意を2つ述べる。
まず、チャネルは一方的に閉じることが可能である(一定期間ロックされるなどの不利な条件になるが)。そしてチャネルが閉じられると、Capacityは清算されbitcoin残高に反映される。よってInbound Capacityを維持するには、相手がチャネルを開き続けることを信頼するしかない。例えば後ほど紹介するLNBIGというサービスでは取引が1か月ない場合はチャネルを閉じるという規約になっている。しかし一般には相手がチャネルを開き続ける保証は存在しない。
次に、複数のチャネルを持っている場合、あるいはLNBIGや他人とチャネルを開設する場合は、チャネル間でリバランスの必要がある可能性がある。前者の場合、貰えるInbound Capacityがどのチャネルのものかはルーティングの結果により異なる。また、後者の場合、開設したチャネル上のInbound Capacityが貰えることになる。それが欲しいチャネルのInbound Capacityでない場合、うまくリバランスして別のチャネルに移す必要がある。チャネルを指定したリバランスの方法に関しては本稿の内容を超えるので扱わない。
個別の方法論に移ろう。「0. Lightningでbitcoinを支払う」のように自然に手に入る場合を除けば、方法は大きく2つに分かれる。
1つ目は適切な設定でチャネルを開く方法、2つ目はチャネルを開いた後、そのチャネルを通して外部に送金する方法である。前者として1,2を、後者として3,4,5を紹介する。
0. Lightningでbitcoinを支払う
これは積極的な方法ではないが、Lightningでbitcoinを支払うとは、自ノードから相手ノードにbitcoinが送られることと同じなので、当然同額を受け取ることができるようになる。(厳密にはRouting Feeによる減少分がある)
短所は自分が払った分だけしか受け取れないことである。資金受け取りやルーティングの為の方法としては非効率的である。
1. 他人にチャネルを繋いでもらう
単純な方法だが、他人に自ノードとの間にチャネルを開設してもらうという方法がある。相手が持ち寄った額が、相手のOutbound Capacityになり、自分のInbound Capacityになる。
長所は費用が掛からないこと。短所として、相手は自分の為にLightingノードを管理し、また自分と第3者が取引できるように別のチャネルとのInbound Capacityを維持する必要があり、負担が大きい。
2. Inbound Capacity自体を購入する
Inbound Capacityは市場で取引されている。具体的にはお金を払うと自ノードとの間にチャネルを開設してくれるノードがある。LNBIGなどのサービスがそうしたノードを提供している。
たとえばLNBIGにキャパシティ200,000satsのチャネル開設を申し込むとする。するとLNBIG所有のノードが200,000sats,自ノードが0satsを持ち寄ったチャネルをLNBIGが開いてくれる。これはつまり、LNBIGのこのノードとのチャネルにおいて自ノードは200,000satsのInbound Capacityを得たということである。
長所は即座に入手できること。短所は費用がかかることである。コストは最も高くつく。
3. Walletアプリを使う
自ノードから自分の所有するウォレットアプリのアカウントにLightningでbitcoinを送金する方法。「0. Lightning上でbitcoinを支払う」と同様の理由で、自ノードはInbound Capacityを手に入れることができる。
Wallet側にInbound Capacityが必要ではないかと思うだろうが、それはWallet側がサービスとして用意してくれる。それを利用させてもらう。もちろんWallet側のウォレットと自分とのルーティングが可能であることが必要である。送金したbitcoinはそのまま保管したり使ってもよいし、On-chainに戻して送り返すこともできる。これもサービスとして提供されており、使いやすいUIで難しい作業を気にせずに実行できる。
長所は協力的な他人がいなくても実行でき、簡単にできること。短所はWalletアプリが手数料を取ること、それと一部のWalletアプリがCustodialであることである。また送金額の制限なども考慮する必要がある。
Non-custodialなものとして、Breez、Muun Walletなどがある。CustodialなものはWallet of Satoshiなどがある。サービスとしてはいずれも入出金時の手数料で稼ぐモデルであると考えられる。
なお、Breezは裏でBoltz Exchangeを使っている。よって可能なら次で述べるように直接実行した方がよい。
4. On-chainとLightningのスワップサービスを使う
On-chainとLightning Networkの間で資金を交換してくれるサービスを使う。Lightning Loop、Boltz Exchange、DH Swapなどのサービスは、Submarine Swapなどの技術によりこれをトラストレスな方法で行ってくれる。これらのサービスにLightningでbitcoinを送金すると、指定したアドレスにOn-chainで返してくれる。失敗するとLightning宛に資金が返却される。「0. Lightningでbitcoinを支払う」と同様の理由で、Lightningで送った分だけInbound Capacityを得ることができる。
ほかにFixedFloatなど、スワップを提供するサービスもある。しかしサービスによってはカウンターパーティリスクがかかってくるので、よく調べる必要がある。
長所は「3.Walletアプリを使う」より自由に、第三者に依存せず実行できること。そのような特徴から、この手法はrebalance-lndなどでリバランスを自動化する際に主流となっている。短所は手数料がかかることと、一部のサービスにはカウンターパーティリスクが伴うことである。
5. Lightning入金に対応した取引所を使う
「3. Walletアプリを使う」と同様にして、Lightning入金に対応する取引所を用いて資金の交換を行うことができる。Lightningで入金し、その後On-chainで出金すればよい。
長所は大きな金額を移動できること。短所は中央集権的な取引所に依存すること、それに伴い入出金に制約やコストがかかることである。また日本居住者向けのLightningに対応している取引所が少ないという点も考慮すべきである。
費用比較
代表的なサービス(≒自分の使っているサービス)に絞り、1,000,000sats(0.01BTC)のInbound Capacityを得るのに掛かる費用を大まかに試算した。もちろん、これらの額は交換時点のNetwork Feeにより大きく変動する。調査は2023/10/26に行った。
ここでL1はOn-chain上、L2はLightning上という意味。
参考文献
Lightningの流動性について
Lightning LabsのLoopについて
Submarine-Swapを含め、L1L2スワップが実行できるサービスについての議論
submarine swap to get incoming liquiidty - c-lightning
MPPについて
LNBIG
LNBIG - The Network of LND Servers With Greater Liquidity
Diamond Hands Swap(DH Swap)
その他の資料
submarine swapの活用例
リバランスとその自動化