The EOS mainnet now has a live referendum system! The eosio.forum contract was recently approved and placed into a system account on the EOS mainnet by the Block Producers. With it comes the ability for token holders to clearly voice their opinion on many different matters that they feel are important to them. This is a huge step forward in on-chain governance in the blockchain space.
As with any new technology, there are many questions. EOS Canada wanted to take some time to run through many of the questions we have been receiving about the eosio.forum contract, to hopefully clear up any confusion that users may have.
How do I vote?
There are many different methods of voting, as more and more EOS user interfaces integrate the referendum functionality. Pretty much any method by which you are currently casting your vote for Block Producers will have already added a “Referendum” tab to allow you to also vote on referendum proposals as well.
Does it cost me anything to vote?
There is no cost to voting, just a temporary stake. That stake will be in the form of RAM and will be roughly 430 bytes per vote. This is a minimal amount, with current prices putting a single vote at less than 0.025 EOS worth of RAM. In any case, your RAM will be freed up after the proposal has expired.
Do I need to stake my tokens to vote?
The weight that is put behind your vote is equal to the amount of staked tokens that you have staked, towards your own account or towards another account. Tokens that have been staked towards your account by someone else do not count for your vote. So you cannot lease CPU from somewhere to increase your vote weight.
If I change my stake, do I need to recast my vote to update its vote weight?
No, the tally tools handle all of this behind the scenes for you. Once you have voted for a proposal, your weight will change if you either unstake or stake more tokens.
Can I leave a comment with my vote?
Yes! We have built in a field to include a comment with your vote should you choose to do so. However, not all UIs have included this functionality. You can take a look at EOS Authority’s site as they have built in both the ability to utilize this feature, as well as the ability to see all comments currently left by others on a proposal. It should be noted that using this feature will require more RAM from your account to store this information. This RAM will also be returned to you once the proposal has expired. The amount of RAM used will depend on the length of your comment.
Can I change my vote?
You can change your vote at any time. You can also remove your vote all together if you no longer wish to vote on a proposal. This action is called unvote.
Do votes for proposals decay, similarly to how votes for Block Producers lose strength over time?
Votes cast for proposals are not subject to the same vote strength calculation as Block Producer votes. A vote of 10 EOS cast one day after the proposal comes out will have the same weight as a vote of 10 EOS cast 2 months later.
Does my vote get diluted if I vote on more than 1 proposal?
No, you can vote for as many proposals as you like, and your stake will be applied to all of them equally.
I am trying to vote on a proposal that I see, and I keep getting an error.
The first thing to check is the expiration date of the proposal. After a proposal has expired, it will still be visible for at least 72 hours. During this time, no votes can be cast on it. If this is not the issue you are having, please report it to the EOS Referendum Working Group channel on Telegram.
When voting, I only see a number in the vote_value field, not the word Yes or No. Why is that?
To conserve RAM, we express all votes as a value between 0 and 255. For example, a vote of No should always be expressed as 0, and Yes as 1. If you are unsure if your vote is registering correctly, you can come to the EOS Referendum Working Group channel in Telegram to ask for some help. Some UIs will show the expected vote value on the voting button to help clarify.
If I have a proxy set, will they be able to vote for me?
If you have a proxy set up to vote on your behalf for Block Producers, that same proxy will be able to vote on your behalf for referendum proposals as well.
What if I don’t agree with my proxy’s vote?
We have included the ability to override your proxy on any proposal if you’d like to. For example, if your proxy votes Yes, and you vote No, then your vote weight will be removed from their Yes vote and applied towards the No votes. It should be noted that if you then decide to unvote, your vote weight will return to whatever vote your proxy has set.
Can I set one proxy for Block Producer voting and another one for Referendum voting?
No, you cannot have separate proxies set. Whatever proxy is set for Block Producer voting will also control your weight for referendum voting. (But see the previous answer regarding your ability to override your proxy’s vote.)
What does it take for a referendum to be considered officially passed?
The constitution laid out the thresholds for referendums, and the relevant article reads as follows:
This Constitution and its subordinate documents shall not be amended except by a vote of the token holders with no less than 15% vote participation among tokens and no fewer than 10% more Yes than No votes, sustained for 30 continuous days within a 120 day period.
This means that a referendum has a period of up to 120 days to meet three thresholds in order to pass:
- A minimum of 15% of all tokens that have been issued must vote on the proposal
- At least 55% of all votes must be cast for Yes (this is what is meant by “and no fewer than 10% more Yes than No votes”)
- Sustain both of the above thresholds for 30 consecutive days
Are these thresholds applicable to all votes?
The eosio.forum contract can be used for anything in which someone would want to poll the community (either as a whole, or just a segment of it). The above thresholds were written for “This Constitution and its subordinate documents”. If a dapp wanted to use this contract to poll their user base, they can define whatever thresholds they would like to see met. If they wanted to automatically track if and when the thresholds were met, they would need to build out some more tooling, but they will be able to track the results and manually check their own thresholds against them for the time being.
What if one of the thresholds that has already been reached dips below the required level?
As an example, if the 15% vote participation rate is met and then at day 20 someone unstakes a large portion of their holding bringing the proposal below 15% participation, then those first 20 days are no longer counted. The vote participation must then again rise above that threshold for 30 more days before being considered passed.
When a vote has passed all required thresholds, is it automatically put on chain, or do Block Producers still need to sign off?
For safety of the chain, we have not implemented the capability for the eosio.forum contract sign anything into existence. This would be an attack vector that a bad actor could go after. Due to the requirement for Block Producer signoff, an attacker would need to take control of 15 separate entities (of the top 21 Block Producers at any given moment). We did not feel that it would be wise to give up this layer of security.
What if Block Producers don’t listen to the results of a referendum?
Based on the current number of tokens in circulation, it takes at minimum 85 million Yes votes on a referendum for it to pass. If Block Producers do not listen to the results of a referendum, then those 85 million tokens would easily be able to remove any non-cooperating Block Producers and put in place other Block Producers who would respect the results. This is how DPoS functions at its core.
Can anyone propose a referendum?
Every account on EOS has the ability to create any kind of proposal. There is no barrier to entry.
How do I ensure that my proposal has the best chance of being seen?
It will be up to you to market your proposal. You will have to make your proposal known to as many voters as you can, to try and get it widely seen and talked about. There was a guide written by some members of the community with guidelines and proposed best practices to be considered when drafting a proposal. Nothing is mandatory, and these guidelines should be seen as suggestions to ensure that your proposal has the best chance of being adopted.
Does my proposal need to have code written beforehand?
The thing to consider is “If this proposal passes, how will it be implemented? And by whom?” If there is no answer to these questions, then it may be too early to propose that referendum. It should not be seen as the obligation of the Block Producers to have to write and test the code needed for a proposal that has already passed. This step should be ideally be done before proposal, so as to ensure that it is well known and clear what functions are possible and implementable, and which are not. Otherwise some users may vote thinking that something will be possible, when in truth it is not.
Can a proposal be edited?
Once submitted, no part of a proposal can be changed. If you would like to edit a part of a proposal, you will need to expire the current one and re-propose.
Types of Proposals
What does the “type” mean?
The eosio.forum contract can be used for many different things. One way to help differentiate between proposals is to use a “type” to help classify them. To help define the different types, we at EOS Canada wrote a technical paper outlining the different definitions, as well as instructions for how UIs should handle the information. We encourage others to define additional types by creating a Pull Request on the EOS Enhancement Proposal linked above.
A simple breakdown is:
- referendum-v1: the only type that Block Producers should be looking to for actionable information from the user base of the blockchain. The proposal should be well defined, with clear steps to be followed if the proposal should pass. Is subject to the thresholds as defined in the constitution.
- poll-yn-v1: this should be used for creating any kind of poll that only has Yes and No as the available responses. Should be used for polling sentiment and should not be used to try and have a change enacted on the chain.
- poll-yna-v1: same as poll-yn-v1 but with the addition of the ability for a user to show on-chain that they would like to abstain from the vote. This would be used to show support for a proposal by adding to the voter participation rate, while not casting a vote either for or against the proposal. This would be similar to saying “This is important, but I give my vote to whatever the majority decides.”
- options-v1: this type will allow the proposer to ask a question and provide up to 256 total options among which a user could select.
- multi-select-v1: this type will allow the proposer to provide up to 8 possible responses, and the user will be able to select as many of the responses as they would like. One example of when this could be useful would be to have the community indicate which of the many different versions of the Constitution should, if any, be put to a referendum vote.
What if there are multiple referendums on a single topic?
Each proposal should be seen as its own entity. For example, if one referendum about REX garnered 100 million votes, and another referendum on the same subject also garnered 100 million votes, we would not count them together to say that 200 million votes have been cast for the REX referendum and that thus it has met the vote participation threshold.
What happens if two proposals about the same topic both pass? Which one do Block Producers implement?
This case is still undefined and needs to be discussed and decided amongst the community. We feel that there is little to no risk of this happening, as the threshold for passing is very high, so there is very little chance of seeing multiple proposals on the same topic pass around the same time.
How long will it take to see the effect of my vote?
Your vote will be pushed on-chain immediately, and you will be able to see that right away by going to any block explorer. The voting UIs will update periodically as they pull their data from the chain every so often. Depending on which API a particular UI is connected to, changes will be seen either every minute, or with delays up to about 8.5 minutes.
What should I do if I notice my vote was not properly counted? Who should I report a bug to?
The best place to bring forward any reports of bugs or improper vote counting would be to the EOS Referendum Working Group. It’s also a great place to come if you have any questions or feature requests.
The proposal that I voted on has expired, why hasn’t my RAM been returned yet?
There is a 72 hour period that begins as soon as a proposal has expired before the associated RAM can be returned. After those 72 hours, the proposal can be cleaned out by any user by calling the ‘cleanproposal’ action. There has been talk of some people writing scripts to automate this process.
If you have any other questions that you'd like answered and added to this document, please let us know by reaching out to us on the EOS Canada Telegram channel. Make sure to get out there and vote. Your voice is important, let us hear it!