Block
如何反序列化原始塊中的事務計數?
在bitcoin-book中,區塊的“交易計數器”部分被記錄為 1~9 字節長,而不是固定大小。
這個計數器是如何從原始數據中解析出來的?
該數字被編碼為可變長度整數,請參見
txn_count
塊協議消息中的。構想如下:
- 將第一個字節讀為
marker
- 如果
marker < 0xFD
marker
是數字- 如果
marker == 0xFD
- 讀取接下來的 2 個字節作為數字
- 如果
marker == 0xFE
- 讀取接下來的 4 個字節作為數字
- 如果
marker == 0xFF
- 讀取接下來的 8 個字節作為數字
或者,在 Python 中:
def read_varint(byte_array): marker = byte_array[0] if marker < 0xfd: return marker elif marker == 0xfd: return int.from_bytes(byte_array[1:3], 'little') elif marker == 0xfe: return int.from_bytes(byte_array[1:5], 'little') else: return int.from_bytes(byte_array[1:9], 'little')
另請參閱此處的比特幣核心中的實現。