Архиектура DAO
Основные компоненты DAO

Описание

DAO немного перегруженный термин, описывающий любую группу, которая управляется прозрачным набором правил, как правило, в рамках блокчейна или смарт-контракта.
Я говорю "перегружен", потому что:
  • Некоторые люди могут сказать, что поскольку майнеры Биткойна могут решить не обновлять свое программное обеспечение, это является формой "голосования" за патч, который им нравится.
  • Некоторые люди считают, что DAO должны использовать смарт-контракты из-за их прозрачных децентрализованных правил.
  • Некоторые люди просто приклеивают название DAO к своему проекту, потому что считают это трендом.
Его также не следует путать с "The DAO", который был реализован в 2016 году и установил рекорд по самому крупному взлому на тот момент.
Представьте себе, если бы все пользователи Google имели право голоса при определении дальнейших действий Google, а все правила были бы неизменными, децентрализованными и прозрачными для всех. Это решит извечную проблему доверия и централизованности.
Таким образом, DAO действительно вращаются вокруг идеи "децентрализованного управления", и вкратце их можно описать как "Компания, управляемая исключительно через код".
Чтобы действительно понять это, мы рассмотрим:
  1. 1.
    Протокол Compound, который создает прецедент для всех DAO.
  2. 2.
    Компромиссы различных архитектур децентрализованного управления.
  3. 3.
    Инструменты, которые используются для создания DAO

Подготовка DAO

Compound следует "обычному" процессу управления. Вы можете создать упрощенную версию solidity с помощью мастера контрактов Openzeppelin, выбрав вкладку "Governor".
Он следует следующим шагам:

Создать предложение (Created)

Предложение создается пользователем. Любой может создать транзакцию предложения, вот пример транзакции предложения.
Транзакция Предложения - это просто функция контракта, которая принимает следующие параметры:
  • targets: Адреса, по которым вы хотите вызвать функцию
  • values: Количество ETH (или токенов Уровня 1), которое вы хотите отправить каждой соответствующей цели
  • signatures: cигнатуры функций, которые вы хотите вызвать на каждой соответствующей цели
  • calldatas: байтовое представление параметров, которые вы хотите передать каждой соответствующей функции.
  • description: описание того, что и почему вы делаете эту транзакцию
Такая настройка означает, что ЛЮБОЙ контракт, находящийся под управлением, имеет возможность вызывать ЛЮБУЮ функцию. В большинстве случаев самый простой способ настроить управление заключается в том, чтобы владельцем контракта был управляющий контракт (или, более точно, Timelock).

Активный период (Active)

Как только предложение становится активным, люди могут начать голосовать, большинство голосований по-прежнему проводится с помощью токена ERC-20, для чего и используется токен COMP. Обычно период голосования устанавливается внутри самого смарт-контракта. Самые простые голосования имеют опции "Да", "Нет" или "Воздержаться", и вы можете голосовать непосредственно в контракте или использовать их приложение для голосования.

Передача голоса (Succeeded)

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

Поставлено в очередь и выполнено (Queue & Execute)

После того, как голосование прошло, любой может вызвать функцию "queue", передав Id предложения в качестве входных параметров. Пример транзакции можно посмотреть здесь.
Затем любой может вызвать функцию execute, также передав Id предложения. Если голосование не прошло, очередь и выполнение не пройдут.
И это весь процесс!

Архитектура DAO

Итак, теперь, когда мы знаем, как выглядит DAO, давайте поговорим об архитектуре и инструментах, которые используются для создания DAO с помощью смарт-контрактов, а также о компромиссах, которые они имеют.
При создании DAO необходимо выбрать несколько архитектурных решений, среди которых наиболее важными являются:
  • Место голосования
  • Способы голосования
  • Конкретная структура управления

Место голосования

Где пользователи должны голосовать? Я думаю, что есть 2 основных места, где люди могут голосовать: внутри цепочки или вне цепочки. И вам 100% нужно будет знать, чем это чревато.
Внутрицепочечное управление имеет то преимущество, что его проще всего установить в безопасной децентрализованной форме, но за счет вашего сообщества. Если каждый голос стоит 10 долларов, а в вашем сообществе 10 000 человек, то вы как сообщество будете терять 100 000 долларов каждый раз, когда захотите проголосовать за что-то! Очевидно, что это не очень устойчиво. Это то, что используется в Compound, и может быть на 100% настроено и развернуто в смарт-контракте.
Одна из систем на цепочке, от которой я в восторге, называется Governor C: она улучшает устойчивость к сибилянту и расходы на газ, проводя голосование по квадратичной случайной выборке, аналогично квадратичному финансированию.
Внецепочечное управление имеет преимущество в экономии средств, но на данный момент нет (или я не видел) решения, которое было бы столь же безопасным, как и внутрицепочечное управление. Такое решение предполагает, что пользователи будут подписывать свои транзакции без их отправки, передавать их в децентрализованную базу данных (например, IPFS), а затем децентрализованный оракул будет передавать результаты голосования смарт-контракту. Лучше всего это делают такие решения, как Snapshot и Gnosis SafeSnap. Но в идеале мы бы увидели интеграцию Snapshot с сетью оракулов Chainlink для доставки данных. Таким образом, мы сможем использовать децентрализованную и безопасную природу оракловой сети, не оплачивая при этом расходы на газ при транзакциях на цепочке, экономя до 99% расходов на газ! Если вы инженер, вы можете подать заявку на грант Chainlink, если захотите построить это!

