What has OP_RETURN been used for over Bitcoin's history? How were these use cases enabled?
pourteaux answered this in a Twitter thread.
The story starts in 2010, when there was debate on bitcointalk about a proposal to include a DNS service on bitcoin called BitDNS. There was concern (including from Satoshi) that this would bloat the bitcoin blockchain, making it harder to do things like verify transactions.
Satoshi: "Piling every proof-of-work quorum system in the world into one dataset doesn’t scale. Bitcoin and BitDNS can be used separately. Users shouldn’t have to download all of both to use one or the other."
Some people point to this Satoshi quote as an implicit acceptance of altcoins, but I'll leave that debate for another day. And, BitDNS eventually did find a home in a separate blockchain called Namecoin. It never took off.
But, this isn't the end of the story.
A debate continued about the purpose of the bitcoin ledger. Is bitcoin for:
- Recording financial transactions only, or
- A secure, distributed data store
Option 1 is more scalable and sustainable. Option 2 allows for more experimentation and could grow the bitcoin ecosystem.
I'll keep my opinion to myself, but neither camp won. Instead, a compromise was struck in May 2014 where Bitcoin Core enabled extremely short (40 byte) messages in a function called op_return. This was a sufficient size to, for example, store hashes linked to an external service. This was a compromise because while it allowed messages, the size was limited and importantly- these messages were prunable.
Super important concept: what does prunable mean?
Prior to op_return, people who wanted to write messages on bitcoin were sending btc dust payments to fake addresses where the address itself was the message. This was a problem because all unspent bitcoin outputs have to be stored by all nodes forever as part of the UTXO.
op_return fixed this, because op_return transactions are unspendable. Thus, nodes can safely ignore them since they are dead ends for btc and therefore take up no space in the memory of a bitcoin node.
These transaction are, however, forever stored in the bitcoin blockchain.
Fast forward to 2018 - 2019. Something like 20% of all bitcoin transactions are op_return transactions during this time. These messages mostly came from two sources: Veriblock (an altcoin that settles on bitcoin) and Omni (a way to mint tokens like Tether with bitcoin).
Bitcoin fees were quite high at this time due to op_return. Supporters of op_return argue that this is good for bitcoin: raises demand for btc and pays fees to miners to secure the network. Opponents say say these were crowding out bitcoin's intended financial transactions.
In all, Veriblock and Omni added about 10GB to the bitcoin blockchain from 2018 - 2019 with about 32 million transactions. Today, Veriblock/Omni have fallen out of favor, but the 10GB contribution to the blockchain is a permanent cost to nodes (some label it as "pollution"). But, because op_return transactions are prunable, there is luckily no memory cost since they aren't included in bitcoin's utxo.
Yet, op_return remains. Does it have any use? Well, it's safe to say that it isn't being used much currently. http://opreturn.org does a good job tracking this. Many argue that the functions op_return was used for are better off being executed with things like timestamps (e.g. OpenTimestamps) that don't bloat the bitcoin blockchain while still allowing you to prove the existence of something at a certain time (akin to a digital notary).
Some additional resources on OP_RETURN: