Технічні виклики блокчейну. 5 задач, які потребують розв’язання (і за це щедро заплатять)
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
В минулій follow-up статті я говорив про виклики, з якими зіштовхнулась блокчейн-індустрія. Та який це айтішник не прийме виклик і не візьметься розв’язувати технічну проблему? От і я так подумав. І окреслив ці виклики як специфічні задачі.
Дисклеймер: я співпрацюю з декількома передовими блокчейн-компаніями в рамках WTFbit Group (тут у нас і копірайтинг, і медіа про крипту українською). Незабаром зробимо анонс BUIDL Kollektiv, щоб про блокчейн-розробку з перших уст дізнаватись.
0. Швидкий огляд проблем
Коли у блозі Unstoppable Domains (UD) озвучили переваги крипти, я захотів збалансувати їх потенційними ризиками ще не розвинутої технології:
- Кредитки й підтвердження транзакцій: у крипті теж інколи довго йде підтвердження, хоча сама транзакція відбувається миттєво. З іншого боку, ніхто цю транзакцію крім вас відмінити не може (а от у традиційній системі — запросто);
- У крипті — ви самі собі банк; не потрібно боятися цензури (що хтось за позовом СБУ чи Фінмоніторингу НБУ заморозить вам рахунки); та якщо ви загубили свій seed і пароль — ніхто вам допомогти не зможе;
- З іншого боку, крипта приймається в усьому світі, хоча поки це молоді люди, які обізнані в технології; а от спробуйте обміняти гривню в Мексиці, та ще й за хорошим курсом...
- Переживаєте за волатильність? Саме з цієї причини були введені стабільнокоїни з прив’язкою до долара (USDT, TUSD, USDC, BUSD), євро (EURT), гривні (UAX) та, навіть, золота (DGX). Якщо цікаво, наступного разу можу описати кейс, коли будь-який користувач може переслати рівно $20 000 — це коштуватиме пару центів і займе всього півхвилини, поки з’явиться у вашого адресата, скажімо, в Аргентині.
Однак перейдімо до головних технічних викликів, які передують масовому прийняттю технології.
1. Масштабування
Відома блокчейн-трилема звучить так: не можна мати одночасно високу децентралізацію, безпеку й масштабованість. Завжди одна чи дві характеристики будуть переважати за рахунок іншої. Розглянемо основні аспекти блокчейну:
Децентралізація: центральна точка управління (і потенційна мішень для атаки) відсутня. Одна з найбільш децентралізованих мереж — це Біткоїн. Однак концентрація потужності найбільших майнінгових пулів ставить під загрозу таку децентралізацію.
Безпека: здатність блокчейн мережі працювати належним чином, захищатися від атак, багів та інших непередбачених проблем. До неї ми ще повернемось.
Масштабованість: здатність мережі обробляти дедалі більший обсяг транзакцій і швидко. Опишу декілька способів, якими різні проекти намагалися вирішити цю трилему.
Bitcoin + SegWit
Раніше розмір блоку в мережі Біткоїн був обмежений до 1 мегабайта. Коли транзакцій було не надто багато, таке обмеження майже ні на що не впливало, але істотно обмежувало можливості DDoS-атаки. З ростом популярності біткоїнів число транзакцій збільшилося, але через обмеження максимального розміру блоків періодично виникала черга.
Для вирішення проблеми пропонувалося два способи:
- Bitcoin Unlimited: зняти обмеження в 1 Мб. За це виступали багато майнерів, адже збільшення розміру блоків не тільки ліквідує чергу, а й підвищує прибутковість майнінгу за рахунок зростання сумарної комісії в блоці, навіть якщо комісія за одну транзакцію впаде. Однак розробники були проти, адже вважали, що зняття ліміту призведе до зростання вимог до потужності техніки; дрібні майнери вийдуть з бізнесу, що призведе до централізації системи;
- Segregated Witness або SegWit: частина інформації зберігатиметься не в блокчейні, а в окремих файлах за межами ланцюга блоків. Розробники запевняли, що в результаті звільниться багато місця, а в блоці міститиметься більше транзакцій і швидкість підтверджень збільшиться.
Оскільки прихильники Bitcoin Unlimited вважали SegWit тимчасовим і більш складним рішенням, був розроблений альтернативний протокол SegWit2x: частина інформації зберігається за межами блокчейну і розмір блоків збільшили до 2 Мб.
Познайомитися з усіма обговореннями розробників ще від часів Сатоші можна у цьому розділі BitcoinTalk форуму. Додати свій BIP (Bitcoin Improvement Proposal) можна на GitHub (але спершу ознайомтеся з правилами).
Ethereum 2.0: PoS та шардінг
Альтернативою алгоритму Proof-of-Work (PoW), який покладається на майнінг, є алгоритм стейкінгу Proof-of-Stake (PoS). Саме перехід мережі Ефіріум на цей алгоритм є найбільш очікуваною подією 2021 року. З одного боку це вирішує проблему централізації майнінгових алгоритмів. З іншого, «багаті стають іще багатшими», адже чим більше валюти ви кладете на депозит («стейкаєте»), тим більше заробите в процесі. Саме тут у нагоді стають знання з економіки (в колах криптоентузіастів її звуть «токеноміка»), а також криптографії.
Принцип алгоритму Proof-of-Stake. Джерело: Lisk
Але це технічний огляд, тож повернімось до найбільших викликів. Для Ефіріуму — це, по-перше, реалізація шардінгу (SQL на блокчейні), а по-друге — міграція найбільшої екосистеми в історії (докер для платформи вартістю 200 мільярдів доларів). Шардінг звуть можливим рішенням блокчейн-трилеми. Першим проектом, який реалізував цей концепт, був Zilliqa (до речі, .zil домени на цьому блокчейні доступні на сайті UD на додачу до .crypto). Тоді на стадії тестової мережі (тестнету) він зміг досягти 2828 транзакцій на секунду (в порівнянні з 4.6 у Біткоїна та 30 в Ефіріум 1.0).
TON від Telegram
Поправочка: тепер цей проект зветься Free TON і більше не асоціюється з Телеграмом через постійні позови від SEC. Однак Дуров лишається технічним партнером, а сама платформа — у відкритому доступі. Підхід TON до підвищення масштабованості — це Delegated Proof-of-Stake + покращений шардінг. DPoS — це щось на кшталт делегування депутатів у Верховну Раду від свого округу; якщо не подобається його робота — обираєте нового. В білій книзі Telegram Open Network автор посилається на такі великі проекти як EOS і PolkaDot, які я згадую далі у статті.
Порівняльна таблиця блокчейнів, Ніколай Дуров, 2017
2. Приватність
Приватність у блокчейні не є повною. Біткоїн — псевдонімна мережа, себто, транзакції все ж можна відслідкувати. Такі компанії як Chainalysis та Crystal від Bitfury регулярно проводять комплексні аудити мереж Bitcoin, Ethereum та інших, а сервіс AMLBot допомагає визначити чи замішана ваша крипта у нелегальних активностях.
Однак нехтування держав і корпорацій приватністю громадян мотивує експертів з криптографії, у тому числі блокчейн-розробників, шукати нових способів приховати історію своїх платежів. Я згадаю лише кілька способів і не зупинятимусь на деталях, бо це доволі специфічна тема, яка потребує окремої статті.
CoinJoin або Змішування монет
Спершу були спроби мікшерів транзакцій. Суть у тому, що сервіс (часто анонімний) приймає inputs одразу від декількох клієнтів і далі надсилає їх кінцевим отримувачам через нові виходи (outputs). Цей метод поєднання біткоїн-платежів зветься CoinJoin і ускладнює стороннім спостерігачам можливість ідентифікувати відправників. На відміну від багатьох інших рішень щодо конфіденційності, спільні транзакції не потребують модифікації протоколу Біткоїн.
TapRoot
Віднедавна з’явилася нова пропозиція для оптимізації протоколу — TapRoot — з фокусом на масштабуванні та приватності. Оскільки технологія використовує алгоритм під назвою схема Шнорра (винайдений ще в 1989 році німецьким математиком Клаусом Шнорром), це дозволяє об’єднувати підписи транзакцій в один, агрегований ключ. Виходи при цьому незмінні, але взаємозамінні, що збільшує конфіденційність транзакцій.
Мульти-підписи в Taproot економлять
Zero Knowledge Proof
Є спроби проектів, що працюють з концептом «доведення з нульовим розголошенням». Якщо оминути формули з криптографії, то це абракадабра, яка створює «щит» приватності і спрощує доказовість транзакцій у мережі. Від ZK-алгоритму залежить розмір інформації, яку необхідно зберігати в блоці, а також час для перевірки й верифікації.
Характеристики окремо взятих ZK-алгоритмів з презентації Elena Nadolinski
Однак доведення з нульовим розголошенням усе одно не дорівнює «повній приватності». Детальніше про масштабованість і приватність блокчейну через протоколи другого рівня розповідає Олексій Глуховський з компанії Matter Labs в епізоді подкасту «Базовий Блок». Команда Олексія зібрала всі корисні посилання за темою Zero Knowledge на GitHub і це буде гарний старт для тих, хто хоче працювати над цим викликом для блокчейнів.
UD підходить до цієї проблеми з іншої сторони: відсутність цензури як передумова до повного володіння власними даними. Починаючи з доменів і продовжуючи профілями в соцмережах, єдиними медичними картками та портфоліо з активами в майбутньому.
3. Безпека (смарт-контрактів)
ZK-алгоритми самі по собі ламають мізки у спробі їх осягнути. Та пристебніть свої ремені: зараз розглянемо рядки коду, які коштували користувачам мільйони доларів. Безпека крупних блокчейнів (таких як Біткоїн та Ефіріум) не піддається сумніву. Батя-коїн невпинно працює вже понад 11 років, а Ефіріуму 15 червня виповнюється 6 років. Обидва не давали збоїв за весь цей час... але мали свої чудернацькі баги.
184 мільярди біткоїнів
Скріншот посту Сатоші на форумі BitcoinTalk щодо критичного баґа
В 2010 код Біткоїна був неідеальний, і хтось скористався з помилки переповнення. Річ у тім, що максимальне значення цілого числа на комп’ютері обмежується обсягом його пам’яті. Наприклад, у
Оскільки 1 BTC має 8 десяткових знаків (де найменша одиниця зветься «сатоші»), число вище буде мати наступний вигляд: 184 467 440 737.09551615. Чисто теоретично біткоїнів могло бути саме 184 мільярди, але творці протоколу задумали обмежену емісію рівно в 21 мільйон. Допоки хтось не провів атаку, детально описану тут. До речі, у вересні 2018 року розробники встигли усунути схожу критичну вразливість.
DAO Hack і вимушений hard fork
Не буду повторювати вже легендарну історію The DAO, який потім призвів до розділення спільноти Ethereum у 2016 році. Однак наведу кілька рядків коду, з допомогою якого атакувальник отримав чужий ефір:
if (_recipient.call.value(_amount)()) {
Ми можемо побачити можливість для функції резервної адреси одержувача виконати довільний код. Слід звернути увагу на рекурсію. Зараз ніхто не знає, яким був фактичний код у резервній функції. Ми спробуємо імітувати його через псевдокод:
msg.sender.splitDAO(proposalId)
Скріншот із пояснювального відео про хак ДАО
Яка б функція не називала код контракту атаки, вона виконала SplitDAO цієї функції. SplitDAO викликала withdrawRewardfor. Вона переходить до withdrawRewardFor для виплати, а потім рекурсивно до splitDAO і назад. Тож тепер ви можете уявити стек коду.
Починаючи з withdrawRewardfor і до виплат, резервної функції, рекурсивного виклику, SplitDAO і знову, знову, й знову. Зловмисник так вчинив з 250 монетами ефіру й отримав натомість близько 3,6 мільйона ETH. Тобто withdrawRewardfor(msg.sender) в рекурсії — це там, де все це сталось до виконання цих рядків:
totalSupply -= balances [msg.sender]; balances [msg.sender] = 0; paidOut [msg.sender] = 0;
Parity і заморожений ETH
Однак найбільше проблем стається у додатках і протоколах, які надбудовують над рішеннями першого рівня. Наприклад, Parity.
Експлуатований контракт Parity
Функція initWallet викликається під час створення нового гаманця для встановлення його початкового стану. А функція kill — це по суті заклик до самознищення. Кожен багатогалузевий гаманець Parity, розгорнутий користувачем з 20 липня 2017 року, покладався на цей бібліотечний контракт щодо його функціональності.
Parity використовував бібліотечний контракт для гаманців з кількома підписами, які мали змогу вивести кошти з гаманця. Цей бібліотечний контракт застосовувався з 20 липня 2017 року, але лише 6 листопада користувач Devops199 зміг отримати контроль над цим бібліотечним контрактом.
Ми можемо бачити транзакції, в яких зловмисник використовував бібліотечний контракт
Тут насправді не було багато взаємодій. Ми бачимо транзакцію 0×47f7cff7, яка надала «зловмисникові» контроль над бібліотечним контрактом. Все, що він зробив, було функцією initWallet і передача власної адреси, фактично перетворивши бібліотечний контракт на контракт гаманця. Після отримання права власності на контракт, він викликав функцію kill для знищення бібліотечного контракту, роблячи всі 587 залежних гаманців марними. Як пізніше виявилося, це було помилкою недосвідченого користувача, яка заморозила 513,774.16 ETH — 150 мільйонів доларів на той час.
«Is this serious issue?» — писав користувач Devops199, коли сам зарепортив проблему. «Will I get arrested for this?» «I’m eth newbie..just learning». Дорогі курси з блокчейн програмування вийшли. Та помилковий крок з боку Parity — зробити цей бібліотечний контракт неініціалізованим та відкритим до подібних вразливостей. Кілька років потому проблему з замороженими криптоактивами вдалося вирішити через оновлення мережі Ethereum (EIP156).
4. Сумісність
Серед більш як 9000 крипто проектів є принаймні пару сотень, які заточені під окремі індустрії. Як їх об’єднати? Як забезпечити універсальність і єдиний стандарт для всіх?
WEth, BEth і концепт запаковки/розпаковки криптоактивів
Запаковка Ефіріума дозволяє торгувати напряму альт-токенами. З WEth можна обмінювати Ефіріум за інші токени ERC-20 на децентралізованих платформах. Оскільки децентралізовані платформи, що працюють на Ефіріумі, використовують смарт-контракти для полегшення торгів безпосередньо між користувачами, кожен користувач повинен мати однаковий стандартизований формат для кожного токена, яким вони торгують. Це гарантує, що токени не загубляться при обміні.
Якщо ви хочете повернути звичайний Ефіріум, вам потрібно розпакувати його, тобто обміняти його на звичайний Ефіріум.
Polkadot, парачейни і мости
Polkadot розробили як основну інфраструктуру для реалізації виду масштабованості, сумісності та безпеки, необхідних для забезпечення багатоланцюгового майбутнього. Мережа дозволяє різноманітним парачейнам (паралельним блокчейнам) 1 рівня взаємодіяти між собою в межах екосистеми. Ще одна її характеристика — це так звані «мости», які поєднують Polkadot з зовнішніми мережами.
Блокчейн-міст — це з’єднання, яке дозволяє передавати токени та/або довільні дані з однієї мережі блокчейнів в іншу. Обидва ланцюги можуть мати різні протоколи, правила, спільноти та моделі управління, але міст забезпечує сумісний спосіб безпечної взаємодії обох сторін.
Візуалізація модульного фреймворку Substrate, на якому побудована Polkadot
В якості прикладу мостів розглянемо децентралізований ринок страхування. Одним із способів побудувати це на Polkadot буде розгортання спеціалізованого страхового парачейна, який виступає як ринок збуту для покупців та продавців страхування.
Припустимо, що Polkadot також містить парачейн оракула, який передає зовнішні дані в мережу, а також парачейн Інтернету речей (IoT), який збирає інформацію з-поза мережевих пристроїв IoT. У ситуації, коли ви придбали страховку від затримки рейсу, поліс може бути складений таким чином, щоб його виплатили автоматично, якщо парачейн оракула це підтвердить. Парачейн IoT підтвердить, що ви були в аеропорту вчасно для вашого вильоту.
Це нас підводить до фундаментального питання (і, мабуть, головного виклику) — хто і, головне, як побудує інфраструктуру нового інтернету?
5. Інфраструктура
Задля мас-адопшну потрібна інфраструктура, в тому числі стандартизовані хардвер-гаманці або такі, що інтегровані в наших девайсах. Наприклад, Paytomat дозволяє мерчантам отримувати криптовалюту як оплату за товар і послуги, Cryptocom підігріває інтерес загальної публіки через брендовану картку Visa, а Samsung оголошує смартфон із вбудованим криптогаманцем.
EOS: DPoS
Якщо говорити про аналог TCP/IP, то блокчейн-платформи взялися будувати власні екосистеми. Колись найбільша крипто-краудфандингова кампанія й одночасно головний конкурент Ethereum на той час — EOS — підійшов до трилеми по-своєму.
По-перше, команда одразу обрала ефективний консенсус механізм (Delegated Proof-of-Stake), що більше нагадує Верховну Раду: користувачі делегують валідаторів, але можуть переобрати, якщо ті не виправдають очікувань. Хоча й тут не вийшло без сперечань через конституцію.
По-друге, мільйони доларів почали вливати на розвиток екосистеми: від смарт-контрактів на основі EOS до децентралізованих застосунків (дастосунків) і сервісів. Але це ніби молоді Сполучені Штати Америки — попереду громадянська війна, Дикий Захід та інші пригоди, далекі від ідилії «код — це закон». Подібно мережа Tron (TRX) вибудовує цілий блокчейн-всесвіт зі своїми правилами та щедрими винагородами для розробників, аби тільки зростити екосистему. Час покаже, чи було це виправдано.
Blockchain Domain Names
Але можна піти легшим і логічнішим шляхом. Замість того, щоб одразу змінювати всю систему (й несвідомо копіювати її вади), можна адресувати одну потребу за раз. Так само як і в період доткомів, спершу буде потреба в доменах. (Звідси й назва попередньої бульбашки ІТ-компаній; більше про історію інтернету в цій статті).
Задля цього UD розробили плагіни для Opera, Chrome, Firefox, Edge та Brave, а також дозволили резолвити блокчейн-домени на Android і iPhone. Нещодавно компанія інтегрувалась з Opera. Наступним кроком на шляху до Вебу 3.0 і децентралізованого екомерс та соцмереж буде створення блогів. Ця ніби-то тривіальна можливість закарбувати свої думки на просторах інтернету колись була хайпом. Так само й сьогодні блог, який ніхто не в змозі знести, стане рекомендованим інструментом для політичних і громадських діячів, а потім і для кожного з нас, хто не хоче, щоб їх дані продавалися без відома.
Що далі?
Я розповів вам про головні виклики блокчейн-індустрії. Це означає, що проблеми ці актуальні і їх вирішення принесе вигоду і спільноті, і вам (у вигляді винагороди, топової позиції в блокчейн-компанії та цікавезної задачки не на один тиждень). Ознайомтеся з ландшафтом криптоактивів в Україні, познайомтеся з результатами весняного блокчейн-хакатону, долучіться до будівництва Web 3.0.
16 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів