Блокчейн/Уровень V · Слои/5.1 Lightning/Урок 3
Инвойсы: BOLT11 и BOLT12
От одноразовых строк к многоразовым офферам — и веб-серверы, которые закрывали этот пробел
МатериалыLightning-кошелёк, умеющий декодировать инвойсыПубличный декодер BOLT11, доступный в браузереПример инвойса BOLT11 и строки оффера BOLT12
Любопытство
- Почему запрос на оплату, срок действия которого истекает через час, вынуждает продавцов постоянно генерировать новые?
- Как статический QR-код может оставаться действительным годами и при этом генерировать уникальные защищённые инвойсы для каждой транзакции?
- Какие именно поля данных позволяют кошельку перед отправкой средств убедиться, что инвойс не был подделан?
Исследование
- Инвойс BOLT11 — это строка в кодировке bech32, начинающаяся с 'lnbc', которая содержит все необходимые параметры платежа. В ней закодированы необязательная сумма (в биткоинах, с буквой-множителем, вплоть до долей сатоши), конкретный хеш платежа, полученный из секретного прообраза, и срок действия — по умолчанию один час. Публичный ключ ноды получателя указывает адресата, а необязательные подсказки маршрута (route hints) помогают плательщику, если прямых каналов нет. Вся строка подписывается получателем, что гарантирует её целостность.
- Из-за такой архитектуры инвойсы BOLT11 строго одноразовые. Как только отправитель оплачивает соответствующий хеш платежа, инвойс считается оплаченным и не может быть использован повторно. Платить по нему дважды небезопасно: после первого платежа прообраз известен всем нодам на этом маршруте, поэтому любая из них, оказавшись также на маршруте второго платежа, может забрать его себе. Из-за этого ограничения в рознице нужны динамические QR-коды: продавцы должны генерировать новую строку для каждого покупателя, что усложняет кассовое оборудование.
- Разработчики из сообщества устранили это неудобство с помощью LNURL и Lightning-адресов (Lightning Address), которые опираются на внешние веб-серверы. Пользователь сканирует статический URI, указывающий на эндпоинт сервера; перед началом оплаты кошелёк получает с этого сервера свежий инвойс BOLT11. Так публичный адрес отделяется от данных конкретной транзакции: одна ссылка может принимать неограниченное число платежей, а «под капотом» сохраняется безопасность уникальных одноразовых инвойсов.
- Офферы BOLT12 (offers), разработанные Расти Расселом и добавленные в спецификацию в 2024 году, переносят этот процесс внутрь протокола. Эти многоразовые платёжные коды начинаются с 'lno' и служат статическими идентификаторами ноды получателя. После сканирования кошелёк плательщика отправляет onion-сообщение напрямую через Lightning Network, чтобы получить свежий инвойс от создателя оффера. Это устраняет зависимость от внешних веб-серверов и встраивает генерацию запросов в базовый протокол.
- Офферы BOLT12 поддерживают возможности, которых нет в BOLT11, в том числе сценарии, в которых продавец платит пользователю, например возвраты или выводы средств (регулярные платежи были описаны в черновике, но исключены из принятой спецификации). Офферы также могут использовать слепые пути (blinded paths), чтобы скрыть принимающую ноду в графе каналов вместо публикации её публичного ключа. Такая конструкция уменьшает утечку приватных данных по сравнению со стандартными инвойсами, которые напрямую раскрывают подсказки маршрута или резервные адреса.
- Спонтанные платежи полностью обходятся без инвойсов благодаря протоколам keysend или AMP (Atomic Multi-Path): отправитель переводит средства на известный ключ ноды без предварительного запроса. Чтобы проверить это на практике, вставьте любой Lightning-инвойс в публичный декодер BOLT11. Найдите человекочитаемый префикс, сумму, хеш платежа, срок действия и подпись получателя. Сравните это со строкой 'lno', в которой нет хеша платежа — только то, что нужно плательщику для запроса инвойса: ID ноды или слепые пути к ней.
Ключевые факты
- Инвойсы BOLT11 — одноразовые строки в формате bech32, начинающиеся с 'lnbc', в которых закодированы сумма, хеш и подпись.
- LNURL и Lightning-адреса используют веб-серверы, чтобы получать свежие инвойсы BOLT11 по статическим ссылкам.
- Офферы BOLT12 начинаются с 'lno' и генерируют уникальные инвойсы с помощью onion-сообщений через Lightning Network.
- Офферы BOLT12 многоразовые и поддерживают платежи от продавца пользователю, например возвраты, чего BOLT11 не умеет.
- Срок действия инвойса BOLT11 по умолчанию — один час (3600 секунд).
- Keysend позволяет отправить спонтанный платёж на публичный ключ ноды без инвойса.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 различных форматов или идентификаторов платёжных запросов, используемых в цифровых финансах, — от устаревших кодов банковских переводов до современных криптостандартов. Укажите, является ли каждый из них одноразовым или многоразовым.
6СгруппироватьРаспределите эти 9 по 6 категориям в зависимости от того, как обеспечивается уникальность: статические многоразовые, динамические одноразовые, с получением свежего запроса через сервер, с получением свежего запроса средствами самого протокола, спонтанные на основе ключа или другое.
3Выделить главноеСведите 6 групп к 3 фундаментальным компромиссам между удобством для пользователя (статические коды) и криптографической безопасностью (уникальные хеши).
1КристаллизоватьНапишите 1 предложение о том, почему офферы BOLT12 устраняют необходимость во внешних веб-серверах в многоразовых платёжных сценариях.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.