Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 5.23 KB

File metadata and controls

44 lines (30 loc) · 5.23 KB

Обновление смарт-контракта

Автор: Павел Найданов 🕵️‍♂️

Смарт-контракты в сети Ethereum по умолчанию неизменны. Однако для некоторых сценариев желательно иметь возможность их модифицировать.

Обновление смарт-контракта - это изменение бизнес-логики контракта при сохранении состояния контракта. Можно обновить кодовую базу, при этом адрес контракта, состояние и баланс должны оставаться неизменными.

Для чего это нужно?

Во-первых, в смарт-контракте могут обнаружиться ошибки или потенциальные уязвимости, которые необходимо будет исправить.

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

Важно! Контроль над обновлениями должен быть децентрализован, чтобы избежать злонамеренных действий.

Можно изменить исполняемый код несколькими способами:

  1. Создание нескольких версий смарт-контрактов и миграция состояния из старого контракта в новый контракт. Подробнее.
  2. Создание нескольких смарт-контрактов для раздельного хранения состояния и бизнес логики. Подробнее.
  3. Использование Proxy patterns для делегирования вызова функций из неизменяемого прокси-контракта в изменяемый логический контракт. Подробнее.
  4. Использование Strategy pattern. Создание неизменного основного контракта, который взаимодействует с гибкими вспомогательными контрактами и полагается на них для выполнения определенных функций. Подробнее.
  5. Использование Diamond pattern для делегирования вызовов функций из прокси-контракта логическим контрактам. Подробнее.
  6. Подход в Pendle маршрутизации. Подробнее.

Плюсы и минусы обновления смарт-контрактов

Плюсы

  1. Дает возможность исправить уязвимость после деплоя. Можно даже сказать (но это спорно), что это повышает безопасность, так как можно исправить уязвимость.
  2. Дает возможность добавлять функциональность к логике контракта после деплоя.
  3. Открывает новые возможности проектирования и построения децентрализованной системы с изолированием отдельных частей приложения и разграничением доступа и управления.

Минусы

  1. Отменяет идею блокчейна о неизменности кода. А значит с точки зрения безопасности, это плохо. Пользователи должны доверять разработчикам, чтобы они не изменяли смарт-контракты произвольно.
  2. Чтобы завоевать доверие пользователей, нужны дополнительные слои защиты,например DAO, которое будет защищать от несанкционированных изменений.
  3. Закладывание возможности обновления контракта может сильно увеличить его сложность.
  4. Небезопасный контроль доступа или централизация в смарт-контрактах может упростить злоумышленникам выполнение несанкционированных обновлений.

Links

  1. Upgrading smart contracts
  2. Upgradable Smart Contracts: What They Are and How To Deploy Your Own
  3. Upgrading smart contracts от OpenZeppelin
  4. yAcademy Proxies Research