Overpowered owner в смарт-контрактах: Децентрализованный тоталитаризм
Главная Технологии, Блокчейн, ETH

Павел Кондратенков, эксперт компании SmartDec, которая занимается исследованиями в области безопасности смарт-контрактов, рассказал о том, что такое overpowered owner и почему концентрация полномочий в одних руках — не лучший вариант для криптопроектов.

Я аудитор смарт-контрактов и я не верю в децентрализованный мир. Коллеги иногда говорят мне, что overpowered owner (ситуация, в которой владелец контракта обладает слишком большими полномочиями) — это проблема. В таких случаях я начинаю с ними спорить. При этом сам отмечаю overpowered owner при аудите как довольно важную ошибку. Так нет ли тут противоречия? Надеюсь, эта статья поможет посмотреть, что происходит по ту сторону.

Что такое overpowered owner

Следующее определение спорное, но я буду придерживаться его:

Overpowered owner — это дизайн проекта, при котором существует один или несколько владельцев, которые могут вручную вызывать критически важные функции системы.

Проясним это определение:

  • Когда владелец может создавать токены из ниоткуда на любом адресе — это overpowered owner.
  • Когда несколько владельцев могут голосованием решать, кому и сколько токенов выдать — это overpowered owner.
  • Когда все пользователи могут участвовать в голосовании о выдаче токенов — это не overpowered owner.
  • Когда владелец должен вручную вызывать важную функцию в определенное время (например, функцию для изменения курса ETH/USD) — это overpowered owner.
  • Когда тот же курс ETH/USD меняется в смарт-контракте при помощи бэкэнд сервера — это overpowered owner.
  • Когда курс ETH/USD смарт-контракт получает от оракула — это не overpowered owner.

Почему люди используют overpowered owner в проектах

Согласно нашей внутренней статистике, overpowered owner встречается в 37% Ethereum-проектов. Так почему разработчики продолжают разрабатывать non-trustless системы? Потому что этот дизайн системы решает ряд проблем.

Overpowered owner позволяет защищать интересы клиентов

Смарт-контракты неизменны. Это значит, что когда они выложены в Сеть, код нельзя поменять. Таким образом, одна незамеченная уязвимость может сломать всю систему.

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

Overpowered owner позволяет заботиться о системе

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

Представьте ситуацию, в которой владелец контракта токена может выпускать и сжигать токены. Эти функции можно использовать для управления экономикой ровно так же, как это делают в реальном мире с реальными валютами.

Дизайн архитектуры

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

UX

Overpowered owner — это довольно простой паттерн системы, который нетрудно объяснить пользователям. В современном мире UX (user experience) очень важен. И если overpowered owner улучшает UX, то почему бы его и не использовать.

Почему overpowered owner это плохо

Несмотря на все вышеупомянутые преимущества, overpowered owner сопряжен с рисками, которые нельзя недооценивать. Как сказал один великий человек, с большой силой приходит большая ответственность. Потому что эту силу можно использовать во вред.

Нужно доверять владельцу контракта

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

Сохранность приватных ключей

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

Отличным примером подобной проблемы может послужить проект KickICO. Хакеры получили доступ к приватным ключам владельца и таким образом украли токенов на 7,7 млн долларов.

Bus factor

Bus factor — это минимальное число человек в компании, которое должно внезапно исчезнуть, чтобы сам проект умер. Так зачем это нам?

Парадигма overpowered owner предполагает небольшое число людей, управляющих критически важным функционалом. А это значит, что bus factor подобных проектов относительно низок. И ладно, если в случае исчезновения владельца контракта пропадает возможность уменьшать потери от хакерских атак. Гораздо хуже, когда владелец был жизненно необходим для существования самого проекта.

При создании проекта с overpowered owner нужно помнить, что никто не застрахован от поломки жесткого диска и смерти.

Что делать с overpowered owner

По моему мнению, overpowered owner в проектах быть не должно. Разумеется, спроектировать систему без него непросто, требуется более сложная архитектура. Но это все еще выполнимая задача. Чтобы ее облегчить хотя бы немного, я бы рекомендовал посмотреть на устройство аналогичных проектов.

Если по каким-то причинам совсем избавиться от overpowered owner невозможно (сложная архитектура, недостаток времени и т. д.), я бы рекомендовал разделять ответственность. Принцип разделения ответственности (segregation of duties) — это концепция, в рамках которой необходимо наличие более одного человека для выполнения определенной задачи. Это означает, что требуется более одного человека для внесения критических или злонамеренных изменений в смарт-контракт. Этого можно достичь разными способами, например, при помощи multisig — системы с несколькими подписями.

В крайнем случае — нет ничего плохого в том, чтобы ничего не делать. Хотя блокчейн изначально задумывался как trustless система, это не означает, что каждый проект на Ethereum должен быть trustless, так как у него есть и другие преимущества.

TLDR

Overpowered owner — это определенный дизайн системы со своими преимуществами и недостатками. Несмотря на его преимущества, я бы рекомендовал его не использовать. Если это невозможно, то советую придерживаться парадигмы разделения ответственности. В конце концов, даже в современном мире существуют такие вещи, как акции, совет директоров и т. д.

И да, если вы дадите мне на аудит проект с overpowered owner, я отмечу это как проблему.

Подписывайтесь на наш канал в Яндекс.Дзен. Много эксклюзивных историй, полезных материалов и красивых фото.

Читайте также:
Пожалуйста, опишите ошибку
Закрыть