Що таке segregated witness і як він може поліпшити біткоіни, forklog

Segregated Witness стало одним з найцікавіших пропозицій, визавшіх жваву дискусію в суспільстві. Пропозиція була зроблена Пітером Велле в ході воркшопу Scaling Bitcoin в Гонконзі.

Знайшло підтримку у багатьох учасників спільноти, SegWit, як вважають, здатне поліпшити роботу біткоіни відразу в декількох областях. Хтось навіть припускає, що SegWit - то довгоочікуване рішення проблеми масштабування, яке здатне привнести мир в роздирають спорами про розмір блоку співтовариство.

Принцип роботи

Щоб зрозуміти, як працює SegWit, потрібно розуміти сутність біткоіни-транзакцій на досить глибокому технічному рівні. Для початку, звичайно, важливо розуміти, що протокол біткоіни по суті складається з транзакцій. Ноди в р2р-мережі не відправляють один одному біткоіни - вони шлють пакети з даними транзакцій.

Можна сказати, що транзакції є набором «замків», складаючись з двох основних компонентів. Одна частина «вивільняє» біткоіни, що містяться в попередніх транзакціях за допомогою даних під назвою «вводи». Уведення містять скрипти - тобто інструкції щодо того, як виконати введення. Вони називаються scriptSigs. Інша частина містить набір нових замків - так звані висновки - які «замикають» той же або меншу кількість біткоіни. До їх складу входять скрипти під назвою scriptPubKeys. Таким чином, біткоіни переміщаються від вводів до висновків за одну транзакцію, при цьому перескакуючи від однієї транзакції до іншої.

Приватний ключі

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

Біткоіни вважається незмінним, оскільки зміна будь-якої частини будь-якої транзакції заднім числом поміняє ID транзакції, що призведе до зміни заголовка блоку - проте такої блок вже не буде відповідати умовленого вимогам. І оскільки заголовок блоку впливає на структуру наступних заголовків блоку, вони також не будуть їм відповідати.

SegWit заснований на концепції сайдчейнов, розробленої Blockstream, і доповнює ідею розробника ядра біткоіни Люка Деша. Загальна концепція була розроблена через кілька місяців у співпраці з розробниками ядра Грегорі Максвеллом і Еріком Ломброзо. Система повинна бути готова вже до середини року, що наступив.

З точки зору нод, які не використовують SegWit (умовно назвемо їх старими) деякі новостворені висновки можуть почати використовувати дивний тип scriptPubKeys. Дивно в них те, що їх навряд чи можна буде вважати замком. В цілому іменовані «витрачають все», ці ключі в цілому заявляють, що підписи їм не потрібні. Крім того, в них ще й присутня абсолютно безглуздий текст.

Старі Ноди порахують ці транзакції безглуздими. Їм здається, що будь-хто може створити новий scriptSig, вивільняючи ці висновки - а це означає, що вони практично повністю незахищені. У той же час, старі Ноди технічно не зможуть не брати нові транзакції. Текст ScriptPubKeys здасться їм безглуздо, але технічно він цілком допустимо. Так що старі Ноди підтвердять транзакції як валідність, і передадуть їх іншим Нодаме.

А ось Ноди з SegWit (назвемо їх новими) поведуть себе трохи інакше. Текст ScriptPubKeys зовсім не покажеться їм безглуздим. Вони помітять в ньому вельми специфічний тип виведення.

Подібно до попередніх висновків, ці нові висновки будуть потребувати декількох підписах для вивільнення біткоіни - проте на відміну від них, для цього їм не потрібна буде підпис, включена в scriptSig наступної транзакції. Замість цього підпис повинна буде включатися в абсолютно нову частину транзакції - SegWit.

SegWit по суті є аддоном, що містить підписи і деякі інші дані. Головне тут те, що SegWit повністю ігнорується старими нодамі, але зізнається новими. Більш того, їх дані не хешіруются заодно з іншими частинами транзакції для створення ID.

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

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

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

Розмір блоку

Однак, найбільше уваги привернув той факт, що видалення підписів з блоків в 1 мегабайт може фактично збільшити розмір блоку біткоіни. Це означає, що можна буде записувати в блокчейн більше транзакцій за секунду - тобто, збільшиться пропускна здатність транзакцій. Більш того, все це не порушить навіть правило про максимальний розмір блоку.

У реченні Велле мова не йде про новий типу максимального розміру блоку. Формула, яка використовується для розрахунку граничних значень, задана досить довільно - блок без свідка плюс четверта частина SegWit в сумі не повинні перевищувати 1 Мб. Таким чином старі Ноди вважатимуть все блоки меншими, ніж 1 мб, оскільки чверть SegWit, яких вони зовсім не бачать, входить у все той же 1 мегабайт. Нові Ноди тим часом будуть бачити, що блоки перевищують 1 мегабайт, оскільки реальний розмір SegWit більше, ніж враховується чверть.

