Cеть Lightning (Lightning Network, LN) – это быстро развивающийся второслойный платежный протокол, который работает поверх системы Bitcoin, обеспечивая почти мгновенные транзакции между двумя сторонами. Авторы объясняют, как это усовершенствование позволит перейти на следующий уровень масштабируемости системы Bitcoin, повысив скорость и конфиденциальность при одновременном снижении комиссии. Вы узнаете, как LN может поддерживать гораздо больше транзакций, чем современные финансовые сети.
Author(s): Андреас Н. Антонопулос, Олаулува Осунтокун, Рене Пикхардт
Publisher: ДМК Пресс
Year: 2022
Language: Russian
Pages: 450
City: М.
Оглавление
Предисловие
Целевая аудитория
Условные обозначения в книге
Примеры исходного кода
Использование примеров исходного кода
Ссылки на компании и продукты
Адреса и транзакции в этой книге
Как с нами связаться
Связь с Андреасом
Связь с Рене
Связь с Олаолувой Осунтокун
Признательности от Андреаса
Признательности от Рене
Признательности от Олаолувы Осунтокун
Участники проекта
Источники
Об авторах
Об иллюстрации на обложке (Колофон)
Часть I. Понимание сети Lightning
Глава 1. Введение
Базовые понятия сети Lightning
Доверие в децентрализованных сетях
Справедливость без центральной власти
Доверительные протоколы без посредников
Протокол справедливости в действии
Примитивы безопасности как строительные блоки
Пример протокола справедливости
Мотивация для сети Lightning
Масштабирование блочных цепей
Определяющие признаки сети Lightning
Примеры использования сети Lightning, пользователи и их истории
Вывод
Глава 2. Приступаем к работе
Первый кошелек Lightning Алисы
Узлы Lightning
Проводники Lightning
Кошельки Lightning
Тестовая сеть Bitcoin
Уравновешивание сложности и контроля
Скачивание и инсталляция кошелька Lightning
Создание нового кошелька
Ответственность за хранение ключей
Мнемонические слова
Безопасное хранение мнемоники
Загрузка биткойна в кошелек
Приобретение биткойна
Получение биткойна
Из системы Bitcoin в сеть Lightning
Каналы сети Lightning
Открытие канала Lightning
Покупка чашки кофе с помощью сети Lightning
Кофейня Боба
Счет Lightning
Вывод
Глава 3. Как работает сеть Lightning
Что такое платежный канал?
Основы платежного канала
Маршрутизирование платежей по каналам
Платежные каналы
Мультиподписной адрес
Финансовая транзакция
Пример плохой процедуры открытия канала
Фиксационная транзакция
Обман с предыдущим состоянием
Объявление канала
Закрытие канала
Взаимное закрытие (хороший путь)
Принудительное закрытие (плохой путь)
Нарушение протокола (уродливый путь)
Счета
Платежный хеш и прообраз
Дополнительные метаданные
Доставка платежа
Эпидемический протокол обмена сообщениями между одноранговыми узлами
Отыскание пути и маршрутизация
Отыскание пути на основе источника
Луковичная маршрутизация
Алгоритм пересылки платежей
Шифрование однорангового обмена сообщениями
Мысли о доверии
Сравнение с системой Bitcoin
Адреса против счетов, транзакции против платежей
Выбор выходов против отыскания пути
Выходы со сдачей в Bitcoin против отсутствия сдачи в Lightning
Майнинговые комиссионные против маршрутизационных комиссионных
Комиссионные, варьирующиеся в зависимости от трафика, против объявленных комиссионных
Публичные Bitcoin-транзакции против приватных платежей Lightning
Ожидание подтверждений против денежного расчета Lightning
Отправка произвольных сумм против ограничений по емкости
Стимулы для крупных платежей против малых платежей
Использование блочной цепи в качестве реестра против судебной системы
Офлайн против онлайна, асинхронность против синхронности
Сатоши против миллисатоши
Общие черты сетей Bitcoin и Lightning
Денежная единица
Необратимость и окончательность платежей
Доверие и риск контрагента
Безразрешительная работа
Открытый исходный код и открытая система
Вывод
Глава 4. Программное обеспечение узла Lightning
Среда разработки Lightning
Использование командной строки
Скачивание репозитория книги
Docker-контейнеры
Bitcoin Core и regtest
Сборка контейнера Bitcoin Core
Взаимодействие с контейнером bitcoin core
Проект c-lightning узла Lightning
Сборка c-lightning в качестве Docker-контейнера
Настройка сети Docker
Оперирование контейнерами bitcoind и c-lightning
Инсталлирование c-lightning из исходного кода
Инсталлирование необходимых библиотек и пакетов
Копирование исходного кода c-lightning
Компилирование исходного кода c-lightning
Проект демона узла сети Lightning
Docker-контейнер LND
Оперирование контейнерами bitcoind и LND
Инсталлирование LND из исходного кода
Копирование исходного кода LND
Компилирование исходного кода LND
Проект узла Lightning Eclair
Docker-контейнер Eclair
Оперирование контейнерами bitcoind и Eclair
Инсталлирование Eclair из исходного кода
Копирование исходного кода Eclair
Компилирование исходного кода Eclair
Сборка полной сети из разнообразных узлов Lightning
Использование docker-compose для оркестрирования Docker-контейнеров
Конфигурация docker-compose
Запуск образца сети Lightning
Открытие каналов и маршрутизирование платежа
Вывод
Глава 5. Оперирование узлом сети Lightning
Выбор своей платформы
Почему для оперирования узлом Lightning важна надежность?
Типы аппаратных узлов Lightning
Оперирование в «облаке»
Оперирование узлом дома
Какое оборудование требуется для работы узла Lightning?
Переключение серверной конфигурации в облаке
Постоянное хранилище данных (накопитель)
Использование инсталлятора или помощника
RaspiBlitz
myNode
Umbrel
BTCPay Server
Узел Bitcoin или облегченный узел Lightning
Выбор операционной системы
Выбор имплементации узла Lightning
Инсталлирование узла Bitcoin или Lightning
Фоновые службы
Изоляция процесса
Запуск узла
Конфигурирование узла
Конфигурирование сети
Это просто работает!
Автоматическая переадресация портов с использованием UPnP
Использование Tor для входящих соединений
Ручная переадресация портов
Безопасность вашего узла
Безопасность операционной системы
Доступ к узлу
Резервное копирование узла и каналов
Риск со стороны горячего кошелька
Зачистка средств
Внутрицепная зачистка
Внецепная зачистка
Зачистка на основе подводного свопа
Подводные свопы с помощью петли
Время безотказной работы и доступность узла Lightning
Допускайте неисправности и автоматизируйте
Мониторинг доступности узла
Сторожевые вышки
Управление каналами
Открытие исходящих каналов
Автопилот
Получение входящей ликвидности
Закрытие каналов
Перебалансировка каналов
Комиссионные за маршрутизацию
Управление узлом
Ride The Lightning
lndmon
ThunderHub
Вывод
Часть II. Сеть Lightning в деталях
Глава 6. Архитектура сети Lightning
Комплект протоколов сети Lightning
Lightning в деталях
Глава 7. Платежные каналы
Другой способ использования системы Bitcoin
Владение биткойном и контроль над ним
Разнообразие форм (независимого) владения и мультиподпись
Совместное владение без независимого контроля
Предотвращение «привязанности» и нерасходуемости биткойна
Соединение узлов в качестве прямых одноранговых участников сети
Строительство платежного канала
Приватный и публичный ключи узла
Сетевой адрес узла
Идентификаторы узлов
Соединение узлов в качестве прямых одноранговых участников сети
Строительство канала
Одноранговый протокол для управления каналами
Поток сообщений об установлении канала
Сообщение open_channel
Сообщение accept_channel
Финансовая транзакция
Генерирование мультиподписного адреса
Сборка финансовой транзакции
Удерживание подписанных транзакций без широковещательной передачи
Возврат средств до финансирования
Сборка предварительно подписанной возвратной транзакции
Выстраивание транзакций в цепь без широковещательной передачи
Решение проблемы деформируемости (сегрегированный свидетель)
Сообщение funding_created
Сообщение funding_signed
Широковещательная передача финансовой транзакции
Сообщение funding_locked
Отправка платежей по каналу
Разделение остатка
Конкурирующие фиксации
Обман со старыми фиксационными транзакциями
Отзыв старых фиксационных транзакций
Асимметричные фиксационные транзакции
Задержанное (привязанное ко времени) расходование выхода to_self
Отзывные ключи
Фиксационная транзакция
Продвижение состояния канала вперед
Сообщение committement_signed
Сообщение об отзыве и возврате
Отзыв и рефиксация
Обман и наказание на практике
Резерв канала: обеспечение личной заинтересованности
Закрытие канала (кооперативное закрытие)
Сообщение shutdown
Сообщение closing_signed
Транзакция кооперативного закрытия
Вывод
Глава 8. Маршрутизация в сети платежных каналов
Маршрутизирование платежа
Маршрутизация против отыскания пути
Создание сети платежных каналов
Физический пример «маршрутизирования»
Протокол справедливости
Имплементирование атомарных бездоверительных многопереходных платежей
Возвращаясь к примеру с донатами
Внутрицепное и внецепное улаживание HTLC-контрактов
Контракты с привязкой к хешу и времени
HTLC-контракты на Bitcoin Script
Платежный прообраз и верификация хеша
Распространение HTLC-контрактов от Алисы к Дины
Обратное распространение секрета
Привязка подписи: предотвращение кражи HTLC-контрактов
Оптимизация хеша
Кооперативный отказ и отказ тайм-аута по HTLC-контракту
Декрементирование привязок ко времени
Вывод
Глава 9. Работа канала и пересылка платежей
Локальный (один) канал против маршрутизируемых (многочисленных) каналов
Пересылка платежей и обновление фиксаций с помощью HTLC-контрактов
HTLC-контракт и поток фиксационных сообщений
Пересылка платежей с помощью HTLC-контрактов
Добавление HTLC-контракта
Сообщение update_add_HTLC
HTLC-контракт в фиксационных транзакциях
Новая фиксация с выходом из HTLC-контракта
Алиса фиксирует
Боб признает новую фиксацию и отзывает старую
Боб фиксирует
Несколько HTLC-контрактов
Исполнение HTLC-контракта
Распространение HTLC-контракта
Дина исполняет HTLC-контракт с Чаном
Боб улаживает HTLC-контракт с Алисой
Удаление HTLC-контракта из-за ошибки или истечения срока
Осуществление локального платежа
Вывод
Глава 10. Луковичная маршрутизация
Физический пример, иллюстрирующий луковичную маршрутизацию
Выбор пути
Сборка слоев
Отслаивание слоев
Введение в луковичную маршрутизацию на основе HTLC-контрактов
Алиса выбирает путь
Алиса конструирует полезные грузы
Полезный груз для Дины в заключительном узле
Переходный полезный груз для Чана
Переходный полезный груз для Боба
Окончательные полезные грузы переходов
Генерация ключей
Сеансовый ключ Алисы
Детали генерации ключей
Генерация совместных секретов
Обертывание луковичных слоев
Луковицы фиксированной длины
Обертывание луковицы (в общих чертах)
Обертывание переходного полезного груза Дины
Луковично-маршрутизационная защита от повторного воспроизведения и его обнаружение
Обертывание переходного полезного груза Чана
Обертывание переходного полезного груза Боба
Заключительный луковичный пакет
Отправка луковицы
Сообщение update_add_htlc
Алиса отправляет луковицу Бобу
Боб проверяет луковицу
Боб генерирует заполнитель
Боб распутывает свой переходный полезный груз
Боб извлекает внешний HMAC для следующего перехода
Боб удаляет свой полезный груз и сдвигает луковицу влево
Боб конструирует новый луковичный пакет
Боб верифицирует детали HTLC-контракта
Боб отправляет update_add_htlc Чану
Чан пересылает луковицу
Дина получает заключительный полезный груз
Возвращение ошибок
Сообщения о сбоях
Застрявшие платежи
Спонтанные платежи keysend
Конкретно-прикладные луковичные TLV-записи
Отправка и получение платежей keysend
Платеж keysend и конкретно-прикладные записи в приложениях Lightning
Вывод
Глава 11. Сплетни и канальный граф
Обнаружение одноранговых узлов
Самозагрузка P2P-узлов
Самозагрузка адресов DNS-серверов
Рабочий поток самозагрузки нового однорангового узла
Опции SRV-запроса
Канальный граф
Ориентированный граф
Сообщения эпидемического протокола
Сообщение node_announcement
Структура сообщения node_announcement
Валидация объявлений узла
Сообщение channel_announcement
Необъявленные (приватные) каналы
Локализация канала в блочной цепи Bitcoin
Короткий ИД канала
Структура сообщения channel_announcement
Валидация объявления канала
Сообщение channel_update
Текущее сопровождение канального графа
Вывод
Глава 12. Отыскание пути и доставка платежа
Отыскание пути в рамках комплекта протоколов Lightning
Где же BOLT?
Отыскание пути: какую задачу мы решаем?
Выбор наилучшего пути
Отыскание путей в математике и информатике
Емкость, остаток, ликвидность
Неопределенность остатков
Сложность отыскания пути
Без лишних сложностей
Отыскание пути и процесс доставки платежа
Построение канального графа
Неопределенность в канальном графе
Неопределенность ликвидности и вероятность
Комиссионные и другие метрики канала
Отыскание кандидатных путей
Доставка платежа (цикл проб и ошибок)
Первая попытка (путь №1)
Учеба на ошибках
Вторая попытка (путь № 4)
Учеба на успехах
Застоявшиеся знания?
Многокомпонентные платежи
Использование MPP
Разбивка платежей
Метод проб и ошибок в течение нескольких «раундов»
Вывод
Глава 13. Проводной протокол: фреймирование и расширяемость
Слой обмена сообщениями в рамках комплекта протоколов Lightning
Проводное фреймирование
Высокоуровневое фреймирование
Кодировка типа
Расширения «Тип–длина–значение для сообщений»
Протокол буферизует формат сообщения
Прямая и обратная совместимости
Формат «Тип–длина–значение»
Целочисленная кодировка BigSize
Ограничения TLV-кодирования
Каноническое TLV-кодирование
Биты функциональностей и расширяемость протокола
Биты функциональностей как механизм обеспечения обнаруживаемости модернизаций
TLV для прямой и обратной совместимостей
Таксономия механизмов модернизации
Модернизации внутренней сети
Сквозные модернизации
Модернизации уровня строительства канала
Вывод
Глава 14. Шифрованный транспорт сообщений Lightning
Шифрованный транспорт в рамках комплекта протоколов Lightning
Введение
Канальный граф как децентрализованная инфраструктура публичных ключей
Почему не TLS?
Каркас криптосвязи на основе протокола Noise
Шифрованный транспорт Lightning в деталях
Noise_XK: рукопожатие Noise в сети Lightning
Нотация рукопожатия и поток протокола
Высокоуровневый обзор
Рукопожатие в трех действиях
Инициализация состояния сеанса рукопожатия
Акты рукопожатия
Акт первый
Акт второй
Акт третий
Шифрование транспортных сообщений
Ротация ключей сообщений Lightning
Вывод
Глава 15. Платежные запросы Lightning
Счета в комплекте протоколов Lightning
Введение
Платежные запросы Lightning против Bitcoin-адресов
BOLT #11: сериализация и интерпретация платежных запросов Lightning
Кодирование платежного запроса на практике
Человекочитаемый префикс
bech32 и сегмент данных
Тегированные поля счета
Вывод
Глава 16. Безопасность и конфиденциальность сети Lightning
Почему важна конфиденциальность?
Определения конфиденциальности
Процесс оценивания конфиденциальности
Анонимностное множество
Различия между сетями Lightning и Bitcoin с точки зрения конфиденциальности
Атаки на Lightning
Наблюдение за суммами платежей
Связывание отправителей и получателей
Раскрытие остатков каналов (прощупывание)
Отказ в обслуживании
DoS в Bitcoin
DoS в Lightning
Известные DoS-атаки
Заклинивание фиксаций
Запирание ликвидности канала
Межслоевая деанонимизация
Внутрицепная кластеризация Bitcoin-сущностей
Контрмеры
Внецепная кластеризация узлов Lightning
Контрмеры
Межслоевое связывание: узлы Lightning и Bitcoin-сущности
Граф Lightning
Как выглядит граф Lightning в реальности?
Граф Lightning сегодня
Атаки на основе топологии
Темпоральность сети Lightning
Централизация в сети Lightning
Экономические стимулы и графовая структура
Практические советы пользователям по защите их конфиденциальности
Необъявленные каналы
Соображения по маршрутизации
Принятие каналов
Вывод
Справочные материалы и дальнейшее чтение
Конфиденциальность и атаки прощупыванием
Атаки переполнением
Соображения по маршрутизации
Глава 17. Заключение
Децентрализованные и асинхронные инновации
Инновации в Bitcoin-протоколе и в Bitcoin Script
Инновация в протоколе Lightning
Расширяемость TLV
Строительство платежного канала
Сквозные функциональности в порядке выбора
Lightning-приложения (LApps)
На старт, внимание, марш!
Приложение A. Обзор основных принципов системы Bitcoin
Ключи и цифровые подписи
Приватные и публичные ключи
Хеши
Цифровые подписи
Типы подписей
Транзакции Bitcoin
Входы и выходы
Транзакционные цепочки
TxID: идентификаторы транзакций
Выходные точки: выходные идентификаторы
Bitcoin Script
Работа языка Bitcoin Script
Привязывающие и отвязывающие скрипты
Привязывание к публичному ключу (подписи)
Привязывание к хешу (секрету)
Мультиподписные скрипты
Скрипты привязки ко времени
Скрипты с несколькими условиями
Использование управления потоком в скриптах
Приложение B. Базовая инсталляция и использование Docker
Инсталляция Docker
Базовые команды Docker
Сборка контейнера
Оперирование контейнером
Исполнение команды в контейнере
Остановка и запуск контейнера
Удаление контейнера по имени
Выведение списка оперируемых контейнеров
Выведение списка Docker-образов
Вывод
Приложение C. Сообщения проводного протокола
Типы сообщений
Структура сообщения
Сообщения об установлении соединения
Сообщение init
Сообщения об ошибке
Сообщение error
Оживленность соединения
Сообщение ping
Сообщение pong
Финансирование канала
Сообщение open_channel
Сообщение accept_channel
Сообщение funding_created
Сообщение funding_signed
Сообщение funding_locked
Закрытие канала
Сообщение shutdown
Сообщение closing_signed
Операция канала
Сообщение update_add_htlc
Сообщение update_fulfill_hltc
Сообщение update_fail_htlc
Сообщение committement_signed
Сообщение revoke_and_ack
Сообщение update_fee
Сообщение update_fail_malformed_htlc
Объявление канала
Сообщение channel_announcement
Сообщение node_announcement
Сообщение channel_update
Сообщение announce_signatures
Синхронизация канального графа
Сообщение query_short_chan_ids
Сообщение reply_short_chan_ids_end
Сообщение query_channel_range
Сообщение reply_channel_range
Сообщение gossip_timestamp_range
Приложение D. Источники и уведомления о лицензиях
Источники
Сервер BTCPay Server
Lamassu Industries AG
Глоссарий
Предметный указатель