tBTC: Навігація у кросчейні.
Нещодавно ми провели оцінку безпеки tBTC від Thesis: токен ERC20 не потребуючий довіри, що підлягає погашенню і забезпечений BTC. Проект використовує Keep Network для охоплення як Bitcoin, так і Ethereum, і прагне до створення нової крос-чейн економіки, дозволяючи користувачам здійснювати транзакції в Ethereum з використанням підтримуваного біткойном ERC20. Наш звіт у відкритому доступі тут.
Нам на огляд нечасто трапляються такі проекти, як tBTC, що охоплюють кілька систем: Bitcoin, Ethereum і Keep Network. Смарт-контракти, які сприяють взаємодії, досить складні і вимагають розуміння всіх трьох протоколів. Хоча наша робота схожа за своєю суттю на попередню роботу з Liquality і Atomic Loans, масивна кодова база tBTC виводить її на інший рівень.
В ході нашого огляду ми багато дізналися про розвиток крос-чейн систем. Зокрема, наше дослідження транзакцій Bitcoin виявило цікаві обмеження у перевірці транзакцій Bitcoin на Ethereum. Розповімо про нашу знахідку.
Що таке SPV proof?
В контексті Bitcoin SPV використовується для доказу існування транзакції в даному блоці. Простіше кажучи, доказ об’єднує доказ Меркла з hashMerkleRoot блоку, щоб показати, що транзакція існує:
Подібні докази часто використовуються, тому що вони відносно легкі в обчислювальному відношенні. Ця властивість особливо важлива в контексті смарт-контрактів, складових tBTC. Оскільки він працює на EVM (віртуальній машині Ethereum), tBTC, як не дивно, обмежений обмеженими обчислювальними ресурсами Ethereum.
Припустимо, ми хочемо довести, що існує якась транзакція в Bitcoin. Для доказу нам знадобиться кілька вхідних даних:
1. Тема блоку, який містить транзакцію.
2. Сама необроблена транзакція
3. Індекс транзакції (її позиція в блоці)
4. Доказ Меркла (список вузлів, які утворюють «шлях» від транзакції до заголовка блоку Bitcoin)
Використовуючи ці вхідні дані, можна довести, що транзакція існує в блоці, без необхідності підключення до вузла Bitcoin. За умови, що наданий заголовок блоку виходить з найдовшого ланцюжка доказів виконання роботи, проста перевірка платежу (Simple Payment Verification) може відбуватися де завгодно і на будь-якому пристрої.
Крос-чейн головоломка.
При дослідженні транзакцій BTC ми виявили фундаментальне обмеження доказів SPV, виконуваних на Ethereum: розмір транзакції Bitcoin.
Bitcoin-транзакції в основному обмежуються максимальним розміром блоку Bitcoin в 4 МБ. Крім того, оскільки докази SPV можуть виключати дані свідків, ми можемо зменшити теоретичний максимальний розмір Bitcoin-транзакції до 1 МБ. Однак для наших цілей точна верхня межа фактично не визначається розміром блоку BTC, тому що фактично виявляється обмежена блокчейном Ethereum.
Чому? На відміну від Bitcoin, транзакції Ethereum обмежені кількістю обчислювальних ресурсів, витрачених їх виконанням. Кожна виконувана операція вимагає певної кількості газу, і транзакції не можуть споживати більше газу, ніж міститься в одному блоці. Це називається лімітом газу, який на момент написання становить близько 10 мільйонів газу.
Щоб зрозуміти, як це приблизно відповідає розміру транзакції Bitcoin, ми можемо використовувати визначення з жовтого паперу Ethereum, Gtxdatanonzero, яке представляє собою вартість газу, необхідну для кожного байта даних в транзакції. Gtxdatanonzero — 16 одиниць газу на байт.
Це означає, що кожен байт транзакції Bitcoin, що надається як частина доказів SPV, споживає мінімум 16 одиниць газу. Зверніть увагу, що є додаткові витрати, пов’язані з виконанням SPV-доказу, але я ігнорую їх для цілей цієї приблизної оцінки.
Отже, наскільки великою може стати Bitcoin — транзакція, перш ніж стане неможливим виконання SPV-доказу на Ethereum? Відповідь полягає в тому, що ліміт газу блоку Ethereum ділиться на Gtxdatanonzero:
(10,000,000 gas) / (16 gas per byte) = 625,000 bytes,
або близько 63% від максимального розміру транзакції Bitcoin в 1 МБ.
Що це означає для tBTC?
У tBTC SPV спочатку служили двом цілям:
1. Підтвердження депозиту: дозволяє користувачам довести, що вони правильно внесли депозит в BTC, що призводить до запуску контрактів tBTC для випуску відповідного ERC20 підтримуваного Bitcoin.
2. Докази шахрайства: дозволили користувачам довести, що депозит у BTC був витрачений без авторизації групою охоронців депозиту, що призвело до слешінгу підписанта і надання бондів власнику депозиту.
Докази шахрайства.
Докази шахрайства через SPV дозволили користувачам захищатися від зловмисних підписантів. Якщо група підписантів вступає в змову, вони можуть витрачати депоновані BTC без явного дозволу користувача. Надаючи цю несанкціоновану транзакцію контрактами tBTC, користувачі могли довести, що відбулась крадіжка, покарати зловмисників і гарантовано отримати справедливу компенсацію за втрату свого депозиту.
Однак, використовуючи обмеження розміру транзакції Bitcoin, описаного вище, підписувальні сторони можуть уникнути цього штрафу, витративши депозит в досить великій транзакції.
На щастя, захист від шахрайства SPV була тільки одним з двох механізмів захисту реалізованих в tBTC. Альтернативний метод, доказ шахрайства за допомогою ECDSA, уявляє собою набагато більш надійну альтернативу доказам шахрайства SPV.
Докази депозиту.
Підтвердження депозиту як і раніше використовується в tBTC при вході кожного користувача в систему. Щоб випустити підтримуваний Bitcoin ERC20 на Ethereum, користувачі повинні надати SPV-підтвердження успішного депозиту. Хоча проблема з розміром транзакції Bitcoin не дає явних можливостей для зловживання системою депозиту, залишається ймовірність, що коли користувач буде вносити на депозит дійсну транзакцію BTC, він виявить, що його транзакція занадто велика і не може бути підтверджена в контрактах tBTC.
Немає простого способу позбутися цієї залежності; для підтвердження депозиту необхідно надати докази SPV. На щастя, обмеження на розмір транзакції Bitcoin не таке серйозне, щоб повністю перешкодити функціонуванню tBTC; проста трата з одним введенням і виведенням знаходиться в межах поточного ліміту блок-газу Ethereum. Поки докладаються зусилля до того, щоб користувачі були інформовані про це обмеження, розмір транзакції Bitcoin не становитиме серйозної проблеми при поповненні депозитів.
Що можуть зробити tBTC (і інші крос-чейн проекти), щоб їх системи правильно функціонували?
Розберіться в примітивах обох ланцюжків. Використовуючи Ethereum, зрозумійте, де EVM не в змозі відтворювати примітиви інших ланцюжків. Кроссчейн-додатки з’єднують два світи, кожен зі своєю системою часу, правилами і підводними каменями.
· Тестування продуктивності надасть якусь основу, по якій можна буде оцінювати систему. Наприклад, після обговорення проблеми розміру транзакції Bitcoin, компанія Thesis провела базове тестування, щоб визначити більш точні обмеження для своїх SPV-доказів.
Модульних тестів ніколи не буде достатньо. Міжмережеві децентралізовані додатки за своєю природою мають рухомі частини на всіх кінцях системи. Щоб ці частини працювали разом, розробникам потрібно вийти за рамки простого модульного тестування.
· Інтеграційне тестування допоможе виявити невідповідності у взаємодії між ізольованими компонентами і надасть модель системи в умовах, близьких до реальних.
Готуйтеся до найгіршого. З великою складністю приходить велика відповідальність. Виявити всі можливі проблеми до випуску нереально.
· План на випадок непередбачених обставин: наявність плану швидкого реагування на проблеми може знизити вплив серйозних казусів. Створення плану дій на випадок непередбачених обставин перед запуском може вимагати роботи, але це набагато краще, ніж бути непідготовленим.
Нарешті, навчіть своїх користувачів. Розуміння того, де щось може піти не так, — це частина битви; наступний крок — переконатися, що ваші користувачі теж це розуміють. З цією метою Метт Луонго з Thesis нещодавно опублікував довгу гілку з описом моделі безпеки та управління tBTC.
Думаєте про безпеку смарт-контрактів? Ми можемо надати навчання, постійні консультації і аудит смарт-контрактів. Зв’яжіться з нами.
Дякую за увагу!
Приєднуйтесь до Discord Keep та Discord tBTC.
Переклад: DenisKrivilev#5773 @ Discord