Перейти к содержимому
buybitcoinsmart

Глоссарий / Lightning и layer 2

LNURL

Что такое LNURL?
LNURL представляет собой семейство небольших веб-протоколов, которые позволяют кошельку Lightning получить с сервера новый счет, вывод средств или запрос на вход по одной закодированной ссылке.

Счета Lightning истекают и могут быть оплачены только один раз, поэтому их неудобно печатать или публиковать. LNURL решает это, ставя перед счетом HTTPS-запрос: ваш кошелек запрашивает у сервера платежный запрос в тот момент, когда вы хотите заплатить. Спецификации находятся вне BOLT и нумеруются начиная с LUD-01.

Как это работает

LNURL превращает статическую ссылку в живой диалог между кошельком и сервером.

Весь трюк заключен в самой ссылке. В исходной форме, LUD-01, URL-адрес HTTPS кодируется в bech32 с префиксом lnurl, что дает строку, которая выдерживает печать в виде QR-кода или ввод в окно чата. Более новая форма LUD-17 отказывается от кодирования и использует простые префиксы схемы, такие как lnurlp:, перед обычным URL-адресом, что короче и проще для отладки. В любом случае кошелек декодирует ссылку, выполняет GET-запрос и получает JSON, который сообщает ему, о каком взаимодействии идет речь.

Поле tag в этом JSON определяет все дальнейшее. LUD-06 определяет payRequest, поток оплаты: сервер возвращает URL-адрес callback вместе с полями minSendable и maxSendable, оба в миллисатоши, и строку метаданных, которую кошелек отображает. Вы выбираете сумму, кошелек обращается по callback с ней, и сервер возвращает только что сгенерированный счет BOLT11 ровно на эту сумму. LUD-03 определяет withdrawRequest, который работает в обратном направлении: сервер предлагает деньги, а кошелек предоставляет счет для их получения. LUD-02 запрашивает канал у пира. LUD-04 определяет auth, где кошелек подписывает запрос ключом, производным для каждого домена, и именно так некоторые сайты Lightning позволяют вам входить без пароля.

Свойство безопасности, которое стоит понимать, узкое. LNURL гарантирует, что счет пришел с домена из ссылки и что его сумма совпадает с той, которую вы одобрили, потому что кошелек проверяет полученный счет перед оплатой. О том, кто управляет этим доменом, он не гарантирует ничего. Сканирование кода LNURL, наклеенного поверх настоящего на рыночном прилавке, оплачивает сервер атакующего, и платеж проходит ровно так, как задумано.

Где это встречается

Большинство людей сталкиваются с LNURL, так и не увидев этого слова.

Страницы чаевых и пожертвований используют LNURL-pay за QR-кодом, поэтому один и тот же напечатанный код работает для ста разных клиентов со ста разными суммами. Раздачи на биткоин-конференциях и карты-краны используют LNURL-withdraw: вы сканируете, ваш кошелек незаметно создает счет, и сатоши приходят вообще без видимого счета. Некоторые кошельки Lightning и веб-сервисы используют LNURL-auth как всю свою систему входа.

Самое масштабное применение является косвенным. Адрес Lightning, форма user@domain, определен в LUD-16 и построен непосредственно на LNURL-pay: адрес преобразуется в стандартный путь HTTPS, а дальше поток представляет собой обычный LUD-06. Если ваш кошелек поддерживает адреса Lightning, он уже говорит на LNURL.

Главная оговорка касается доступности. Поскольку посередине стоит веб-сервер, код LNURL надежен ровно настолько, насколько надежны этот сервер и его сертификат TLS. Счет BOLT11, будучи однажды создан, можно оплатить и при отключенном сервере; ссылку LNURL нельзя.

LNURL vs счет BOLT11

LNURL является способом получить платежный запрос; счет BOLT11 представляет собой сам платежный запрос. Это единственное различие объясняет их свойства. Счет самодостаточен, подписан узлом получателя, действителен в течение заданного времени и оплачивается один раз. Ссылка LNURL не содержит ни суммы, ни хеша платежа, ни подписи, остается действительной бессрочно и работает для любого числа плательщиков, потому что каждый из них запускает новый счет. Напечатайте счет, и он умрет в течение часа. Напечатайте код LNURL, и он будет работать, пока работает домен.

Не путать с

Часто задаваемые вопросы

Является ли LNURL частью спецификации Lightning?

Нет. BOLT определяют сам протокол Lightning, тогда как LNURL представляет собой отдельный набор документов, нумеруемых начиная с LUD-01 и поддерживаемых в собственном репозитории. Поддержка в кошельках добровольна и различается.

Безопасно ли сканировать код LNURL?

Он защищен от изменения содержимого, но не от замены. Ваш кошелек проверяет, что счет пришел с домена из ссылки и совпадает с одобренной вами суммой, но код, физически замененный на код атакующего, оплатит атакующего ровно так, как задумано.

Связанные термины

Еще в разделе «Lightning и layer 2»

Читать эту страницу на английском