說明 OP_RETURN 事務的樣子
OP_RETURN 是如何使用的,為什麼首先引入它?
注意:我出去了解了
OP_RETURN
操作碼在比特幣交易中的字節級別是如何工作的。我把它寫在這裡,以便其他人可以快速學習。首先,簡要介紹一下我們為什麼要談論OP_RETURN
.早在 2013 年,比特幣生態系統中的不同參與者都試圖將資訊位包含到交易中,以便他們可以利用區塊鏈的不可逆性。想像一下,例如,您想編寫一份契約並將其放置在一個不可更改的位置,以便在將來的任何日期都可以返回以驗證它的存在。您可以通過使用區塊鏈來做到這一點。您在事務的 scriptSig 值中添加一些位,這些位不會改變執行該腳本的最終結果,但允許您儲存諸如“我特此聲明在 UNIX_TIMESTAMP 時間將資產 A 提供給地址 XYZ”之類的資訊。人們會以更奇怪的方式添加額外的比特,比如將其包含在輸出的 BTC 值中。社區的一些成員不喜歡這樣,因為他們認為這些額外的比特會污染區塊鏈。
為了在這些反對意見中達成中間立場,核心開發人員將操作碼 OP_RETURN 設置為在比特幣交易中使用的有效操作碼,它允許在不可花費的交易中使用 80 個任意字節。可以在這裡找到一個很好的解釋:
https://bitcoinfoundation.org/bitcoin/core-development-update-5/
2014 年 2 月晚些時候,字節數從 80 字節減少到 40 字節。此更改記錄在下面的連結中。請注意,在這個拉取討論中,我們了解到在單個事務中不能包含多個帶有 OP_RETURN 的輸出:
https://github.com/bitcoin/bitcoin/pull/3737
現在我們已經了解了 OP_RETURN 背後的原因,讓我們看一個 OP_RETURN 的範例。我使用chain.com 的API 來查找在其scriptSig 中有OP_RETURN 的交易。那個 tx 的雜湊是
8bae12b5f4c088d940733dcd1455efc6a3a69cf9340e17a981286d3778615684
確保你連接到一個滿載的 bitcoind 節點,然後執行這個命令:
$> bitcoind getrawtransaction 8bae12b5f4c088d940733dcd1455efc6a3a69cf9340e17a981286d3778615684 1
這將為您提供以下輸出:
{ "hex" : "0100000001c858ba5f607d762fe5be1dfe97ddc121827895c2562c4348d69d02b91dbb408e010000008b4830450220446df4e6b875af246800c8c976de7cd6d7d95016c4a8f7bcdbba81679cbda242022100c1ccfacfeb5e83087894aa8d9e37b11f5c054a75d030d5bfd94d17c5bc953d4a0141045901f6367ea950a5665335065342b952c5d5d60607b3cdc6c69a03df1a6b915aa02eb5e07095a2548a98dcdd84d875c6a3e130bafadfd45e694a3474e71405a4ffffffff020000000000000000156a13636861726c6579206c6f766573206865696469400d0300000000001976a914b8268ce4d481413c4e848ff353cd16104291c45b88ac00000000", "txid" : "8bae12b5f4c088d940733dcd1455efc6a3a69cf9340e17a981286d3778615684", "version" : 1, "locktime" : 0, "vin" : [ { "txid" : "8e40bb1db9029dd648432c56c295788221c1dd97fe1dbee52f767d605fba58c8", "vout" : 1, "scriptSig" : { "asm" : "30450220446df4e6b875af246800c8c976de7cd6d7d95016c4a8f7bcdbba81679cbda242022100c1ccfacfeb5e83087894aa8d9e37b11f5c054a75d030d5bfd94d17c5bc953d4a01 045901f6367ea950a5665335065342b952c5d5d60607b3cdc6c69a03df1a6b915aa02eb5e07095a2548a98dcdd84d875c6a3e130bafadfd45e694a3474e71405a4", "hex" : "4830450220446df4e6b875af246800c8c976de7cd6d7d95016c4a8f7bcdbba81679cbda242022100c1ccfacfeb5e83087894aa8d9e37b11f5c054a75d030d5bfd94d17c5bc953d4a0141045901f6367ea950a5665335065342b952c5d5d60607b3cdc6c69a03df1a6b915aa02eb5e07095a2548a98dcdd84d875c6a3e130bafadfd45e694a3474e71405a4" }, "sequence" : 4294967295 } ], "vout" : [ { "value" : 0.00000000, "n" : 0, "scriptPubKey" : { "asm" : "OP_RETURN 636861726c6579206c6f766573206865696469", "hex" : "6a13636861726c6579206c6f766573206865696469", "type" : "nulldata" } }, { "value" : 0.00200000, "n" : 1, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 b8268ce4d481413c4e848ff353cd16104291c45b OP_EQUALVERIFY OP_CHECKSIG", "hex" : "76a914b8268ce4d481413c4e848ff353cd16104291c45b88ac", "reqSigs" : 1, "type" : "pubkeyhash", "addresses" : [ "1HnhWpkMHMjgt167kvgcPyurMmsCQ2WPgg" ] } } ], "blockhash" : "000000000000000004c31376d7619bf0f0d65af6fb028d3b4a410ea39d22554c", "confirmations" : 2655, "time" : 1404107109, "blocktime" : 1404107109 }
現在,看看這個交易的輸出列表,特別是第一個。通過參考比特幣維基的 Script 頁面,比特幣的基於堆棧的程式語言,我們可以在這裡看到
OP_RETURN
操作碼由十六進制值 0x6a 表示。第一個字節後跟一個字節,該字節表示 scriptPubKey 中其餘字節的長度。在這種情況下,我們看到十六進制值 Ox13,這意味著還有 19 個字節。這些字節包括您被允許在操作碼標記的事務中發送的任意小於 40 個字節OP_RETURN
。如果您將消息字節彈出到 UTF8 解碼器中,您會看到636861726c6579206c6f766573206865696469
變成“查理愛海蒂”。啊!這幾乎就像一對情侶浪漫心樹雕刻的數字版本。現在您在字節級別了解
OP_RETURN
應該如何工作。OP_RETURN
您現在可以編寫軟體,在輸出的 scriptPubKey中搜尋操作碼,並使用它來驗證合約或其他一些數字資產。