MSTR Cat

Блокчейн/Уровень V · Слои/5.1 Lightning/Урок 3

Инвойсы: BOLT11 и BOLT12

От одноразовых строк к многоразовым офферам — и веб-серверы, которые закрывали этот пробел

МатериалыLightning-кошелёк, умеющий декодировать инвойсыПубличный декодер BOLT11, доступный в браузереПример инвойса BOLT11 и строки оффера BOLT12

Любопытство

  1. Почему запрос на оплату, срок действия которого истекает через час, вынуждает продавцов постоянно генерировать новые?
  2. Как статический QR-код может оставаться действительным годами и при этом генерировать уникальные защищённые инвойсы для каждой транзакции?
  3. Какие именно поля данных позволяют кошельку перед отправкой средств убедиться, что инвойс не был подделан?

Исследование

  1. Инвойс BOLT11 — это строка в кодировке bech32, начинающаяся с 'lnbc', которая содержит все необходимые параметры платежа. В ней закодированы необязательная сумма (в биткоинах, с буквой-множителем, вплоть до долей сатоши), конкретный хеш платежа, полученный из секретного прообраза, и срок действия — по умолчанию один час. Публичный ключ ноды получателя указывает адресата, а необязательные подсказки маршрута (route hints) помогают плательщику, если прямых каналов нет. Вся строка подписывается получателем, что гарантирует её целостность.
  2. Из-за такой архитектуры инвойсы BOLT11 строго одноразовые. Как только отправитель оплачивает соответствующий хеш платежа, инвойс считается оплаченным и не может быть использован повторно. Платить по нему дважды небезопасно: после первого платежа прообраз известен всем нодам на этом маршруте, поэтому любая из них, оказавшись также на маршруте второго платежа, может забрать его себе. Из-за этого ограничения в рознице нужны динамические QR-коды: продавцы должны генерировать новую строку для каждого покупателя, что усложняет кассовое оборудование.
  3. Разработчики из сообщества устранили это неудобство с помощью LNURL и Lightning-адресов (Lightning Address), которые опираются на внешние веб-серверы. Пользователь сканирует статический URI, указывающий на эндпоинт сервера; перед началом оплаты кошелёк получает с этого сервера свежий инвойс BOLT11. Так публичный адрес отделяется от данных конкретной транзакции: одна ссылка может принимать неограниченное число платежей, а «под капотом» сохраняется безопасность уникальных одноразовых инвойсов.
  4. Офферы BOLT12 (offers), разработанные Расти Расселом и добавленные в спецификацию в 2024 году, переносят этот процесс внутрь протокола. Эти многоразовые платёжные коды начинаются с 'lno' и служат статическими идентификаторами ноды получателя. После сканирования кошелёк плательщика отправляет onion-сообщение напрямую через Lightning Network, чтобы получить свежий инвойс от создателя оффера. Это устраняет зависимость от внешних веб-серверов и встраивает генерацию запросов в базовый протокол.
  5. Офферы BOLT12 поддерживают возможности, которых нет в BOLT11, в том числе сценарии, в которых продавец платит пользователю, например возвраты или выводы средств (регулярные платежи были описаны в черновике, но исключены из принятой спецификации). Офферы также могут использовать слепые пути (blinded paths), чтобы скрыть принимающую ноду в графе каналов вместо публикации её публичного ключа. Такая конструкция уменьшает утечку приватных данных по сравнению со стандартными инвойсами, которые напрямую раскрывают подсказки маршрута или резервные адреса.
  6. Спонтанные платежи полностью обходятся без инвойсов благодаря протоколам 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 устраняют необходимость во внешних веб-серверах в многоразовых платёжных сценариях.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS