Lightning Network. Мільйони біткоін-транзакцій в секунду
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
За якимось оманливим переконанням вважається, що мережа біткоіна не може стати альтернативою традиційним коштам, мовляв, транзакції довго проходять, і якщо всі люди планети будуть нею користуватись, то пропускної здатності просто не вистачить. Так от: існує lightning network, надбудова другого рівня мережі біткоін, і є стійке переконання, що цю проблему можна вирішити.
Для чого вона потрібна
Якщо коротко — щоб проводити велику кількість переказів незначного об’єму. Для розуміння потрібно розглянути кілька ключових моментів, які намагається вирішити lightning network.
Яка комісія за транзакцію
Оскільки в основній мережі комісія за кожну транзакцію висока (в силу обмеження пропускної здатності), проводити їх часто — не дуже економічно доцільно. Для прикладу, середня вартість транзакції становить 0.0005 BTC, що приближається до 10 USD. Це невелика ціна коли переміщається 1 BTC і більше, при цьому одноразово, і дуже велика, якщо потрібно зробити покупку за 0.005 BTC, а якщо ще й кілька покупок.
На відміну від основної мережі, у lightning network більш ліберальна позиція щодо комісій. Так, мінімальна комісія за транзакцію становить 1 sat (0.00000001 BTC або приблизно 0.0002 USD). Щоправда, у кожному окремому випадку вона буде різна. Далі буде приклад, що проллє світло на цю частину протоколу взаємодії.
Яка швидкість прийняття транзакції
Основне нарікання на біткоін, і більшість криптовалют загалом, у тому, що пропускна здатність блокчейну неймовірно мала. Під «мала» мається на увазі 2,5 транзакцій на секунду, в середньому, якщо йдеться про біткоін. Проте у випадку lightning такого обмеження немає, тому що пропускна здатність не лімітована за кількістю транзакцій, і залежить виключно від кількості нод мережі, активних у даний момент.
Як працює мережа
Для прикладу можна розглянути наступний сценарій: нехай існують дві ноди біткоіна А та В, у яких постійно відбувається фінансова взаємодія(А відправляє кошти В та В відправляє кошти А). Для того щоб не очікувати кожен раз на потрапляння транзакції у блок, і, відповідно, не сплачувати комісію щоразу, власники нод домовляються про налаштування каналу у lightning network. Для цього вони встановлюють до ноди біткоіна ще ноду lightning. Потім на якихось умовах відкривається lightning-канал, наприклад А кладе у канал 0.01 BTC і В кладе у канал стільки ж. Як тільки транзакція відкриття каналу попадає у блок мережі біткоіна, канал рахується відкритим, і власники А та В можуть майже миттєво переказувати кошти( затрачається час на генерування нового ключа, підпису нової lightning-транзакції, і, власне, передачі її через мережу). Нехай нода В налагодила фінансову взаємодію з С, і також відкрила lightning канал. Тепер існує два канали: А <-> В та В <-> С. Цікава властивість lightning полягає у тому, що А тепер може взаємодіяти з С майже миттєво, навіть не маючи прямого каналу, а використовуючи В як посередника. Щоправда В у цьому випадку бере комісію за проведення транзакції. Комісія за транзакцію буде складати (basefee + (amount * feerate / 1000000)) де basefee — базова комісія за транзакцію (1sat за замовчуванням), amount — об’єм транзакції (лімітований об’ємом покладеним у канал), feerate — коефіцієнт, який встановив власник В (1 за замовчуванням). Якщо посередників більше ніж один, то кожен з них буде брати комісію у об’ємі, розрахованому за тією ж формулою.
Як налаштувати ноду
Для прикладу будемо налаштовувати все на операційній системі Linux з встановленим Docker-ом. Також потрібно мати публічну ip-адресу у мережі Internet. Адреса потрібна для того щоб інші lightning ноди могли ініціювати канали з свіжоналаштованою нодою. Ще необхідна нода біткоіна, бажано повна, і синхронізована з мережею весь час.
Як підняти c-lightning
Для початку скачуємо докер контейнер sudo docker pull elementsproject/lightningd
Далі потрібно у контейнер змонтувати домашню директорію і вказати, що підключатись будемо до мережі біткоіна sudo docker run --name lightning -v ~/.lightning:/root/.lightning/ -e LIGHTNINGD_NETWORK=mainnet -d -p 9835:9835 elementsproject/lightningd
От і майже піднята lightning нода. Тепер потрібно трішки її налаштувати, бо так вона буде працювати навряд.
Як підключити до bitcoin network
У директорії яка створилась за адресою ~/.lightning потрібно добавити файл конфігурації з назвою config, у ньому будуть, як мінімум, наступні опції:
network=mainnet
bitcoin-rpcport=<порт керування вашою біткоін нодою>
bitcoin-rpcconnect=<адреса біткоін ноди>
bitcoin-rpcuser=<користувач>
bitcoin-rpcpassword=<пароль>
funding-confirms=6
Також варто зауважити, що потрібно буде дозволити додатку з контейнера з’єднуватись з нодою біткоіна шляхом додавання відповідного користувача у налаштування ноди. Слід зазначити, що ноду біткоіна потрібно постійно тримати синхронізованою, від цього залежить, як швидко буде відкриватись канал, відслідковувати несанкціоноване закриття каналу теж буде простіше. Як добавити резервний канал біткоін ноді був ще один пост за посиланням.
Як бути без публічного IP
Ще одна важлива особливість: якщо публічної IP-адреси немає, або нема бажання її показувати, то є можливість пустити все через tor проксі. Для цього у файлі конфігурації потрібно дописати пару рядків:
proxy=<адреса tor проксі>:<9050 або 9150>
bind-addr=127.0.0.1:9735
addr=statictor:<адреса tor проксі>:<9051 або 9151>
always-use-proxy=true
І потрібно ще буде налаштувати tor onion service як описано за посиланням
як керувати нодою через rpc
Для зручності користування у lightning ноди є jsonrpc за допомогою якого можна виконати всі ті дії, які виконує lightning-cli. В даному випадку 9835 порт буде доступний на хост системі, бо його прокинули з контейнера. Посилання на опис всіх доступних команд тутЯк створити канал
Після того як lightning нода запускається можна добавити пірів, з якими потенційно буде відкритий канал. Всередині контейнера потрібно виконати:lightning-cli connect 0215b2612bb44a592903aa757b716a3226b2a72c7effa39079d7695c7673fed01b <мережева адреса піра>
де 0215b2612bb44a592903aa757b716a3226b2a72c7effa39079d7695c7673fed01b — ідентифікатор ноди,
якщо все вдалось, команда lightning-cli getinfo
буде відображати
«num_peers»: 1.
Далі потрібно в ноду внести кошти. Це можна зробити за допомогою створення адреси для поповнення (команда, яка повертає адресу — lightning-cli newaddr
), на яку потрібно відправити біткоін транзакцію. Після відправки транзакції і попадання у блок команда lightning-cli listfunds
відобразить у секції outputs кошти.
Тепер є все необхідне для відкриття каналу. Для ініціації каналу потрібно виконати lightning-cli fundchannel 0215b2612bb44a592903aa757b716a3226b2a72c7effa39079d7695c7673fed01b <об’єм у milisat>
,
Після успішного створення каналу lightning-cli listfunds
буде показувати у секції channels один запис з рядком
«state»: «CHANNELD_NORMAL»
Як провести платіж
Щоб провести платіж має бути виставлений інвойс. На іншому боці каналу буде виконаноlightning-cli invoice <об’єм у milisat> <тег> "<повідомлення>"
У результаті буде отримано такий рядок:
«bolt11»: «lnbcrt100n1p0a0dxhpp5plku23ven8rfnq4furhtkwgtuz4l7r7z0vh9jdduf0z6r
3w0pm7sdqvw3jhxarfdensxqyjw5qcqp2sp5nx5q7kqlq5syh5×3vfythm6l34p
sxpaet5pkc0uh7qkfkay63dns9qy9qsqfw246zsey5dln43va63afthr3s2fxq4ftz
whw5s67ue4e9gjflz8z2e0gjt0779ynnfp8nvy7mk2×494dvqumx99s5u4tyfqc
rat6lqqhwy9uq»
Де bolt11 і є інвойс.
Далі просто йде оплата за допомогою
lightning-cli pay lnbcrt100n1p0a0dxhpp5plku23ven8rfnq4furhtkwgtuz4l7r7z0vh9jdduf0z6r3
w0pm7sdqvw3jhxarfdensxqyjw5qcqp2sp5nx5q7kqlq5syh5x3vfythm6l34ps
xpaet5pkc0uh7qkfkay63dns9qy9qsqfw246zsey5dln43va63afthr3s2fxq4ftz
whw5s67ue4e9gjflz8z2e0gjt0779ynnfp8nvy7mk2x494dvqumx99s5u4tyfqc
rat6lqqhwy9uq
Таким чином у каналі зменшиться доступний залишок на суму вказану у інвойсі і комісії.
Як отримати прибуток
З прикладу про функціонування мережі напрошується висновок: якщо стати посередником у активній фінансовій взаємодії, то можна отримувати комісію з кожної транзакції. І це дійсно так. Потрібно лише щоб у власника ноди були кошти на відкриття каналів, аби надавати ліквідність учасникам мережі.
З першого погляду здається, що якщо поставити високу комісію — буде більше прибутків, але потрібно зауважити, що алгоритм пошуку маршруту транзакції враховує комісію, і шукає найдешевший і найкоротший шлях до отримувача, а шляхів може бути більше ніж один.
PS: A має киплячу воду, В — чайну заварку, С — цукор. Всі мають чашки, люблять пити чай і, головне, регулярно його п’ють). Це — спарта капіталізм.
39 комментариев
Добавить комментарий Подписаться на комментарииОтписаться от комментариев