Выпущен c-lightning 0.7, теперь с большим количеством плагинов
Lightning Network

Выпущен c-lightning 0.7, теперь с большим количеством плагинов

Christian Decker
Christian Decker, Rusty Russell

Разработчики c-lightning рады сообщить о выпуске версии 0.7 c-lightning. Этот выпуск – результат восьми месяцев работы, проделанной с момента  выхода нашего последнего крупного релиза. В рамках его подготовки участвовало 50 человек со всего мира и было сделано 1 300 подтверждений. В этом релизе не только повышен уровень производительности и устранен ряд багов, но и добавлены новые функции.

Новые функции

  • Плагины: флагманская функция версии 0.7 – плагины – позволяет разработчикам расширить возможности Lightning в собственных приложениях, написанных на различных языках программирования. Плагины еще раз подтверждают наше желание создать наиболее гибкую, расширяемую и настраиваемую  имплементацию узла Lightning Network. Благодаря им мы можем продолжать направлять основные усилия на разработку основных функций, одновременно предоставляя пользователям и разработчикам возможность добавлять собственные функции для внедрения c-lightning в их среду.
  • Развернута функция Routeboost, позволяющая нам отправлять и получать платежи по частным каналам путем указания информации о них в инвойсе. Это важно для узлов, не раскрывающих свои каналы, тем самым  позволяя им сохранять приватность транзакций.
  • Усовершенствованная функция управления средствами: усовершенствованный контроль над тем, какие монеты используются для финансирования каналов и вывода из узлов, помогает избежать ряда ловушек с неподтвержденными транзакциями.
  • Опция option_data_loss_protect теперь включена по умолчанию, что позволяет укрепить как ваш собственный уровень защиты от потери данных, так и защищенность ваших пиров.
  • Воспроизводимые сборки: определенная конфигурация позволяет компилировать бинарники для Ubuntu самостоятельно и проверять идентичны ли они тем, которые мы предоставляем вам для удобства.
  • Более качественная документация: от самой лучшей функции не будет толка, если ее правильно не задокументировать. Именно поэтому мы полностью обновили нашу документацию, которая теперь автоматически генерируется по адресу lightning.readthedocs.io
  • И как всегда: производительность, производительность, производительность..

Плагины на службе расширяемости и кастомизации

Пока нашей основной целью  были расширяемость и кастомизация наряду с производительностью и безопасностью,  пользователям приходилось писать код для полномасштабных демонов, даже чтобы добавить простейшую функцию или внести небольшие изменения. Плагины кардинально меняют эту ситуацию. Плагины – это простые программы, написанные на каком-угодно языке и управляемые c-lightning. Это соответствует т.н. модели расширения за счет внешних устройств, в которых сопутствующий процесс протекает одновременно с другим процессом, с которым он взаимодействует. Кроме того, мы представили ряд точек расширения через плагин API:

  • Проброс опций** командной строки** позволяет плагинам регистрировать собственные опции командной строки, которые разглашаются через lightningd, так что настройка конфигурации требуется только основными процессами.
  • Проброс команд JSON-RPC – это еще один способ для плагинов добавлять собственные команды в интерфейс JSON-RPC.
  • Уведомления о событиях – для плагинов это механизм push-уведомлений, поступающих от lightningd.
  • Хуки – это примитив, позволяющий плагинам получать уведомления о внутренних событиях в lightningd, и менять его поведение или внедрять специальное поведение.

Все эти точки расширения – JSON-RPC, опция passthrough, предоставляющая ‘единое окно’ взаимодействия как с демоном, так и с любыми плагинами, уведомления и хуки, позволяющие обеспечивать взаимодействие или даже менять поведение нод в реальном времени – все они позволяют обеспечивают значительно более взаимосвязанную интеграцию с основным демоном, чем раньше.

В сравнении с существующими способами расширения c-lightning, начать работать с плагинами стало значительно легче. Если у вас уже есть опыт работы с stdin, stdout или с JSON-сериализованными данными, вы уже умеете создавать плагины. Кроме того, мы с сообществом создали ряд библиотек, помогающих при написании плагинов на C, Python, Golang и Java.

