Revisiting PlanB’s Bitcoin Scarcity Model with a higher time resolution
Tags: Power Law, Scarcity, Bitcoin

Introduction

Modeling Bitcoin’s Value with Scarcity is a key paper in bitcoin on-chain analysis because it shows a strong power-law-like relationship of the scarcity of bitcoin and its market capitalization. PlanB makes the point that this relationship could be causal, meaning that scarcity drives the price and market cap of bitcoin. It might well be indeed!

With every great data-driven paper that appears on bitcoin, I always try to redo the analysis (if I can get my hands on the data). Because it’s fun, because I typically learn a lot, and because I usually find discrepancies with the original author’s results, which might be of interest. In this case, I was able to rerun PlanB’s model using a much higher time resolution, but that did not lead to a different end-result:

I was able to reproduce PlanB’s results accurately. Bravo PlanB!

Data collection

In the original paper the only bitcoin source data that is used is the market capitalization of bitcoin and the number of bitcoins mined, both versus date. This data is easy to find and extract:

Market Capitalization in the above data is 0 for every date before 17 August 2010, and PlanB has therefore used some very early price quotes for bitcoin:

First the Martti Malmi transaction:

This was on 12 October 2009, when there were 1243550 bitcoins in circulation. Market capitalization thus was 1243550*$5.02/5050 = $1236

Second a “first quote of $0.003 on BitcoinMarket Mar 2010” which I cannot trace to its source, but it is described in:

Since I just found the month and no day, I took 14 Mar 2009 as the mid-day. There were then 2264000 bitcoins in circulation. Market capitalization was thus 2264000*$0.003 = $6792

Third the famous pizza transaction:

On 22 May 2010 there were 2852150 bitcoin in circulation. The two pizzas were said to be worth $41, so market cap was 2852150*$41/10000 = $11694

Data analysis

From the Bitcoins in Circulation (bc) data above, Stock to Flow on an annual basis is computed as:

(365 * Δbc/Δdate) / bc

where Δbc is the difference in bc between two subsequent dates, and Δdate is the number of days between these subsequent dates. This is it:

Chart 1: Stock-to-Flow of bitcoin vs. Days from bitcoin’s genesis block.

The same chart on a logarithmic y-scale is:

Chart 2: The same data as in Chart 1, but plotted on a logarithmic y-scale

And here is the well-known MarketCap of bitcoin:

Chart 3: Market cap of bitcoin on a logarithmic scale vs. Days from bitcoin’s genesis block. Note the three single data points at the left, obtained from ‘data archaeology’.

Now we have the data, we plot StockToFlow vs. MarketCap on a log-log scale, with the same axis cutoffs as PlanB’s plot, and all data discarded after 22 Mar 2019, the day of publication of PlanB’s paper. Unlike PlanB’s plot, the dots in my chart are connected with a ‘time line’.

Chart 4: The SF vs. MarketCap plot on the same scales as PlanB used. The higher time resolution is clear. Compare the ‘clusters’ of points between this chart and PlanB’s below.

Chart 5: The original chart from PlanB’s paper

Because the many data points on the chart above, here is a zoomed-in version, for a better visibility of the (time) line connecting the dots.

Chart 6: Zoomed in version of the previous chart, to better see the time line connecting the data points

Note that PlanB’s and my chart are nearly identical, including the wild excursions in the SF range from 1 to 2. My chart clearly shows the abrupt changes in SF straight after the halving, as the horizontal lines at around SF=5 and SF=15. In PlanB’s chart this abrupt change is represented by the transition from blue to red dots.

In the above plots the data was used until 22 Mar 2019, when PlanB published his paper. I have more data until today. You will hardly see the difference because only a few months worth of data was added, but here it is, with the matching power-law function in it:

Chart 7: The very same plot, but includes the data until today. In the former plots data was stopped at the publication date of PlanB’s paper, for comparison purposes. Note the larger cluster at the upper right compared to the previous plot, which lifts the slope parameter of the equation up a bit.

For those who are focused on the price of bitcoin instead of market cap, I also ran the same analysis on bitcoin price vs. StockToFlow (by dividing the y-data by the number of bitcoins in circulation). The plot shape hardly changes, but the y-scale and thus the parameters of the line quite a bit (of course):

Chart 8: Same analysis but now on the price of bitcoin as the y-input. Note that the plot-shape hardly changes, but the formula a whole lot.

PlanB also published another representation of MarketCap and StockToFlow in one chart, in which each is plotted on their own logarithmic axis, and with the min and max of the two scales adjusted by the model equation. Here is my version of such plot, showing all data until today.

On MarketCap:

Chart 9: SF in Red, MarketCap in Blue, each on their own logarithmic scale and where the minimum and maximum of the scales left and right are chosen according to the optimal fitting model. This is an alternative way to present the correlation between the two.

and on Price:

Chart 10: SF in Red, Price in Green, each on their own logarithmic scale and where the minimum and maximum of the scales left and right are chosen according to the optimal fitting model.

Conclusions

I was able to reproduce PlanB’s charts and results quite accurately.

ln(y) = 3.30894 * ln(x) + 14.5618; R-squared = 0.9034 (my results)

vs.

ln(y) = 3.31954 * ln(x) + 14.6227; R-squared = 0.9473 (PlanB’s results)

PlanB had far fewer data points in his chart than me, probably caused by extracting SF and MarketCap data at a monthly or quarterly resolution, while I used the maximum resolution as available in the data sets on blockchain.com. This is the likely reason that my R-squared value is lower than PlanB’s value. I simply catch every excursion in both SF and MarketCap, and on average these are slightly higher than that in PlanB’s sparser data set.

The three early price estimates of bitcoin are more off the regression line than in PlanB’s paper. I can’t investigate that further because PlanB did not give the exact computation of his MarketCap calculation based on the three initial price points. Also, PlanB described that he “interpolated”. I did not interpolate. All I did was adding the three points with the corresponding dates at the front of the blockchain.com dataset. Omitting these three price points doesn’t change the resulting parameters much:

ln(y) = 3.28275 * ln(x) + 14.6241; R-squared = 0.9015 (my results, without the 3 initial data points)

The step-wise StockToFlow function of bitcoin vs time was included because it might contribute to a better understanding of the clusters that are so clearly visible in the StockToFlow vs MarketCap charts. Contrary to PlanB I did not color-code the data with the time to halving, but alternatively, let the line connecting the points show the time trace.

Using all data until today, the formula is:

ln(y) = 3.34214 * ln(x) + 14.5219; Rsquared = 0.9092 (all data, until today)

On price data, the formula up to today is:

ln(y) = 2.96043 * ln(x) -0.98374; Rsquared = 0.8971 (all data, until today)

Reminder

Scarcity of bitcoin goes up with time, that’s how bitcoin was designed. Overall, price and market cap of bitcoin both go up over time. Although that was intended by the bitcoin protocol, market participants still need to continue to make this happen. Until now, up (buy) has the majority.

Scarcity and MarketCap are both going up. This causes the steep linear regression on log scales when plotting these against each other. It shows correlation but does NOT imply causality. Evidence of causality needs to come from somewhere else (e.g. by showing Gold and Silver and other commodities positioned on the same line). That made PlanB’s paper. Not the correlation per se.

Thank you for reading!