Как получить список выходов неизрасходованных транзакций (UTXO) из локальных файлов?
Где хранятся эти данные? В каких файлах эти данные полностью присутствуют?
Я так понимаю, что этот список находится в "chainstate". Но, может быть, есть более безопасный способ получить его?
Я пытаюсь извлечь его из локальных файлов, которые биткойн-клиент сбрасывает на диск.
Я думаю, что будет «Криптозащищенный набор UTXO».
Я некоторое время работал над этим как над частью более крупной библиотеки Python 2 для биткойн-инструментов. Вы можете найти его на github .
Вы можете запустить код на ldb_parser.py , который выдаст txt со всеми UTXO из состояния цепочки, проанализированного в json. (Обратите внимание, что это огромный объем данных.)
Затем вы можете вызвать функцию decode_utxo , используя данные из json, и сохранить результат в файле для его анализа. (Этот файл будет еще больше!).
Вот пример (после запуска ldb_parser.py):
from bitcoin_tools.utils import load_conf_file, decode_utxo
from json import loads, dumps
fin_name = "utxos.txt"
fout_name = "parsed_utxos.txt"
# Load config file
cfg = load_conf_file()
fin = open(cfg.data_path + fin_name, 'r')
# Output file
fout = open(cfg.data_path + fout_name, 'w')
for line in fin:
data = loads(line[:-1])
utxo = decode_utxo(data["value"])
fout.write(dumps(utxo) + '\n')
fout.close()
И каждая строка, которую вы получите в parsed_utxos.txt, будет выглядеть так:
{"coinbase": 0, "version": 1, "outs": [{"index": 1, "amount": 14250000, "out_type": 0, "data": "865e218ff25929eee880e0e3b6f95280b2d05443"}], "height": 468349}
{"coinbase": 0, "version": 1, "outs": [{"index": 0, "amount": 132000, "out_type": 1, "data": "0b2a00367244680f6da18acd861a08f0a89cb3b4"}], "height": 449294}
{"coinbase": 0, "version": 1, "outs": [{"index": 1, "amount": 2423800, "out_type": 1, "data": "7f172a63c49c5d03e3307d432bd6b784b69d0e0d"}, {"index": 2, "amount": 10000000, "out_type": 1, "data": "1d0c4b60e8270f9b6ca5f167f08a5466a0cee565"}], "height": 474328}
...
Где каждая запись в outs
выводе а, и data
соответствует данным транзакции (хеш160 адреса для транзакций P2PKH).
Теперь вы должны принять во внимание некоторые соображения:
Не каждый отдельный UTXO является P2PKH, поэтому то, что вы найдете, data
зависит от out_type
области.
out_types
0
и 1
соответствуют P2PKH и P2SH соответственно и будут иметь 20 байт данных (hash160 открытого ключа для P2PKH и scriptHash для P2SH).
out_types
2,3,4
и 5
соответствуют выходным данным P2PK и будут содержать 33 байта данных (1 байт для типа открытого ключа и 32 байта для фактического ключа).
Наконец, любое другое out_type
будет означать, что данные, хранящиеся в UTXO, не сжаты, а значение будет соответствовать размеру данных + количеству специальных скриптов ( nSpecialScripts
), которое в настоящее время равно 6). Это относится к транзакциям P2MS и нестандартным транзакциям.
Все это было извлечено непосредственно из исходного кода Bitcoin Core.
Наконец, обратите внимание, что для использования библиотеки вам необходимо установить зависимости python в requeriments.txt и создать файл conf.py, чтобы указать путь к вашей цепочке и путь к данным (или изменить код, чтобы не использовать файл конфигурации).
Набор UTXO хранится в chainstate
папке. Он хранится в базах данных LevelDB, которые могут выполнять некоторые оптимизации, которые могут затруднить анализ фактических данных на диске (например, некоторое сжатие). Если вы хотите прочитать эти данные, вам следует модифицировать Bitcoin Core, чтобы они предоставлялись вам, а не пытаться прочитать их из файлов на диске. Вы также можете открыть базы данных в средстве просмотра LevelDB, но это может привести к повреждению ваших баз данных и в противном случае не рекомендуется.
ср-ги
Питер Уилле
ср-ги
Денис Леонов
ср-ги
ср-ги
Денис Леонов
ср-ги