ライトニングネットワークによるインボイスレス送金
ビットコインを送金するには送金先のアドレスが必要ですが、そのアドレスは静的です。プライバシーを考慮する場合などはXPUBという鍵を使って動的にアドレスを生成することができますが、投げ銭やクラウドファンディングなど受取り側のアイデンティティが明確な場合、静的アドレスを用いるのが一般的ではないでしょうか。以下はあるビットコインアドレスで、このアドレスへはいつでも誰でも自由にコインを送金することができます。
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
一方、ライトニングネットワークの場合、送金するためには受取り側がインボイスと呼ばれる使い捨てアドレスなるものを毎回発行する必要があります。そして、そのインボイスを元に送金側が、どのルートを経由して送金するかを決めて送金をします。このインボイスは送金ごとに発行する必要があり、受取り側がインボイスを発行することで初めて送金側は送金することができます。以下はインボイスの例です。
lnbc1u1p07xy9spp5wyjm265ql6sywg7kmv9sqa550u6e6g0jt0ruvza87w2h5ml2ggtqdpzg3jhqmmnd96z74rfwqs82um9wf0kjep6xyxqyz5vqcqpjsp5f9y6h6lrlucm6dxjeum74tde4lwaz4dscny97q4jt8q2ds3rws5srzjqguzdrw89du0p0qe8x95dytzgeercqfezy5xhydkrelh34af4yqhgzwdpyqqz3sqqqqqqquyqqqqqzgqpc9qy9qsq8m8fkdeqg8g48tlxp9y08hfx20xvqzs9zkfw0jjfqkjua9dwfd8q0ac48crpskhh86ztu7rgmkat6z83rv6aq9x29z0zjpqaxnk0fesqukuhs2
送金ごとに受取り側がインボイスを発行しないと送金できないというのは少し不便です。上記で述べたように、オンチェーンのビットコイン送金の場合、送金先アドレスは静的なので、いちいち受取り側へアドレスを発行してもらうよう依頼する必要はありません。実はLNでも、オンチェーン送金のように静的アドレスへの送金を可能にする仕組みがあります。それをKeySendと呼び、インボイス発行なしに送金できることからインボイスレス送金などとも呼ばれています。
LNの各ノードはノードIDと呼ばれる静的アドレスを持っています。例えば、Spotlight.soyのノードIDは以下となっています。
02aac548b877279c30f3abbb7301de93096e3b87144fc484dc3409bb0d6bd566b1
[補足]これらのノードIDはこのサイトから検索することができます。ただし、モバイルウォレットの場合は、プライベートノードと認識されて非公開となっているので、ネットワークには公開されていません。
KeySendを使うと、このノードIDをビットコインアドレスのように使って送金することができます。以下はノードID 02aac... へ1000msatoshiを送金する(c-lightningの)コマンドです。
$lightning-cli keysend 02aac548b877279c30f3abbb7301de93096e3b87144fc484dc3409bb0d6bd566b1 1000
このようにKeySendを使えば、受取り側へインボイスを発行してもらう必要がなく、いつでも好きなときに送金することができます。
KeySendはオンチェーンのビットコイン送金のようなユーザ体験を実現できるように思われるかもしれないですが、決定的な違いは、受取り側のLNノードがオンラインでいることが条件となります(他にもルーティングやインバンドチャネルなどいくつかの条件がありますが、これらはネットワークが発達していけば解決されると思うので個人的には楽観的です)。オンチェーンでの送金は送金先アドレスのウォレットがオフラインだろうが関係なく送金できますが、LNの場合は、送金先ノードがオンラインでないと送金できません。オフライン送金ができるかどうかは、ユーザビリティやセキュリティの観点では重要な要因になってくるのではないでしょうか。今後の改善に期待したいですね。
KeySendに対応しているノード・ウォレット
- LND
- c-lightning
- Eclair
- Breez
- Zap
KeySendの仕組み
KeySendの仕組みを簡単に解説したいと思います。