Розуміння Lightning Network, частина 1: створення двонапрямного платіжного каналу для Біткоїна

Розуміння Lightning Network, частина 1: створення двонапрямного платіжного каналу для Біткоїна

Мережа Lightning Network була однією з найбільш очікуваних технологічних інновацій, що розгорнули над Біткоїном.

Платіжний рівень, який вперше запропонували Джозеф Пун і Тедж Драйя, здатен підтримувати практично необмежену кількість офчейн-транзакцій між користувачами майже безплатно, при цьому максимально використовуючи безпеку, яку пропонує Біткоїн.

Щонайменше три компанії – Lightning Пуна і Драйї, Blockstream та Blockchain – зараз працюють над проєктами щодо впровадження цієї технології. Але мало хто за межами цього невеликого технологічного фронту повністю розуміє, як «майбутнє мікроплатежів» має істотно підвищити можливості Біткоїна.

У цій серії з трьох статей Bitcoin Magazine пояснює основні компонувальні блоки (модулі) мережі Lightning Network та показує, як вони поєднуються.

Ця перша стаття із серії розкриває, які є необхідні компонувальні блоки, та показує, як їх можна об’єднати для створення смарт-контрактів, які можна застосувати для реалізації першої вимоги Lightning Network: двонапрямного платіжного каналу.

