There’s more to storing data forever on the blockchain than you might think. Let’s explore the issue by looking at what miners are, and aren’t incentivized to do.
Jerry Chan – November 2, 2019
As Bitcoin SV has recently started everyone saving data onto the blockchain, more and more discussions have come up debating the long term methods and effects on this new business model and its economics. Wherever there is money involved, there’s high emotion.
If you ask about data being stored on-chain, the only solution available to you is Bitcoin SV. That is because it is the only Bitcoin committed to having no hard block size limit. This means that the amount of transactions that can be processed in 10 minutes (entered into the sequential, indelible ledger) is unbounded.
Many have started to explore the possibilities that this model brings to the blockchain industry, from those who have stored entire movies and images on chain, to entire websites being ‘archived’ to the chain, to new burgeoning businesses that seek to replicate existing internet platforms but with the blockchain as the backend database (Twetch.app, Bitstagram, etc…).
It is an interesting time indeed, with many innovators and some copycats but no shortage of experimental projects being run which all use the BSV blockchain as a ‘free public service’ as far as storing and serving data goes.
What your fees are really paying for
If this seems like a non-sustainable economic model to you, then you are either an economist or an astute reader. Because you would be right. Like perpetual motion machines and the Ethereum project, it cannot continue working in the long run. Where Ethereum expected the model of everyone calculating everything to be sustainable with low fees, the current thinking of ‘miners store everything forever’ model in BSV isn’t economically feasible.
That is because when you pay to have a transaction confirmed by the miners, you are NOT paying them to store and serve the data indefinitely. You are simply paying for them to sequence it into the blockchain, preserve an indelible evidence trail of it, and be able to prevent any double spends (duplicate conflicting entries in that record).
Presently*, the miners’ job of keeping the evidence trail and preventing double spends necessitates storing the whole transaction. But in the future when mining becomes more competitive, smart miners will find other ways to do this without storing the whole transaction. Moreso, currently miners continue to store old transactions even when they are no longer needed to help them fulfill their double-spend prevention role (namely, after they have been fully spent). This is for no sake other than the fact that the marginal cost of them doing so is close to nothing. But if those costs were to change in the future, whether because storage demands exceed reasonable free capacity available, or the demand to serve historical data becomes too high, then they will cease to do so as a free service, and instead archive or index nodes will emerge to fill that market need.
Archive and Index Nodes
What is an archive or index node? It is simply a full node that stores and indexes the whole blockchain. And charges money to serve it. These will eventually be ‘the servers’ of the internet. Every web server or data server on the internet will eventually be one of these nodes. Some may have the whole blockchain (archive nodes), some may only store certain types of data (say application-specific, like email), others may just store data from a particular app (in this case, not much different from Twitter’s or Facebook’s own servers).
The point is that, in Bitcoin, the free market decides — and as it is not a socialist collectivist system, there are no artificial economic conditions besides legal that should be placed on the businesses and miners, and they are free to do as they please so long as they obey the system rules of consensus. Storing and serving data isn’t part of the consensus system of Bitcoin, it just so happens that it is one of the presently subsidized activities that miners are getting paid for with the mining subsidy (currently at 12.5 BSV per block, which will economically run out by 2030-2040).
Storing data forever: It’s not what you think
So what do you do if you have been telling people that they can store any amount of arbitrary data on BSV and it will be free to access forever?
Stop doing that. You are misleading people. Yes, it may have a temporary positive effect on the price, but we don’t want businesses to go bust when they build on top of unsustainable business models.
What if you store data and you WANT to have it served to you indefinitely, and are willing to PAY for it? Well then, presently, if you use OP_RETURN to store your data, then you want to send another output with your transaction, and make sure you don’t spend that coin. Although not a 100% guarantee that all miners won’t prune your OP_RETURN data, it is a good chance that miners WILL continue to keep the transaction around as long as there is an unspent output that is linked to that transaction. (This isn’t a foolproof method though, as some specialized miners in the future may not use in-memory UXTO sets to prevent double spends, and they will discard OP_RETURNS and just use UXTO commitments instead.)
The other way to mostly ensure that your data is stored by miners is (post-Genesis update) to use the original OP_CODE meant for storing data on-chain, OP_PUSHDATA. This Opcode ensures that the miner MUST keep the data as it is in the part of the output script that is required to spend the output in the future. In a way, you are committing the miners to keep your data around because you are ‘promising’ to pay them later when you spend the coins.
However this still isn’t 100% bulletproof, for if people start abusing this, for instance by storing some small dust amount of Bitcoin, not spending it for years, and continually just using the network API of ‘getdata’ on miners to retrieve your Blueray movie collection, then miners will catch on and just stop replying to ‘getdata’.
Here is where many people get it wrong. ‘getdata’ is the API call that full nodes (mining or otherwise) use to get information on blocks and transactions, bootstrap other nodes and ‘download’ the blockchain from scratch. It is NOT part of the bitcoin protocol and thus is subject to change or even disappearance. It just was the easiest way to implement the node initially, but it certainly isn’t set in stone. While a node that wants to store everything should indeed be able to respond to a ‘getdata’ or ‘getblock’ request, miners NEED NOT.
They currently do only because on internal implementation, but in the future, if miners are not storing old transactions, and instead use the more efficient merkle tree and blockheader chain method, then they may drop this API of serving a complete block all together. They may infact depend on archive node operators to download their initial copy of the blockchain, and then go off and prune out all spent transactions that they have no need to carry around as part of their ‘spin up’ process.
But, I thought that I was paying for miners to store my data forever?
No, you were misled to think so by those who would like to trick miners into a social obligation to provide an unpaid service for free, or because you believed that just because the nice lady who seems to have been mowing your lawn for you while you were on vacation, is going to keep doing it for you forever, without asking you to pay her eventually.
So… what does the mining fee actually pay for?
- For miners to canonically sequence and timestamp your transaction in the global, transparent, blockchain. And to keep this evidence trail of this transaction forever. (Note: evidence trail isn’t the same as the data itself)
- Serve and prove this evidence trail on demand, indefinitely (serving block headers, and Merkle proofs)
- Validate your transaction, by acting as a Turing Decider, and computing your script code (unlocking of inputs). This can be seen as ‘executing’ smart contract code.
- Detect attempts at double-spending (creating duplicate conflicting entries in the global ledger), and not accept them, and optionally alert the network about them.
That is what your 1sat/byte is paying for. Not serving old data which isn’t needed to achieve any of the above four services, forever.
Okay, you say, maybe miners can’t be FORCED to keep and serve my on-chain data forever for free, because doing that would be anti-capitalist and pro-socialist/collectivist nonsense. But shouldn’t they do it because out of their own interest because doing so will make everyone use BSV and that would increase the price of BSV, and thus result in profits for all miners?
No. It won’t. Simply because the economics don’t work. Miners have costs in real money: USD, JPY, RMB, EUR, GBP. They don’t pay their costs in BSV. If they started storing and serving data for free forever, these costs accumulate in real money.
No economic utopia
Say we assume that, because this ‘economic utopia’ of freeriding exists, everyone on the planet is brought into using BSV and the price shoots to $100,000 for 1 BSV. Remember that in this ‘economic freeride utopia’, miners still only get paid ONCE for every byte of data stored, but their costs are unbounded, as they are expected to store and serve the data forever no matter how many people request it. These are costs in data storage and bandwidth. Even if BSV were to go up massively in price, that just means that the rate of mining fees will drop. Below 1sat/byte is possible. Miners would have to charge 1sat/MB or 0.000001sat/byte in order to keep the average transaction at the equivalent of 0.5 cents per transaction (and no, technical objections are ignored, there are ways to achieve sub-satoshi payments technically).
What this means is miners don’t really benefit from the increase in the dollar value of BSV. Because it just means that people pay them LESS BSV per transaction.
This is because the system is meant for transactions to have a STABLE value given its size and type. This is not meant to fluctuate. If you think it should fluctuate, then you likely will find your calling in the BTC or other altcoin camps.
The major economic tenet of Bitcoin is that fees are low, and even free for transactions, depending on complexity (for which the sat/byte is a proxy) but most importantly STABLE. So miners don’t make more because the BSV price goes up. They make more when there are more fee-paying transactions created.
So after the initial jump in profits as everyone on the planet uploads all their data to the blockchain (in our somewhat extreme hypothetical example), once everything was uploaded miners would not see any more revenue. But at the same time, they would be incurring a LOT of future costs. After all, it is safe to assume that while data needs to only be stored ONCE in a permanent, non-erasable database, it will definitely be ACCESSED more than once… many many times in fact, especially when the storage life of the data is UNBOUNDED.
So when you look at it this way, you can understand why the people calling for miners to be socially pressured into storing data forever, because they paid them ONCE, is a bit ludicrous, illogical, and displays a complete lack of understanding of economics. And if they were to cross the line and demand that miners serve them the data they stored years ago, that would be outright socialist/collectivist.
Let’s for the sake of argument, suspend logic for a moment and assume that miners DID indeed make enough extra profit from BSV price appreciation indefinitely because there is an unbounded stream of data that always wants to be stored, and the costs to serve it was effectively nil and free.
Tragedy of the Commons
Even if we assume this was the case for a moment, that would still be a system that would suffer from the Tragedy of the Commons. Nothing would stop one miner assuming that, since all other miners are storing and serving all data out of community altruism (thus resulting in everyone benefiting from the boost in BSV price) nobody would mind if just they stopped doing so. Besides, how many users connect directly to a miner and request the data today? Few if any.
Most data is served by block explorers or wallet servers already (these are full nodes, and archive nodes and they don’t know it, even though they may not be charging for the service… yet). Once one miner defects, what do you think will happen? Well, the collectivists would like to think that if they brainwash all the miners enough, that they would ‘self-police’ and punish the miner that stopped serving data, by expelling them from the mining community.
But that is a far-fetched and utopian view of things. How would anyone be able to tell if a miner defected? How many ignored requests before they are considered ‘bad’? What if they are a small miner, and they really would rather spend their capital on increasing hashpower instead of spending money storing and serving an ever-increasing amount of user data?
What is much more likely is that the other miners wouldn’t care. Users and social media ‘handlers’ and ‘community managers’ may try to ostracize and persecute the offending miner on social channels, a form of public shaming, but at the end of the day, users have no control over miners, despite what all the UASF milliners would have you believe. Miners aren’t politicians. They don’t need your votes. They just follow the rules. And there isn’t a rule that says they need to store all your data forever. Pretty soon the miners that defect from the cartel find that they can save costs and make more profits. They then use these cost savings to be more competitive than their rivals. They start out-competing their rivals until one by one all miners stop serving old-spent transaction data, and we are back at the same conclusion.
Those miners that DON’T stop (for whatever reason, ideological or otherwise) find that they can’t compete anymore, and are losing money vs. their peers because their blocks are getting orphaned more often than their peers. (Because their bandwidth is being eaten up by non-paying users downloading on-chain data… more now given that data serving demand is directed only at them, the last remaining miners who are serving the data.)
Pretty soon, they have a revelation. They run the numbers and realize that it is more profitable for them to just shut off their hashpower, and start charging for their ‘getdata’ API access at the rate 1sat/byte uploaded.
And there you have it, we witness the birth of the archive node business. It’s born from the ashes of the miners who couldn’t or wouldn’t keep up with their competitors, when they upped their game to out-compete their peers and stopped donating the ‘common good’.
This is the nature of the continuous competition which is the security model of the bitcoin mining business. This is the nature of capitalism. If they don’t compete, they die.
Miners will continually specialize in order to get a competitive edge. To try to stop them through social conditioning of ‘protecting the public good’ is socialist/collectivist foolhardiness, and it has no place in Bitcoin. If you want something from someone, you need to give them something in return. That is the basis of capitalism. Trade. Or give! Not take or demand.
*This will change after the scheduled Genesis update to BSV in early February 2020.