On-chain Voting Frequently Asked Questions (FAQ)

On-chain Voting Frequently Asked Questions (FAQ)

This document explains how you can vote on individual proposals, such as specific Mina Improvement Proposals (MIPs).

It also explains how the On-Chain Voting dashboard captures and displays the votes.

How do I vote?

A Mina account must send themselves a transaction, including each proposal’s keyword in the memo field, using a Mina wallet.

Each proposal will have specific keywords that will be used to vote.

  • To vote in favor of the proposal:
    • Enter keyword in the Memo field
  • To vote not in favor of (i.e. against) the proposal:
    • Enter no keyword in the Memo field

Example

If the keywords are yellow and no yellow

  • To vote in favor, enter yellow in the Memo field.
  • To vote against, enter no yellow in the Memo field.

Is my vote valid?

The votes in the above example are considered ‘valid’ because

  • they use the correct keywords
  • the keywords are spelled correctly
  • they are not duplicate votes
  • the were cast during the voting period

Please note that the exact spelling of the keywords is critical to ensure your vote is captured.
Please also note that the text is case insensitive.

‘Invalid’ votes are votes that are not valid. For example, if:

  • they do not use the correct keywords
  • the keywords are spelled incorrectly
  • they were not cast during the voting period

Both valid and invalid votes are recorded on-chain and can be viewed using Mina block explorers.

When using CLI with a memo that contains a space, the command line requires quotation marks around the memo. For example:

mina client send-payment \
-sender B62qp3Dsz8TrZ9hCrHYZVViUufwqkwqDhGH8S8jutcmXXXXXXXXXXXX \
-receiver B62qp3Dsz8TrZ9hCrHYZVViUufwqkwqDhGH8S8jutcmXXXXXXXXXXXX \
-fee 0.01 \
-amount 1 \
-memo “no yellow”

or

mina client send-payment \
-sender B62qp3Dsz8TrZ9hCrHYZVViUufwqkwqDhGH8S8jutcmXXXXXXXXXXXX \
-receiver B62qp3Dsz8TrZ9hCrHYZVViUufwqkwqDhGH8S8jutcmXXXXXXXXXXXX \
-fee 0.01 \
-amount 1 \
-memo yellow

PLEASE NOTE: the quotation mark usage in the CLI memo field is only for memos containing a space.

Who can vote?

Any Mina account can vote in two ways:

  • using its tokens;
    or
  • delegating its tokens to another account that can vote in its stead weighted by the stake delegated to it.

Please note:

  • an account that is not delegating can vote with their token balance.
  • an account that is delegating can vote but it will have zero weight so its vote will not be counted in the results.

Please also note that invalid votes will not display in the dashboard results.

Can I still vote if I have not delegated?

If an account has not delegated to another account, then it can still vote; its stake weight will by default be the account balance.

When can I vote?

The Voting Period for individual proposals will be announced in advance and will clearly show dates, epochs and slot numbers. Votes cast outside of the voting period will not be counted in the results.

Example

  • Voting for MIP1 must be performed between January X, EPOCH Y, SLOT Z and January XX, EPOCH YY, at the end of SLOT ZZ.

The time at which the vote transaction was recorded on-chain will be used to determine whether a vote was cast within the voting period. Please vote early to ensure your vote is included in the results.

Can I change my vote?

Yes. A Mina account can change its vote by sending a new, valid vote transaction during the Voting Period. Only the latest and valid vote will be counted in the results once.

