Revisiting PlanB’s Bitcoin Scarcity Model with higher time resolution
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 might 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!
Market Capitalization data 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 the 14th 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 2019 there were 2852150 bitcoin in circulation. The two pizzas were said to be worth $41, so market cap was 2852150*$41/10000 = $11694
From the Bitcoins in Circulation (bc) data above, Stock to Flow on an annual basis is computed as
(delta(bc)/delta(date) * 365) / bc
where delta(bc) is the difference between bc at two subsequent dates in the bc data series, and delta(date) is the number of days between two subsequent dates.
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. Contrary to PlanB’s plot, the dots in the chart are connected with a ‘time line’.
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.
Note that PlanB’s and my plots are nearly identical, including the wild excursions in the SF range from 1 to 2. My plot 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.
I was able to reproduce PlanB’s charts and results quite accurately.
ln(y) = 3.30894 * ln(x) + 14.5618; Rsquared = 0.9034 (my results)
ln(y) = 3.31954 * ln(x) + 14.6227; Rsquared = 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 Rsquared 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 does not give the exact computation of his marketCap calculation based on the three initial price points. Also PlanB describes 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; Rsquared = 0.9015 (my results, without the 3 initial data points)
The step-wise SF 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 SF vs MarketCap charts. Contrary to PlanB I decided not to color-code the data with the time to halving, but alternatively let the line connecting the points show the time trace.
Thank you for reading!