Стиснення блокчейна огляд технології segregated witness

Стиснення блокчейна огляд технології segregated witness

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

Що ж таке Segregated Witness і як це працює?

Ще раз про транзакції біткоіни

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

У кожної транзакції міститься два головні компоненти. Перший компонент розблокує біткоіни, заблоковані в попередніх транзакціях, використовуючи для цього фрагменти даних під назвою "входи" (inputs). Входи містять скрипти - інструкції з розблокування входу, які називаються підписами scriptSigs. Другий компонент транзакції складається з однієї або декількох частин, які називаються "виходами" (outputs). Виходи знову блокують те ж саме або меншу кількість біткоіни, але вже для наступного одержувача. Виходи містять скрипти, пов'язані з відкритими ключами (scriptPubKeys). Тобто, біткоіни пересуваються всередині кожної транзакції від входів до виходів, і одночасно перестрибують між самими транзакціями.

Де знаходяться підписи?

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

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

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

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

Що таке Segregated Witness?

Стиснення блокчейна огляд технології segregated witness

Але повернемося до пропозиції Segregated Witness. В основі рішення лежить модель, що застосовується в сайдчене Blockstream під назвою Elements, а також ідеї розробника Bitcoin Core Люка Деша Молодшого (Luke Dash jr). Пропозиція розроблялося протягом декількох останніх місяців за участю Грегорі Максвелла (Gregory Maxwell) і Еріка Ломброзо (Eric Lombrozo) і може бути реалізовано протягом наступного року.

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

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

Однак, вузли з підтримкою Segregated Witness (назвемо їх «новими нодамі») помітять ще дещо. Вони прочитають "безглуздий текст" у відкритому ключі scriptPubKey, проте зовсім не порахують його безглуздим. Навпаки, нові ноди визначать цей фрагмент тексту в якості ще одного - дуже специфічного - типу виходу.

Подібно звичайним виходів, для розблокування біткоіни цього нового типу виходу потрібно одна або кілька підписів. Однак на відміну від звичайних виходів, новий тип не вимагає, щоб підпис була включена в scriptSig відповідної транзакції. Замість цього йому потрібно, щоб підпис включалася в абсолютно новий фрагмент транзакції: Segregated Witness.

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

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

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

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

Що робить Segregated Witness?

Стиснення блокчейна огляд технології segregated witness

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

Пропозиція Вюлле дійсно пропонує новий підхід до вирішення проблеми розміру блоку. Формула, яка використовується для розрахунку граничного розміру, виглядає не дуже виразно:
Дані блоку плюс "чверть" Segregated Witnesses не повинні перевищувати 1 Мб. В такому випадку, все блоки здадуться старим Нодаме менше 1 Мб, оскільки чверть Segregated Witness (яку вони не бачать) повинна бути встановлена ​​в той же самий 1 Мб. При цьому нові ноди побачать блоки, що перевищують 1 Мб, так як фактичний розмір Segregated Witness більше того, що вважається однією чвертю.

Точна кількість додаткового простору, що надається Segregated Witness, залежить від типів транзакцій, що входять в нові блоки. Якщо більше транзакцій зберігають більшу кількість даних в Segregated Witness, як відбуваються в транзакціях з мультіподпісью, ефективний розмір блоку збільшується. Це додає близько 1.75МБ в максимальний розмір блоку для нормальних транзакцій, і розмір в 4Мб встановлюється в якості жорсткого обмеження, яке неможливо перевищити, навіть якщо в Segregated Witness вмістилися (майже) всі дані.

Попрощайтеся з еластичністю транзакцій

У Segregated Witness є ще одна важлива перевага: це рішення може подбати про "еластичності транзакцій" біткоіни. Фактично, спочатку це і було мотивацією для Вюлле і інших в розробці моделі.

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

Еластичність транзакцій викликає дві основні проблеми. По-перше, вона вносить хаос в сторонніх додатках, які використовують ідентифікатори транзакцій в обліку укладених угод. За однією з версій, саме на цю вудку свого часу був спійманий Марк Карпелес, коли хакери "виносили" біткоіни з MtGox, використовуючи цю уразливість. Але ще важливіше те, що еластичність транзакцій сильно обмежує можливості будь-яких угод з біткоіни, що використовують непідтверджені транзакції для прискорення операцій - наприклад, платіжні канали або Lightning Network.

