80 bytes OP_RETURN explained

The pull request submitted by Coinprism’s Flavien Charlon to increase the default maximum size of the OP_RETURN payload to 80 bytes has been merged into the master branch of Bitcoin last week.

The colored coins protocol Open Assets was already able to handle 40 bytes without much problems, but an increase to 80 bytes will make it even more efficient. The change to 80 bytes will also benefit other 2.0 protocols like Counterparty and Mastercoin.

What is the change about?

who-will-build-the-blockchain-bitcoin-tshirt-zoomBitcoin transactions are made of inputs and outputs. The inputs indicate where the money is taken from, and the outputs indicate when it’s going to. OP_RETURN is a script operator which makes it possible to have a special output that doesn’t actually send money to anyone, but lets the creator of the transaction embed some data in it.

The amount of data that can be put in such output was previously limited to 40 bytes. Open Assets, being a light protocol, was able to fit everything it needs within 40 bytes. Other heavier protocols like Counterparty and Mastercoin can’t, so they instead use bare multisig outputs to store that data. Bare multisig outputs lets them store unlimited amounts of data in the transaction, however this comes at the price of occupying space in the UTXO set, which results in a higher memory footprint for all the full Bitcoin nodes on the network. OP_RETURN is more “ecological” as it doesn’t bloat the UTXO set, and so does not cost any memory to full nodes.

With that change, those other protocols will be able to leverage OP_RETURN for some operations and be more mindful of the Blockchain.

What does it mean for Open Assets

Open Assets will continue to work as it already did, however the increase to 80 bytes allows for some interesting improvements.

Firstly, the number of asset recipients in a single Open Assets transaction is limited by the number of bytes that can be stored in an OP_RETURN output. Previously, a single transaction could send assets to up to 34 distinct recipients. After the change, it will be able to send assets to up to 74 recipients. This means that what had to be done though two different transaction can now be done with just one, reducing the amount of space used in the Blockchain.

Secondly, issuance transactions (the first transaction when creating a new colored coin asset) link to a metadata resource URL such as “https://klippt.com.au/K”. Because of the 40 bytes limit, that URL had to be quite short, forcing sometimes people to register a shorter domain name. With 80 bytes, most URLs will be able to fit without too much problems, making Proof of Authenticity validation easier.

How does the future look?

We really believe the change be beneficial for Bitcoin, by giving developers a clean way to store a small piece of data in transactions. It is worth noting that since Bitcoin 0.10, miners will be able to customize that value, either to lower it, or increase it.

So far, there are less than 17,000 transactions utilizing OP_RETURN in the Blockchain. That means the space occupied by OP_RETURN data is at most 665KB (probably less) – compared to the entire Blockchain which will be soon 30GB.

Despite the controversial nature of the topic, we are happy that a compromise could be reached, and hope that this change will help foster innovation around Bitcoin while remaining “ecological” to the Blockchain.


You may also like...

  • xcubicle

    when is 80 bytes going to be implemented?

    • flaviencharlon

      It’s in master, so probably next release like 0.10.1

      • xcubicle

        why can you put in messaging into this 80byte space using coinprism? say the 80byte data can be a hash of the message and the message can be stored elsewhere if needed for later retrieval.

  • xcubicle

    also with 80 bytes would you be able to attach messages using coinprism? that would be an awesome feature!!! now bitcoin would have built in messaging… obviously you would have to do some type of text compression or use of acronyms to increase message size.

  • Leif Shackelford

    I thought somebody should post here that while 80 bytes was looking like a reality last february it got folded back down to 40 after all here’s the pull request: https://github.com/bitcoin/bitcoin/pull/3737