So you're new to Steem and you've heard people talking about "curation" this and "rewards" that - but what's all this about the mysterious Voting Power? Apparently you lose it if you vote too much, but then you get it back, and you can look it up on Steemstats and Steemd.com, but how does it actually work?
The Basics
Think of your voting power as a big tank of water. Every time you vote, a valve at the bottom of the tank pops open and squirts out some power. The fuller the tank, the more power squirts out the valve. The amount of power that squirts out the valve is one of the things that determines how powerful your vote is. (The other is your Steem Power, which you can look up in your wallet and is a completely separate thing.)
If you vote and vote and vote without stopping, it's like leaving the valve open, and it won't take long before your tank is empty.
Fortunately for you, there is a steady drip of power coming back into your tank! This drip refills your tank at the same rate, always, no matter what.
What happens to the drip if your tank is full? The drip gets wasted! Think of it like the tank just overflows if it's full; all that voting power just dripping down the sides going to no purpose.
The Summary
How voting power works:
- Your account has a number between 0 and 100 called "voting power."
- When you vote for a post, slightly more than a 200th of that voting power gets "spent" on your vote.
- Your voting power regenerates over time at a fixed rate of about 1 point every 100 minutes (to be precise, it would grow from 0 to 100 in exactly one week).
How to vote optimally:
- In general, you should never vote less than about 27 times per day. If you do vote less, you're letting your voting power go to waste (because your "tank" is full some of that time, and the "drip" is spilling over the brim).
- Surprising news: if you want to maximize your total influence, it doesn't matter how much you vote, as long as you vote more than about 27 times per day. Your total influence is the same whether you vote 1000 times per day or 27. This is because of the constant drip of voting power filling your tank.
- However, The more you vote, the less each of your votes is worth. So you could vote 1000 times per day, but each of those votes wouldn't be worth very much. Your total influence would be optimal, but your influence per vote would be very low.
The Details
(with formulas, code references, and general jolliness!)
Down to brass tacks. Here is the complete formula for voting power (if you don't want to parse this formula yourself, I'll walk you through it in a minute):
where my variables are (times are given in seconds, powers are numbers between 0 and 100)
- T is the time since your last vote
- Tw is the number of seconds in a week (604800)
- p is your voting power right after you last clicked "vote"
- p+ is your voting power the moment after you click "vote" this time
- w is the weight of your vote, between 0 and 1 (for users with more than 100 Million Vests, or about 30,000 SP)
If you're just a regular Joe like me (with less than 30,000 SP) and you don't get to set your vote weight, the formula simplifies to this because w=1:
Let me walk you through this.
- 100T/Tw is the amount of power that has regenerated since your last vote. Note that this is constant, and doesn't depend on p.
- (p+100T/Tw) is thus the amount of power you have right before you vote.
- (199/200) comes from the fact that a 200th of your power gets used each time you vote; thus, right after you vote, you have 199/200 of your original power left.
- The last term, 1/100, serves no useful purpose that I can find. It makes it so that every time you vote, just a little bit more than a 200th of your voting power gets used, which makes things go from simple and intuitive to complex and weird. For no reason. Bug your favorite dev to get rid of the 1/100. In fact, I may just go put in a pull request myself to get this fixed.
So how much is each vote worth? The formula for how much power gets applied to each vote is this:
If we didn't have that silly 1/100, the answer would be "exactly a 200th of your voting power gets applied to each vote."
The Code
Here is a list of code references for each of the components of this:
- steem_evaluator.cpp #876 regenerated power, (T/Tw)
- steem_evaluator.cpp #877 available power, (p+T/Tw)
- steem_evaluator.cpp #881 multiplied by weight
- steem_evaluator.cpp #882 used power, the 200th, and the 1/100
- steem_evaluator.cpp #919 voting power update
The Story
A month ago I posted this question about voting power, and got exactly 0 replies. So since I really wanted to know, and nobody would tell me, I ran on over to github, grabbed the Steem source code, and over the course of a pair of international flights for my trip to the Netherlands, I figured it out. I freaking figured it out. (You should be pretty impressed with me, because I don't actually speak C++. So I was wading through mostly-uncommented code in a language I don't even know...)
About Me
I'm Philip N. Brown, a PhD student in electrical engineering at UCSB. I'm the author of the popular Game Theory of Steem series, and currently I'm Editor-In-Chief of the Lost Content Digest. Follow me if you enjoy my work!
[Edit note: My original formulas had an error that I have since corrected. The 100T/Tw used to be T/Tw; the problem was a units mismatch. I have p in units of percentage points, but T/Tw is a fraction between 0 and 1. To make sure we're adding like units, I needed to multiply the T/Tw by 100.]