Skip to content

Latest commit

 

History

History
22 lines (12 loc) · 4.58 KB

File metadata and controls

22 lines (12 loc) · 4.58 KB

Strategy pattern

На этот подход напрямую влияет классический паттерн стратегии. Основная идея которого заключается в выборе поведения или алгоритма действий в зависимости от условий во время выполнения.

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

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

Всегда можно создать новый вспомогательный контракт и настроить основной контракт на новый адрес. Это позволяет менять стратегии (внедрять новую логику или другими словами обновлять код) для смарт-контракта.

Важно! Главный недостаток заключается в том, что этот шаблон в основном полезен для развертывания незначительных обновлений. Кроме того, если основной контракт скомпрометирован (был взлом), то этот метод обновления уже не подойдет.

Examples

  1. Хорошим примером простого паттерна стратегии является Compound, который имеет разные реализации RateModel для расчета процентной ставки, и его контракт CToken может переключаться между ними.

  2. Чуть более сложной реализацией паттерна стратегия является "Pluggable Modules" или подключаемые модули. В этом подходе основной контракт предоставляет набор основных неизменяемых функций и позволяет регистрировать новые модули. Эти модули добавляют новые функции для вызова в основной контракт. Этот паттерн встречается в кошельке Gnosis Safe. Пользователи могут добавить новые модули в свои собственные кошельки, а затем каждый вызов контракта кошелька будет запрашивать выполнение определенной функции из определенного модуля.

Важно ! Нужно иметь в виду, что Pluggable Modules также требует, чтобы основной контракт не содержал ошибок. Любые ошибки в самом управлении модулями не могут быть исправлены путем добавления новых модулей в эту схему.

Links

  1. Strategy pattern