Python
如何從保存的數據庫中重新創建 HexaryTrie
我正在嘗試
HexaryTrie
從 trie 寫入的數據庫中創建一個。這是我的程式碼:
from trie import ( HexaryTrie, ) db = {} trie1 = HexaryTrie(db) trie1[b'deadbeef'] = b'deadbeef' ... trie2 = HexaryTrie(db) print(trie1.root_hash) print(trie2.root_hash) # ^ these print different root hashes :(
我在 py-trie 中看到,HexaryTrie 建構子是:
def __init__(self, db, root_hash=BLANK_NODE_HASH, prune=False): self.db = db validate_is_bytes(root_hash) self.root_hash = root_hash self.is_pruning = prune
有沒有辦法使用正在創建的數據庫來“重新”創建 trie?
先感謝您 :)
有沒有辦法使用正在創建的數據庫來“重新”創建 trie?
是的,缺少一件。
實例在
HexaryTrie
更新時跟踪其目前的根雜湊。但是如果你從數據庫載入一個新的 trie,你必須告訴它從哪個 root hash 引導。因此,設置您的初始數據:
db = {} trie1 = HexaryTrie(db) trie1[b'deadbeef'] = b'deadbeef' ...
重新創建原始問題:
trie2 = HexaryTrie(db) # because this doesn't have a root hash to look up the nodes, this # returns empty data. Side note: I wish it raised a KeyError here... assert trie2[b'deadbeef'] == b''
要成功查找數據,您可以在執行時更改根雜湊:
trie2.root_hash = trie1.root_hash # The trie can now find the desired data: assert trie2[b'deadbeef'] == b'deadbeef'
或者,使用正確的根雜湊創建 trie:
trie3 = HexaryTrie(db, root_hash=trie1.root_hash) assert trie3[b'deadbeef'] == b'deadbeef'