Invalid votes will not be counted. Please note the following example:

  • I send a valid vote (vote#1)
  • I change my mind and vote again (vote#2)
    • however, this second vote is invalid, e.g. due to a typo
  • “vote#1” will be counted in the results because it is the most recent and valid vote.

All valid votes will display in the dashboard. Duplicate or older votes will not be displayed.

How can I change my vote if I have delegated to an account but I disagree with their vote?

If you have delegated to another account and you disagree with their vote, then you can re-delegate by:

  • delegating to an alternative account that is voting according to your preference;

or

  • delegating to yourself by:
    • sending a delegation transaction to yourself
    • and then sending yourself a vote transaction with your preference

For example, imagine an account A, delegates their stake to another account, B, who then votes but A soon realizes that they disagree with B so A decides to delegate their stake to a third account, C, who votes but differently from B.

Result:
Account B vote counts based on their weighted stake at the end of the voting period, which will not include A’s stake.
Account C vote counts based on their weighted stake at the end of the voting period, which includes Account A’s stake

Please note that if you delegate to yourself and are not running a Block Producer node, then you will not receive rewards for one epoch. For example:

Epoch A (voting period) - You delegate away from the Block Producer that you normally delegate to
Epoch B - You receive rewards from Epoch A
- You delegate back to the Block Producer that you normally delegate to
Epoch C - You receive no rewards because during Epoch A you delegated to yourself (rather than to the Block Producer that you normally delegate to)
Epoch D - You receive rewards again because during Epoch B you delegated back (to the Block Producer that you normally delegate to)

Re-delegation during the voting period will be captured in the finalised Staking Ledger that is created at the end of the voting period epoch.

If a re-delegation is in the finalised Staking Ledger, this re-delegation is counted in the stake weight of the account receiving the delegation even though the delegation will not take effect until a later epoch.

Please note that voting and staking are different in this way. The vote will show in the counted results but the re-delegation takes effect in a later epoch.

Is this application open source?

Yes, the public repository is here: https://github.com/Granola-Team/mina-governance

How long will it take my vote to display in the dashboard?

The maximum wait time for a vote to display in the dashboard is 60 minutes from the time the transaction is sent.

If you do not see your vote within 60 minutes, please verify the spelling of the keyword. If the keyword is spelled incorrectly, please resend your transaction with the properly spelled keyword in the memo field.

Please note that invalid transactions are not displayed in the dashboard.

If the transaction was sent correctly and the vote does not display, please complete the feedback form.

Why can’t I see my vote in the dashboard?

Votes will display in the dashboard for transactions that are sent only to your own account. If you send a transaction to another account and try to vote, these votes will not display in the dashboard and not be counted in the results.

The dashboard displays only valid votes (see the ‘Is my vote valid?’ section above to explain the difference between valid and invalid votes).

What does Voting Status mean on the dashboard?

Green indicates that the block containing the voting transaction is in the canonical chain.

Yellow indicates that the block containing the voting transaction is pending and not currently in the canonical chain.

What does Total Votes mean on the dashboard?

Total votes is the sum of all valid votes per unique account recorded on-chain within the Voting Period.

How are the voting results calculated?

Voting results are weighted based on account stake: the more stake an account has, then the more influence their vote has.

If an account is not delegating, then it can vote weighted by its stake which is its account balance. For example, if account A has a balance of 1000 MINA and is not delegating, then its vote has a weight of 1000 MINA stake.

Alternatively, if an account delegates its vote, then this is weighted by its account balance. For example, if account A has a balance of 1000 MINA and then delegates to account B, then B can vote with its stake plus A’s 1000 MINA stake.

However, if A then also votes (having delegated), then this direct vote has 0 weight since A has already delegated away its 1000 MINA stake. This 0 weighted vote will not be counted in the results.

Stake weight is obtained from the next finalized Staking Ledger which is available after block 290 of the next epoch.

Total Stake Amount: Retrieve the stake amount from the finalized Staking Ledger for each account

Total Stake Amount: Retrieve the stake amount from the finalized Staking Ledger for each account
Total Stake %: Account Stake Amount / Sum of all account Stake Amount
Total Yes Vote Amount: Sum Total Stake Amount for valid in favor votes
Total No Vote Amount: Sum Total Stake Amount for valid not in favor votes
Yes % Total Yes Vote Amount / (Total Yes Vote Amount + Total No Vote Amount)
No %: Total No Vote Amount / (Total Yes Vote Amount + Total No Vote Amount)

When will I see the final results?

After the Voting Period, there will be a Results Period when the votes will be tallied and results announced. The outcome of the vote will be decided based on specific criteria, according to each proposal. These criteria will be specified in advance of the vote.

Mina Foundation and its ecosystem partners, including O(1) Labs, are committed to decentralized governance through on-chain voting. Under certain circumstances voting may be cancelled or paused and run again if it is determined that the integrity of the voting process or results is compromised for technical or other reasons.

2 Likes

Thanks for the write up.

Is this going to be de-facto way for all future MIP voting going forward or is it a temporary solution? Depending if it impacts future voting, i think might be better if we change keywords to something similar to signalling bits, which can allow voting for multiple MIP’s in a single transaction and allow easier extraction of past votes.

Hi @hgedia, thanks for the feedback. This is an iterative process so ideas like yours are very valuable.
It may be that some MIPs are suited to other forms of community involvement, with On-Chain Voting as one of the tools MIP authors can make use of.
We’re very excited hear everyone’s thoughts and share what we’re working on. At the moment the Governance squad is quite small so once we’ve gained insights from this iteration we’ll be able to improve it and have a bit more time.
Thanks for the signalling bits info, I’ve added it to the suggestions tracker.

1 Like