Block

如何解析塊索引 leveldb 中的值?

  • June 9, 2019

所以我正在嘗試用 Python 讀取塊文件。

從這個連結, 區塊鏈 levelDB 中使用的鍵是什麼(即鍵:值對是什麼)?,它告訴您如何使用 leveldb 訪問文件。所以我寫了一個類來讀取元數據。

class ReadBytes:
   def __init__(self, bytes):
       self.posistion = 0
       self.bytes = bytes

   def get_int(self, byte_count):
       self.posistion += byte_count
       return decode(self.bytes[self.posistion - byte_count:self.posistion][::-1], 256)

   def get_var_int(self):
       self.posistion += 1
       value = byte_to_int(self.bytes[self.posistion - 1])
       if value < 253:
           return value
       return self.get_int(pow(2, value - 252))

但是從這個連結,<https://github.com/bitcoin/bitcoin/blob/master/src/chain.h#L364>,原來有這個東西叫VarIntMode::NONNEGATIVE_SIGNED我絆倒了。我可以用我的 Python 類讀取正常的 var int,但是如何在 Python 中讀取非負符號的?

非負有符號 varint 只是普通 varint,但應放入有符號整數,而不是像普通 varint 那樣放入無符號整數。你只需要檢查它是否是一個非負整數。

例如,不是將 32 位 varint 解碼為 ,而是將uint32_t其解碼為int32_t並檢查它的值是否為&gt;= 0


您的程式碼看起來已經將事物解碼為有符號整數。我建議您不要使用內置於各種類中的 Python 轉換,而是使用該struct模組,以便您可以指定要解碼的字節的字節序和符號。

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