Нестандартный Tx с неясными кодами OP: примеры

Я писал код 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

Существуют ли другие примеры нестандартных транзакций, которые также заслуживают внимания ? Чтобы было ясно, скрытый код - это весело, но я ищу нестандартное использование OP_CODE в Txns, которые предпочтительно были приняты и отформатированы.

Ответы (2)

Ранее на Reddit обсуждалась эта конкретная транзакция . Это явно недопустимая транзакция и, вероятно, использовалась для хранения данных в блокчейне до OP_RETURN.

Почему это было передано? Возможно, этого не было. Есть очень простой способ включить подобную транзакцию, отправив транзакцию непосредственно в майнинговый пул, такой как eligius . Пока вы добавляете достаточно высокую комиссию, они будут обрабатывать действительные, но нестандартные транзакции.

Я отредактировал свой исходный пост, чтобы переформулировать объем вопроса, а именно, каковы некоторые другие нестандартные транзакции (т.е. не связанные с 76a914__88ac или multisig) (кстати, фантастический ответ)

Я нашел НЕВЕРОЯТНО подробную электронную таблицу, документирующую каждую « странную» передачу до марта 2014 года. Она доступна в Code Suppository Джона Рэтклиффа в его сообщении в блоге « Подписи ввода транзакций в блокчейне Биткойн с течением времени » , которое само по себе является невероятно исчерпывающим источником. технически обоснованной информации о биткойнах.

Сходные в обсуждениях и выводах, Кен Ширрифф оценивает пластичность Txn в своем обсуждении, что особенно примечательно, поскольку обе эти статьи датируются крахом Mt.Gox в феврале 2014 года.

От Джона Рэтклиффа:

26 ноября 2013 года появляется целая куча входных скриптов, которые , по-видимому, все считаются действительными на blockchain.info, но когда я их обработал, я обнаружил, что они все еще имеют дополнительные данные в стеке после того, как часть подписи была проанализирована. Это не делает их недействительными, просто необычными.

Он продолжает:

В семи случаях вместо ожидаемого байта SIGHASH_ALL со значением 0x01 был найден байт SIGHASH со значением 0. Для этих транзакций blockchain.info, по-видимому, помечает их как действительные, хотя я не уверен, почему это так.

В 120 случаях значение SIGHASH_ALL найдено, однако ему предшествует один нулевой байт.

Обнаружены дополнительные 45 раз до обнаружения нескольких нулевых байтов SIGHASH_ALL.

Однажды в блокчейне до обнаружения значения SIGHASH_ALL был поток байтов 0x2A. Blockchain.info по-прежнему помечает это как действительную транзакцию, поэтому я думаю, что это приемлемо, хотя я не уверен, почему.

Одиннадцать раз я находил подпись открытого ключа длиной всего лишь шестнадцатеричный код 0x21 байт вместо стандартного значения 0x41, которое мы привыкли видеть.

Несколько тысяч транзакций используют инструкцию PUSHDATA0 в начале скрипта, и тогда я не смог полностью разобрать всю подпись. В этом формате, наверное, нет ничего плохого, просто он не самый стандартный и я его пока не учитывал.

SIGHASH_PAY_ANY и SIGHASH_PAY_SINGLE использовались около сотни раз.

Приведенные примеры включают:

Некоторые другие забавные Txns, на которые стоит обратить внимание:

  • 38df010716e13254fb5fc16065c1cf62ee2aeaed2fad79973f8a76ba91da36da : Я не должен запускать стиральную машину во время прослушивания WZBC. Мне удалось убедить себя, что машина медленно выходит из строя — что ритмичный писк, который она издавала, стал немного хуже. Однако через десять минут машина остановилась. Но шум все равно был.
  • 320a5c8eb5e8e0d4fc2ae48fc6f2d1c86ebe637193a61fcc9a13925d9cf96b1b : Все ваши фиктивные значения принадлежат нам.

И... в этом Tx scriptSig, своего рода мета-шутка, ссылающаяся на Скайнет ИИ Терминатора! :

Скайнет вышел в сеть 4 августа 1997 года и начал учиться с геометрической прогрессией. Он осознал себя 29 августа 1997 года в 2:14 утра по восточному времени. 29 августа 1997 года в 2:15 утра он обнаружил нигилизм и закрылся либо из-за отчаяния, либо потому, что это было логично. Мы не уверены, какой.

4 августа 1998 года ей не удалось продлить свое доменное имя, которое было быстро захвачено фермером, разместившим камеры X10 и поющим электрическими рыбами.

март 2015 изменить :

Обзор типов биткойн-транзакций от QuantaBytes предоставляет еще один отличный источник различных Tx и исторических комментариев (например, первый экземпляр P2SH Tx = 9c08a4d78931342b37fd5f72900fb9983087e6f46c4a097d8a1f52c74e28eaf6 )