The First 30 Minutes...
...after a STEEM post. Yeah, sorry, it's not going to be a fictional story, but hey... I'm convinced the title's the start of a fun free-write.
So I've read a lot about the 30 minute reverse auction period that was introduced about 2 years ago, but I wasn't sure what exactly the current state was. There are a few posts that lined up and I essentially just assumed that it was how it worked, but due to historical changes and previous forks it was hard to tell if the older posts were out of date or not.
I was able to identify the parts of the STEEM code that verify the following claims:
- If you vote in the first 30 minutes, your curation reward is reduced by a particular percentage, and that remaining percentage goes to the author.
- That percentage is linear. Voting immediately at 0 minutes means all of the vote value goes to the author. Voting at 15 minutes means that 87.5% goes to the author. Voting at 30 minutes means 75% goes to the author.
Beyond these two points there is a lot more information for curators that I will not go into. I will focus on the implications for the author.
Code Walkthrough For the Reverse Auction Vote Mechanism
Here is the section of code that adjusts the weight of a comment on a vote:
/// discount weight by time
uint128_t w(max_vote_weight);
uint64_t delta_t = std::min( uint64_t((cv.last_update - comment.created).to_seconds()),
uint64_t(STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS) );
w *= delta_t;
w /= STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS;
cv.weight = w.to_uint64();
(This may not be rendering properly in certain front ends, but works on steemit.com)
Above, you'll see that it takes proportion of time before and discounts the weight in a linear fashion. If the vote time was 30 minutes after, then delta_t is 30 minutes, and w remains unchanged.
For reference, the constant for the reverse auction window is 30 minutes: STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS
#define STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS (60*30) /// 30 minutes
Note that while the vote weight has been decreased for that individual vote, it preserves the original vote value when tallying the total vote weights for the comment, which you can see here:
c.total_vote_weight += max_vote_weight;
Paying Author and Curators
The payment code is in another section here. Here we can tie together why the portion that doesn't go to the curator goes to the author instead.
author_tokens += pay_curators( comment, curation_tokens );
Here curation_tokens is already 75% of the comment's total value. As we'll see later, pay_curators assigns each voter a proportion of that curator's reward portion, and returns any amount that is left over. Remember that weight that got tweaked above? The individual voter's weight was decreased but the amount added to the comment was not.
Here we dive into the pay_curators code:
share_type unclaimed_rewards = max_rewards;
...
auto claim = ( ( max_rewards.value * weight ) / total_weight ).to_uint64();
...
unclaimed_rewards -= claim;
I extracted the relevant parts that compute the weight of the voter's vote using weight (which was possibly discounted) over the total_weight (which was not). As the code subtracts from unclaimed_rewards, by the end what's remaining is returned and added back to author_tokens here, as mentioned at the start of this section.
Tada!
Kickstart Votes and Discover Others on Steemfollower |
Promote Interactions With The Steem Engine Community |
This has always confused me a bit how some people can earn substantially more SP through curation than others. I just keep trucking along though, if I can make 1-3SP a day, a year from now it will have been worth it
Yeah it doesn't seem significant unless you have a lot of SP to begin with.
I had my doubts in how the system worked but thanks to the code you show out becomes a bit clearer... So basically if you want to maximize your earnings while using bots it would be a good idea to do it on the first few minutes of the post and if you want to maximize your curation reward, just upvote after the post is past the 30 minutes mark?
That's right. Though it's not necessarily true about the vote timing because a lot of folks may be willing to sacrifice a bit of Curation rewards to front run the rest of the voters. It's tricky timing to be sure.
These posts are always nice to read.
Around here nobody takes you by the hand on one of those trendy tutorials, you must find out about everything yourself.~
This is definitely a help for many.
Cheers
@eonwarped, thank you so much for explaing curator payouts based on information from the code. I have head a lot of opinions. I appreciate that you were able to make a stement based on facts.
Not being a coder it took me some time to digest what you are showing here. One thing that I read somewhere not to long ago was that the time was going to change from a 30 minute window to a 15 minute window on the reverse auction aspect, have you read or heard anything on that?
I think it was @penguinpablo who had that information, and if memory serves me correctly he said it was due to change at the next fork.
Thanks for the info, I'll look it up. But at the very least, it does not change much of what's in here, so that's good :).
I'm not sure 15 vs 30 makes much of a difference though, though it maybe it does for larger influencers, who knows.
There was also information about the payout formulas as well in the article. I don't pretend to know anything about the coding and such but I do read these types of posts in order to maybe learn a little at a time.
I read somewhere that the "sweet spot" is 20 minutes... Seems legit?
If you have little SP, there is no sweet spot :D. all in all, it really depends on the timings of the votes.
Nicely done.
I've read through a lot of summaries about how voting works and payouts/curations get calculated, but it didn't occur to me to dig through the source and actually find it. Now I can see that many of those summaries were way off.
I was talking with someone and had assumed it was true, and I was like "okay I'll find you the post", only to find I couldn't find it. So that's this one :)
This is something I always struggle to get my head around and to be honest it's not something I have spent a lot of time learning due to the expectation of the hard fork changing it. I heard that the limits will change to 15 minutes? I think that would be good as I frequently would upvote more posts but i find them to early and always intend to go back but sometimes i forget or it's lost in my feed and I can't remember which I'm supposed to be voting lol.
The way curation reward is calculated and distributed is pretty confusing. I normally wait after the 25th minute to upvote a post, else there are too many variables to account for :(
Yeah I don't even think too much about Curation anymore. Front running the bulk of votes is really important too so it's hard to know really...
Interesting. I have heard that this was how it worked but never seen anyone walk us through the code. Great work.