May 20, 2020

Маленькие и большие баги TBTC

В блокчейне Ethereum находится порядка 3600 BTC.

Токены, выпущенные там отражают реальный спрос в экосистеме Ethereum на Биткоин и его стоимость торгуется через токены: WBTC, HBTC, imBTC, sBTC, pBTC, renBTC.

Намедни к этой компании присоединился TBTC (https://tbtc.network/), чей протокол был экстренно остановлен спустя менее чем 2 дня после запуска на майннете. Мы не знаем наверняка, насколько все остальные токенизированные биткоины похоже на WBTC, но предполагаем, что все эти токены являются формой кастодиальных стейблкоинов, только "стабильная ценность" эквивалентна Биткоину и может быть минимально верифицирована через UTXO Биткоина.

Протокол TBTC работает через кошелёк с мультиподписью (в блокчейне Биткоина это одна из стандартных схем), и эмитирует токены после подтверждения депозита. Для того, чтобы это работало в Ethereum, естественно необходим оракул, т.е. источник информации о том, что происходит с кошельком в Биткоине. Кроме этого владельцы Биткоин-кошелька должны обеспечить депозит в ETC в объёме 150% эмитируемых TBTC. Этот залог возвращается в случае погашения депозита TBTC. Очевидно только залог может гарантировать защиту от Sybill атаки — т.е. когда всех владельцев кошелька с мультиподписью представляет только одно лицо. На самом деле в ходе инцидента все 3 подписанта кошелька Биткоина контролировались одним лицом, т.е. 150% бонд-депозит в Ethereum это только вариант дестимулирования атаки, завязанный на рыночную цену Ethereum.

Этот тестовый оператор, который был первым лицом вообще попытавшимся использовать TBTC, в итоге не смог осуществить процесс вывода из TBTC на адрес в блокчейне Биткоина. Технически проблема заключалась в том, что контракт не мог проверить действительный вывод Биткоинов с кошелька, в таком случае, страховой депозит Ethereum мог быть ликвидирован. Ошибка заключалась в изменениях смарт-контракта , направленных на работу с любым типом адреса в Биткоине, в то время как в реальности система могла работать только с одним. До запуска тесты, связанные с отработкой всех сценариев не были разработаны, а сам по себе шаг проверки вывода никогда на выполнялся. "Децентрализованное приложение" тестировалось только с одним типом адерсов p2sh кошелька Green (начинаются с "3", для простоты, p2pkh начинаются с "1" это Legacy адреса).

Дополнительно, была обнаружена ошибка, связанная с малоизвесными опкодами Биткоина OP_VERIF и OP_VERNOTIF.В этом случае могла бы быть сконструирована такая транзакция, которая бы по факту оставляла Биткоины у подписантов кошелька депозита (т.е. у одного лица), но могла бы разблокировать страховой депозит в Ethereum.

Разработчики планируют адресовать удиторам все обнаруженные проблемы. Разработать тест-векторы, относящиеся к работе с биткоинами (!) и познее заново развернуть смарт-контракты протокола TBTC.

Поддержите автора! Шлите ваши 1000 сатоши, используя эту LNURL ссылку

LNURL1DP68GURN8GHJ7MRWW3UXYMM59E3XJEMNW4HZU7RE0GHKCMN4WFKZ7URP0YLH2UM9WFHXZMT9843NXUPSWFESSLK458

Используя страничку, либо просто пользователю @c3p0rs через @lntxbot.

Если вы ещё не знаете как использовать сатоши в Лайтнинг сети, прочитайте руководство для кошелька BLW или исследуйте Телеграм-бот @lntxbot.