logo
logo
Menu
Передовые практики

Все о Proxy Contracts

8 минут

Доступно в:

Nov 15th, 2023 - 02:08 am

Translated By:
EpiphanyEpiphany
SHARE


Возможно, вы слышали о договорах поручительства, и знакомые говорили вам, что это опасно или что им "нельзя доверять". Кому и зачем нужно использовать прокси-контракт? Не противоречит ли это этике web3? Действительно ли это так опасно? В этой статье мы постараемся ответить на эти вопросы и поделиться другой важной информацией о прокси-контрактах, а также рассказать о том, как вы должны думать и относиться к ним, как обычный пользователь web3. Давайте начнем!

Но прежде всего, что такое прокси-контракт?

Обычно контракты на Ethereum являются неизменяемыми, то есть их нельзя обновить после развертывания. В конце концов, блокчейн обычно определяется как "неизменяемая публичная бухгалтерская книга", но разработчики могут обойти эти ограничения, используя модель прокси-контракта. Прокси-контракт передает (или делегирует) всю свою функциональность другому смарт-контракту, называемому контрактом реализации.

Сам контракт реализации (контракт, содержащий весь код, который "делает вещи") впоследствии может быть изменен или "обновлен" по мере необходимости. Разработчики просто размещают на блокчейне другую версию контракта реализации и обновляют прокси-контракт, чтобы все полученные запросы отправлялись второму контракту реализации (схема ниже). Примером одного из таких запросов может быть передача актива, например токена или NFT. 

Хорошей аналогией для прокси-контракта может служить покупка участка земли. Участок земли выступает в роли доверенного лица, делегируя все полезные функции самому дому, где хозяева могут свободно менять крышу, переделывать кухню и т.д. Однако сколько бы вы ни перестраивали дом, сколько бы ни ставили новых домов, адрес не меняется!

ProxyHouse.jpg

Проекты, использующие прокси-контракты

Опасны ли прокси-контракты? Стоит ли вам покупать проекты 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 потребует особого подхода к работе с Blur. Возможно, будут разработаны новые функции и примитивы. Например, криптопанки были выпущены до появления стандарта ERC-721, и для торговли ими на таких торговых площадках, как Opensea, требуется "контракт-обертка" от третьей стороны. Это связано с тем, что стандарт ERC-721 не существовал на момент выпуска криптопунктов. Криптопроекты хотели бы избежать наличия нескольких версий контрактов, поскольку они снижают ликвидность для DeFi и усложняют проверку подлинности для NFT. Если бы они использовали прокси-контракт, Cryptopunks могли бы просто обновить его, чтобы учесть это изменение (теоретически)!



Большинство из этих причин кажутся разными способами сказать одно и то же, но различия имеют свои нюансы. Для некоторых проектов нет необходимости иметь точно такой же адрес контракта для своей утилиты или проекта; их пользователи могут взаимодействовать с контрактом только через определенный пользовательский интерфейс или веб-сайт. Если их пользователи не используют закладки смарт-контракта (стратегия безопасности, изучаемая в нашем курсе NFT Security 101), они ничего не узнают! Но другим проектам может потребоваться подтверждение подлинности коллекции токенов и единообразие токенов! 

Как определить, что контракт является прокси-контрактом

Существует два основных способа определить, является ли тот или иной контракт прокси-контрактом. Конечно, существуют всевозможные инструменты для анализа блокчейна, но мы рекомендуем использовать Etherscan.

Способ 1: Сначала перейдите к контракту в Etherscan. Для данного примера мы будем использовать прокси-контракт, который мы часто упоминаем в примерах курса NFT Security 102, - Helix.


Перейдите на вкладку Контракт. Вы увидите две кнопки, которые не встречаются в большинстве контрактов: "Записать как прокси" и "Прочитать как прокси".

writeasproxy.png

Скриншот контракта, который был идентифицирован командой Etherscan как проверенный прокси.

При необходимости взаимодействия с прокси-контрактами используйте кнопку "Write as Proxy".

Способ 2: Другой способ распознать прокси - это когда Etherscan говорит, что это прокси, но разработчик не сделал явным образом доступными вышеупомянутые кнопки в Etherscan. Вместо этого на странице контрактов появится небольшой баннер, который будет выглядеть следующим образом: в нем будет указано, что это "возможно" прокси-контракт:

maybeproxy.png

Контракт, который, по мнению Etherscan, является прокси-контрактом, но разработчик не подтвердил и не представил его в Etherscan в качестве такового.

Риски, связанные с использованием прокси-контрактов