Segregated Witness видаляє підписи з компонента транзакції, використовуваного для створення ідентифікаторів транзакцій. Тому, новий формат ніяк не впливає на додатки, що використовує ідентифікатори транзакцій. Це також не грає ролі для платіжних каналів або Lightning Network, таким чином надаючи готовий майданчик для впровадження додаткових шарів масштабування.

Як біткоіни може стати універсальним

Ще одна важлива перевага пропозиції Segregated Witness - це версії скриптів. Як вже пояснювалося, Segregated Witnesses містить підписи scriptSigs, які розблокують біткоіни. Однак вони включають в себе ще дещо, а саме: байти версій. Ці байти версій передують підписам scriptSigs в Segregated Witnesses, демонструючи вид підпису scriptSig. Якщо клієнт, який читає байт версії, пізнає цей тип, він може повідомити, які вимоги необхідно виконати для розблокування біткоіни в scriptSig. Якщо ж в байті версії при вході цей тип, вона інтерпретує підпис scriptSig як «Може витратити будь-».

Це відкриває безліч нових способів блокування біткоіни в транзакціях. По суті, ця перевага можна використовувати для будь-яких блокувань біткоіни. Складно сказати, яким чином ця перевага можна буде використовувати в майбутньому, оскільки більшу частину додатків ще тільки належить придумати. Однак передбачається, що це будуть підписи Schnorr, більш швидкі для підтвердження в порівнянні з традиційними підписами, а також більш складні види транзакцій з мультіподпісямі; можливо навіть скрипти на зразок Ethereum.

докази обману

І це ще не все. Segregated Witness може також представити рішення під назвою "докази обману" (fraud proofs). Їх передбачав ще Сатоши Накамото, і докази обману можуть значно підвищити безпеку SPV-клієнтів ( «легких гаманців») - це вузли біткоіни, які не підтверджують транзакції в мережі і не зберігають повний блокчейн.

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

Таким чином, навіть при наявності доказів обману, SPV-клієнти не можуть запропонувати такий же рівень захисту, як повні. Найголовніше, що рішення докази обману (fraud proof) вимагає, щоб SPV-ноди могли зв'язуватися з мережею без цензури. Додатково, SPV-клієнтам необхідно, щоб принаймні одна повна нода в мережі виробляла докази обману.

стиснення блокчейна

Нарешті, що найбільш важливо власникам "повних вузлів" Segregated Witness може зменшити кількість даних, необхідне вузлів біткоіни для зберігання на своїх жорстких дисках. Це скорочує вимоги для запуску повної Ноди і зменшує час, який потрібен на синхронізацію в мережі при першій установці.

Segregated Witness і BIP10х

Як же Segregated Witness може вирішити проблему масштабованості блоку? Segregated Witness витягує підпис з транзакції і поміщає її в окрему структуру даних. Коли з транзакції видаляється підпис, розмір транзакції зменшується. Отже, кожна транзакція зменшується приблизно на 47%, і ми отримуємо на 47% більше транзакцій при тому ж розмірі блоку.

Однак, не можна вважати, що ця технологія повністю вирішує проблему масштабованості. Залишається все той же 1 Мб простору блоку, і коли воно знову буде заповнюватися у всіх блоках, проблеми з'являться знову. Пропоноване Segregated Witness стиснення даних може бути дуже корисно. Однак, його можна використовувати тільки як доповнення до дійсно ефективного вирішення проблеми розміру блоку.

Таким чином, Segregated Witness як "вагомого аргументу" включається в "війну BIP-ів" і може стати козирем для тієї сторони, яка знайде цієї технології найкраще застосування. Ймовірно, кращі шанси на цей раз у BIP102 Джеффа Гарзіка і BIP248 від Адама Бека - керівника компанії Blockstream, одного з основних гравців в цій сутичці. Ці дві пропозиції найбільш консервативно підходять до зміни розміру блоку, а значить, їх підтримає обережна частина спільноти, яка боїться різких змін.

Перевірка в SegNet

Стиснення блокчейна огляд технології segregated witness

У проекті беруть участь Петер Вюлле (Pieter Wuille), Ерік Ломброзо (Eric Lombrozo), Джонсон Лоу (Johnson Lau), Алекс Моркос (Alex Morcos) і ще кілька програмістів, які за допомогою різних патчів будуть проводити тестування і шукати уразливості, які може викликати винесення підписів транзакцій в окремий компонент блокчейна.

Ймовірно, до інтеграції в Bitcoin Core початкова концепція Segregated Witness може зазнати деяких змін. Терміни експерименту і умови, необхідні для впровадження Segregated Witness в основну мережу, поки не афішуються.