It cannot be stressed enough how important your vote is on the EOS blockchain. But an often misunderstood part of voting is the relative decay in strength of a vote over time. To help prevent Block Producer votes from getting out-of-date and stale, a user’s vote will lose its relative strength over time.
Why Do Votes Decay?
On the previous project from Dan Larimer (Steem) there are many votes that were cast in the past, but that are no longer relevant. This is abundantly clear when a Steem Witness (their name for a Block Producer) is no longer active, but it is still receiving votes.
According to Steemian.info, at the time of writing of this article, to determine who the top 100 Witnesses are, you have to go through the top 117 voted Witnesses. This is due to 17 having declared themselves no longer active or not participating within the latest hard fork, yet still receiving enough votes to be considered a top Witness.
To combat this, Block.one introduced the idea of vote decay when they released Dawn 4.0 at the beginning of May 2018: “In order to maintain maximum voting influence each voter will have to re-assert their vote every week. Voting influence decays with a half-life of 1 year for those who do not keep their votes up to date.”
What is the Math Behind Vote Decay?
When you dig into the code controlling how the vote decay is calculated, you’ll notice that votes don’t actually decay. Rather, it’s that all new votes have a stronger vote strength than old votes, which is a clever and efficient way of obtaining the same effect. Let’s go through the formula together to understand. (For those unaware, the word ‘double’ in the math is part of the coding language, and is not meant for doubling of anything)
It should be noted that for `block_timestamp_epoch`, the EOS.IO software uses seconds since January 1, 2000, and that the standard Unix timestamp counts seconds since 1970. If we translate this formula into pseudo-English, it would look more like this:
Then the value of `weight` is used in:
By taking the integer part in the first equation, it is effectively saying that your vote strength can be increased weekly, but not more often. If a user wanted to keep their vote at peak strength, they would want to vote each week at 00:00:01 UTC on Saturday. A user's vote strength will also be considered full if they perform a delegation or undelegation action (stake or unstake).
Every week, by revoting, a user increases the relative strength of their vote by approximately 1.34%. While this is not a massive amount, spread out over thousands of accounts, this amount can have an effect on which Block Producers make it into the Top 21, as well as the Vote-based payout that each paid Producer receives.
Walking Through a Calculation of Vote Weight
To help understand the math, we’ll walk through a calculation together. We’ll paste in screenshots to help you follow along.
The first step is to grab the information on the account from the blockchain. To do this, We used `eosc` and entered the command `eosc get account [ACCOUNT NAME] --json` which returned this at the end of the JSON (the “owner” and “proxy” accounts have been removed from this photo):
This account is showing no Block Producers listed next to “producers” as it is using a proxy for its vote. We can see it’s staked amount of 4176500 (which is equivalent to 417.6500 EOS, as the system disregards the decimal, and there are 4 decimal places in an EOSIO blockchain). We can also see the target for our calculation next to “last_vote_weight”.
We then went to eosq to find the time of the last voting action, where this account re-cast its vote for its chosen proxy.
From there, we can plug that time into a unix time converter making sure to translate the time into the UTC timezone.
While at the unix time converter, you can grab the time for January 1, 2000, at 00:00:00 UTC as that is what the blockchain uses for the “block_timestamp_epoch”. This number, for reference is 946684800. You will now have all of the data needed to perform the calculation.
What About if I Proxy My Vote on EOS?
If a user has chosen to proxy their vote, they will still need to recast their proxy vote if they want to maintain the strongest vote strength that they can. This will also help to ensure that a user confirms that the proxy that they have chosen is still active and is still maintaining their voting standards as they claimed they would.
If the account that you have chosen to proxy to does not recast their vote, this will not affect your vote strength. Only their own staked amount will not be increased to the current maximum.
How Does This Affect the Results?
If you’d like to see how vote decay is currently affecting the vote results of EOS Block Producers, you can go through EOS Authority’s Voting Decay Analysis which tracks the decay of vote strength on the network.
If you want to view your current loss of voting strength, you can look up your account on eosq. By going to the “Votes” tab, you can find the current relative strength of your vote. It’s a quick and simple way to easily view the amount of strength your vote stands to gain by simply revoting.
How Do I Cast My Vote?
While there are many voting tools available to you, EOS Canada recommends our multi-functional tool `eosc`. Once you’ve got it set up for your account, you can enter the command `eosc vote producers [YOUR ACCOUNT NAME] [LIST OF PRODUCERS]` and it’s as simple as that.
Hopefully, this will give you the information you need to keep your vote strength up to the strongest amount possible, while also showing you why this is a useful feature to have on the EOS mainnet. Your vote is important; make sure that it retains the strength it deserves.