Голосования по ценам
Несколько цен ZooBC не зафиксированы навсегда: по ним голосуют места реестра узлов. Начиная с версии 0.5.8 одно правило охватывает все голосуемые цены. Раз в период снимков, 30 дней в mainnet, каждая цена переходит к среднему по учтённым местам, где молчащее место засчитывается по действующей цене, а каждый голос предварительно ограничивается пределами — не выше действующей цены более чем на 20 % и не ниже её половины. Всё остальное, от графика эмиссии до балансов, недоступно никакому голосованию.
По каким ценам можно голосовать
| Цена | Начальное значение в mainnet | Пределы |
|---|---|---|
| комиссия за перевод (шкала комиссий) | 1,0, в голосовании записывается как 0,01 ZBC | от одной атомарной единицы до 1 ZBC, то есть до 100 раз выше начальной |
| аренда аккаунта | 0,01 ZBC за период | от одной атомарной единицы до 10 ZBC за период |
| содержание токена | 0,1 ZBC за период | от одной атомарной единицы до 10 ZBC за период |
| цена хранения наборов данных | 0,05 ZBC за МиБ за период | от одной атомарной единицы |
| множитель хранения | 1,0 | собственные пределы |
| стейк шлюза | 10 ZBC | от одной атомарной единицы |
| стоимость создания рынка | 50 ZBC | от одной атомарной единицы |
| комиссия тейкера на рынке | 0,1 % | от 1 до 100 базисных пунктов |
| минимум очереди | 100 ZBC | от одной атомарной единицы до 250 ZBC |
Комиссия за перевод умножает базовую комиссию за действие 0,025 ZBC в минимальной комиссии каждой транзакции (комиссии). Минимум очереди — наименьший стейк, с которым узел может встать в очередь (регистрация узла). Остальные цены описаны вместе с соответствующими возможностями: Аренда аккаунтов и их удаление, содержание токена (продление), наборы данных, шлюзы и рынки и ордера.
Как меняется цена
У каждого зарегистрированного места, которое не приостановлено, один голос; это учтённые места. В течение цикла место может голосовать сколько угодно раз, и засчитывается его последний голос. В конце цикла:
- Каждый голос ограничивается: не более чем на 20 % выше действующей цены, не ниже её половины и всегда в пределах нижней и верхней границ цены.
- Новая цена — среднее по всем учтённым местам, где каждое молчащее место засчитывается по действующей цене.
Если никто не голосует, ничего не меняется. Ни медиана поданных голосов, ни точное согласие двух третей, ни самый высокий голос ничего не решают.
Разобранные примеры
Десять учтённых мест и действующая цена 100:
| Голоса | Каждый голос засчитывается как | Новая цена |
|---|---|---|
| два места голосуют за 120, восемь молчат | 120, 120 и 100 за каждое молчащее место | (2 × 120 + 8 × 100) ÷ 10 = 104 |
| одно место голосует за 10 000, девять молчат | 120 | (120 + 9 × 100) ÷ 10 = 102 |
| одно место голосует за 0, девять молчат | 50 | (50 + 9 × 100) ÷ 10 = 95 |
Без ограничения голос за 10 000 дал бы простое среднее 1 090. Когда ограничение применяется первым, одно место сдвигает цену не более чем на десятую часть полного шага в реестре из десяти мест и на 0,2 % в реестре из 100.
Как быстро могут меняться цены
Даже когда каждое место голосует за полный шаг, цена за цикл растёт не более чем на 20 % и падает не более чем вдвое. Десятикратный рост занимает около 13 циклов, десятикратное снижение — около 4.
Любую цену, выраженную в ZBC, можно снизить голосованием до одной атомарной единицы (0,00000001 ZBC). Если ZBC станет очень ценным, эти цены могут последовать вниз, чтобы содержание аккаунта или набора данных не стало абсурдно дорогим в реальном выражении. От 0,01 ZBC аренды аккаунта до одной единицы — около 20 уменьшений вдвое, то есть не меньше 20 циклов. Бесплатным не становится ничего: каждая вычисленная плата округляется вверх как минимум до одной атомарной единицы.
Как подать голос
Голоса — это служебные транзакции без комиссии, подписанные ключом узла места (ключи узла). По всем ценам, кроме комиссии за перевод, голосуют транзакцией SetConsensusParam (тип 51).
Комиссия за перевод — единственная цена с двухэтапным голосованием:
- в первой половине цикла место отправляет FeeVoteCommitment (тип 7), несущую только 32-байтовый хеш его голоса, так что значение остаётся скрытым;
- во второй половине оно отправляет FeeVoteReveal (тип 263) со значением.
Раскрытие засчитывается, только если его хеш совпадает с обязательством, которое то же место сделало в том же цикле, и используется последний действительный голос места. Затем новая комиссия вычисляется так же, как любая другая цена.
Меры защиты
- Минимальный размер реестра. Ни одно решение всего реестра не принимается, пока в реестре меньше max(3, его генезисный минимум) мест или различных аккаунтов владельцев, то есть 7 в mainnet. Два места одного оператора в этом подсчёте — один голос.
- Раз в цикл. Параметр меняется не чаще одного раза за цикл и всегда остаётся в своих пределах.
- Деньги остаются у мест. Всё, что взимается по этим ценам, достаётся зарегистрированным узлам: аренда — через пул долголетия, комиссии — через лотерею (пулы, лотерея coinbase).
Чего не может изменить никакое голосование
График эмиссии, по которому каждый узел проверяет coinbase каждого блока (предложение и эмиссия); баланс любого аккаунта; правила консенсуса и высоты, на которых они применяются; и генезис. Всё это задаётся генезисом и программой узла, и никакое голосование или ключ это не сдвинет (ZooBC Foundation). У мест есть ещё одно голосование помимо цен: две трети из них могут наложить вето на релиз программы (релизы и обновления).