New to Nutbox?

More about Steem's inflation models

7 comments

remlaps-lite
76
last yearSteemit4 min read

No time to write much tonight, but here are some pretty pictures. After last week's conversation, I'm reasonably confident about these graphs and numbers. In terms of new STEEM per day, both of the models below start downwards in mid-February, 2024 and bottom out in the spring of 2037.

I'm fairly sure that most of the difference between the HF16 prediction and today's actual numbers arises from the fact that the STEEM market cap on Dec. 6, 2016 was 62x the SBD market cap, whereas today the STEEM market cap is only 11x the SBD market cap. I believe the change in the STEEM:SBD ratio introduced a great deal of additional inflation.

The December 6, 2016 starting point numbers came from here. I used the STEEM supply, SBD supply, and STEEM price from December 6, 2016 to estimate the virtual supply, as follows:

virtual_supply = STEEM supply + ( SBD_Supply / STEEM Price )

Beware that there are many factors that can effect this other than just the blockchain inflation model. Other factors include increases/decreases in the price of STEEM, burned tokens, and perhaps other things, too.

And of course, this is all based on informal documentation and observations, so I offer no guarantees. ;-)

Now, on to the visualizations.

Forward looking model starting tonight - New steem per day broken down by inflation type

image.png

Forward looking model New Steem, virtual supply and inflation percentage

image.png

HF16 model starting at block# 7,000,000 - New steem per day broken down by inflation type (SPS starts at HF22)

image.png

^^^ Update^^^: Smoothing and filtering fixes in PowerBI. I was rushing too much last night.
Also updated to reflect HF21/22 switch from 25% to 50% for curation rewards.

HF16 New Steem, virtual supply and inflation percentage

image.png

In retrospect, we really should have had graphs like these when we were deciding whether to adopt the SPS or not, but it didn't occur to me at the time. C'est la vie.

The visualizations were created in PowerBI, and here is the python code:

#!/usr/bin/python3
from datetime import datetime,timedelta
from steem import Steem
import json

s = Steem()
DP=s.get_dynamic_global_properties()

### December 6, 2016
### https://github.com/steemit/steem/issues/551#issuecomment-261262294 - startblock 7000000
###     STEEM current_supply, Dec. 6, 2016 227593061
###     SBD current_supply, Dec. 6, 2016 1240366
###     STEEM price Dec 6, 2016 0.237
###     Collateralized STEEM = ( 1 / 0.238 ) * 1240366 = 5211621 
###     STEEM virtual_supply, Dec. 6, 2016 = 227593061 + 5211621 =~ 232,826,672
### startBlock=7000000
### startSupply=232826672
### startDate=datetime(2016,12,6,11,00,00,00)

### Current values
startBlock=DP["head_block_number"]
startSupply=float(DP["virtual_supply"].split()[0])
startDate=datetime.now()
blocksPerYear=10512000

def inflationPCT ( block ):
   APR=( (978 - ( block / 250000 )) / 10000 )
   return 0.0095 if APR < 0.0095 else round ( APR, 4 )

def newSteemPerBlock ( inflation, supply, bpy ):
   return ( inflation * supply / bpy )

def block2day ( n ):
   return ( n * 20 * 60 * 24 )

loopBlock=startBlock
loopSupply=startSupply
loopDate=startDate
if ( loopBlock % 250000 == 0 ):
   guardRail=round (inflationPCT ( loopBlock ), 4)
else:
   guardRail=round (inflationPCT ( loopBlock ) + 0.0001, 4)

print ("Date, Block #, Inflation Rate, Supply, New Steem Per Day")
endDate=startDate  + timedelta (days=int(30 * 365.25)) ## 30 years
while ( loopDate < endDate ):
   inflationRate=inflationPCT ( loopBlock )
   inflationPerBlock=newSteemPerBlock ( inflationRate, loopSupply, blocksPerYear )
   inflationPerDay=block2day(inflationPerBlock)
   loopBlock+=1
   loopSupply+=inflationPerBlock
   loopDate=loopDate + timedelta (seconds=3)
   if ( loopBlock % 250000 == 0 ):
      guardRail = 0.0095 if ( inflationRate <= 0.0095 ) else round (guardRail - 0.0001,4)
      print ( "%s, %s, %f, %d, %d" % ( loopDate, loopBlock, inflationRate, loopSupply, inflationPerDay ))
      if ( guardRail != inflationRate ):
         print ("Inflation rate mismatch", guardRail, inflationRate )

Feel free to use or modify it, and please let me know if any errors are observed.


image.png

Pixabay license, source

Reminder


Visit the /promoted page and #burnsteem25 to support the inflation-fighters who are helping to enable decentralized regulation of Steem token supply growth.

Comments

Sort byBest