Users who have contributed to this file

6.5: Sending a Transaction with Data

NOTE: This is a draft in progress, so that I can get some feedback from early reviewers. It is not yet ready for learning.

The third way to vary how you send a basic transaction is to use the transaction to send data instead of funds (or really, in addition to funds). This gives you the ability to embed information in the blockchain.

Create Your Data

The first thing you need to do is create the 80 bytes (or less) of data that you'll be recording in your OP_RETURN. This might be as simple as preparing a message or you might be hashing existing data. For example, sha256sum produces 256 bits of data, which is 32 bytes, well under the limits:

What is an OP_RETURN? All Bitcoin transactions are built upon opcode scripts that we'll meet in the next chapter. The OP_RETURN is a simple opcode that defines a transaction as invalid. Convention has resulted in it being used to embed data on the blockchain.

Prepare Some Money

Your purpose in creating a data transaction isn't to send money to anyone, it's to put data into the blockchain. However, you must send money to do so. You just need to use a change address as your only recipient. Then you can identify a UTXO and send that to your change address, minus a transaction fee, while also using the same transaction to create an OP_RETURN.

As you can see, this sends the majority of the money straight back to the change address (mhZQ3Bih6wi7jP1tpFZrCcyr4NsfCapiZP) minus that standard transaction fee we've been using of 0.0005 BTC. More importantly, the first output shows an OP_RETURN with the data (fe7f0a3b69f56ef2d055a78823ed3bd1422e46c3183658ea854253033ae0ccef) right after it.

Send A Raw Transaction

Sign your raw transaction and send it, and soon that OP_RETURN will be embedded in the blockchain!

Check Your OP_RETURN

You may note a warning about the data being in an "unknown protocol". If you were designing some regular use of OP_RETURN data, you'd probably mark it with a special prefix, to mark that protocol. Then, the actual OP_RETURN data might be something like "CONTRACTS3b110a164aa18d3a5ab064ba93fdce62". This example didn't use a prefix to avoid muddying the data space.

Summary: Sending a Transaction with Data

You can use an OP_RETURN opcode to store up to 80 bytes of data on the blockchain. You do this with the data codeword for a vout. You still have to send money along too, but you just send it back to a change address, minus a transaction fee.

What is the Power of OP_RETURN? The OP_RETURN opens up whole new possibilities for the blockchain, because you can embed data that proves that certain things happened at certain times. Various organizations have used OP_RETURNs for proof of existence, for copyright, for colored coins, and for other purposes. Though 80 bytes might not seem a lot, it can be quite effective if OP_RETURNs are used to store hashes of the actual data. Then, you can prove the existence of your digital data by deminstrating that the hash of it matches the hash on the blockchain.

Note that there is some controversy over using the Bitcoin blockchain in this way.