Итак, теперь, когда вы знаете, что что-то является прокси-контрактом, каковы риски для пользователей? Мы уже упоминали о некоторых из них в разделе "Проекты, использующие прокси-контракты", но ниже приведем их в общих чертах.

  1. Кошелек разработчика/админа может быть взломан, что позволит развернуть вредоносное обновление: Существует множество примеров того, как самые компетентные разработчики, включая одного из самых печально известных разработчиков ядра протокола Bitcoin Люка Дэша (LukeDashJr), взламывали свой кошелек. Злоумышленники могут использовать прокси-адрес разработчика контракта, чтобы фактически уничтожить всю коллекцию или даже хуже.

     
  2. Разработчик может пойти по пути мошенничества и установить вредоносное обновление: хотя большинство разработчиков-изгоев обычно просто крадут сокровища и убегают (это то, что в криптовалюте называется rugpulls), они могут нанести еще больший ущерб, злонамеренно обновив прокси-контракт. Они могут украсть все активы, утвержденные для него, используя контракт с реализацией слива, или добавить такие функции, как функция сжигания администратора, которая может даже украсть токены, которые уже были "отправлены" на кошельки пользователей!

     
  3. Разработчики могут обновить контракт и внести в него ошибку: Совсем недавно компания Sushiswap выпустила версию своего контракта с ошибкой. Злоумышленники воспользовались этой ошибкой и вывели 3,3 млн. долл. из кошельков известных криптовалютных деятелей и обычных пользователей Sushiswap, которые пользовались платформой в то время. Хотя Sushiswap НЕ использовала прокси-контракт, было бы гораздо хуже, если бы он был. Обновление контракта с ошибкой означало бы, что все, кто когда-либо совершал одобрение на Sushiswap, были бы уязвимы к этой же ошибке! Хакеры могли бы похитить средства у всех, кто делал одобрение токенов на Sushiswap. Вероятно, это был бы самый крупный DeFi эксплойт в 2023 году, если бы это произошло!
     

Для биржи отказ от использования модели прокси-контракта имеет смысл: он позволяет пользователям и организациям, которые проявляют повышенную осторожность, переждать возможные проблемы, с которыми могут столкнуться новые пользователи после обновления. Использование прокси-контракта для обновления контракта на внедрение означает, что все пользователи подвергаются новым рискам в отношении каждого токена, который они ранее одобрили, если только они не отзовут это одобрение.

Рекомендации

Помимо понимания рисков, связанных с использованием прокси-контрактов, есть несколько общих правил, которым следует следовать, если вы встретите такой контракт в природе:

  1. Будьте особенно осторожны с контрактами NFT, которые требуют одобрения активов, находящихся за пределами их экосистемы. (Но не стоит сильно переживать, если это не так).

Например, вы участвуете в проекте NFT, для сбора средств которого развернут прокси-контракт. Если затем эта же коллекция запрашивает одобрение для ваших ApeCoin или Wrapped Ethereum, то это следует рассматривать как повышенный риск. В качестве "неизбежного" примера этого часто приводят Blur, как мы уже говорили, поскольку в Blur используются только прокси-контракты. 

  1. При утверждении NFT или токенов ERC-20, особенно на торговых площадках или биржах, проверяйте, является ли что-то прокси-контрактом, прежде чем делать это.

Всякий раз, когда я использую новую торговую площадку или DEX, мне нравится проверять это и пытаться выяснить, рассказывали ли они о том, почему они используют прокси-контракт, или как они защищают и проверяют новые развертывания перед обновлением новых реализаций. 

  1. Отмена разрешений на неиспользуемые или неактивные прокси (или все контракты, если на то пошло) с помощью таких сервисов, как Revoke.cash или Approvals.xyz

Неактивные проекты, особенно с анонимными основателями, могут попытаться использовать ваши разрешения против вас, развернув код на новом контракте реализации с кодом, позволяющим им получить контроль над одобренными токенами. Чтобы избежать такой возможности, всегда следите за чистотой своих одобрений, не забывайте устанавливать лимиты расходов на одобрения и проводите их регулярный аудит, чтобы не допустить попадания ненужных одобрений в ваш кошелек!

Заключение

Прокси-контракты не так уж плохи, и, честно говоря, в большинстве проектов, особенно в тех, которые используют их для собственных нужд, в рамках собственной экосистемы или токенов, это вполне разумный способ обеспечить долгосрочную жизнеспособность вашего проекта! Это поможет оставаться в курсе новых стандартов ERC, тенденций и иметь возможность беспрепятственно интегрировать новые примитивы, такие как Wallet Delegation. Однако их использование снижает предсказуемость и, что очень важно, меметическую неизменность, к которой пользователи блокчейна привыкли за многие годы. 

В конечном счете, решение о том, использовать или не использовать прокси-контракты, зависит от пользователя и от того, что ему удобнее. В большинстве случаев прокси-контракты являются вполне разумным способом обеспечения долгосрочной жизнеспособности проекта. Однако в случаях, связанных с биржами или торговыми площадками (Blur, Opensea и т.д.), где обновления должны происходить редко, использование прокси-контрактов может быть нецелесообразным.

У вас есть вопросы или вы хотите узнать больше о безопасности web3 и быть в курсе самой актуальной информации о безопасности, мошенничестве и тактиках? Присоединяйтесь к нам в discord по адресу https://discord.gg/boringsecurity .