Blockchain

帶有晦澀 OP 程式碼的非標準 Tx:範例

  • March 21, 2015

我一直在編寫 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在他的“隨著時間的推移比特幣區塊鏈中的交易輸入簽名部落格文章中找到,它本身就是一個令人難以置信的全面來源基於技術的比特幣資訊。

在討論和結論中,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 被使用了一百次左右。

提供的範例包括:

其他一些有趣的 Txns 需要注意:

並且….在這個 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的第一個實例)

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