STEEM internals #10: Payment reward system demystified.

Welcome to my 10th post in the series. I mark reaching two digits as a milestone and a proof to myself that I was able to go further than I initially hoped for. The post will decompose STEEM payment reward system.

In this post you will learn how the reward payment is calculated, how much do you receive and how much will the curator receive. You will also learn why and how the payment window works and how it is divided. You will also learn why the maximum curation reward is penalised. We will also decompose a reward payment on an example: the TOP #1 reward post from last week. You will see why it received more than 5k STEEM and what was the sequence of upvotes that made it to reach the top. I will not describe things myself and link to other important posts for reference.


STEEM

Payment reward ingredients

Payment reward ingredients are : Account's holdings of Vesting Shares (Vests), converted into STEEM Power, current Voting Power which gives Reward Shares value, votes' timing and Vote weight. All those things combined make a single VOTE reward and multiple votes that collectively sum up to a total reward for a post that is later split into three parts. Two parts go to the author and the third part of the reward goes to people that curated the post. Post curation is an activity of making a post popular by getting it noticed by other people and encourage them to add their upvotes that further increase total pending payout, making the post trending and even viral in extreme cases.

STEEM Vote state is kept inside of an object that has internal representation as:

struct vote_state {
      string         voter;
      uint64_t       weight = 0;
      int64_t        rshares = 0;
      int16_t        percent = 0;
      share_type     reputation = 0;
      time_point_sec time;
   };

Payment reward windows

The payment and how it is split depends on three payment reward windows:

  • First 30 minutes after a new post is submitted is called STEEMIT REVERSE AUCTION WINDOW. This is a time when the early votes receive a penalty. Please see below for the details.
  • 30 minutes to 24 hours is the remaining time for the first payout window, the penalty for early voting is equal to 0.
  • 30 days for the second payout window. Upvotes after 30 days do not bring any reward to the author anymore.

Note: Also votes in the last minute of the 24 hour window do not increase the reward in the first payout.

Curation

Curation algorithm was changed already, in the beginning 50% of the rewards went to curators, now it is 25% of the total payout to the curators.

Early vote penalty

During the first 30 minutes after post is published early votes get a penalty. Currently this penalty is calculated as a linear equation:

/// 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();

Here is the post that elaborates a bit more on it and gives a few examples.

Post reward vs Reward Pool

This paragraph will be the most interesting for you who want to learn how their reward is calculated. If you paid attention to my previous posts in the series you noticed how Reward Shares were calculated and converted.

How Much Share of Vesting Shares Your Account Has (how rich in STEEM POWER you are) * current Voting Power == Reward Shares

The crucial thing to understand is that the rewards are taken from a pool of shares. What does it mean?

The total rewards payout amount on STEEMIT.COM does not increase when the total number of upvotes increases. The reward pool is always the same. People with the most STEEM POWER decide how this pool is divided by bringing their votes. The more total votes weight the bigger piece of pie the author receives.

Where do the reward shares come from? They are mined by witnesses. A set of 21 witnesses provides a round of blocks that are added to the blockchain every 21 * 3 seconds for a block = 63 seconds. 19 of those witnesses are the ones selected by community, one witness is a miner and 21st witness is a backup witness.

The total pool of produced Vests is divided and part of it lands to reward shares pool. I was looking for a way to describe this and and think that a picture is worth 1000 words let's imagine that reward shares come from witness nodes like drops of water (vests) into the reward pool.

drops

If you would like to know how much goes to reward pool, compared to total STEEM supply imagine that daily reward pool increases with 2 bottles of fresh water (Vests) and the total supply is a whole bath of water.

Reward shares addedTotal vests added
reward poolsupply

Math

In order to explain the math behind the reward calculation and how a single vote affects the total payout I will give you the best possible resource available. A link to post of the man behind it:

CLICK HERE TO READ THE MOST IMPORTANT POST ON STEEMIT.COM THAT EXPLAINS MATH BEHIND REWARD CALCULATION AND THE REASON WHY THIS ALGORITHM IT WAS CHOSEN.

Promotion

The new kid on the block is post promotion. Sending a certain amount of STEEM Dollars to @null account makes the post to be promoted, and it gets higher on the promoted page.

See my previous post for the explanation on how this works.

Last week's TOP #1 post decomposed

If you were ever wondering how much of the TOP #1 post reward comes from whales and how much from less wealthy accounts I wanted to prepare a breakdown and a pie chart of this weeks post as reported my @masteryoda's Weekly payouts leaderboards.

but instead surprise, surpise accoring to 'Teach a Man To Fish, and You Feed Him for a Lifetime' I will show you how dive into it using steemtools:

  • Get a post.
>>> p = Post("@charlieshrem/mackerelcoin-and-my-socioeconomic
             -observations-from-prison-part-1-by-charlie-shrem")
  • Get all votes of the post.
>>> votes = p.get_votes()
  • Print the votes, take a red or blue pill and you are in the Matrix ;-)
>>> pprint.pprint(p.get_votes())
[{'percent': 5000,
  'reputation': '261787136527',
  'rshares': '252134242564',
  'time': '2016-09-16T00:32:45',
  'time_elapsed': 17610,
  'voter': 'barrie',
  'weight': 0},
 {'percent': 10000,
  'reputation': '32623790898042',
  'rshares': '30683272195782',
  'time': '2016-09-15T20:01:24',
  'time_elapsed': 1329,
  'voter': 'smooth',
  'weight': '190540463439063918'},
 {'percent': 10000,
  'reputation': '82872772599',
  'rshares': '231815399848',
  'time': '2016-09-15T19:43:03',
  'time_elapsed': 228,
  'voter': 'anonymous',
  'weight': '11673677559637431'},
 {'percent': 10000,
  'reputation': '13454183968174',
  'rshares': '14447540316039',
  'time': '2016-09-15T20:27:51',
  'time_elapsed': 2916,
  'voter': 'summon',
  'weight': '68649310583817370'},
 {'percent': 10000,
  'reputation': '66194716837623',
  'rshares': '39229021022738',
  'time': '2016-09-15T20:00:45',
  'time_elapsed': 1290,
  'voter': 'blocktrades',
  'weight': '646627151913988433'},

...

Tools

I mentioned steemtools. There are already a few tools that may be helpful for you to calculate your rewards and decompose them. Please find below a few examples:

  • STEEM Vote weight calculator by @burnin
  • STEEMTOOLS by @furion
  • piston and python-steemlib by @xeroc

I do not expect many upvotes for the post considering my previous payouts. Please upvote it though if you liked it. ;-)


DISCLAIMER: THE INFORMATION IS DELIVERED FREE OF CHARGE AND 'AS IS' WITHOUT WARRANTY OF ANY KIND. I HOPE IT IS ACCURATE AND FREE OF ERRORS AND YOU FIND IT USEFUL.

H2
H3
H4
3 columns
2 columns
1 column
15 Comments