A few weeks ago, I wrote the article, A new puzzle about daily STEEM production (yes, really.) to describe the problem I was having reconciling the numbers for daily STEEM production in the middle row of this chart:
In short, the predicted value was running around 89,840 new STEEM per day, but the observed value was running at 88,191 new STEEM per day. We were also averaging 955 burned STEEM per day, which explained part of the difference, but that left a difference of: 89,840 - 88,191 - 955 = 694 STEEM per day between the anticipated value, according to the daily inflation rate and the observed value.
In order to try to "find" the missing STEEM, I put together a script that collected the numbers straight from the blockchain, and I found this:
Starting values: 76212125 487123274.469 503277.197 486619997.272
Last values: 76993830 489529697.471 528738.859 489000958.612000
Total change: 781705 2406423.002000 25461.662000 2380961.340000
New STEEM per block: (# blocks):781705 (Virtual Supply):3.078429 (rewards pending):0.032572 (Virtual Supply - Rewards Pending):3.045857
New STEEM per day: (# blocks):781705 (Virtual Supply):88658.755200 (rewards pending):938.073600 (Virtual Supply - Rewards Pending):87720.681600
At first, I was suspicious of the pending_rewarded_vesting_steem
parameter, but I think that turned out to be a red herring, since the virtual supply and pending reward values don't seem to move together.
According to this measurement, we were averaging about 88,659 new STEEM per day. So, there was a discrepancy between the PowerBI gap (with data from steemdb) and the numbers straight from the blockchain. So, I started looking more carefully at SteemDB and my PowerBI formulas.
- The first thing I confirmed was that the numbers in SteemDB were correct.
- The next thing I discovered was that if I changed my PowerBI formula to use the difference by block number, instead of the difference by timestamp, the numbers came out near 88,650 - matching the script above.
- At this point, I realized that the problem could be that my PowerBI formula depended on having (20 * 60 * 24 =) 28,800 blocks per day.
- So, the next question was, how many blocks per day were we actually seeing?
I checked the first block from each day and did the math, and it turned out that we were missing about 159 blocks per day, on average.
If you multiply the 159 blocks by the expected new STEEM, around 3.1197, that gives us another 495 STEEM per day. So, if we add 495 to the numbers above, that gives us a discrepancy of: 89,840 - 88,191 - 955 - 495 = 199 STEEM per day. A mismatch of just 0.22%.
So, then the question became, can we explain the apparent missed blocks? And the answer to that question comes from SteemDB again. The missed blocks are apparently coming because a number of standby witnesses still have valid signing keys, even though they have stopped running steemd nodes. (if you're voting for any of the witnesses in the top-right portion of that page, you might consider removing your witness votes.)
One witness, in particular, was producing more than 40% of missed blocks. Fortunately, the largest witness vote for that account has now been removed, and it dropped in rank from 34 to 92. As a result, I expect to see the gap between observed and predicted shrink in the next couple of weeks. For the curious, here are the numbers from July 12 through today, which is the interval that's presently available from SteemDB.io:
Missed Blocks
Burned STEEM beneficiaries
Summarizing:
Predicted new steem per day (average): 89,852
Observed new steem per day (average): 88,197
Burned STEEM beneficiary rewards per day (average): (9935 + 14255)/24 = 1008
Missed STEEM per day (average, 3.1194 * missed blocks): 474
All of which leaves a difference between observed and predicted of about 173 STEEM per day or 0.192%. With conversion of VESTS to STEEM and other averaging going on, that's a pretty tiny gap.
Final note:
@moecki noted in comments that HF20 disabled a blockchain mechanism which would have invalidated the signing key of inactive witnesses, otherwise we would have a much smaller number of missed blocks. Whether to reactivate that mechanism is an interesting question:
- A side effect of this change is that inactive witnesses with valid signing keys are actually helping to reduce the inflation rate - basically this has been roughly equivalent to burning another 500 SP per day; however
- Missed blocks slow down validation times on the blockchain; and
- Active witnesses are being deprived of rewards for block production when an inactive witness with a valid signature gets selected.
In all, I think I would vote to reactivate the mechanism for invalidating witness signing keys, but there's an argument to be made that the existence of inactive witnesses with valid signing keys actually gives the stakeholders another lever by which to adjust the inflation rate.
Lastly, along the way, I also noticed that the SteemDB reward fund API stopped updating in April, 2021, so @steemcurator01, if you're reading this, can you please consider reactivating that API?
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.