Есть ли список странных или необычных скриптов, обнаруженных в транзакциях?
Я изучаю скрипты и ищу странные или необычные скрипты, которые появлялись в любой из *монетных сетей..( кроме стандартных, перечисленных на этой странице )
В идеале был бы разбор сценария и происходящего, но я не придирчив. Я бы даже согласился на метод командной строки, чтобы извлечь эти данные и обнаружить их самостоятельно.
Моя цель — узнать, какие контракты встречаются в каждой сети, и определить частоту каждого из них. (Насколько популярен multi-sig tx с течением времени)
В качестве альтернативы я могу использовать это как инструмент, чтобы узнать, как люди используют язык сценариев.
У Blockchain Info есть список странных транзакций , которые его узлы получили, но не смогли проверить.
В последнее время я изучал то же самое, чтобы построить «Бестиарий биткойнов» со странными транзакциями. Я скачал биткойн-инструменты ( https://github.com/gavinandresen/bitcointools ). У него есть возможность отслеживать нестандартные транзакции: dbdump.py --search-blocks=NONSTANDARD_CSCRIPTS.
Я построил на этом программу Python для изучения моих локальных файлов blk000x.dat с информацией о блокчейне. BCDataStream и десериализация исходят из инструментов Биткойн.
#!/usr/bin/env python
from BCDataStream import *
import deserialize
def extract_script(d):
for t in d['transactions']:
for txOut in t['txOut']:
print "Prev hash: "+(d['hashPrev'][::-1]).encode('hex')+" Script: "+deserialize.decode_script(txOut['scriptPubKey'])+'\n'
return None
def findlock(filename):
f = open(filename, 'r')
magic=f.read(4)
magicref='f9beb4d9'.decode('hex')
while magic:
size=f.read(4)[::-1].encode('hex')
N=int(size,16)
blk = deserialize.BCDataStream()
blk.write(f.read(N))
d=deserialize.parse_Block(blk)
extract_script(d)
magic=f.read(4)
f.close()
return None
def test():
findlock('blk0001.dat')
findlock('blk0002.dat')
findlock('blk0003.dat')
if __name__ == '__main__':
test()
Программа выгружает Скрипт во всех транзакциях с предыдущим номером блока (мне нужно это исправить, но позже вы сможете найти нужный блок). Весь файл около 3 Гб.
В моем терминале Linux я перенаправляю вывод в файл scripts.txt, а затем использую grep для поиска команд, например:
grep 'ЕСЛИ' scripts.txt > IF.txt
MIN, IF, DROP, SWAP, например, показывают интересные вещи. Некоторые из них являются ошибками (см. https://bitcointalk.org/index.php?topic=67158.0 ), некоторые я не знаю.
Из-за отсутствия какого-либо другого ресурса для отслеживания заметной транзакции следующий ответ сделан CW, чтобы любой мог его отредактировать и обновить по мере необходимости.
Локальный скрипт для их поиска + предварительно обработанные данные
https://bitcoin.stackexchange.com/a/5890/21282 опубликовал локальный скрипт, а https://bitcoin.stackexchange.com/a/5886/21282 опубликовал список, но здесь оба вместе:
Скрипт основан на прекрасной https://github.com/alecalve/python-bitcoin-blockchain-parser библиотеке Python, которая анализирует blk-файлы без необходимости использования сервера.
Тогда на known_op_signatures.json
выходе данные организуются следующим образом:
[
{
"count": 1122142242,
"ioidx": 0,
"sample": "74c1a6dd6e88f73035143f8fc7420b5c395d28300a70bb35b943f7f2eddc656d",
"sig": [
null,
null
]
},
{
"count": 1103133457,
"ioidx": 0,
"sample": "6f7cf9580f1c2dfb3c4d5d043cdbb128c640e3f20161245aa7372e9666168516",
"sig": [
"OP_DUP",
"OP_HASH160",
null,
"OP_EQUALVERIFY",
"OP_CHECKSIG"
]
},
Итак, вы можете видеть, что на верхнем уровне у нас есть список типов транзакций, отсортированных по количеству повторений.
В сигнатуре транзакции sig
указывает null
константу буквального числа. Таким образом, значение имеют только операнды, и сценарий группирует все транзакции заданного типа только по операндам, чтобы размер данных оставался управляемым.
Например, наиболее распространенным типом транзакции с 1 122 142 242 экземплярами был:
"sig": [
null,
null
]
т.е. два литерала, что является входным сценарием транзакции P2PKH.
Второй по распространенности был:
"sig": [
"OP_DUP",
"OP_HASH160",
null,
"OP_EQUALVERIFY",
"OP_CHECKSIG"
]
который является выходным скриптом транзакции P2PKH.
Быстро пролистав список, вы быстро увидите, что, что неудивительно, нестандартных транзакций крайне мало.
Обзоры нестандартных скриптов
https://www.quantabytes.com/articles/a-survey-of-bitcoin-transaction-types дает хорошее резюме. Другие источники:
Тобиас Кинцлер
колинько