(Примітка: будь-хто, хто добре розуміє, що таке Біткоїн, може пропустити інформацію про компонувальні блоки (модулі).

Модуль #1: непідтверджені транзакції

По суті, протокол Біткоїна складається з транзакцій, які зазвичай пов’язані з попередніми та потенційно з майбутніми транзакціями. Кожна транзакція містить вхідні дані (які стосуються адрес, з яких надсилаються біткоїни) і вихідні дані (які стосуються адрес, на які надсилаються біткоїни). Крім того, вхідні дані повинні містити вимоги щодо надсилання біткоїнів, наприклад підписи, які підтверджують «власність» на адреси вхідних даних. Тим часом вихідні дані встановлюють нові вимоги, які мають бути включені у вхідні дані наступної транзакції.

Однією з її ключових особливостей є те, що Lightning Network складається з більш-менш регулярних транзакцій у біткоїні. Просто ці транзакції, зазвичай, не транслюються в мережі Біткоїна. Натомість вони зберігаються локально, на вузлах користувачів, але їх можна транслювати мережею в будь-який момент.

Неподтвержденные транзакции

Модуль #2: Захист від атаки подвійної трати

Другий компонувальний блок Lightning Network, ймовірно, не потребує особливого пояснення, оскільки це сенс самого Біткоїна: захист від подвійної трати. Якщо дві транзакції (або: вхідні дані) покладаються на одні й ті ж вихідні дані, тільки одну з них може бути підтверджено.

Важливо пам’ятати, що навіть непідтверджені транзакції можуть бути конфліктними, і в такому разі тільки одну з них можна буде врешті підтвердити.

Двойная трата

Модуль #3: Мультипідпис

Третій компонувальний блок Lightning Network також цілком простий: адреси з мультипідписом (також відомі як P2SH-адреси).

Адреси з мультипідписом - це адреси біткоїнів, які, як випливає з назви, вимагають кількох приватних ключів для «розблокування» та витрачання наявних на них BTC. Адреси з мультипідписом можна налаштувати за будь-яких умов. Наприклад, встановити, що потрібно два з трьох можливих ключів, або п’ятнадцять із п’ятнадцяти, або будь-яку іншу комбінацію.

У мережі Lightning Network часто використовуються налаштування мультипідпису в форматі два з двох (2-з-2). Щоб розблокувати біткоїни на адресах із мультипідписом 2-з-2, потрібні два підписи з боку двох спеціально призначених для цього ключів.

Мультиподпись

Модуль #4: таймлоки

Четвертим компонувальним блоком є таймлок. Таймлоки можуть блокувати біткоїни на виході, щоб їх можна було витрачати (включити в наступні вхідні дані) лише в якийсь момент у майбутньому.

Є два різних типи таймлоків: абсолютний тип, який називається CheckLockTimeVerify (CLTV), і відносний тип, CheckSequenceVerify (CSV). CLTV блокує біткоїни до (більш-менш) конкретного часу в майбутньому: фактичного часу і дати або певної висоти блоку. Натомість CSV використовує відносний час. Після того, як вихідні дані CVS буде записано у блокчейн, з цього моменту потрібно, щоб набралася певна кількість блоків, перш ніж біткоїни знову можна буде витрачати.

таймлок

Модуль #5: хешовані числові значення та секретні ключі

П’ятий і останній компонувальний блок – криптографія – є найбільш фундаментальним компонувальним блоком самого Біткоїна. Але в мережі Lightning Network він застосовується по-новому.

Якщо коротко, «числове значення» або «секретний ключ» — це довга унікальна послідовність чисел, яку практично неможливо вгадати навіть для комп’ютера з нескінченною кількістю спроб. За допомогою спеціального розрахунку це числове значення (або секретний ключ) можна «хешувати» в іншу послідовність чисел, «хеш». І ось тут хитрість: кожен, хто знає числове значення, може легко відтворити хеш. Але це не працює навпаки; це вулиця з одностороннім рухом.

Цю хитрість можна використовувати й у самому Біткоїні, знову ж таки, щоб «блокувати біткоїни». (Насправді саме так функціонує Біткоїн.) Наприклад, хеш можна включити у вихідні дані та вимагати, щоб наступні вхідні дані включали відповідне числове значення, для того, щоб можна було здійснювати витрати.

Секрет

Перший виклик: двонапрямні канали оплати

Ще до презентації Lightning Network концепція платіжних каналів існувала вже деякий час. Типові платіжні канали корисні для певних цілей, але також мають обмеження: вони односпрямовані. Еліс може здійснити на користь Боба кілька офчейн-транзакцій, а Боб взагалі не може перерахувати щось Еліс через той самий канал.

Як ключову особливість Lightning Network Пун і Драйя запропонували «такі, що не вимагають довіри» двонапрямні платіжні канали.

Відкриття каналу

Щоб налаштувати двонапрямний платіжний канал, обидві залучені сторони повинні спочатку домовитися про транзакцію відкриття. Ця початкова транзакція визначає, скільки біткоїнів кожен вкладає в канал.

Скажімо, Еліс хоче відправити один біткоїн Бобу. Оскільки Еліс і Боб очікують, що будуть здійснювати транзакції частіше, вони вирішують відкрити двонапрямний платіжний канал і використовувати його для надсилання біткоїнів. (Напевно, для платіжного каналу надсилання цілого біткоїна - це багато, оскільки такі канали можуть бути кориснішими для мікроплатежів, але це цілком можливо).

Щоб відкрити канал, Еліс і Боб надсилають кожен по п’ять біткоїнів на адресу з мультипідписом 2-з-2. Це «транзакція відкриття». Біткоїни можна витрачати з цієї адреси лише, якщо і Еліс, і Боб підпишуть наступну транзакцію.

Крім того, Еліс і Боб створюють секретний ключ (послідовність чисел) і обмінюються хешем.

Тепер Еліс відразу створює наступну транзакцію з транзакції відкриття. Це «транзакція-зобов’язання». Під час транзакції-зобов’язання Еліс надсилає чотири біткоїни собі та шість біткоїнів на другу адресу з мультипідписом. Ця друга адреса з мультипідписом є дещо специфічною. Боб може розблокувати її самостійно, але тільки після того, як буде видобуто 1000 додаткових блоків після того, як її було включено в блокчейн; він включає CSV-таймлок. Або його може відкрити Еліс самостійно, але лише якщо вона також застосує секретний ключ, до якого Боб щойно дав їй хеш. (Звичайно, Еліс поняття не має, що це за секретний ключ – вона знає лише хеш – тому вона не може зараз скористатися цим варіантом.)

Еліс підписує свою частину цієї транзакції-зобов’язання. Але вона її не транслює! Натомість вона передає її Бобу.

Тим часом Боб робить те ж саме, але дзеркально. Він також створює транзакцію-зобов’язання, з якої він надсилає шість біткоїнів собі, а чотири - на нову специфічну адресу з мультипідписом. Еліс може розблокувати цю адресу, якщо вона чекає додаткових 1000 блоків, або Боб може розблокувати її разом з Еліс, використовуючи її секретний ключ.

Боб підписує цю половину і передає її Еліс.

Після всього цього обміну «напівдійсними» транзакціями-зобов’язаннями й хешами секретних ключів вони підписують і транслюють транзакцію відкриття, щоб переконатися, що вона записана в блокчейні. Тепер канал офіційно відкритий.

У цей момент і Еліс, і Боб могли б підписати та транслювати напівдійсну транзакцію-зобов’язання, яку вони отримали один від одного. Якщо Еліс це зробить, Боб одразу отримає шість біткоїнів. Якщо Боб це зробить, Еліс одразу отримає чотири біткоїни. Але той, хто підписує та транслює транзакцію, повинен буде почекати 1000 блоків, щоб розблокувати наступну адресу з мультипідписом, і отримати решту біткоїнів.

Би-транзакции

Втім, у цьому і є головна хитрість платіжного каналу: і не підписувати, і не транслювати свою половину транзакції взагалі.

Оновлення даних каналу

Трохи пізніше Боб хоче повернути Еліс один біткоїн. Вони хочуть оновити стан каналу, щоб знову зробити баланс п’ять-п’ять. Щоб досягти цього, Еліс і Боб роблять дві речі.

Спочатку обоє повторюють процес, як описано вище (за винятком того, що транзакція відкриття вже записана в блокчейні; ця частина пропускається). Цього разу і Еліс, і Боб приписують собі п’ять біткоїнів, і обоє приписують по п’ять біткоїнів специфічним адресам з мультипідписами. Умови для цих адрес із мультипідписами схожі, за винятком того, що для них потрібні нові секретні ключі: і Еліс, і Боб надають один одному нові хеші. Вони обоє підписують свою нову напівдійсну транзакцію-зобов’язання і передають її один одному.

По-друге, Еліс і Боб передають один одному свої перші секретні ключі, як використані під час першого врегулювання.

У цей момент, знову ж таки, і Еліс, і Боб могли б підписати та транслювати нову «напівдійсну» транзакцію-зобов’язання, яку вони щойно отримали. Їхній контрагент одразу отримає п’ять біткоїнів, а тому, хто транслюватиме, доведеться чекати на 1000 блоків. Таким чином, канал оновлюється.

Але що заважає Бобу натомість транслювати старішу транзакцію зобов’язання? Ця транзакція-зобов’язання привела до того, що йому було заплачено шість біткоїнів замість п’яти…

Зрозуміло, що Боба зупиняє його перший секретний ключ, який він тепер передав Еліс.

Боб більше не може безпечно підписувати та транслювати попередню транзакцію-зобов’язання, тому що Еліс тепер знає перший секретний ключ Боба. Якби Боб підписав і транслював цю транзакцію-зобов’язання, він негайно відправив би чотири біткоїни Еліс... і йому б довелося чекати 1000 блоків, щоб отримати свої шість біткоїнів. Це проблема, тому що тепер, коли Еліс знає його секретний ключ, вона може використати цей час, щоб обскакати Боба, а також отримати інші шість біткоїнів!

І оскільки у Боба також є секретний ключ Еліс, це так само працює і навпаки. Якщо Еліс спробує підписати й транслювати стару транзакцію-зобов’язання, Боб може вкрасти усі біткоїни в каналі.

Це, звичайно, означає, що і Еліс, і Боб мають сильний стимул грати чесно, а тому вони підписують і транслюють лише останній стан каналу.

Би-транзакции 2

Далі потрібно розширити налаштування двонапрямного платіжного каналу, щоб зробити можливими платежі через мережу. Про це розповідається у другій статті цієї серії.

Чим Біткоїн може допомогти малому бізнесу Чим Біткоїн може допомогти малому бізнесу Багато хто чув про Біткоїн-стратегію, коли велика компанія, на кшталт MicroStrategy, регулярно купує для свого резерву біткоїни. Проте головний цифровий актив може стати у пригоді й малому бізнесу, особливо у країнах, що розвиваються. Дмитро Харьков 24 травня 2024
Які країни забороняють майнінг та чому Які країни забороняють майнінг та чому У світі низка країн вирішили заборонити майнінг. Уряди цих держав недооцінюють потенціал майнінгу, помилково вважаючи його надто енергомістким. Але за належного регулювання він забезпечує розвиток енергосистем, споживаючи лише надлишки електроенергії.  Володимир Гришенко 23 травня 2024
Bitcoin Pizza Day: легендарне свято біткоїнерів Bitcoin Pizza Day: легендарне свято біткоїнерів Багато хто чув про найдорожчу піцу в історії. Перша купівля реального товару за BTC – надзвичайно важлива подія для Біткоїн-ком’юніті. Вона відкрила шлях до гіпербіткоїнізації. Дмитро Харьков 22 травня 2024