merkle树
莫科尔树存储哈希值
一棵莫科尔树,树中每个叶子节点对应一个哈希值。
莫科尔树的高度为 h,那么每个莫科尔树能够记录 2**h个完整性摘要值。
每更新一个叶子节点,需要更新从叶子节点到根的这一路径上所有节点的哈希值。
如图 ,节点 1 和节点 2 已经存储了完整性信息,新完整性信息将保存在节点 3,并且由于节点 3 的值发生变化,导致需要重新计算节点 6 和节点 7 的哈希值。
实现
from algorithm.g_hash import G_hash
""""
l左节点
r右节点
p父节点
hash存储的hash值,每修改一次叶子节点向上更新
data其他数据
"""
class Node:
def __init__(self):
self.l=None
self.r=None
self.p=None
self.hash="\\"
self.data="\\"
def change_data(self,data):
self.data=data
self.hash=G_hash(data)
return self.hash
"""
init初始化树
root根节点
h树的高度,0代表只有根节点
leaf空余的叶子数
add()从root向下递归添加h层高的节点
creat()创建h高的树 (根节点没算)
update() 其实是从左到右向空余叶子添加数据
up_update()向上更新节点知道父节点
show2层次遍历树,显示
show2由show_tree()调用
sum()是返回根节点的所有点个数
"""
class merkle_tree:
def __int__(self):
self.root = None
self.h=0
self.leaf=0
# 添加 h层树的节点
def add(self,item,h):
l= Node