Предлагаемая структура комитета в VIZ
Часть инфляции в VIZ будет направлена в фонд комитета. Комитет — место, где каждый владелец SHARES сможет голосовать за заявки воркеров. Заявки могут быть как предварительные на планируемую работу, так и постфактум, своего рода компенсация за полезную работу.
Заявка должна содержать:
- URL с информацией о заявке (это может быть ссылка на один из публичных клиентов или, как это делают часть воркеров BitShares, на GitHub);
- Дата создания заявки;
- Login пользователя, который в случае удовлетворения заявки будет получать средства из фонда комитета (может быть использован multi-sig адрес, который проследит за выполнением обязательств по заявке);
- Минимальный порог (по-умолчанию равен 0) удовлетворения заявки (необходимо в случае планируемой разработки, где нет смысла начинать работу, если не наберется минимальный порог);
- Целевая сумма заявки (не может превышать текущий фонд комитета), максимальная оценка заявителем проделанной или планируемой работы;
- Длительность заявки (минимальная длительность 7 дней, максимальная 30 дней);
- Сумма заявки одобренная комитетом;
- Выплаченная сумма по заявке;
- Дата завершения заявки (или отмены);
- Заявитель (заполняется автоматически при создании заявки);
- Голоса держателей SHARES: login, date, weight;
- Статус заявки:
- Голосование (действует либо до отмены заявителем, либо при окончании длительности заявки);
- Отменена заявителем;
- Отменена комитетом (заявка не набрала минимальный порог);
- Удовлетворена комитетом, идут выплаты (заявка набрала минимальный порог, инициализация выплат);
- Завершены выплаты (переключается на данный статус, когда выплаченная сумма по заявке равна одобренной комитетом);
Внутри объекта dynamic_global_property_object уже есть committee_supply, куда направляется часть инфляции.
Требуется разработать базовые операции:
- Создание заявки для комитета (передача url заявки, login получателя, min amount, target amount, длительность заявки в днях);
- Отмена заявки по id (проверка на заявителя);
- Голосование в комитете по id заявке ();
Виртуальные операции (служат для публичного аудита за работой комитета):
- Отмена заявки комитетом по id;
- Заявка удовлетворена комитетом по id;
- Совершение выплаты комитетом по заявке (с указанием id заявки и login получателя);
- Завершены выплаты по id заявки;
Голосование в комитете по заявке должно содержать аккаунт голосующего, id заявки, время голоса, вес (от 0 до 100%).
Обработку фонда комитета надо встроить как вызываемый метод в _apply_block, где будет проверка всех активных заявок на истечение срока их действия с сменой статуса. Расчет сумма заявки одобренной комитетом: сумма (shares голосующего * weight) делить на сумму shares всех голосующих * целевая сумма заявки / 100%.
Также там будет происходить выплаты по новым заявкам по формуле:
min(request.approved_payout - request.payout, committee_supply/committee_approved_requests), где committee_approved_requests число подтвержденных заявок ожидающих выплаты. Далее переключение статуса у заявок с завершенной выплатой.
Это что касается разработки протокола (операций) и их обработки в блоках. Также необходимо разработать плагин comittee, который будет содержать методы:
- Получить запросы в комитете (get_requests_list) — по статусу (если 0, то статус не важен), лимиту выборки по индексу + отступ;
- Получить данные о запросе по id (get_request_by_id) — возвращает все данные запроса плюс предполагаемую сумму к выплате на данный момент, если заявка в статусе включенного голосования;
Оставляйте комментарии.