Розробка платіжного шлюзу на Lightning Network під ключ

Розробляємо платіжні шлюзи на Lightning Network для прийому мікроплатежів у Bitcoin. Це принципово інша модель розрахунків: off-chain канали з on-chain settlement. Перед тим як будувати шлюз, потрібно зрозуміти, що Lightning — це мережа ліквідності, і управління цією ліквідністю — основна операційна

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

Часті запитання

Останні роботи

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

Розробляємо платіжні шлюзи на Lightning Network для прийому мікроплатежів у Bitcoin. Це принципово інша модель розрахунків: off-chain канали з on-chain settlement. Перед тим як будувати шлюз, потрібно зрозуміти, що Lightning — це мережа ліквідності, і управління цією ліквідністю — основна операційна задача, якої немає в аналогах на базі L1. Неправильний менеджмент каналів призводить до втрати до 30% платежів через фейли по шляху. Ми, команда блокчейн-інженерів з понад 5 роками досвіду та понад 30 проєктами за плечима, будуємо production-ready рішення під ключ: оцінимо ліквідність, налаштуємо автоматичне ребалансування та інтегруємо з вашим backend. Гарантуємо якість та безпеку — надаємо сертифікат відповідності.

Отримайте консультацію на старті — ми допоможемо уникнути типових помилок.

Архітектура Lightning: що потрібно знати інженеру

Платіж по Lightning Network проходить не напряму від sender до receiver, а по шляху через проміжні вузли. Вузол А → Вузол Б → Вузол В → Вузол Г: кожен проміжний вузол пересилає HTLCs (Hash Time-Locked Contract). Якщо на якомусь хопі не вистачає ліквідності в потрібному напрямку — платіж фейлиться і потрібно пробувати інший path.

Для шлюзу це означає: inbound ліквідність — критичний ресурс. Щоб приймати Lightning платежі, ваш вузол повинен мати inbound capacity від добре підключених вузлів мережі.

Вибір node implementation

LND vs CLN vs Eclair: ми рекомендуємо LND для веб-шлюзів — його API в 2 рази багатший, документації на 40% більше. LND (Go) має стабільний gRPC/REST API та кращу екосистему інструментів.

Параметр LND CLN Eclair
API gRPC+REST JSON-RPC REST (Phoenix)
Документація Відмінна Добра Середня
Інструменти Loop, Pool plugins Вбудований wallet

Які інструменти потрібні для розробки платіжного шлюзу на Lightning Network?

Для швидкого старту знадобиться: Bitcoin full node (синхронізація ~600GB NVMe), LND поверх bitcoind, мінімальний капітал 0.1–0.5 BTC для відкриття каналів, та сервер з постійним storage. Ми використовуємо Go для core-логіки та Python для скриптів ребалансування.

Налаштування LND ноди

Налаштування LND (деталі)

Установка та конфігурація:

lnd --bitcoin.active --bitcoin.mainnet --bitcoin.node=bitcoind \ --bitcoind.rpchost=localhost --bitcoind.rpcuser=rpcuser --bitcoind.rpcpass=rpcpassword \ --bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 --bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 \ --rpclisten=0.0.0.0:10009 --tlsextraip=YOUR_SERVER_IP --alias="YourGateway" --color=#FF6B35 

Для API взаємодії — lnd-grpc клієнт. Сертифікат та macaroon (credential файл) обов'язкові для кожного запиту.

Створення інвойсу та очікування оплати

package lightning import ( "context" "encoding/hex" lnrpc "github.com/lightningnetwork/lnd/lnrpc" "google.golang.org/grpc" ) type LNDClient struct { conn *grpc.ClientConn client lnrpc.LightningClient } func (c *LNDClient) CreateInvoice(ctx context.Context, amountSats int64, memo string, expirySeconds int64) (*Invoice, error) { req := &lnrpc.Invoice{Value: amountSats, Memo: memo, Expiry: expirySeconds} resp, err := c.client.AddInvoice(ctx, req) if err != nil { return nil, err } return &Invoice{ PaymentRequest: resp.PaymentRequest, PaymentHash: hex.EncodeToString(resp.RHash), ExpiresAt: time.Now().Add(time.Duration(expirySeconds) * time.Second), }, nil } func (c *LNDClient) WatchInvoices(ctx context.Context, handler func(*lnrpc.Invoice)) error { stream, err := c.client.SubscribeInvoices(ctx, &lnrpc.InvoiceSubscription{}) if err != nil { return err } for { invoice, err := stream.Recv() if err != nil { return err } if invoice.State == lnrpc.Invoice_SETTLED { handler(invoice) } } } 

Як керувати ліквідністю в Lightning Network?

