獲取加密證明 UTXO 集
如何從本地文件中獲取未使用的交易輸出(UTXO)列表?
這些數據儲存在哪裡?這些數據完全存在於哪些文件中?
我了解此列表處於“鏈狀態”。但是可能有更安全的方法來獲得它嗎?
我嘗試從比特幣客戶端轉儲到磁碟上的本地文件中提取它。
我認為會有一個“加密證明的 UTXO 集”。
作為一個更大的比特幣工具 Python 2 庫的一部分,我一直在研究這個。你可以在github上找到它。
您可以在ldb_parser.py上執行程式碼,這將給出一個 txt,其中包含來自鏈狀態的所有 UTXO 解析為 json。(請注意,這是大量數據。)
然後您可以使用來自 json 的數據呼叫decode_utxo函式並將結果儲存在文件中以進行分析。(這個文件會更大!)。
這裡有一個例子(一旦你執行了 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
對應於交易數據(P2PKH 交易地址的 hash160)。現在,您必須考慮一些注意事項:
並非每個 UTXO 都是 P2PKH,因此您會在其中找到什麼
data
取決於該out_type
領域。
out_types
0
分別1
對應 P2PKH 和 P2SH,將有 20 個字節的數據(P2PKH 為公鑰的 hash160,P2SH 為 scriptHash)。
out_types
2,3,4
對應於 P2PK 輸出,5
將包含 33 個字節的數據(1 個字節用於公鑰類型,32 個字節用於實際密鑰)。最後,任何其他
out_type
都意味著 UTXO 持有的數據沒有被壓縮,該值將對應於數據大小 + 特殊腳本的數量(nSpecialScripts
目前為 6)。這是 P2MS 事務和非標準事務的情況。所有這些都是直接從比特幣核心原始碼中提取的。
最後,請注意,為了使用該庫,您需要在 requeriments.txt 中安裝 python 依賴項並創建一個 conf.py 文件來設置您的鏈狀態路徑和數據路徑(或修改程式碼以不使用配置文件)。