On-chain Bitcoin підходить для зберігання, але не для щоденних платежів: комісія $1–20 при навантаженні, підтвердження 10–60 хвилин. Lightning Network (LN) вирішує це — миттєві транзакції за частки цента. Lightning Network дешевше on-chain у 100 разів і швидше у 1000 разів. Наша команда має багаторічний досвід інтеграції LN на сайти: запущено 30+ проєктів для e-commerce, донатних платформ і DeFi-додатків. Гарантуємо стабільну роботу каналів і автоматизацію ліквідності. Наприклад, при 1000 платежах по $5 економія на комісіях становитиме близько $150 на місяць порівняно з on-chain.
Яку архітектуру обрати: власна нода чи custody?
Перше рішення — рівень контролю. Власна LN-нода (LND або Core Lightning) дає повний контроль, нульові комісії посередника та можливість масштабування. Але вимагає управління каналами та ліквідністю. Custody-рішення (OpenNode, Strike, BTCPay Cloud) простіші, але ви довіряєте третій стороні. Для магазинів з оборотом >1000 сат/день своя нода окупається за 3–6 місяців. Для production LND потрібен VPS з 4 vCPU, 8GB RAM і 500GB SSD, плюс Bitcoin Core і PostgreSQL. Ми використовуємо Ubuntu 22.04 LTS.
| Параметр | LND (самостійно) | BTCPay Server | OpenNode |
|---|---|---|---|
| Контроль | Повний | Повний (self-hosted) | Немає (custody) |
| Комісія | 0% | 0% (тільки мережеві) | 1% |
| Складність | Висока | Середня | Низька |
| Час налаштування | 5–7 днів | 2–3 дні | 1–2 дні |
Чому варто обрати LND для production?
Lightning Labs — найстабільніший і найдокументованіший LN-демон. У production ми використовуємо LND з Bitcoin full node та PostgreSQL для високої доступності. Приклад конфігу:
# Мінімальний lnd.conf для production [Application Options] alias=MyShop-LN color=#FF6600 maxpendingchannels=5 [Bitcoin] bitcoin.active=1 bitcoin.mainnet=1 bitcoin.node=bitcoind [Bitcoind] bitcoind.rpchost=localhost bitcoind.rpcuser=bitcoinrpc bitcoind.rpcpass=strongpassword bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 [protocol] protocol.wumbo-channels=true Управління ліквідністю LN-каналів
Головна операційна складність LN — inbound ліквідність. Платіж проходить лише якщо на шляху є канали з достатньою сумою. Стратегії:
- Lightning Pool — купуєте inbound ліквідність на маркетплейсі від Lightning Labs (вартість 0.1-0.5% від суми).
- Loop In — submarine swap: on-chain BTC → LN, отримуєте inbound канал (фіксована комісія ~2000 сат).
- Партнерські ноди — відкриваєте канали з великими гравцями (ACINQ, Kraken), вони часто відкривають зустрічні (0% комісії, але вимагають переговорів).
Порівняння стратегій:
| Метод | Вартість | Час | Доступність |
|---|---|---|---|
| Lightning Pool | 0.1-0.5% | хвилини | Завжди |
| Loop In | ~2000 сат | 10-30 хв | Висока |
| Партнерські ноди | 0% | Переговори | Залежить |
// Loop In для поповнення inbound ліквідності const loopdClient = new LoopClient(LOOPD_HOST) async function increaseInboundLiquidity(amountSats: number): Promise<void> { const quote = await loopdClient.loopInQuote({ amt: amountSats }) console.log(`Loop In quote: ${quote.swap_fee_sat} sats fee, ${quote.miner_fee_sat} sats miner fee`) await loopdClient.loopIn({ amt: amountSats, max_swap_routing_fee: quote.swap_fee_sat, max_miner_fee: quote.miner_fee_sat, external_htlc: false, }) } Інвойси та обробка платежів
LND надає gRPC API. Для Node.js використовуємо @lightningpolar/lnd. Створюємо інвойс із прив'язкою до замовлення.
import { createLnRpc } from '@lightningpolar/lnd' const lnRpc = await createLnRpc({ server: 'localhost:10009', tls: fs.readFileSync('/home/bitcoin/.lnd/tls.cert'), macaroon: fs.readFileSync('/home/bitcoin/.lnd/data/chain/bitcoin/mainnet/invoice.macaroon'), }) async function createInvoice(amountSats: number, orderId: string, expirySeconds = 3600) { const invoice = await lnRpc.addInvoice({ value: amountSats, expiry: expirySeconds, r_preimage: crypto.randomBytes(32), }) await db('ln_invoices').insert({ order_id: orderId, payment_hash: Buffer.from(invoice.r_hash).toString('hex'), payment_request: invoice.payment_request, amount_sats: amountSats, expires_at: new Date(Date.now() + expirySeconds * 1000), status: 'pending', }) return { paymentRequest: invoice.payment_request, paymentHash: Buffer.from(invoice.r_hash).toString('hex'), expiresAt: new Date(Date.now() + expirySeconds * 1000), } } Відстеження оплати — через SubscribeInvoice stream. Не полліть статус: LND сам повідомить про подію.
Покрокове налаштування LND для продакшена
- Встановлюємо Bitcoin Core і чекаємо синхронізації (IBD може зайняти 2-3 дні на хорошому залізі).
- Встановлюємо LND, налаштовуємо lnd.conf (як вище), запускаємо.
- Створюємо гаманець через
lncli create, зберігаємо seed. - Відкриваємо канали: мінімум 2-3 канали з достатньою ліквідністю для прийому платежів.
- Налаштовуємо автоматичне управління ліквідністю (наприклад, через LND Autopilot або власні скрипти).
- Інтегруємо API: створення інвойсів, WebSocket для сповіщень.
- Моніторинг: Prometheus + Grafana, алертинг при нестачі ліквідності.
Що входить у роботу
- Розгортання Bitcoin Core + LND на VPS (4 vCPU, 8GB RAM, 500GB SSD)
- Налаштування каналів і початкова ліквідність
- API ендпоінти для створення/перевірки інвойсів
- WebSocket сповіщення про оплату
- Документація з експлуатації та моніторинг (Prometheus + Grafana)
- 30 днів підтримки після запуску
Часто задавані питання
Чи потрібен окремий сервер для Lightning-ноди? Так, для production рекомендуємо VPS з 4 vCPU, 8GB RAM, SSD 500GB+. Ми налаштовуємо та супроводжуємо інфраструктуру в рамках контракту.
Чи можна працювати без Bitcoin Core? Ні, LND вимагає повний біткоїн-вузол. Ми допомагаємо обрати оптимальну конфігурацію під ваш трафік і бюджет.
Зв'яжіться з нами для оцінки вашого проєкту. Впроваджуємо під ключ: від вибору хостингу до UX з QR-кодом і таймером. Замовте консультацію — ми допоможемо обрати оптимальну архітектуру під ваш бізнес.







