Интеграция Core Lightning: плагины и управление нодой

Интеграция с CLN (Core Lightning) Мы часто сталкиваемся с выбором между LND и CLN. На наш взгляд, CLN выигрывает в гибкости: если вам нужна кастомная логика обработки платежей, экономия на RAM или запуск ноды на Raspberry Pi — CLN ваш вариант. За 5 лет мы реализовали более 30 интеграций, и 90% кл

Направления блокчейн-разработки

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1011

Интеграция с CLN (Core Lightning)

Мы часто сталкиваемся с выбором между LND и CLN. На наш взгляд, CLN выигрывает в гибкости: если вам нужна кастомная логика обработки платежей, экономия на RAM или запуск ноды на Raspberry Pi — CLN ваш вариант. За 5 лет мы реализовали более 30 интеграций, и 90% клиентов выбирают CLN именно из-за плагинной архитектуры.

Рассмотрим реальный кейс. Финтех-стартап требовал обработку платежей с кастомным распределением комиссий — стандартные решения на LND не позволяли гибко управлять маршрутизацией. Переход на CLN с плагином на Python решил задачу за 2 дня. CLN потребляет всего 256 MB RAM для базовой ноды, что вдвое меньше LND, и идеален для Raspberry Pi. Кроме того, плагинная архитектура изолирует ошибки: крах плагина не валит ноду, в отличие от LND, где кастомная логика требует модификации ядра. Разберём, как интегрировать CLN в проект с нуля и почему система плагинов — это суперсила.

Как подключиться к CLN через Unix socket?

CLN экспонирует Unix domain socket (по умолчанию ~/.lightning/bitcoin/lightning-rpc) через который работает JSON-RPC 2.0. REST API нет из коробки: нужен плагин clnrest или сторонний прокси. Прямое подключение через socket на Python выглядит так:

import socket import json import struct from pathlib import Path class CLNSocket: def __init__(self, socket_path: str = "~/.lightning/bitcoin/lightning-rpc"): self.path = str(Path(socket_path).expanduser()) self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.sock.connect(self.path) self._id = 0 def call(self, method: str, params: dict | list = None) -> dict: self._id += 1 request = { "jsonrpc": "2.0", "id": self._id, "method": method, "params": params or {}, } data = json.dumps(request).encode() # CLN использует newline-delimited JSON self.sock.sendall(data + b"\n\n") # Читаем ответ buffer = b"" while True: chunk = self.sock.recv(4096) buffer += chunk try: response = json.loads(buffer) if "error" in response: raise CLNError(response["error"]["message"], response["error"]["code"]) return response["result"] except json.JSONDecodeError: continue # Использование cln = CLNSocket() info = cln.call("getinfo") print(f"Node ID: {info['id']}, Alias: {info['alias']}, Blockheight: {info['blockheight']}") 

Для упрощения используем библиотеку pyln-client: from pyln.client import LightningRpc. Она скрывает рутину сокетов, но понимание протокола необходимо для дебага.

Почему CLN лучше LND для кастомных плагинов?

Плагины — ключевая особенность CLN. Плагин — отдельный процесс (любой язык), который общается с CLN через stdio. Плагины могут добавлять новые RPC методы, подписываться на события (новые платежи, блоки, подключения) и перехватывать хуки (pre-payment, peer connection). По документации Core Lightning, плагины позволяют расширять функциональность без модификации ядра. Это принципиально отличается от LND, где расширение возможно только через gRPC-интерцепторы или форк кода. Разница очевидна:

Аспект Плагины CLN Подход LND
Язык Любой (Python, Go, Rust) Go (только gRPC интерцепторы)
Простота разработки Высокая (достаточно скрипта) Средняя (нужно компилировать с LND)
Гибкость Полная (хуки на все события) Ограниченная (только interceptors)
Изоляция Отдельные процессы, краш не убивает ноду Модификация LND, риск краха ноды
Deploy Просто подложить .py файл в конфиг Требуется пересборка LND

CLN предпочтительнее, если вам нужна нестандартная бизнес-логика: антифрод, динамические комиссии, интеграция с ERP. За 5 лет мы реализовали более 30 интеграций на CLN — это подтверждает гибкость платформы.

Приём платежей: платёжный flow

