diff --git a/src/hashtree.py b/src/hashtree.py --- a/src/hashtree.py +++ b/src/hashtree.py @@ -1,4 +1,5 @@ -import hashlib +import collections +import hashlib import os from datetime import datetime @@ -85,3 +86,19 @@ class HashTree: self.store[i]=hashBlock(self.store[i*2+1]+self.store[i*2+2]) progress.p(i) progress.done() + + ## Update faster than repeated insertLeaf. + def batchUpdate(self,keysHashes): + queue=collections.deque() + for (k,v) in sorted(keysHashes): + self.store[k]=v + parentK=(k-1)//2 + if len(queue)==0 or queue[-1]!=parentK: + queue.append(parentK) + + while len(queue)>0: + k=queue.pop() + self.store[k]=hashBlock(self.store[k*2+1]+self.store[k*2+2]) + parentK=(k-1)//2 + if (len(queue)==0 or queue[0]!=parentK) and k!=0: + queue.appendleft(parentK)