ビットコインのブロックチェーンにデータを記録する(OP_RETURNの利用)

2015年4月30日

bitcoin

 

 

ブッロチェーンの仕組みの可能性としてスマートプロパティが挙げられる。「Proof of Existence」というサービスは、自分のドキュメントの中身を第三者に公表することなくそのデータの存在証明をすることができる。つまりビットコインのネットワークにはコイン自体の情報(残高など)だけではなく、ある任意の情報を記録することができる。

 

 

Proof of Existence については「Bitcon2.0系サービス「Proof of Existence」の存在証明について調べてみたこと」を参照。

 

 

今回はBitcoreライブラリーを利用して、ビットコインのブロックチェーン(blockchain)にデータを記録してみた。ビットコイン・スクリプト(Script)のOP_RETURNを活用したもので、 Proof of Existence のようなサービスを実現することができる。

 

 

Bitcoreライブラリーについては「Bitcoreでビットコイン・アドレスを生成する」を参照。

 

内容・手順

0.0001BTCを保有してあるAアドレス(a_address)を用意しておく。
そのAアドレスを利用して、このブログ名である「アクト・オブ・リーディング」という文字列をOP_RETURNを利用してブロックチェーンへ記録した。

 

開発環境
Mac OS 10.9.5 Safari7.0.6
Bitcore v0.11

 

 

結果下記画像をクリックするとBLOCKCHAIN infoのページが開く)


 

OP_RETURN

 

OP_RETURNの右に表示しているデータ、e382a2e〜をコピーして「16進数を文字列に自動変換&その逆をするツール」のようなサイトでデコードしてみると、アクト・オブ・リーディングという文字に変換されるのがわかる。

 

 

説明


 

■トランザクション

 

通常ビットコインの取引記録(トランザクション)は、自分のアドレスから相手のアドレスへコインがどれだけ移動したのかが記録される。

 

もう少しプログラム的な言い方をすると、取引ごとにトランザクションが生成され、そこには入力(インプット/inputs)と出力(アウトプット/outputs)が記録される。つまり以前の取引の記録を参照し(入力/一つ前のトランザクションの出力を集めたものでもある)、相手に送るコインの量(出力)を設定する。ビットコインネットワークにおいて、トランザクションは入力を消費し、新たな出力を作り出す処理とも言える。

 

 

トランザクションの大まかな図解

トランザクション

 詳しくはビットコインにおけるトランザクション、その展性と影響(PDF)を参照。

 

 

■OP_RETURNについて

 

このトランザクションの出力部分(正確には出力におけるscriptPubKey)に40bytesまでの任意のデータを含ませることができる。これがOP_RETURNとしての機能で、ビットコインを送る相手を指定しなくてもトランザクションを生成し、ネットワークへとブロードキャストすることができる。

 

ただし、そのトランザクションをブロックチェーンに取り込むための手数料はかかる。通常少額取引は手数料0.0001BTCが必要となる。もしOP_RETURNだけを利用するのならば、最低0.0001BTCを保有したビットコインアドレスを用意しておく。

 

日本語の場合UTF-8で符号化され1文字が3bytesとなるので、13文字までのデータ付加が可能となる(半角英数字は1byteなので40文字まで)。

 

 

■コード

下記ファイルはボタン等を設置していないのでブラウザで表示(画面自体は真っ白)させるだけで実行されるようになっている。

 

15行目 a_address のアドレスにはすでに0.0001BTCが保有されている。

25行目にて .addData をトランザクション生成時に付け加えている。これがOP_RETURNのデータとなる。

 

 

注意

.addDataを設定した場合、おつり(.change)を指定しておかないと残高全てを失うので注意。例えば1BTCを保有しているアドレスを利用して.addDataを設定しトランザクションを生成した場合、手数料(.fee)を0.0001BTCに設定しても、つり先を指定しておかないと1BTC全てが失われてしまう。テストネットでもOP_RETURNはテストできるのではじめはそちらで試そう→「ビットコインのテストネット(Testnet)を利用する」を参照。

 

このブログ記事の例では0.0001BTCを保有しているアドレス(a_address)から手数料0.0001BTCを引いて、差し引きがちょうど0BTCになるようにしているので.changeを設定していない。

 

 

ログ(×部分は加工済み)

28行目 console.log(“transaction”,transaction.toJSON());

 

 

参照


 

Mastering Bitcoin
Chapter 5. Transactions

http://chimera.labs.oreilly.com/books/1234000001802/ch05.html#op_return

 

Explanation of what an OP_RETURN transaction looks like

http://bitcoin.stackexchange.com/questions/29554/explanation-of-what-an-op-return-transaction-looks-like

 

How to Put Custom Messages Into Bitcoin Blockchain – OP_RETURN

http://wlangiewicz.com/blog/2014/10/24/how-to-put-custom-messages-into-bitcoin-blockchain-op-return/

Copyright © 2018 アクト・オブ・リーディング All Rights Reserved.  プライバシーポリシー