Головна операційна задача для production шлюзу. Канал має capacity (загальний розмір) та balance (розподіл між сторонами). При прийомі платежів balance зміщується у ваш бік — inbound capacity витрачається. При відправці — навпаки.

Loop: submarine swaps

Lightning Loop (Lightning Labs) дозволяє перебалансувати канал через submarine swap — атомарний обмін між on-chain BTC та off-chain Lightning sat без закриття каналу:

  • Loop Out: переводимо Lightning sat → on-chain BTC. Відновлює inbound capacity.
  • Loop In: переводимо on-chain BTC → Lightning sat. Відновлює outbound capacity.
# Відновити 500k sat inbound capacity через Loop Out loop out --amt 500000 --channel YOUR_CHANNEL_ID 

Вартість: 0.1–0.3% + on-chain fee (приблизно $1-2 при поточних комісіях). Для шлюзу з постійним inflow — автоматичний Loop Out при досягненні порогу (outbound balance > 80% capacity). Це економить до 2% від суми платежу — для шлюзу з оборотом 10 BTC/міс це близько $500 на місяць.

Pool: оренда ліквідності

Lightning Pool — маркетплейс для оренди inbound ліквідності. Продавці відкривають канали до вашого вузла за комісію. Термін оренди: 2016 блоків (~2 тижні). Альтернатива самостійному менеджменту каналів для старту.

Автоматичне ребалансування

async def auto_rebalance(lnd_client: LNDClient): channels = await lnd_client.list_channels() for channel in channels: balance_ratio = channel.local_balance / channel.capacity if balance_ratio > 0.85: amount = int((balance_ratio - 0.5) * channel.capacity) await loop_out(amount, channel.chan_id) elif balance_ratio < 0.15: amount = int((0.5 - balance_ratio) * channel.capacity) await rebalance_circular(amount, channel.chan_id, lnd_client) 

Чому BOLT-12 краще за BOLT-11 для recurring payments?

BOLT-11 — одноразовий інвойс. BOLT-12 Offers — багаторазовий перевикористовуваний payment код. Клієнт запитує актуальний інвойс у отримувача через onion-повідомлення, отримує BOLT-11 (або BOLT-12 invoice), платить. Працює для підписок, tips, recurring payments. LND підтримує BOLT-12 починаючи з версії 0.17.

Безпека

Watchtower: якщо ваш вузол offline, колишній контрагент може спробувати транслювати старий стан каналу (breach attempt). Watchtower-сервіс моніторить блокчейн і публікує penalty транзакцію. LND має вбудований watchtower client та server.

# Підключення до публічного watchtower lncli wtclient add [email protected]:9911 

Channel backup: SCBs (Static Channel Backups) дозволяють відновити кошти з каналів при втраті node state. Автоматично створюються LND, потрібно зберігати в безпечному місці.

Macaroon обмеження: для API доступу додатку випускаємо обмежені macaroon — тільки права на створення інвойсів без права ініціювати платежі:

lncli bakemacaroon invoices:write invoices:read 

Інтеграція з backend

Метод Endpoint Опис
POST /api/invoices створити інвойс
GET /api/invoices/:hash статус інвойсу
WS /api/invoices/stream real-time події оплати

Webhook при оплаті — та ж схема що для on-chain платіжного шлюзу (HMAC-SHA256 підпис). Fiat конвертація: при створенні інвойсу приймаємо fiat суму, конвертуємо в satoshi за поточним курсом (Kraken/Coinbase API), фіксуємо курс на час життя інвойсу.

Що входить в розробку

  • Документація по інтеграції REST API та webhook
  • Доступ до дашборду управління ліквідністю
  • Навчання команди (2 години)
  • Підтримка протягом 2 тижнів після запуску
  • Вихідний код та конфігурація

Інфраструктура

  • Dedicated server або VPS (не контейнер без persistent storage)
  • Bitcoin full node (споживає ~600GB NVMe)
  • LND поверх bitcoind
  • Minimum initial capital для відкриття каналів: 0.1–0.5 BTC для малого шлюзу

Як розпочати: покроковий план

  1. Встановлення Bitcoin Core ноди (синхронізація ~600GB NVMe).
  2. Встановлення та налаштування LND.
  3. Відкриття початкових каналів (0.1-0.5 BTC).
  4. Налаштування Loop Out для ребалансування.
  5. Інтеграція з вашим backend.
  6. Запуск у продакшен.

Розробка базового Lightning платіжного шлюзу зі створенням інвойсів, моніторингом оплат та автоматичним Loop Out — 6–8 тижнів. З повним ліквідіті-менеджментом, BOLT-12 підтримкою та admin дашбордом — 3–4 місяці. Зв'яжіться з нами, щоб оцінити ваш проєкт.