Способы голосования

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

1. Голосование на основе токенов.

Простым подходом было бы использование токенов ERC20 или NFT в качестве права голоса, что мы и видим в Compound. 1 токен = 1 голос. Теперь это может быть хорошо для определенных DAO, но в DAO, которые должны быть инклюзивными и справедливыми, вы рискуете получить "покупательную способность". У кого больше денег, тот и выбирает изменения. Это также чревато перераспределением голосов в пользу богатых. Если голосовать будут только богатые, то все изменения будут основаны на мнении самых богатых - и они не будут наказаны за то, что делают то, что выгодно только их группе. NFT немного интереснее, так как они негрибковые по своей природе, но здесь возникают те же проблемы, что и выше, и вы сталкиваетесь с вопросом "а как справедливо распределить NFT?".

2. Голосование, основанное на участии в игре.

Сложный для реализации метод. Этот метод работает так, что если вы голосуете за худший вариант для DAO, то токены, которые вы использовали для голосования за изменение, уничтожаются.
Преимущество этого метода заключается в следующем:
  1. 1.
    Вы несете индивидуальную ответственность за свои голоса. Если вы проголосуете неправильно, вы рискуете потерять деньги.
  2. 2.
    Если кто-то подкупает власти и совершает что-то злое, он получает за это наказание.
Теперь самое сложное: "Как определить, что что-то привело к плохому результату? Насколько плохой результат?".
И ответ на это -.... Я не знаю.

3. Доказательство личности или участия

Этот метод, вероятно, самый справедливый, но и самый труднореализуемый на данный момент. Представьте себе, что все пользователи Compound отдают один голос только потому, что они используют этот протокол. Это было бы потрясающе, и потенциально гораздо более справедливая реализация, когда голоса нельзя купить. Однако здесь возникает проблема, известная как "Атака Сивиллы".
Как мы можем быть уверены, что 1 голос принадлежит только 1 человеку или участнику? Нам нужен способ доказать, что каждый проголосовавший не является кем-то, кто бегает вокруг и создает сотни кошельков только для того, чтобы иметь больше прав голоса.
Этот метод не решен до конца, но это еще один метод, который полагается на оракулы для проверки людей вне цепочки.

Конкретная структура управления

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

Инструменты

Решения без кода

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

Решения с кодом

  • Zodiac: набор инструментов на основе DAO, с помощью которых инженеры могут создавать свои приложения
  • Tally: ещё один пользовательский интерфейс, который помогает смарт-контрактам "видеть", что происходит с голосами.
  • Gnosis Safe: часто большинство DAO начинаются с мультиподписи вместо голосования токенами. Причина в том, что гораздо проще быть "быстрым", когда не нужно ждать, пока проголосуют тысячи людей. Использование мультиподписи и наличие всего нескольких ключевых членов хорошо для стартапов, а иногда и для чрезвычайных ситуаций. Просто помните, что если вы добавляете один из них, вы добавляете уровень централизованности, понятный сообществу.
  • OpenZeppelin: это то, что мы будем использовать в нашем учебнике по кодированию построения DAO.

Юридическая законность

Будущее DAO интересно, особенно с юридической точки зрения. Есть ли смысл в том, чтобы ДАО жили по тем же правилам, что и другие компании? Сложно определить, кого можно привлечь к ответственности за то, что делает DAO, и как вообще закрыть эту компанию.

Полезные источники

  1. 1.
    Code-along | Governance & DAOs https://www.youtube.com/watch?v=rD8AxZ_wBA4
  2. 2.
    Governor C: Sybil-Resistant Quadratic Voting System https://devpost.com/software/governor-c-sybil-resistant-quadratic-voting-system
Copy link
Outline
Описание
Подготовка DAO
Создать предложение (Created)
Активный период (Active)
Передача голоса (Succeeded)
Поставлено в очередь и выполнено (Queue & Execute)
Архитектура DAO
Место голосования
Способы голосования
Конкретная структура управления
Инструменты
Решения без кода
Решения с кодом
Юридическая законность
Полезные источники