TLDR; 10% upvote is only 9x stronger than 1% upvote (in my case)
Linear Rewards Curve
Since the 0.19 hardfork released last year, Steemian's vote impact have changed in favor of minnows. Linear Rewards Curve #1051 changed rewards curve to be n from n^2. In short: before, stakers with 2x more Steem Power than others had 4x stronger vote. In HF19 this changed to be equally linear.
This is how people think it is
Linear reward curve makes people voting strength directly proportional to their stake.
The devil is in the details :>
Steem Voting weight % is linear indeed. Linear enough that anybody who uses voting slider in integers won't even notice it's irregularity.
I have been studying Steem Voting and Curation mechanics for weeks. My conclusion is the most efficient way to luqidate Steem Power with best gains is to spread votes as wide as it is possible. This is my curation game I am playing for some time. I have started voting to small % upvotes, even fractions. I call these a "tip" for author's work.
Imagine my surprise when during backtests I discovered that my 0,2% upvote is equal to 0,5% upvote or 2,1% upvote is equal to 2,5% upvote in rshares. These are numbers for my current holdings (~2,5k SP).
This is chart I have prepared during tests to have a better view:
Chart represent a sample of votes spent in range of 0,2% up to 10% of their power. At the same time, account's Voting Power loss was monitored too.
This was done via steem-python API call
post.upvote(weight = vote_weight, voter = 'mys')
Gathered data:
| vote % | rshares | VP~ % |
|---|---|---|
| 0,2 | 498075654 | -0,01 |
| 0,3 | 498075654 | -0,01 |
| 0,4 | 498075654 | -0,01 |
| 0,5 | 498075654 | -0,01 |
| 0,6 | 996151309 | -0,02 |
| 0,7 | 996151309 | -0,02 |
| 0,8 | 996151309 | -0,02 |
| 0,9 | 996151309 | -0,02 |
| 1 | 996151309 | -0,02 |
| 1,1 | 1494226963 | -0,03 |
| 1,2 | 1494226963 | -0,03 |
| 1,3 | 1494226963 | -0,03 |
| 1,4 | 1494226963 | -0,03 |
| 1,5 | 1494226963 | -0,03 |
| 1,6 | 1992302618 | -0,04 |
| 1,7 | 1992302618 | -0,04 |
| 1,8 | 1992302618 | -0,04 |
| 1,9 | 1992302618 | -0,04 |
| 2 | 1992302618 | -0,04 |
| 2,1 | 2490378272 | -0,05 |
| 2,2 | 2490378272 | -0,05 |
| 2,3 | 2490378272 | -0,05 |
| 2,4 | 2490378272 | -0,05 |
| 2,5 | 2490378272 | -0,05 |
| 2,6 | 2988453927 | -0,06 |
| 2,7 | 2988453927 | -0,06 |
| 2,8 | 2988453927 | -0,06 |
| 2,9 | 2988453927 | -0,06 |
| 3 | 2988453927 | -0,06 |
| 3,1 | 3486529581 | -0,07 |
| 3,2 | 3486529581 | -0,07 |
| 3,3 | 3486529581 | -0,07 |
| 3,4 | 3486529581 | -0,07 |
| 3,5 | 3486529581 | -0,07 |
| 3,6 | 3486529581 | -0,07 |
| 3,7 | 3984605236 | -0,08 |
| 3,8 | 3984605236 | -0,08 |
| 3,9 | 3984605236 | -0,08 |
| 4 | 3984605236 | -0,08 |
| 4,1 | 3984605236 | -0,08 |
| 4,2 | 4482680891 | -0,09 |
| 4,3 | 4482680891 | -0,09 |
| 4,4 | 4482680891 | -0,09 |
| 4,5 | 4482680891 | -0,09 |
| 4,6 | 4482680891 | -0,09 |
| 4,7 | 4980756545 | -0,1 |
| 4,8 | 4980756545 | -0,1 |
| 4,9 | 4980756545 | -0,1 |
| 5 | 4980756545 | -0,1 |
| 5,1 | 4980756545 | -0,1 |
| 5,2 | 4980756545 | -0,1 |
| 5,3 | 5478832200 | -0,11 |
| 5,4 | 5478832200 | -0,11 |
| 5,5 | 5478832200 | -0,11 |
| 5,6 | 5478832200 | -0,11 |
| 5,7 | 5478832200 | -0,11 |
| 5,8 | 5478832200 | -0,11 |
| 5,9 | 5976907854 | -0,12 |
| 6 | 5976907854 | -0,12 |
| 6,1 | 5976907854 | -0,12 |
| 6,2 | 5976907854 | -0,12 |
| 6,3 | 5976907854 | -0,12 |
| 6,4 | 6474983509 | -0,13 |
| 6,5 | 6474983509 | -0,13 |
| 6,6 | 6474983509 | -0,13 |
| 6,7 | 6474983509 | -0,13 |
| 6,8 | 6474983509 | -0,13 |
| 6,9 | 6474983509 | -0,13 |
| 7 | 6973059163 | -0,14 |
| 7,1 | 6973059163 | -0,14 |
| 7,2 | 6973059163 | -0,14 |
| 7,3 | 6973059163 | -0,14 |
| 7,4 | 6973059163 | -0,14 |
| 7,5 | 6973059163 | -0,14 |
| 7,6 | 7471134818 | -0,15 |
| 7,7 | 7471134818 | -0,15 |
| 7,8 | 7471134818 | -0,15 |
| 7,9 | 7471134818 | -0,15 |
| 8 | 7471134818 | -0,15 |
| 8,1 | 7471134818 | -0,15 |
| 8,2 | 7471134818 | -0,15 |
| 8,3 | 7969210473 | -0,16 |
| 8,4 | 7969210473 | -0,16 |
| 8,5 | 7969210473 | -0,16 |
| 8,6 | 7969210473 | -0,16 |
| 8,7 | 7969210473 | -0,16 |
| 8,8 | 7969210473 | -0,16 |
| 8,9 | 8467286127 | -0,17 |
| 9 | 8467286127 | -0,17 |
| 9,1 | 8467286127 | -0,17 |
| 9,2 | 8467286127 | -0,17 |
| 9,3 | 8467286127 | -0,17 |
| 9,4 | 8467286127 | -0,17 |
| 9,5 | 8467286127 | -0,17 |
| 9,6 | 8965361782 | -0,18 |
| 9,7 | 8965361782 | -0,18 |
| 9,8 | 8965361782 | -0,18 |
| 9,9 | 8965361782 | -0,18 |
| 10 | 8965361782 | -0,18 |
Source code:
print('vote% rshares VP~%')
vote_weight = 0.2
for post in s.get_discussions_by_created({'limit': 100}):
voting_power_pre = Account('mys')['voting_power']
try:
Post('@' + post['author'] + '/' + post['permlink']).upvote(weight = vote_weight, voter = 'mys')
time.sleep(3)
except Exception as e:
print(e)
post_after = Post('@' + post['author'] + '/' + post['permlink'])
for vote in post_after['active_votes']:
if 'mys' == vote['voter']:
rshares = vote['rshares']
voting_power_after = Account('mys')['voting_power']
print(str(vote_weight) + ' ' + str(rshares) + ' ' + str(voting_power_after-voting_power_pre))
vote_weight = round(vote_weight + 0.1, 1)
This is not the end. Even 0,02% upvote is rounded up to same size as 0,5% upvote!
0,02% = 498M rshares and 0,5% = 498M rshares
As we see there is some quantization in values for small ranges. Good that Voting Power loss decreases as the same function, so there isn't any abuse flaw here. Just lack of explanation in Steem docs how the numbers are rounded up.
Some explanations
rshares - each vote cast results in Reward Shares. These are voters' stake being thrown into the article's reward pot.
The formula for calculating rshares is as follows:
rshares = (account.vesting_shares - account.delegated_vesting_shares + account.received_vesting_shares) * account.voting_power * vote_weight / 100why didn't I start voting from 0,01%? The minimum rshares that can be thrown into the pot is 50M rshares. This value is defined as STEEMIT_VOTE_DUST_THRESHOLD.
For my holdings, voting for 0,01% returns an error from Steem node: "Voting weight is too small, please accumulate more voting power or steem power"
This is also the reason why small accounts doesn't even have a slider while voting. But hardly anyone knows this can still be done via API call :)
My summary
Most people won't even notice these small inaccuracies. Steemit.com/busy.org voting sliders values in integer range between 1-100%. Voters are not interested if their vote is 49,9% or 50,1% strength. Above charts prove that Steem Voting weight % <> rshares has linear ratio with rounded up fractions for its simplicity.
Who can benefit from this research? Voters who cast many many small votes every day. Yes, I am blinking toward bots and automatized curators ;) The formulas can be adjusted to earn more SP from curation. Steem currency is worth more and more in time. Where serious money is in the game, there comes efficiency.