Автор оригинала: Джаррод Уоттс
Оригинальная компиляция: Golden Finance 0xjs
Примечание редактора:
Новая сеть L2 Blast находится в центре внимания общественного мнения с момента ее запуска на этой неделе. NFT Whale Christian не только вложил 500 sETH в Blast, но и 22 числа Blast также объявил, что завершил финансирование на сумму 20 миллионов долларов США. Многие разработчики также обсуждают код и природу Blast. Джаррод Уоттс из Polygon даже прямо заявил, что Blast не является сетью уровня 2. Эта статья переведена из его твита X.
Кто-то сказал: «Blast — это всего лишь мультиподпись 3/5…»
Последние несколько дней я провел, копаясь в исходном коде, чтобы проверить, верно ли это утверждение.
Вот все, что я вижу:
1. Новый кошелек 0x52c31 развертывает два контракта: 1) 0xa01: прокси-контракт Blast Deposit; 2) 0x5f6: контракт реализации Blast Deposit.
Если вы не знакомы с этими настройками «агентского контракта», вы вернетесь к этому позже.
2.0x52c31 После развертывания этих контрактов передайте право собственности на смарт-контракт Gnosis Safe.
Контракты Gnosis Safe или «Safe2» — самые популярные и надежные смарт-контракты с несколькими подписями. Для выполнения транзакции им требуются подписи большинства подписавших сторон.
3. Теперь в контракте Safe есть 5 подписантов, которым принадлежит контракт Blast.
Это означает, что большинство (т. е. 3/5) подписантов должны выполнять транзакции от имени этого безопасного контракта. Все эти 5 кошельков совершенно новые, но их владельцы неизвестны.
4. Таким образом, контракт с мультиподписью 3/5 теперь является «владельцем» контракта Blast Deposit.
Как мы уже упоминали, контракт Blast Deposit состоит из двух контрактов: агентского и имплементационного.
Что на самом деле значит быть их «владельцем»?
Как мы уже упоминали, контракт Blast Deposit состоит из двух контрактов: агентского и имплементационного.
Что на самом деле значит быть их «владельцем»?
5. При использовании обычных смарт-контрактов вы не можете изменить код после его развертывания в блокчейне. Прокси-смарт-контракты позволяют выполнять «обновления» (изменения) смарт-контракта без замены всего контракта. Обычно это используется для исправления ошибок или добавления функциональности.
6. Агент Blast реализует контракт UUPSUpgradeable OpenZeppelin. Сюда входят такие функции, как «_upgradeTo», которые позволяют изменять логику реализованного контракта. Это означает, что контракты, с которыми взаимодействуют пользователи, могут поддерживать один и тот же адрес контракта.
7. Наихудшим сценарием возможности обновления является то, что владелец (мультиподписи) меняет логику контракта на что-то вредоносное.
Это звучит немного пугающе, правда? ...Фактически, эти «вспомогательные функции» сегодня используются большинством L2.
8. Оптимистические накопительные пакеты, такие как Optimism и Arbitrum, также имеют эту функцию.
По данным L2Beat:
·Код, защищающий системы OP Mainnet и Base, может быть изменен по желанию без предварительного уведомления.
·Обновление Arbitrum One требует примерно 12-дневной задержки, но может быть одобрено Советом управляющих без промедления.
9. То же самое справедливо и для мира zkEVM.
По данным L2Beat:
·Код, защищающий системы Linea, Scroll и zkSync, может быть изменен без предварительного уведомления.
·Обновления Polygon zkEVM задерживаются примерно на 10 дней (если не активирован аварийный статус)
10. Причина, по которой эти накопительные пакеты имеют мультиподписи, которые могут выполнять обновления, заключается в обеспечении временной безопасности, пока технология развивается. Как отмечает L2Beat в своем блоге о фазе L2, заключительная фаза Rollup должна ограничить способность этих комитетов по безопасности устранять «серьезные недостатки».
11. Возможности Совета Безопасности со временем уменьшаются. Однако видимость участников важна.
Например, Polygon PIP-29 предлагает 13 участников для управления «узкими, ограниченными по времени изменениями в смарт-контрактах системы».
12. Таким образом, хотя Blast действительно может выполнять обновления кода с помощью мультиподписей и мгновенно красть средства, *в настоящее время* существует множество других решений L2, которые делают то же самое.
12. Таким образом, хотя Blast действительно может выполнять обновления кода с помощью мультиподписей и мгновенно красть средства, *в настоящее время* существует множество других решений L2, которые делают то же самое.
До сих пор я защищал Blast. Но вот плохие новости... идем дальше.
13.Blast не L2.
Blast — это просто смарт-контракт с двумя функциями: 1. Принимать средства пользователей. 2. Инвестировать средства пользователей в такие протоколы, как Lido.
Здесь нет тестовой сети, транзакций, мостов, объединений и данных о транзакциях, отправляемых в Ethereum. Это не Л2.
14. Внося депозит в контракт Blast, вы фактически доверяете 3-5 незнакомцам, которые заложат ваши средства за вас.
Вы не сможете вывести деньги в любой момент, если эти 3-5 человек не решат поступить правильно в будущем. Опять же, моста здесь нет.
15. Для меня это настоящее безумие...
Вы не сможете получить свои деньги обратно от Blast до тех пор, пока:
Новый контракт развертывается с помощью мультиподписи 3/5, состоящей из незнакомцев;
Контракт имеет функционал вывода из него средств;
Они переводят все средства в новый контракт.
16. Но бывают ситуации и похуже.
Могу вам сказать, что им даже не нужно «апгрейдиться», чтобы украсть все средства в контракте, а средства, внесенные пользователем в этот контракт, не могут быть выведены кем-либо еще.
Давайте посмотрим.
17. Функция «enableTransition» требует в качестве параметра контракт «mainnetBridge».
Функция этого контракта «mainnetBridge»: получить все обещанные ETH и DAI.
Итак, как же выглядит этот контракт «mainnetBridge»?
18. Это может быть абсолютно что угодно! Blast одобряет любой контракт «mainnetBridge» на расходование максимально возможного количества LIDO и DAI...
Должны ли быть какие-то ограничения на правильность этого контракта? Что ж, *да*, давайте посмотрим на этот код.
19. Ниже приведен оператор утверждения в функции «_setMainnetBridge».
Это... Проверяет, есть ли какой-нибудь код по этому адресу! Да, если это не адрес EOA, ему разрешено владеть всеми средствами, указанными в контракте. Общая сумма средств на данный момент превышает 200 миллионов долларов США.
20. Таким образом, можно предположить, что они могут:
1) Создайте чрезвычайно простой смарт-контракт и установите его в качестве контракта mainnetBridge;
2) Пусть смарт-контракт получит все обещанные ETH и DAI (более 200 миллионов)
Вызовите смарт-контракт, чтобы вывести все средства на кошелек EOA.
21. Мы выявили две основные угрозы:
·Обновленный вредоносный код, одобренный 3/5 мультиподписями, для кражи средств.
· Создайте вредоносный смарт-контракт и установите его в качестве смарт-контракта «mainnetBridge» для кражи средств, также с помощью мультиподписи 3/5.
22. Это действительно произойдет? Лично я, если бы пришлось гадать, не думаю, что средства были украдены.
Тем не менее, я действительно считаю, что идея собственной доходности Blast — это очень интересный компромисс.
23. Итак, хотя я лично считаю, что отправлять средства в Blast в его нынешнем состоянии рискованно, в конечном итоге решение отправлять или не отправлять остается за пользователем, и я просто делюсь тем, что вижу здесь.
Я по-прежнему желаю команде Blast и всем, кто внес хороший вклад, всего наилучшего.
Все комментарии