Ниже приведен пример плагина на Python, демонстрирующий проброс JSON-RPC , проброс опций и уведомления относительно записи сообщений в c-lightning:

from lightning import Plugin
plugin = Plugin(autopatch=True)

@plugin.method("hello")
def hello(plugin, name="world"):
    greeting = plugin.get_option('greeting')
    s = '{} {}'.format(greeting, name)
    plugin.log(s)
    return s

@plugin.init()
def init(options, configuration, plugin):
    plugin.log("Plugin helloworld.py initialized")

plugin.add_option('greeting', 'Hello',
                  'The greeting I should use.')
plugin.run()


Наряду  с интерфейсом JSON-RPC, система плагинов – полноправная система среди наших интерфейсов, и мы постоянно расширяем ее функциональность с точки зрения доступной информации и взаимодействия с c-lightning core.

Новая модульность

Плагины не только позволяют пользователям расширять и индивидуализировать c-lightning – они также позволяют нам, разработчикам c-lightning, повышать модульность c-lightning. Последние несколько недель мы занимались портированием в плагины некоторых функций, которые раньше строго задавались в самой c-lightning. Перевод этих функций в плагины производится в двух основных целях:

  1. Чтобы обеспечить более четкое разделение функций, так как мы четко заявляем о том, какая информация может просматриваться и какие действия могут исполняться.
  2. Чтобы позволить пользователям с легкостью заменять плагин на собственную версию, если стоящий по умолчанию плагин не соответствует их требованиям.

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

Например, мы перенесли часть кода, связанного с оплатой инвойсов в payplugin. Основная цель payplugin – получать инвойсы, а затем производить платеж на основании информации в инвойсе. При кажущейся простоте задачи, выясняется, что единый платеж может повлечь за собой достаточно длинный процесс извлечения дополнительной информации из инвойса, такой как routehints и информация о многоэлементных платежах (эта функция будет скоро внедрена). На основании этой информации плагин генерирует несколько маршрутов, делает попытки направить платеж по каждому из них и делает повторные попытки при получении отказа. Перенос этой функции в плагин позволил нам написать более простой код как со стороны плагина, так и со стороны основного демона. Это также позволяет пользователям заменять плагин на собственный при наличии более качественного решения для маршрутизации платежей, например, на основании дополнительной информации о состоянии сети, без необходимости  встраивать эту функциональность в саму c-lightning.

Несмотря на то, что система плагинов была создана относительно недавно, ряд разработчиков уже начал писать некоторые  инновационные плагины,  расширяя функциональность c-lightning за предполагаемые нами пределы: автопилоты, сетевые зонды, метрики для prometheus, кросс-чейн  атомарные свопы, дополнительные интерфейсы RPC и многое другое.

Что нас ждет в будущем

Этот релиз – безусловно, очень важная веха для нас, но это только начало. Недавно мы завершили работу над версией 1.0  сети Lightning Network, и теперь готовимся к разработке множества других неожиданных и инновационных функций, включенных в нашу дорожную карту.

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

Другие предложения, над которыми мы работаем – это каналы с двумя источниками финансирования для обеспечения повышенной ликвидности в сети, снятие требований о комиссиях, что является решением для одной из главных причин закрытия каналов.

С выходом c-lightning 0.7 мы также рады приступить к внедрению этих потрясающих функций и поиску решений для некоторых задач, с которыми нам предстоит столкнуться.

Мы бы хотели поблагодарить не только тех, кто  участвовал в написании кода для c-lightning, но и тех, кто был достаточно #reckless, чтобы  протестировать наши разработки и сообщить, что работает, а что надо улучшить. И, наконец, мы бы хотели выразить благодарность другим командам специалистов по сети Lightning Network, ACINQ и индивидуальным участникам, которые внесли свою лепту в создание в сообществе сети Lightning Network такой приятный дух солидарности и открытости!

Начните использовать плагины

Lightning нужно больше плагинов! Чтобы приступить к расширению ваших приложений Lightning, стоит первым делом прочитать нашу документацию, а затем изучить некоторые примеры плагинов. Очень ждем ваших отзывов – с нами можно связаться через наш GitHub репозиторий или по  рассылке Lightning-dev.

If you have specific preferences, please, mark the topic(s) you would like to read: