8 минут
Nov 15th, 2023 - 02:08 am
Возможно, вы слышали о договорах поручительства, и знакомые говорили вам, что это опасно или что им "нельзя доверять". Кому и зачем нужно использовать прокси-контракт? Не противоречит ли это этике web3? Действительно ли это так опасно? В этой статье мы постараемся ответить на эти вопросы и поделиться другой важной информацией о прокси-контрактах, а также рассказать о том, как вы должны думать и относиться к ним, как обычный пользователь web3. Давайте начнем!
Обычно контракты на Ethereum являются неизменяемыми, то есть их нельзя обновить после развертывания. В конце концов, блокчейн обычно определяется как "неизменяемая публичная бухгалтерская книга", но разработчики могут обойти эти ограничения, используя модель прокси-контракта. Прокси-контракт передает (или делегирует) всю свою функциональность другому смарт-контракту, называемому контрактом реализации.
Сам контракт реализации (контракт, содержащий весь код, который "делает вещи") впоследствии может быть изменен или "обновлен" по мере необходимости. Разработчики просто размещают на блокчейне другую версию контракта реализации и обновляют прокси-контракт, чтобы все полученные запросы отправлялись второму контракту реализации (схема ниже). Примером одного из таких запросов может быть передача актива, например токена или NFT.
Хорошей аналогией для прокси-контракта может служить покупка участка земли. Участок земли выступает в роли доверенного лица, делегируя все полезные функции самому дому, где хозяева могут свободно менять крышу, переделывать кухню и т.д. Однако сколько бы вы ни перестраивали дом, сколько бы ни ставили новых домов, адрес не меняется!
Опасны ли прокси-контракты? Стоит ли вам покупать проекты NFT, использующие прокси-контракты? А как насчет торговых площадок, токенов или даже протоколов DeFi? Прежде чем ответить на эти вопросы, давайте рассмотрим несколько примеров прокси-контрактов в реальности:
10KTF - этот смарт-контракт является, пожалуй, одним из самых заметных смарт-контрактов NFT, который использует модель прокси-контракта для обеспечения возможности обновления. Они могут обновлять свои контракты для интеграции таких функций, как делегирование кошелька, обеспечение роялти или применение новых примитивов/стандартов.
USDC - одна из крупнейших стабильных монет, USDC, также использует модель прокси-контракта. Более того, в своем блоге "Обновление многомиллиардного токена ERC-20", опубликованном в 2020 г., они подробно рассказывают о причинах и реализации этой модели. Свои опасения они ярко сформулировали в следующем предложении из вышеупомянутого поста: "Рыночная капитализация USDC к моменту обновления выросла до 1,4 млрд. долларов, и наши карьеры были поставлены на карту - никто не хотел войти в историю как разработчик, который поджег миллиард долларов".
Blur - Blur - это торговая площадка NFT, которая использует прокси-контракты практически во всех своих развернутых смарт-контрактах, за исключением контракта на токен $BLUR. Это может быть опасно, поскольку пользователи уже утвердили активы на прокси-адресе, и теперь новый контракт реализации имеет возможность вытащить эти активы из кошельков пользователей. Если в новом контракте на внедрение Blur будут обнаружены ошибки, сотни тысяч NFT, одобренных на прокси-контракт Blur, окажутся под угрозой. Мошенники могут лишить кошельки своих NFT, что означает конец игры для рынка NFT; это крайне маловероятный сценарий конца света, такие средства защиты, как функции автоматического выключателя, аудит контрактов и "белые шляпы" хакеров, скорее всего, остановят атаку до того, как она произойдет.
Compound Finance - Хотя пока неясно, каким образом осуществляется управление модернизацией Blur и 10KTF, поскольку они являются частными компаниями, можно с уверенностью сказать, что оно, возможно, не такое строгое (и уж точно не такое прозрачное!), как в более зрелых DAO. Одним из ярких примеров является Compound Finance, платформа DeFi кредитования с объемом TVL более 1 млрд. долл. Например, процесс управления не позволяет вносить обновления в протокол, если на это не требуется минимум 1 неделя времени, и это закреплено в коде.
Несмотря на то, что существует множество нюансов использования прокси-контрактов, основными причинами являются следующие:
Большинство из этих причин кажутся разными способами сказать одно и то же, но различия имеют свои нюансы. Для некоторых проектов нет необходимости иметь точно такой же адрес контракта для своей утилиты или проекта; их пользователи могут взаимодействовать с контрактом только через определенный пользовательский интерфейс или веб-сайт. Если их пользователи не используют закладки смарт-контракта (стратегия безопасности, изучаемая в нашем курсе NFT Security 101), они ничего не узнают! Но другим проектам может потребоваться подтверждение подлинности коллекции токенов и единообразие токенов!
Существует два основных способа определить, является ли тот или иной контракт прокси-контрактом. Конечно, существуют всевозможные инструменты для анализа блокчейна, но мы рекомендуем использовать Etherscan.
Способ 1: Сначала перейдите к контракту в Etherscan. Для данного примера мы будем использовать прокси-контракт, который мы часто упоминаем в примерах курса NFT Security 102, - Helix.
Перейдите на вкладку Контракт. Вы увидите две кнопки, которые не встречаются в большинстве контрактов: "Записать как прокси" и "Прочитать как прокси".
Скриншот контракта, который был идентифицирован командой Etherscan как проверенный прокси.
При необходимости взаимодействия с прокси-контрактами используйте кнопку "Write as Proxy".
Способ 2: Другой способ распознать прокси - это когда Etherscan говорит, что это прокси, но разработчик не сделал явным образом доступными вышеупомянутые кнопки в Etherscan. Вместо этого на странице контрактов появится небольшой баннер, который будет выглядеть следующим образом: в нем будет указано, что это "возможно" прокси-контракт:
Контракт, который, по мнению Etherscan, является прокси-контрактом, но разработчик не подтвердил и не представил его в Etherscan в качестве такового.
Итак, теперь, когда вы знаете, что что-то является прокси-контрактом, каковы риски для пользователей? Мы уже упоминали о некоторых из них в разделе "Проекты, использующие прокси-контракты", но ниже приведем их в общих чертах.
Для биржи отказ от использования модели прокси-контракта имеет смысл: он позволяет пользователям и организациям, которые проявляют повышенную осторожность, переждать возможные проблемы, с которыми могут столкнуться новые пользователи после обновления. Использование прокси-контракта для обновления контракта на внедрение означает, что все пользователи подвергаются новым рискам в отношении каждого токена, который они ранее одобрили, если только они не отзовут это одобрение.
Помимо понимания рисков, связанных с использованием прокси-контрактов, есть несколько общих правил, которым следует следовать, если вы встретите такой контракт в природе:
Например, вы участвуете в проекте NFT, для сбора средств которого развернут прокси-контракт. Если затем эта же коллекция запрашивает одобрение для ваших ApeCoin или Wrapped Ethereum, то это следует рассматривать как повышенный риск. В качестве "неизбежного" примера этого часто приводят Blur, как мы уже говорили, поскольку в Blur используются только прокси-контракты.
Всякий раз, когда я использую новую торговую площадку или DEX, мне нравится проверять это и пытаться выяснить, рассказывали ли они о том, почему они используют прокси-контракт, или как они защищают и проверяют новые развертывания перед обновлением новых реализаций.
Неактивные проекты, особенно с анонимными основателями, могут попытаться использовать ваши разрешения против вас, развернув код на новом контракте реализации с кодом, позволяющим им получить контроль над одобренными токенами. Чтобы избежать такой возможности, всегда следите за чистотой своих одобрений, не забывайте устанавливать лимиты расходов на одобрения и проводите их регулярный аудит, чтобы не допустить попадания ненужных одобрений в ваш кошелек!
Прокси-контракты не так уж плохи, и, честно говоря, в большинстве проектов, особенно в тех, которые используют их для собственных нужд, в рамках собственной экосистемы или токенов, это вполне разумный способ обеспечить долгосрочную жизнеспособность вашего проекта! Это поможет оставаться в курсе новых стандартов ERC, тенденций и иметь возможность беспрепятственно интегрировать новые примитивы, такие как Wallet Delegation. Однако их использование снижает предсказуемость и, что очень важно, меметическую неизменность, к которой пользователи блокчейна привыкли за многие годы.
В конечном счете, решение о том, использовать или не использовать прокси-контракты, зависит от пользователя и от того, что ему удобнее. В большинстве случаев прокси-контракты являются вполне разумным способом обеспечения долгосрочной жизнеспособности проекта. Однако в случаях, связанных с биржами или торговыми площадками (Blur, Opensea и т.д.), где обновления должны происходить редко, использование прокси-контрактов может быть нецелесообразным.
У вас есть вопросы или вы хотите узнать больше о безопасности web3 и быть в курсе самой актуальной информации о безопасности, мошенничестве и тактиках? Присоединяйтесь к нам в discord по адресу https://discord.gg/boringsecurity .