蟒蛇3的实现
perkle的Python项目详细描述
perkle:merkle树的简单python 3实现
perkle提供了一个简单的、全python的merkle树实现。
安装
该软件包可以通过pip安装:
pip install perkle
或者克隆这个存储库。
包pycryptodome
在需求中。确保这不会与(不推荐使用的)包pycrypto
的安装冲突。
示例
下面是如何创建从0到9的merkle数树:
fromCrypto.HashimportSHA256fromperkleimportMerkleTreefrombinasciiimporthexlifydata_list=[b'0',b'1',b'2',b'3',b'4',b'5',b'6',b'7',b'8',b'9']sha256=lambdax:SHA256.new(x).digest()mt=MerkleTree(data_list,sha256,random_padding=False,padding_byte=b'0')print(hexlify(mt.root()))#70cc27c03c0444d1dfc63f58e373a2882a7b9f4f7f6ed1a4dfc1a94a5ac5875c
默认情况下,我们向数据添加一个随机填充,使其具有两个叶的幂。可以使用random_padding
参数使填充非随机,以使结果一致。
可以在merkle树中插入新数据:
data=b'10'mt.insert(data)print(hexlify(mt.root()))#3e32b51c76de4b124f1fedfbb4d5a30d117274bf04b538ca7f10434e2f8a35b9
和现有数据可以更新:
new_data=b'zero'mt.update(0,new_data)print(hexlify(mt.root()))#d485ca0c92d339d2e8495216cdb420f0e215003fffdb62d09da56d8739c94a11
证据很容易生成:
index,proof_hashes=mt.proof(b'7')
并验证:
print(MerkleTree.verify(b'7',index,proof_hashes,mt.root(),sha256))#True