Adding Messages On The Bitcoin Blockchain - A How-To Guide

Written by bitcoin-in-action | Published 2020/08/07
Tech Story Tags: bitcoin | blockchain | what-is-bitcoin | blockchain-development | blockchain-use-cases | blockchain-developer | btc | bitcoin-spotlight

TLDR Luca asks: Can I write on a Bitcoin blockchain? Can I drop down a message? You can use at most 80 bytes for your message (160 hexadecimal characters) The operation is known as “timestamping of write information” because the message will become part of a block with a timestamp as well. Luca of course you can! You can leave a message on a. Bitcoin blockchain using a particular op code, calledOP_RETURN, called the OPXOOP_REASTAURANCE.via the TL;DR App

Hey!,
Today Luca asks:
Can I write on a Bitcoin Blockchain? Can I drop down a message?
Yes, Luca of course you can! You can leave a message on a Bitcoin blockchain using a particular op code, called
OP_RETURN
.
Through this operation code, your UTXO became unspendable! You can use at most 80 bytes for your message (160 hexadecimal characters)!
This operation is known as “timestamping of write information” because the message will become part of a block with a timestamp as well.

In Action

First of all, I get a SegWit address from my testnet node.
$ bitcoin-cli getnewaddress "" "bech32"
tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d
I need bitcoins! I need to use a faucet service such as: https://bitcoinfaucet.uo1.net/send.php
After that, I can check my mempool and find my TX ID.
$ bitcoin-cli getrawmempool | grep c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a
the c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a is the faucet’s transaction.
When can I use my UTXO?
I can use it after the mining process.
Please recover my UTXO with
listunspent
command.
$ bitcoin-cli listunspent 1 101 '["tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d"]' | jq
[
{
"txid": "c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a",
"vout": 1,
"address": "tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d",
"label": "",
"scriptPubKey": "00141a10dfb322436bc2177358a8fd876e6ebf5658a3",
"amount": 0.00100000,
"confirmations": 6,
"spendable": true,
"solvable": true,
"desc": "wpkh([3a46ecca/0'/0'/4']020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f)#kxjva7dw",
"safe": true
}
]
Nice! I need to retrieve the private key, as we know it’s mandatory to sign my transaction.
$ bitcoin-cli dumpprivkey tb1qrggdlvezgd4uy9mntz50mpmwd6l4vk9rm4ft3d
cPHTHs7ERe6jDYiitj9eLVswsX3RpeKMB19eXYjpLb4CkEHd7drq
Now, we are able to create an amazing message, for instance: corsocompleto.bitcoininaction.com.
Yep, we need to use hexadecimal!
$ printf "corsocompleto.bitcoininaction.com" | xxd -ps
636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d
I have the necessary to create the transaction!
Using
help
I can retrieve a lot of information about this method. I want to use it on
createrawtransaction
.
$ bitcoin-cli help createrawtransaction
The receiver is the faucet’s address, I give back bitcoins :).
The address is:
2NGZrVvZG92qGYqzTLjCAewvPZ7JE8S8VxE
Finally, I can build my transaction, in the data field I can put my hexadecimal message. Remember that it will create an operation code
OP_RETURN
as we discussed above.
$ bitcoin-cli createrawtransaction '[{"txid":"c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a","vout":1}]' '[{"2NGZrVvZG92qGYqzTLjCAewvPZ7JE8S8VxE":0.00099000},{"data":"636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d"}]'
02000000019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d00000000
n.b. As you can see I have just one input, for that reason I don’t need of change address because I don’t have any change!
Furthermore, I don’t spend my entire output because I need to pay fees (input-output = fees).
Nice, we created the transaction data!
Yeah!
The next step is to sign it and send it!
We need to use the
signrawtransactionwithkey
method.
$ bitcoin-cli signrawtransactionwithkey 02000000019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d00000000 '["cPHTHs7ERe6jDYiitj9eLVswsX3RpeKMB19eXYjpLb4CkEHd7drq"]' '[{"txid":"c5ce66d638f1b8ca702dfb8f7d1da7a6707d9c6497212dc66829c99f69b28b9a","vout":1,"scriptPubKey":"00141a10dfb322436bc2177358a8fd876e6ebf5658a3","amount":0.00100000}]'

{
"hex": "020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000",
"complete": true
}
Nice, the signature is valid, now we gonna send the transaction with
sendrawtransaction
method.
$ bitcoin-cli sendrawtransaction 020000000001019a8bb2699fc92968c62d2197649c7d70a6a71d7d8ffb2d70cab8f138d666cec50100000000ffffffff02b88201000000000017a914ffd0dbb44402d5f8f12d9ba5b484a2c1bb47da42870000000000000000236a21636f72736f636f6d706c65746f2e626974636f696e696e616374696f6e2e636f6d0247304402205688399cb5a230f050330e2bc6d04d9864d459f85fec48a0118ca31be9239d530220228d7c04fe9e6eea3690033c01ed222284efaa01b28a9a7cae809bdb32d7ce7a0121020d12775323bbdaf0cb6e9a2b44ae7a591ef5872364e80e363a93d283c10b9e4f00000000

edee419f93521f43259b763ffb42e4b882504534494381b7e18057015a27c548
We obtained the transaction id.
We can use a block explorer (https://tbtc.bitaps.com/) with the transaction id in order to find out the transaction and check its structure.
Our message! Amazing Bitcoin course 🚀 —corsocompleto.bitcoininaction.com
The transaction has been sent properly and now it’s waiting for mining.
It contains two outputs. One of them is for faucet’s address, the other one is an unspendable UTXO, because it contains our message with operation code:
OP_RETURN
.
Through this example, we can now understand which operation code is used to “write” on the Bitcoin Blockchain.
You can find the code in our GitHub!
Do you want more?
You rock 🎸!
Check our books, they are available at Amazon and corsobitcoin.com (accept bitcoin)
See you next time! 🤟🏻
— —
Television isn’t a good idea (Radio Stations)
Email isn’t a good idea (Post offices)
Amazon isn’t a good idea (Retail stores)
Bitcoin isn’t a good idea (Central banks)
In crypto we trust

Written by bitcoin-in-action | See on https://bitcoininaction.com
Published by HackerNoon on 2020/08/07