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 の仕様
以下より引用、翻訳
フローコントロール
ワード | オプコード | Hex | Input | Output | 説明 |
---|---|---|---|---|---|
OP_RETURN | 106 | 0x6a | なし | なし | トランザクションinvalidとして印をつける |
説明
トランザクションを利用できる可能性がないだろうと印をつけるスタンダードな方法は、以下の形式で、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の場合
- open-assets-protocol/specification.mediawiki at master · OpenAssets/open-assets-protocol
- Open Assets Protocolの仕様(訳) – Develop with pleasure!
Mastercoinの場合
Counterpartyの場合
- Protocol Specification | Counterparty
- tokenly/counterparty-spec
-
調べてまとめました。
- Counterpartyの技術情報 まとめ | block-chain.jp
- Bitcoin – Counterparty プロトコルにおけるデータ保存方法 | block-chain.jp
Dark Wallet の場合
以下を参考に
DarkWallet/Stealth – unSYSTEM
ステルスアドレスの場合
ジョナサン・アンダーウッド氏@ Cryptocurrency Tech Japan より引用
OP_RETURN <送金者公開鍵: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の使い方については今後検討しないといけないみたいです。
スライド
参考になる記事
- 21 – Embedding data in the blockchain with OP_RETURN
- Bitcoin Foundationのブログ記事 Core Development Update #5
40bytes から 80 bytesに変更関連
Bitcoin Core v0.11.0から80bytesに変更されている?
- Coinprismのブログ 80 bytes OP_RETURN explained – Coinprism Blog
- マージされた80byteに増やすPull Requestと議論 Change the default maximum OP_RETURN size to 80 bytes by Flavien · Pull Request #5286 · bitcoin/bitcoin
- Mastercoin OP_RETURN 80-byte limit restored, enable prunable outputs · Issue #283 · mastercoin-MSC/mastercore
- Counterparty Update
OP_RETURN
Size Limit to 80 Bytes · Issue #690 · CounterpartyXCP/counterparty-lib
便利サイト
OP_RETURNのメタデータ表示サイト
ツール
ビットコインのOP_RETURNを扱えるPythonのツール
* coinspark/python-OP_RETURN