COSMOS WIKI
August 24, 2022

Cosmos / governance

Cosmos - это один из немногих блокчейнов, который действительно активно использует управление (governance) для обсуждения и принятия важных решений. Здесь сразу стоит оговориться, что не обязательно предложение (proposal) должно быть напрямую связано с каким-либо техническим изменением блокчейна - это может быть простое текстовое предложение с целью узнать общественное мнение...

Так, предложение может создать (также внести депозит в предложение) любой активный пользователь блокчейна на Cosmos hub, имеющий монеты на кошельке. Конечно, если у него будет хотя бы небольшое количество монет для первоначального депозита предложения

Отправить свой голос (проголосовать и этим увеличить voting power) могут только те, кто связал (stake) свои монеты с валидаторами из активного сета. Создание предложения не гарантирует того, что предложение вступит в фазу голосования, так как должен быть заполнен обязательный депозит. Также есть шанс того, что депозит будет сожжен!!!

Депозиты сжигаются в следующих случаях:

  • не набирается минимальный депозит
  • на предложение наложено вето (veto)
  • не набирается кворум (quorum)

Объяснение вариантов голосования

  • 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 можно посмотреть здесь

Update max validators

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

Update Signed Blocks Window

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

Полезные ссылки:

Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq