Transactions

說明 OP_RETURN 事務的樣子

  • November 29, 2021

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中搜尋操作碼,並使用它來驗證合約或其他一些數字資產。

引用自:https://bitcoin.stackexchange.com/questions/29554