Block

如何反序列化原始塊中的事務計數?

  • February 27, 2021

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')

另請參閱此處的比特幣核心中的實現。

引用自:https://bitcoin.stackexchange.com/questions/103085