帶有晦澀 OP 程式碼的非標準 Tx:範例
我一直在編寫 Python 程式碼來獲取各種事務並遇到了這個問題:77822fd6663c665104119cb7635352756dfc50da76a92d417ec1a12c518fad69。
腳本欄位如下:
scriptPubKey: "OP_IF OP_INVALIDOPCODE 4effffffff ........... OP_ENDIF"
(其中…..是十六進制數據,全部約 2900 字節)這是怎麼回事..?:
- OP_IF / OP_ENDIF程式碼(維基說他們正確打開並完成一個腳本)
- OP_INVALIDOPCODE
- 0x4effffffff
- 巨大的數據量
46726f6d2061336136316665663433333039623966623233323235646637393130623033616663353436356239204d6f6e205365702031372030303a30303a303020323030310a46726f6d3a205361746f736869204e616b616d6f746f203c7361746f7368696e40676d782e636f6d3e0a446174653a204d6f6e2c2031322041756720323031332030323a32383a3032202d303230300a5375626a6563743a205b50415443485d2052656d6f7665202853494e474c457c444f55424c4529425954450a0a492072656d6f76656420746869732066726f6d20426974636f696e20696e20663165316662346264656638373863386663313536346661343138643434653735343161376538330a696e2053657074203720323031302c20616c6d6f73742074687265652079656172732061676f2e204265207761726e6564207468617420492068617665206e6f740a61637475616c6c792074657374656420746869732070617463682e0a2d2d2d0a206261636b656e64732f626974636f696e642f646573657269616c697a652e7079207c2020202038202b2d2d2d2d2d2d2d0a20312066696c65206368616e6765642c203120696e73657274696f6e282b292c20372064656c6574696f6e73282d290a0a64696666202d2d67697420612f6261636b656e64732f626974636f696e642f646573657269616c697a652e707920622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a696e64657820363632303538332e2e38396239623162203130303634340a2d2d2d20612f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a2b2b2b20622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a4040202d3238302c3130202b3238302c38204040206f70636f646573203d20456e756d65726174696f6e28224f70636f646573222c205b0a2020202020224f505f57495448494e222c20224f505f524950454d44313630222c20224f505f53484131222c20224f505f534841323536222c20224f505f48415348313630222c0a2020202020224f505f48415348323536222c20224f505f434f4445534550415241544f52222c20224f505f434845434b534947222c20224f505f434845434b534947564552494659222c20224f505f434845434b4d554c5449534947222c0a2020202020224f505f434845434b4d554c5449534947564552494659222c0a2d2020202028224f505f53494e474c45425954455f454e44222c2030784630292c0a2d2020202028224f505f444f55424c45425954455f424547494e222c20307846303030292c0a2020202020224f505f5055424b4559222c20224f505f5055424b455948415348222c0a2d2020202028224f505f494e56414c49444f50434f4445222c20307846464646292c0a2b2020202028224f505f494e56414c49444f50434f4445222c2030784646292c0a205d290a200a200a4040202d3239332c3130202b3239312c3620404020646566207363726970745f4765744f70286279746573293a0a202020202020202020766368203d204e6f6e650a2020202020202020206f70636f6465203d206f72642862797465735b695d290a20202020202020202069202b3d20310a2d20202020202020206966206f70636f6465203e3d206f70636f6465732e4f505f53494e474c45425954455f454e4420616e642069203c206c656e286279746573293a0a2d2020202020202020202020206f70636f6465203c3c3d20380a2d2020202020202020202020206f70636f6465207c3d206f72642862797465735b695d290a2d20202020202020202020202069202b3d20310a200a2020202020202020206966206f70636f6465203c3d206f70636f6465732e4f505f5055534844415441343a0a202020202020202020202020206e53697a65203d206f70636f64650a2d2d200a312e372e392e340a0a `
解碼為:
c ♣N Mú♣From a3a61fef43309b9fb23225df7910b03afc5465b9 Mon Sep 17 00:00:00 2001 From: Satoshi Nakamoto <satoshin@gmx.com> Date: Mon, 12 Aug 2013 02:28:02 -0200 Subject: [PATCH] Remove (SINGLE|DOUBLE)BYTE I removed this from Bitcoin in f1e1fb4bdef878c8fc1564fa418d44e7541a7e83 in Sept 7 2010, almost three years ago. Be warned that I have not actually tested this patch. --- backends/bitcoind/deserialize.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/backends/bitcoind/deserialize.py b/backends/bitcoind/deserialize.py index 6620583..89b9b1b 100644 --- a/backends/bitcoind/deserialize.py +++ b/backends/bitcoind/deserialize.py @@ -280,10 +280,8 @@ opcodes = Enumeration("Opcodes", [ "OP_WITHIN", "OP_RIPEMD160", "OP_SHA1", "OP_SHA256", "OP_HASH160", "OP_HASH256", "OP_CODESEPARATOR", "OP_CHECKSIG", "OP_CHECKSIGVERIFY", "OP_CHECKMULTISIG", "OP_CHECKMULTISIGVERIFY", - ("OP_SINGLEBYTE_END", 0xF0), - ("OP_DOUBLEBYTE_BEGIN", 0xF000), "OP_PUBKEY", "OP_PUBKEYHASH", - ("OP_INVALIDOPCODE", 0xFFFF), + ("OP_INVALIDOPCODE", 0xFF), ]) @@ -293,10 +291,6 @@ def script_GetOp(bytes): vch = None opcode = ord(bytes[i]) i += 1 - if opcode >= opcodes.OP_SINGLEBYTE_END and i < len(bytes): - opcode <<= 8 - opcode |= ord(bytes[i]) - i += 1 if opcode <= opcodes.OP_PUSHDATA4: nSize = opcode -- 1.7.9.4 h
是否還有其他同樣值得注意的非標準交易範例?需要明確的是,隱藏程式碼很有趣,但我正在尋找Txns中 OP_CODE 的非標準用法,這些用法最好被接受以及格式化。
之前在reddit上已經討論過這個特定的交易。這顯然不是一個有效的交易,並且可能在 OP_RETURN 之前用於在區塊鏈上儲存數據。
為什麼被轉發?可能不是。有一種非常簡單的方法可以包含這樣的交易,它是將交易直接送出到像eligius這樣的礦池。只要您添加足夠高的費用,他們就會處理有效但非標準的交易。
我發現了一個非常詳細的電子表格,記錄了截至 2014 年 3 月的每一個“*奇怪”*的 Tx。它可以在 John Ratcliff 的Code Suppository在他的“隨著時間的推移比特幣區塊鏈中的交易輸入簽名”部落格文章中找到,它本身就是一個令人難以置信的全面來源基於技術的比特幣資訊。
- 記錄“奇怪的 Txns”的電子表格(2014 年 3 月 4 日連結)
在討論和結論中,Ken Shirriff 在他的討論中評估了 Txn 的延展性,這一點尤其值得注意,因為這兩篇文章都可以追溯到 2014 年 2 月的 Mt. Gox 內爆前後。
來自約翰·拉特克利夫:
2013 年 11 月 26 日,出現了一大堆輸入腳本,這些 腳本似乎都被 blockchain.info 認為是有效的,但是當我處理它們時,我發現在簽名部分被解析後,它們在堆棧上仍然有額外的數據。這不會使它們無效,只是不尋常。
He continues:
有七次,沒有找到預期的 SIGHASH_ALL 字節 0x01,而是找到了 SIGHASH 字節 0。對於這些交易,blockchain.info 似乎將它們標記為有效,但我不確定為什麼會這樣。
在 120 次中,會找到 SIGHASH_ALL 值,但是,它前面有一個零字節。
在遇到 SIGHASH_ALL 之前又發現了 45 次多個零字節。
有一次在區塊鏈中,在找到 SIGHASH_ALL 值之前,有一個 0x2A 字節流。Blockchain.info 仍然將此標記為有效交易,所以我想這是可以接受的,儘管我不確定為什麼。
有 11 次,我發現一個公鑰簽名只有 0x21 字節長的十六進制,而不是我們習慣看到的標準 0x41 值。
數千筆交易使用腳本前面的 PUSHDATA0 指令,然後我無法完全解析所有簽名。這種格式可能沒有什麼問題,它只是不是最標準的,我還沒有考慮到它。
SIGHASH_PAY_ANY 和 SIGHASH_PAY_SINGLE 被使用了一百次左右。
提供的範例包括:
- 區塊鏈中具有“異常”簽名的第一筆交易(區塊 #157785,2010 年 12 月 17 日)
- 2013 年 12 月 13 日,區塊鏈收到了大量具有無效腳本簽名的輸入的垃圾郵件。
- 下一個異常輸入發生在 2013 年 1 月 7 日,輸入腳本僅包含 OP_1(真實語句)。這種情況在 2013 年 1 月 20 日再次發生。
- 2013 年 7 月 21 日,有人在他們簽署的交易中留下了一條有趣的簡訊。Blockchain.info 將此簽名交易標識為“託管”類型。
其他一些有趣的 Txns 需要注意:
- 38df010716e13254fb5fc16065c1cf62ee2aeaed2fad79973f8a76ba91da36da:我不應該一邊聽 WZBC 一邊執行洗衣機。我設法說服自己,這台機器正在慢慢發生故障——它一直發出的有節奏的、吱吱作響的噪音變得更糟了。然而,十分鐘後,機器停了下來。但噪音仍然存在。
- 320a5c8eb5e8e0d4fc2ae48fc6f2d1c86ebe637193a61fcc9a13925d9cf96b1b:您所有的虛擬值都屬於我們。
並且….在這個 Tx 的 scriptSig 中,一個類似於終結者的天網 AI 的元笑話!:
天網於1997年8月4日上線,開始以幾何速度學習。它在東部時間 1997 年 8 月 29 日凌晨 2 點 14 分開始有了自我意識。1997 年 8 月 29 日凌晨 2 點 15 分,它發現了虛無主義,要麼因為絕望,要麼因為合乎邏輯而關閉了自己。我們不確定是哪個。
1998年8月4日,域名更新失敗,立即被一名投放X10攝像頭、唱歌電魚的連結農夫搶注。
2015 年 3 月編輯:
QuantaBytes的比特幣交易類型調查提供了另一個重要的各種 Tx 和歷史評論來源(即P2SH Tx = 9c08a4d78931342b37fd5f72900fb9983087e6f46c4a097d8a1f52c74e28eaf6的第一個實例)