MultiSigProposal

Разделы

Описание проблемы

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

Цели контракта

  • Учет голосов по каждому из предложений
  • Исполнения предложений с достигнутым кворумом.

Сценарии контракта

Сценарий 1. Принятие и исполнение предложения делегатами.

  1. Один из делегатов предлагает инвестировать средства фонда в привлекательный стартап. Он создает предложение со следующими параметрами, обращаясь к мультисиг-контракту:
    • Тип предложение - перевод ETH
    • Кол-во ETH для перевода - 300 ETH
    • Адрес контракта получателя - 0x123
    • Краткое описание длиной 256 байт - "Перевод в привлекательный стартап"
    • Хеш дополнительной информации по предложению в IPFS - QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
  2. Мультисиг создает новое предложение с вышеописанными данными, регистрирует в своем реестре и возвращает его адрес. Сразу после создания у предложения статус #2 (идет голосование).
  3. Создатель предложения уведомляет все остальных о своем предложении любым способом. Другие делегаты имеют 7 дней на то, чтобы отдать свой голос
  4. Решения делегатов следующие:
    • Делегат 1 - за
    • Делегат 2 - против
    • Делегат 3 - за
    • Делегат 4 - за
    • Делегат 5 - за
  5. Голосование заканчивается, т.к. 4 голоса было отдано за. Делегаты 6 и 7 не могут больше проголосовать. Статус предложения меняется на #3 (период ожидания).
  6. Исполнение решения будет возможно через 7 суток после окончания голосования.
  7. Через 7 суток пользователь не-делегат исполняет транзакцию, которая переводит средства с адреса мультисига на адрес 0x123. Статус предложения меняется на #4(исполнено). Исполнить транзакцию больше нельзя.

Сценарий 2. Отклонение заявки делегатами.

Пункты 1-3 повторяются из сценария #1.

  1. Решения делегатов следующие:
    • Делегат 1 - за
    • Делегат 2 - против
    • Делегат 3 - против
    • Делегат 4 - за
    • Делегат 5 - против
    • Делегат 6 - за
    • Делегат 7 - против
  2. Для голосования требуются голоса всех кандидатов. Предложения сразу получает статус #5(отклонено).

Спецификация

Создание предложения

  • Создать предложение может только текущий кандидат фонда
  • Чтобы создать предложение, необходимо обратиться к соответствующему методу multisig-а.
  • Предложения могут быть следующих видов:
    • Перевод ETH на любой адрес
    • Перевод любого ERC20 токена на любой адрес
    • Исполнение метода другого контракта от лица мультисига + одновременный перевод ETH (payable методы).
  • Параметры для создания предложения:
    • Тип предложение - перевод ETH
    • Кол-во ETH для перевода
    • Адрес контракта получателя
    • Метод для вызова (опцинально)
    • Краткое описание длиной 256 байт
    • Хеш дополнительной информации по предложению в IPFS
  • При создании предложения, голос создавшего его делегата автоматически не учитывается. Делегат должен отдеть свой голос за решение отдельной транзакцией, наравне с другими делегатами.

Статусы предложения

  • 0 - не активно
  • 1 - приостановлено
  • 2 - идет голосование
  • 3 - период ожидания
  • 4 - исполнено
  • 5 - отклонено

Голосование делегатов

  • На голосование у делегатов есть 7 дней. Этот параметр заложен в контракте и изменить его нельзя.

Статусы решения каждого делегата

  • 0 - делегат не проголосовал
  • 1 - против
  • 2 - за
  • Делегат может переголосовать, если предложение еще не было исполнено.

Исполнение решения

  • Решение считается принятым при наличии 4 голосов, отданных явно или за или против, т.к. оставшиеся 3 никак не смогут повлиять на решение.
  • Запись о решении создается сразу же после достижения порога в 4 одинаковых голоса
  • Решение может быть исполнено любым пользоватлем после таймаута в 7 дней. Этот таймаут изменить нельзя.

Ограничения на вывод

  • Существует ограничение на вывод ETH.
    • Мы собираем информацию об остатках ETH на счете мультисига каждую календарную неделю (при наличии транзакций).
    • Объем выведенных ETH за текущую неделю не может превышать 0.5% от остатка на начало недели.
    • Цифра 0.5% жестко прописана в контракте и не может быть изменена.

Пример рассчета ограничения на вывод

Уточняем данные в ETH по выводу средств за последние 4 недели.

  • Рассчет ведется с 15 недели.
  • Недели 11-14 приведены для примера недель, по которым нет информации о минимальном остатке
Неделя Поступление Вывод Остаток Разрашено вывести
11 0 0 48280 48280 * 0.5% = 241.4
12 0 0 48280 48280 * 0.5% = 241.4
13 0 0 48280 48280 * 0.5% = 241.4
14 0 0 48280 48280 * 0.5% = 241.4
15 300 240 48340 48280 * 0.5% = 241.4
16 0 230 48110 48340 * 0.5% = 241.7
17 0 238 47872 48110 * 0.5% = 240.55
18 4500 200 52172 47872 * 0.5% = 239.36
19 6000 150 58022 52172 * 0.5% = 260.86
  • Ограничение на вывод токенов (ERC20, ERC721 и прочих) отсутствуют.

Технические аспекты

TypeScript

  • Учет велечин ETH и GALT ведется в eth (wei * 10^18)
  • Из вариантов действий возможны лишь перевод ETH и перевод GALT
  • Для исполнения решения требуется, чтобы проголосовали все 7 делегатов.
  • Решения исполняются сразу после того, как проголосовали все 7 делегатов.

Solidity

  • Учет велечин ETH и GALT ведется в wei

Проблемы

  • Нужны ли нам гибкие proposal-ы в виде отдельных контрактов с кастомной логикой или ограничимся фиксированным списком без возможности добавления?
  • Будем ли добавлять предложение замены контроллера (логики фонда) но новый. (Или кому давать права избирать новый контроллер???)
  • Будем ли добавлять предложение безвозмездной передачи 721 токена?
  • Какие действия можно совершить за 7 дней, если делегаты пытаются сделать подозрительный вывод средств?
  • Что делать делегатам, если возникает срочная необходимость потратить больше, чем 0.5% фонда в неделю?

results matching ""

    No results matching ""