本文へスキップ
buybitcoinsmart

用語集 / ライトニングとレイヤー2

LNURL

LNURLとは?
LNURLは、ライトニングウォレットが符号化された1つのリンクをたどって、サーバーから新しいインボイス、出金、またはログイン用のチャレンジを取得できるようにする、小さなウェブプロトコルの一群です。

ライトニングのインボイスは有効期限があり、1回しか支払えないため、印刷したり公開したりするには不便です。LNURLは、インボイスの手前にHTTPSリクエストを置くことでこれを解決します。ウォレットは、支払いたい時点でサーバーに支払リクエストを問い合わせます。仕様はBOLTの外にあり、LUD-01から番号が付けられています。

仕組み

LNURLは、静的なリンクをウォレットとサーバーの間の生きたやり取りに変えます。

仕掛けはリンクそのものにあります。元の形式であるLUD-01では、HTTPS URLがlnurlという接頭辞を付けてbech32で符号化され、QRコードとして印刷したりチャット画面に入力したりしても壊れない文字列になります。新しいLUD-17の形式では符号化をやめ、通常のURLの前にlnurlp:のような単純なスキーム接頭辞を付けます。こちらは短く、デバッグも容易です。いずれの場合も、ウォレットがリンクを復号し、GETリクエストを送り、これがどの種類のやり取りなのかを示すJSONを受け取ります。

そのJSONのtagフィールドが、それ以降のすべてを決めます。LUD-06は支払の流れであるpayRequestを定義します。サーバーはコールバックURL、ミリサトシ単位のminSendableとmaxSendable、そしてウォレットが表示するメタデータ文字列を返します。利用者が金額を選ぶと、ウォレットがその金額を添えてコールバックし、サーバーはちょうどその合計額のBOLT11インボイスを新たに発行して返します。LUD-03は逆方向に動くwithdrawRequestを定義します。サーバーが資金を提示し、ウォレットが受け取るためのインボイスを渡します。LUD-02は相手ピアにチャネルを要求します。LUD-04はauthを定義し、ウォレットがドメインごとに導出した鍵でチャレンジに署名します。一部のライトニングのサイトがパスワードなしでログインさせるのはこの仕組みです。

理解しておく価値のある安全性の性質は限定的です。LNURLは、インボイスがリンクのドメインから来たものであり、その金額が承認した額と一致することを保証します。ウォレットが支払前に返ってきたインボイスを検証するからです。そのドメインを誰が管理しているかについては何も保証しません。市場の露店で本物のコードの上に貼られたLNURLコードをスキャンすると、攻撃者のサーバーに支払われ、支払いは設計どおりに成功します。

目にする場面

ほとんどの人は、LNURLという言葉を目にすることなくLNURLに出会います。

チップや寄付のページはQRコードの背後でLNURL-payを使っています。だからこそ、同じ印刷されたコードが100人の異なる顧客に100の異なる金額で使えるのです。ビットコインのカンファレンスの配布物やフォーセットカードはLNURL-withdrawを使います。スキャンするとウォレットが静かにインボイスを生成し、目に見えるインボイスなしにサトシが届きます。一部のライトニングウォレットやウェブサービスは、ログインシステム全体としてLNURL-authを使っています。

最大の導入は間接的なものです。user@domainの形式であるライトニングアドレスはLUD-16で定義され、LNURL-payの上に直接構築されています。アドレスはwell-knownのHTTPSパスに変換され、そこから先の流れは通常のLUD-06です。お使いのウォレットがライトニングアドレスに対応していれば、すでにLNURLを扱えています。

主な注意点は可用性です。途中にウェブサーバーがあるため、LNURLコードの信頼性はそのサーバーとTLS証明書の信頼性を超えません。BOLT11インボイスは、一度生成されればサーバーがオフラインでも支払えます。LNURLのリンクはそうはいきません。

LNURL vs BOLT11インボイス

LNURLは支払リクエストを入手する方法であり、BOLT11インボイスは支払リクエストそのものです。この1つの違いが両者の性質を説明します。インボイスは自己完結しており、受取人のノードによって署名され、定められた時間だけ有効で、1回だけ支払えます。LNURLのリンクは金額も支払ハッシュも署名も含まず、無期限に有効で、支払うたびに新しいインボイスが発生するため何人でも使えます。インボイスを印刷すれば1時間以内に失効します。LNURLコードを印刷すれば、ドメインが機能しなくなるまで動き続けます。

混同しやすい用語

よくある質問

LNURLはライトニングの仕様の一部ですか?

いいえ。BOLTはライトニングプロトコル自体を定義するのに対し、LNURLはLUD-01から番号が付けられ、独自のリポジトリで維持される別個の文書群です。ウォレットの対応は任意であり、ばらつきがあります。

LNURLコードをスキャンするのは安全ですか?

改ざんからは安全ですが、すり替えからは安全ではありません。ウォレットは、インボイスがリンクのドメインから来たものであり、承認した金額と一致することを検証しますが、攻撃者のものに物理的にすり替えられたコードは、設計どおりに攻撃者へ支払います。

関連用語

ライトニングとレイヤー2のその他の用語

このページを英語で読む