Tech

Bitcoin: OP_RETURN と応用例の技術的説明

  • このエントリーをはてなブックマークに追加

Bitcoin 0.9 から利用できるようになったOP_RETURNとは何か?の説明

前提知識

  • Bitcoinの技術の知識
  • Bitcoinのトランザクションの仕様 (txout, txinの意味)
  • UTXO: (unspent transaction output)
  • BitcoinのScriptの仕様 (scriptPubKey, ScriptSigの意味)
  • coinbase
  • プログラミングの知識

概要

  • 一般的なプログラミングのreturnと同じで、そこに来るとScriptをストップする
  • その出力の参照を許さない
  • けど、それ以降に40bytesデータを入れていいことになった。現在、80bytes。
  • それを使って色々なことをするアイディアやソフトウェアが出てきた
  • データは、剪定(prune)される可能性もある
  • Bitcoin v0.9 (2014/03/19リリース) ブロック 291xxx から

OP_RETURN の仕様

以下より引用、翻訳

Script – Bitcoin

フローコントロール

ワード オプコード Hex Input Output 説明
OP_RETURN 106 0x6a なし なし トランザクションinvalidとして印をつける

説明

Script – Bitcoin

トランザクションを利用できる可能性がないだろうと印をつけるスタンダードな方法は、以下の形式で、scriptPubKeyと一緒にすることだ。

scriptPubKey: OP_RETURN {zero or more ops}

OP_RETURN は、すぐにこのスクリプトを不正とし、そのアウトプットを利用できる可能性があるscriptSigがないことを保証する。なので、そのアウトプットは、使われてなくても、すぐにUTXOセットから、削除される。

Tx eb31ca1a4c… – Bitcoin Block Explorer が一例です。ゼロの値のアウトプットを持っているので、0.125BTCの全てを、UTXO setへのエントリーを付け加えることなく、このトランザクションを採掘した採掘者に与えている。それに加え、OP_RETURNを、UTXO setに現れるデータがないトランザクションへのデータ追加に利用できる。1a2e22a717d626fc5db363582007c46924ae6b28319f07cb1b907776bd8293fc の中にあるように。P2Poolは、P2Poolが作り出すブロックのcoinbaseの中のサイドチェーンハッシュtxoutでこれをしている。
このメカニズムは、まだスタンダードなトランザクションタイプでないことに注意。なので、mainnetのノードにリレーされないこともある。

OP_RETURNの利用例

Open Assetsの場合

Mastercoinの場合

mastercoin-MSC/spec

Counterpartyの場合

Dark Wallet の場合

以下を参考に
DarkWallet/Stealth – unSYSTEM

ステルスアドレスの場合

ジョナサン・アンダーウッド氏@ Cryptocurrency Tech Japan より引用

OP_RETURN <VERSION=1byte> <NONCE=4byte> <送金者公開鍵:33byte> (=38 bytes)

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG
  • VERSIONは、ステルスアドレスのプロトコルのバージョン

以下、技術勉強会グループでのジョナサン・アンダーウッド氏の発言から引用

NONCEというのは、乱数という意味で、ステルスアドレスの最後に「prefix」というものがあり、4バイトの16進数です。obeliskのサーバにステルスの取引へのポインターを入れて、シードからのウォレット復元を促進しているんですので、何か調べる対象のものが無いといけません。なので、SHA256(NONCE+公開鍵)の頭4バイトがステルスアドレスの尻4バイトと一致するまで、NONCEを進めてbrute forceで正しいNONCEを見つけます。そうすると、シード復元の際に役立ちます。

ただし、今現在、NONCEと prefixの使い方については今後検討しないといけないみたいです。

スライド

参考になる記事

40bytes から 80 bytesに変更関連

Bitcoin Core v0.11.0から80bytesに変更されている?

便利サイト

OP_RETURNのメタデータ表示サイト

ツール

ビットコインのOP_RETURNを扱えるPythonのツール
* coinspark/python-OP_RETURN

関連サービス

  • このエントリーをはてなブックマークに追加