Точні обсяги додаткової пам'яті залежать від типів транзакцій, що включаються в нові блоки. Якщо більше транзакцій зберігають більшу кількість даних в SegWit, як це напевно трапиться з мультісігнатурнимі транзакціями, загальний розмір нових блоків зросте. Це робить максимальний розмір нового блоку рівним приблизно 1,75 мегабайт для нормальних транзакцій, і 4 мегабайтам як жорсткого стелі, який не можна перевищити ні за яких умов, навіть якщо в SegWit запхати взагалі всі дані.

Є, однак, ще одне - і, можливо, головна перевага: SegWit може забезпечити гнучкість транзакцій. Заради цього його, власне, колись і починали розробляти.

Ця гнучкість забезпечується за рахунок криптографічного техніки змінити ідентифікатор без зміни позначається нею параметра. Це можна зробити навіть без початкового приватного ключа. У разі біткоіни це означає, що будь-хто може вибрати будь-яку транзакцію з р2р-мережі, і замінити одну валідну підпис іншої. Новий підпис буде відповідати все тими ж даними, і може верифікувати все тим же ключем. Вона взагалі не змінює на роботу транзакції. Однак, оскільки виглядає вона інакше, ID транзакції змінюється до невпізнання.

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

версії скриптів

Третя перевага SegWit викликало у біткоіни-кодерів нітрохи не менший, якщо не більший, захват - версії скриптів.

вплив SegWit

Щоб зрозуміти, яку роль SegWit може зіграти в суперечках про розмір блоку, спершу має сенс побіжно згадати, про що ж, власне кажучи, сперечаються.

В цілому, мова йде про компроміс між пропускною спроможністю і децентралізацією з невеликим додаванням економіки. Поточний розмір блоку в 1 мегабайт дозволяє мережі обробляти до семи транзакцій в секунду. Так звані «прогрессор» вважають, що це занадто мало - особливо популярно порівняння з Visa, чия система спокійно обробляє тисячі транзакцій за секунду. Занадто малі блоки, на думку прогресорів, можуть обмежити потенціал біткоіни і збільшити вартість транзакцій по блокчейну настільки, що дозволити собі це зможуть тільки централізовані сервіси, і призведе до масового відходу користувачів в пошуках альтернативних платіжних рішень, а можливо і краху всієї системи.

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

Як вже стало зрозуміло, властивості SegWit, при всіх своїх плюсах, не здатні вирішити суть спору про розмір блоку. Прогрессор не вважають Lightning Network вирішенням проблеми масштабованості. Захист від підробки корисна, але легкі блоки все одно залишаться менш надійними, ніж повні. Відмова від даних старих транзакцій може бути не зайвим, але розробники ядра пропонували подібні рішення ще до появи SegWit. Байти версій можуть зіграти свою роль в майбутньому, проте поки не зовсім ясно, що саме з ними робити.

Механізм верифікації нод SegWit такий, що додатковий час для окремих нод швидше за все буде мізерно малим. Час поширення злегка виросте, проте моделі Велле показують, що 4 мегабайта знаходяться в межах можливостей нинішньої мережі.

В результаті більшість децентралістів виступають за SegWit, вважаючи його життєво важливою частиною «дорожньої карти» масштабування, складеної Грегорі Максвеллом. Ця карта дає певний виграш у часі і відтягує момент, коли блоки виявляться повністю заповнені (якщо SegWit буде працювати як задумано), при цьому не порушуючи існуючі загальновизнані правила. Це виграний час децентралістів хочуть витратити на пошук довгострокових рішень, в тому числі і на створення більш живучою політики щодо розміру блоків, додаткових рівнів надбудов і інших оптимізацій. Прогрессор, однак, не вважають, що 2 мегабайт досить - наприклад в реченні Гевіна Андресса розмір блоку через 20 років повинен вирости до 8 гігабайт.

Хард-форк і софт-форк

Через відсутність консенсусу частина користувачів може зважитися на хардфорк, ймовірно, сподіваючись, що інші впровадять зміни, коли заперечувати буде вже пізно. Однак, якщо інші не підуть їх прикладу, вся мережа розділиться. Таке вже відбувалося, коли Гевін Андресен і Херн впровадили Bitcoin XT, але так і не здобули істотної підтримки. Більш того, деякі девелопери воліють впроваджувати сам SegWit як хард-форк, у якого є деякі переваги перед софт-Форком.

Реальний питання, таким чином, полягає в тому, чи знайде потенційний хард-форк достатньо підтримки в середовищі користувачів біткоіни. І хоча консенсус багато хто вважає поняттям розтяжним, деякі все ж вважають, що відносно хард-Форк він вже досягнутий.

Найбільш імовірним рішенням на даний момент здається дорожня карта Максвелла - єдиний план, який не вимагає якнайшвидшого хард-Форк, підтриманий більшістю розробників біткоіни. Таким чином, зараз їй не вистачає лише підтримки власників більшої частини хешевих потужностей. Проте, спробу хард-Форк - можливо, вчинений великими гравцями галузі - також не можна виключати. До того ж, Bitcoin XT теж десь неподалік.

Знайшли помилку в тексті? Виділіть її та натисніть CTRL + ENTER

Схожі статті