Transactions
用 python 解析原始比特幣塊的最佳方法是什麼?
假設一個連接到 zmq 套接字並監聽 rawblock。你如何解析塊頭如下:
block_header = raw[:80] version = block_header[:4] prev_merkle_root = block_header[4:36] merkle_root = block_header[36:68] timestamp = block_header[68:72] bits = block_header[72:76] nonce = blockheader[76:80]
但是,解析區塊中所有交易的最佳方式是什麼?將 rawtx 轉換為 tx 對像很容易,很多庫都可以做到。但是解析可變長度的 txs 塊的最佳方法是什麼?
我們將比較現代庫與 segwit 和 bech32 的支持。
首先是來自bitaps.com的 pybtc,其次是來自chainside.net的 btcpy
我們的測試程式碼:
import time import pybtc f = open('raw_block.txt') fc = f.readline() qt = time.time() block_hex = fc[:-1] bt = pybtc.Block(block_hex, format="decoded") print("pybtc library parsed block in decoded format", time.time() - qt ) qt = time.time() bt = pybtc.Block(block_hex, format="raw") print("pybtc library parsed block in raw format", time.time() - qt ) from btcpy.structs.block import Block as btcpy_block qt = time.time() block = btcpy_block.unhexlify(block_hex) print("btcpy library parsed block", time.time() - qt )
您可以在此處下載使用的原始塊
測試結果:
pybtc library parsed block in decoded format 0.3380300998687744 pybtc library parsed block in raw format 0.0953378677368164 btcpy library parsed block 0.6518878936767578
可以看到 pybtc 塊解析性能更好。解碼模式意味著將所有字節轉換為十六進制,並將地址轉換為 base58 或 bech32。原始模式更快,但所有對像都以原始字節、地址儲存為雜湊值。
檢查這個庫pybtc
解碼原始塊的類 <https://github.com/bitaps-com/pybtc/blob/master/pybtc/block.py#L5>