I realized recently many people don't understand this and many (including myself) get confused by it and think in terms of "interest" instead of "inflation." Let's break it down a bit.
If you Google for "steem interest" or "steem interest rate" or "steem power interest rate", a post I wrote almost two years ago is still the top result.
It's more accurate to think of this as inflation because the STEEM blockchain is creating new currency all the time. That said, some people still like to think in terms of interest to answer the question "How much will I gain via interest if I hold this token?"
As Steemit, inc announced on November 18th, 2017 the STEEM blockchain inflation is now:
Inflate at 9.5% APR narrowing to 0.95% APR by 0.01% every 250,000 blocks (Roughly 0.5% per year).
Since that rate is decreasing all the time, let's go ahead and calculate what it is right now.
Steem Inflation Rate
current_inflation_rate = (978 - (head_block_number / 250000)) / 100
Using head_block_number from steemd.com as 22,230,359 we get:
current_inflation_rate = (978 - (22230359 / 250000)) / 100 978 - 88.921436 / 100 = 8.89078564%
So the total STEEM inflation right now is around 8.89%
The STEEM blockchain is creating new currency every block (every 3 seconds) and distributing it as follows:
- 10% to Witnesses
- 75% to authors and curators
- 15% to Steem Power holders
Again, this is from Steemit's blog post.
@dan-atstarlite did an excellent video which I highly recommend watching: How Steem's Inflation Works which breaks this down visually and explains how the actual inflation rate my be different than this due to how SBDs are printed and whether or not they are converted to STEEM or held.
Speaking with @jesta to make sense of this, he realized he was dividing by 30 instead of 12. He updated that so now we have something a little closer to what we expect, though it still doesn't show 15% (I'll explain in detail why below):
So how much money can we make just by holding Steem Power anyway?
At first I thought it was as simple as saying "15% of the total inflation PERCENTAGE goes to Steem Power holders" (that would be 15% * 8.89% = ~1.33%), but that is not correct. It's 15% of the total amount of new token inflation at that time based on how many people hold liquid STEEM compared to Steem Power.
Huge shout out to @preparedwombat who pointed this out in the comments and to @smooth who chatted with me about it as well. We'll have to get a little dirty to figure out the real number, but first let's look at some real data so we'll have a benchmark to check our findings against.
As I mentioned at the end of this old post, I put together a PHP script to save the current Steem Power balance of an account to a text file every five minutes. I used that against @freedom's balance to see the inflation in real time:
Raw Data: 1525809471,2018-05-08T14:57:51-05:00,7714361.1336359 1525809680,2018-05-08T15:01:20-05:00,7714362.1056965 1525809988,2018-05-08T15:06:28-05:00,7714363.5358808 Total Steem Power: 7714363.5358808 - 7714361.1336359 = 2.4022449 2.4022449 SP X ------------ = ------------ 517 seconds 86400 * 365 X = 146532.292391489361702 SP 7714361.1336359 + 146532.292391489361702 = 7860893.426027389361702 7860893.426027389361702 ------------------------ = 1.018994741087837 7714361.1336359 1.899474%
So the actual rate we're seeing is 1.899% APR at this time (note, that will decrease over time).
So if you have 50,000 Steem Power as an example, you'll get ~949.7 SP a year or ~18.3 SP a week. This shows up automatically in your wallet without any transfers at all.
How does that happen?
I'm glad you asked. Now we get to nerd out a bit about how the STEEM blockchain works under the hood. You may have heard the term "VESTS" or "MVESTS" and scratched your head. The official developers documentation glossary describes VESTS as:
Vests is underlying token that STEEM is derived from, and are share in Steem Power
If you look at the global properties of the STEEM blockchain (@jesta has a cool tool here to track property changes over time in his labs), you can see
steem_per_mvests which at the time of this post is:
That means that 1 million VESTS are equal to ~491 STEEM.
That's how you get more Steem Power in your wallet without any transaction taking place. If you have 1 million VESTS today, in one year, that conversation rate will change by ~1.899% so the same amount of VESTS will be worth more STEEM.
For example, next year the steem_per_mvests will be closer to ~500.
Back to our example above, if we have 50,000 Steem Power today, under the hood we really have 101,790,245.33448255 VESTS (or 101.790245 MVESTS) which we get by taking 50,000 and dividing by steem_per_mvests. Next year, if we did nothing else but hold our Steem Power, we'd still have the same amount of MVESTS, but the conversion rate would have changed. So we'd have 101,790,245.33448255 * 500.536538515759653 / 1,000,000 = 50,949.7 Steem Power.
I hope you found that interesting, and if you didn't previously know, now you do: Just by holding Steem Power, you can increase your STEEM holdings.
Okay, so now let's dig into the actual code that makes this happen and why we can't just say, "Hey, what's the current inflation rate of STEEM?" (~8.89%) and then say "Okay, so I heard 15% of that goes to Steem Power." The current inflation rate is based off the number of blocks and virtual steem, not actual VESTs.
Starting here with process_funds() in database.cpp and pulling in some variables we need:
"STEEM_BLOCKS_PER_YEAR": 10512000, #define STEEM_BLOCKS_PER_YEAR (365*24*60*60/STEEM_BLOCK_INTERVAL) /** * At block 7,000,000 have a 9.5% instantaneous inflation rate, decreasing to 0.95% at a rate of 0.01% * every 250k blocks. This narrowing will take approximately 20.5 years and will complete on block 220,750,000 */ int64_t start_inflation_rate = int64_t( STEEM_INFLATION_RATE_START_PERCENT ); int64_t inflation_rate_adjustment = int64_t( head_block_num() / STEEM_INFLATION_NARROWING_PERIOD ); int64_t inflation_rate_floor = int64_t( STEEM_INFLATION_RATE_STOP_PERCENT ); int64_t current_inflation_rate = std::max( start_inflation_rate - inflation_rate_adjustment, inflation_rate_floor ); auto new_steem = ( props.virtual_supply.amount * current_inflation_rate ) / ( int64_t( STEEM_100_PERCENT ) * int64_t( STEEM_BLOCKS_PER_YEAR ) ); auto vesting_reward = ( new_steem * STEEM_VESTING_FUND_PERCENT ) / STEEM_100_PERCENT; /// 15% to vesting fund
To find the real inflation rate, we have to figure out how much new STEEM is created with each block (every 3 seconds). I used some values at the time I ran through this.
We'll need the virtual_supply number from the global properties which is the sum of all the STEEM plus all the SBD if it was converted to STEEM at the current price (note, this is based on the blockchain price of SBD which is $1 USD, not the market price of SBD).
virtual_supply = 271750869.726
The code above gives us the formula for finding how much new STEEM is created per block:
new_steem = (271750869.726 * .0889078564) / 10512000 new_steem = 2.298400618547785 (per block) VEST Rewards: 2.298400618547785 * .15 = 0.344760092782168
From that we can get 0.34476 STEEM per block goes to VEST holders. Depending on what percentage of the total VESTS you hold, you'll get your share of that amount.
Back to the @freedom account we used earlier, they have 4.0362432674167% of total VESTS. That means they get 0.01391535603366 SP per block (2.298400618547785 * 0.040362432674167). Our test ran for 517 seconds which is 172.333 blocks. That means, according to what we see in the code, @freedom should have received 2.398 SP which almost exactly matches the 2.402 SP we recorded.
There are a lot of variables going into all this including how much SBD there is which impacts the virtual supply and how many people are powered up or in liquid STEEM (fewer people powered up means your share of the VESTing rewards will go up).
Don't worry if you head hurt a little bit going through all that. It's confusing stuff, and it took me way too long to wrap my head around this (again). I work on posts like this to help explain complicated things in simple terms and so I can go back and find my old posts later to explain things to myself. :)
Luke Stokes is a father, husband, programmer, STEEM witness, DAC launcher, and voluntaryist who wants to help create a world we all want to live in. Learn about cryptocurrency at UnderstandingBlockchainFreedom.com