Cosmos / governance
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
Cosmos - это один из немногих блокчейнов, который действительно активно использует управление (governance) для обсуждения и принятия важных решений. Здесь сразу стоит оговориться, что не обязательно предложение (proposal) должно быть напрямую связано с каким-либо техническим изменением блокчейна - это может быть простое текстовое предложение с целью узнать общественное мнение...
Так, предложение может создать (также внести депозит в предложение) любой активный пользователь блокчейна на Cosmos hub, имеющий монеты на кошельке. Конечно, если у него будет хотя бы небольшое количество монет для первоначального депозита предложения
Отправить свой голос (проголосовать и этим увеличить voting power) могут только те, кто связал (stake) свои монеты с валидаторами из активного сета. Создание предложения не гарантирует того, что предложение вступит в фазу голосования, так как должен быть заполнен обязательный депозит. Также есть шанс того, что депозит будет сожжен!!!
Депозиты сжигаются в следующих случаях:
Объяснение вариантов голосования
- Abstain: указывает на то, что голосующий не намерен голосовать за или против предложения, но принимает результат голосования
- Yes: указывает на то, что голосующий согласен с предложением в его текущем виде
- No: указывает на то, что голосующий не согласен с предложением в его текущем виде
- NoWithVeto: указывает более сильное неприятие предложения, чем простое No. Если количество голосов NoWithVeto превышает треть от общего числа голосов, то предложение отклоняется, а депозиты сжигаются
На первый взгляд звучит сложно, но давайте попробуем разобраться
Параметры
Для того, чтобы создать предложение первоначально мы должны узнать определенные параметры gov, так как эти данные могут различаться у разных проектов и конечно их можно менять также через предложения
Мы возьмем за пример блокчейн L1. И теперь, когда у нас есть отправная точка мы можем как минимум 2 способами узнать необходимые нам данные:
Первый способ это открыть любой explorer и посмотреть Governance Parametrs
Второй способ через CLI ввести команду genesisd q gov params
genesisd q gov params deposit_params: max_deposit_period: "1209600000000000" # наносекунды min_deposit: - amount: "10000000000000000000000" # 10 000 el1 (не пугаемся 18 нулей - на EVM так вседа) denom: el1 tally_params: quorum: "0.334000000000000000" # минимальное значение проголосовавших threshold: "0.500000000000000000" # минимальное значение voting power для принятия предложения veto_threshold: "0.334000000000000000" # минимальное значение voting power для veto voting_params: voting_period: "777600000000000" # наносекунды
deposit_params / tally_params / voting_params - мы видим следующие подразделы - давайте подробнее пройдемся по каждому из них
deposit_params
max_deposit_period - максимальное время, в течение которого предложение может принимать депозитные взносы до истечения срока действия
Мы видим, что в данной сети этот параметр составляет 1209600000000000 наносекунд, что равняется 14 суткам. Соотвественно, в течение этого времени необходимо набрать нужную сумму депозита, чтобы предложение вступило в фазу периода голосования (voting_period)
Если, в течение этого времени, не наберется нужная сумма депозита, то любые суммы депозита будут сожжены!
Уменьшение данного значения сократит время , в течение которого некоторые предложения будут видны и увеличит шанс того, что некоторые предложения не успеют набрать нужную сумму и их депозиты будут сожжены
min_deposit - минимальный депозит, необходимый для того, чтобы предложение перешло в фазу периода голосования (voting_period)
Мы видим, что в данной сети этот параметр составляет 10000000000000000000000 el1, что равняется 10 000 монет. Внести депозит может как сам создатель предложения, так и любой другой участник. Вклады принятых и отклоненных предложений возвращаются авторам
Если на предложение наложится вето или не наберется минимальный депозит, то любые суммы депозита будут сожжены!
Уменьшение данного значения позволит создавать большее количество предложений с меньшим количеством монет, подверженных риску сжигания. Но также уменьшение может увеличить количество предложений и привести к спаму
tally_params
quorum - минимальная доля голосов сети (voting power), необходимая для того, чтобы результат предложения по управлению считался действительным
Мы видим, что в данной сети этот параметр составляет 0.334000000000000000, что равняется чуть больше 33,4% голосов. Кворум необходим для того, чтобы результаты голосования по предложению были признаны действительными, а вкладчики депозитов могли вернуть свои депозитные суммы. Voting power, будь то голосование 'yes', 'abstain', 'no', или 'no-with-veto', учитывается при определении кворума.
Если голосование не достигает кворума, т.е. 33,4% voting power не будет участвовать, то любые суммы депозита будут сожжены и результат предложения будет считаться не действительным!
Уменьшение даного значения позволит меньшей части сети узаконить результат предложения. Это также увеличивает риск того, что решение будет принято с учетом меньшей доли позиций стейкеров, при одновременном снижении риска того, что предложение будет признано недействительным. И, вероятно это снизит риск сжигания депозитов
threshold - минимальная доля voting power, необходимая для принятия предложения
Мы видим, что в данной сети этот параметр составляет 0.500000000000000000, что равняется 50% voting power. Т.е. для принятия предложения необходимо, чтобы минимум 50% от voting power проголосовали 'yes'. Необходимо учитывать, что простого большинства голосов проголосовавших 'yes' может быть недостаточно для принятия предложения из-за:
- не достижении кворума в 33,4%
- голосование 'no-with-veto' составляет 33,4% голосов участников или больше
Если предложение по управлению принимается, суммы депозитов возвращаются вкладчикам. Если текстовое предложение проходит, автоматически ничего не вводится в действие, но существует общественное ожидание, что участники будут координировать действия для принятия обязательств, обозначенных в предложении. Если предложение об изменении параметров будет принято, параметр протокола автоматически изменится сразу после окончания периода голосования. Если предложение о расходах сообщества будет принято, баланс пула сообщества уменьшится на количество атомов, указанных в предложении, а адрес получателя увеличится на то же количество атомов сразу после окончания периода голосования
Уменьшение даного значения позволит увеличит вероятность того, что предложение будет принято и небольшая группа сможет внести изменение в сеть
veto_threshold - минимальная доля voting power для права вето (т. е. сбой)
Мы видим, что в данной сети этот параметр составляет 0.334000000000000000, что равняется 33,4% voting power. Даже если более 50% voting power проголосует за предложение 'yes', то 33,4% voting power проголосовавших 'no-with-veto' смогут отменить это решение. Это позволяет группе меньшинства, представляющей более 1/3 голосов, отклонить предложение, которое в противном случае могло бы пройти
Если будет наложено вето, то любые суммы депозита будут сожжены!
Уменьшение даного значения позволит меньшей группе блокировать спорные предложения
voting_params
voting_period - максимальное время, в течение которого можно голосовать за предложение. Голосующие могут менять свой голос любое количество раз до окончания периода голосования. Voting period всегда должно быть короче, чем Unbonding period для предотвращения двойного голосования
Мы видим, что в данной сети этот параметр составляет 777600000000000 наносекунд, что равняется 9 суткам
Если голосование не достигает кворума до этого времени, т.е. 33,4% голосов сети не будет участвовать, то любые суммы депозита будут сожжены и результат предложения будет считаться не действительным!
Уменьшение даного значения позволит сократить время для голосования, что в свою очередь уменьшит вероятность того, что кворум будет достигнут
Наследование
Если делегатор не проголосует, то он унаследует голос своего валидатора
- Если делегатор проголосует раньше своего валидатора, он не будет наследовать голоса валидатора
- Если делегатор проголосует после своего валидатора, он переопределит голос валидатора своим собственным
# список proposals genesisd q gov proposals # посмотреть результат голосования genesisd q gov proposals --voter <ADDRESS> # проголосовать за предложение genesisd tx gov vote 1 yes --from <name_wallet> --fees 555el1 # создать простое текстовое предложение genesisd tx gov submit-proposal --title="Randomly reward" --description="Reward 10 testnet participants who completed more than 3 tasks" --type="Text" --deposit="11000000el1" --from=<name_wallet> --fees 500el1 # внести депозит в предложение genesisd tx gov deposit <_proposals> 1000000el1 --from <name_wallet> --fees 555el1 # создать предложение с исполнением # первый этап создаем файл.json с нужным содержанием, к примеру nano /root/.genesisd/genesis-validator-gift-proposal.json { "title": "<Genesis Gift all validators>", "description": "<Peace to the whole world>", "recipient": "<genesis1a...>", "amount": "<50000000000000000000el1>", "deposit": "<1000000000000000000el1>" } # второй этап отправляем транзакцию genesisd tx gov submit-proposal community-pool-spend /root/.genesisd/genesis-validator-gift-proposal.json --from=<name_wallet> --fees 555el1
ПРИМЕРЫ
!!!Основные subspace и key можно посмотреть здесь
nano /root/.nibid/param-change.json
{ "title": "Staking Param Change", "description": "🪓Update max validators 105🪓", "changes": [ { "subspace": "staking", "key": "MaxValidators", "value": 105 } ], "deposit": "10000000unibi" }
nibid tx gov submit-proposal param-change /root/.nibid/param-change.json --from <name_wallet> --fees 5000unibi
nano /root/.nibid/param-change.json
{ "title": "Changing the Signed Blocks Window", "description": "This proposal changes the signed blocks window to 10000", "changes": [ { "subspace": "slashing", "key": "SignedBlocksWindow", "value": "10000" } ], "deposit": "10000000unibi" }
nibid tx gov submit-proposal param-change /root/.nibid/param-change.json --from <name_wallet> --fees 5000unibi