import asyncio from pyln.client import LightningRpc class CLNPaymentProcessor: def __init__(self, rpc_path: str): self.rpc = LightningRpc(rpc_path) self.pending_invoices: dict[str, asyncio.Future] = {} def create_invoice(self, amount_sat: int, order_id: str, description: str) -> dict: label = f"order-{order_id}" inv = self.rpc.invoice( msatoshi=amount_sat * 1000, label=label, description=description, expiry=900, # 15 минут ) return { "bolt11": inv["bolt11"], "payment_hash": inv["payment_hash"], "expires_at": inv["expires_at"], } async def wait_for_payment(self, label: str, timeout: int = 900) -> bool: """Ожидает оплату инвойса, возвращает True при успехе""" loop = asyncio.get_event_loop() def blocking_wait(): try: result = self.rpc.waitinvoice(label=label) return result.get("status") == "paid" except Exception: return False try: paid = await asyncio.wait_for( loop.run_in_executor(None, blocking_wait), timeout=timeout ) return paid except asyncio.TimeoutError: return False 

Этот класс — основа платёжного шлюза. Мы используем именно такой паттерн в production: 100% инвойсов оплачиваются без потерь, среднее время ожидания — до 30 секунд.

Как написать плагин для CLN?

Написание плагина — главная суперсила CLN. Пример минималистичного плагина на Python, который логирует все входящие платежи и добавляет кастомный RPC метод:

#!/usr/bin/env python3 # payment_logger_plugin.py from pyln.client import Plugin plugin = Plugin() @plugin.subscribe("invoice_payment") def on_payment(invoice_payment, **kwargs): """Вызывается при каждом успешном входящем платеже""" label = invoice_payment.get("label") amount_msat = invoice_payment.get("msat") preimage = invoice_payment.get("preimage") plugin.log(f"Payment received: label={label}, amount={amount_msat}msat") notify_webhook(label, amount_msat) @plugin.method("my_custom_method") def custom_method(plugin, some_param, **kwargs): """Добавляет новый RPC метод в CLN""" return {"result": f"Processed: {some_param}"} plugin.run() 

Подключите плагин, добавив в конфиг строку plugin=/path/to/payment_logger_plugin.py. Плагины через subscribe("invoice_payment") получают события без polling — это правильный паттерн для real-time обработки платежей.

Hook: interceptor для платежей

Для advanced случаев (rate limiting, fraud detection) — хук htlc_accepted:

@plugin.hook("htlc_accepted") def on_htlc(onion, htlc, **kwargs): """Перехватывает входящий HTLC до его принятия""" amount = htlc.get("amount_msat") # Отклонить если сумма слишком маленькая (anti-spam) if amount < 1000: # < 1 sat return {"result": "fail", "failure_message": "4100"} return {"result": "continue"} 

Управление каналами и маршрутизация

# Открытие канала funding = rpc.fundchannel( id="03abc...@ip:port", amount=500000, # 500k sat announce=True, # публичный канал minconf=1, # минимум подтверждений funding tx ) # Список каналов с балансами channels = rpc.listpeerchannels() for ch in channels["channels"]: print(f"Channel {ch['short_channel_id']}: local={ch['to_us_msat']}msat, remote={ch['total_msat'] - ch['to_us_msat']}msat") # Отправка платежа payment = rpc.pay(bolt11="lnbc...") print(f"Status: {payment['status']}, preimage: {payment.get('payment_preimage')}") 

CLN vs LND: практическое сравнение

Аспект CLN LND
API Unix socket JSON-RPC, clnrest плагин gRPC + REST встроено
Расширяемость Плагины (любой язык) Interceptors (gRPC)
Производительность Ниже RAM footprint Выше при масштабе
Документация Меньше примеров Богатая документация
Macaroons/auth Runes Macaroons
Watch-only режим Нет Есть

CLN лучше, если нужны кастомные плагины с нестандартной логикой, важна минимальная footprint, или вы уже работаете с Blockstream инфраструктурой. Наши клиенты экономят до 40% на транзакционных комиссиях по сравнению с LND.

Сколько времени занимает интеграция CLN?

Мы предлагаем интеграцию CLN под ключ:

  • Аудит текущей инфраструктуры и проектирование архитектуры
  • Развёртывание ноды с нуля или подключение к существующей
  • Разработка плагинов на Python (полный цикл: от subscribe до hook)
  • Настройка clnrest для REST API с Rune-авторизацией
  • Интеграция платёжного flow с вашей системой (ERP, CRM, веб-сайт)
  • Документация по API и скрипты автоматизации
  • Обучение вашей команды (1-2 дня)
  • Техподдержка 3 месяца после сдачи

Ориентировочные сроки: от 3 дней для базовой интеграции (приём платежей + webhook) до 2 недель для полного кастомного плагина с каналами и хуками. Получите консультацию по интеграции CLN — мы рассчитаем точную стоимость и сроки.

Какие гарантии вы даёте?

  • Более 5 лет работы с Lightning Network
  • 30+ успешных интеграций в production (финтех, гемблинг, e-commerce)
  • 10+ нод CLN под управлением
  • Все контракты проходят аудит кода (линтеры, тесты, code review)
  • Гарантируем стабильность приёма платежей 99.9%

Подробнее о Core Lightning читайте в официальной документации. Закажите разработку плагина CLN — свяжитесь с нами для оценки вашего проекта.