基于Python实现的默克尔树

这篇具有很好参考价值的文章主要介绍了基于Python实现的默克尔树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       默克尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点。 默克尔树的基础数据不是固定的,想存什么数据都可以,因为它只要数据经过哈希运算得到的哈希值。 默克尔树是从下往上逐层计算,每个中间节点是根据相邻的两个叶子节点组合计算得出的,而根节点是根据两个中间节点组合计算得出的,所以叶节点是基础。因此,底层数据的任何变动,都会传递到其父节点,一直到树的根节点。

      默克尔树是区块链技术中用于保障数据不被篡改的重要安全手段之一,有着非常重要的作用。以下例子演示了通过遍历的方式构建默克尔树,并计算和显示每个步骤的哈希值。

import hashlib #用于哈希值计算
#默克尔树节点类的定义
class MerkleNode(object):
    def __init__(self,left=None,right=None,data=None):
        self.left = left
        self.right = right
        # data中保存着哈希值
        self.data = data

#以递归的方式构建默克尔树
def createTree(nodes):
    list_len = len(nodes)
    if list_len == 0:
        return 0
    else:
        while list_len %2 != 0:
            nodes.extend(nodes[-1:])
            list_len = len(nodes)
        secondary = []
        #两两合并节点,并计算其哈希值
        for k in [nodes[x:x+2] for x in range(0,list_len,2)]:
            d1 = k[0].data.encode()
            d2 = k[1].data.encode()
            md5 = hashlib.md5()
            md5.update(d1+d2)
            newdata = md5.hexdigest()           
            node = MerkleNode(left=k[0],right=k[1],data=newdata)
            secondary.append(node)
        if len(secondary) == 1:
            return secondary[0]
        else:
            return createTree(secondary)
        
#利用广度优先搜索算法对节点数据进行遍历
def BFS(root):
    print('开始广度优先搜索,构建默克尔树...')
    i=0
    queue = []
    queue.append(root)
    while(len(queue)>0):
        e = queue.pop(0)
        i+=1
        #print("Hash Value:"+str(i),e.data)
        if e.left != None:
            queue.append(e.left)
        if e.right != None:
            queue.append(e.right)
        print("Hash value:"+str(i),e.data)


if __name__ == "__main__":
    blocks = ['node1','node2','node3','node4'] #示例数据,包含4个节点
    nodes = [] #节点初始化
    print("节点哈希值:")
    for element in blocks: #遍历示例数据
        md5 = hashlib.md5() #摘要算法
        md5.update(element.encode())
        d=md5.hexdigest() #计算节点的信息摘要
        nodes.append(MerkleNode(data=d)) #添加至默克尔树节点中
        print(element+":",d)
    root = createTree(nodes) #创建默克尔根节点
    BFS(root) #基于BFS算法构建默克尔树并输出所有的哈希(摘要)

运行截图如下:

pythonmerkle树代码,Python区块链开发,数据结构,python,区块链

 文章来源地址https://www.toymoban.com/news/detail-781187.html

到了这里,关于基于Python实现的默克尔树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 区块链——默克尔树

    区块链——默克尔树

    默克尔树是一种二叉树,由一组叶节点、一组中间节点和一个根节点构成,看下图: 我们从最底部开始看,D0、D1、D2和D3是叶子节点包含的数据,也就是叶子节点的value,继续往上看,N0、N1、N2和N3是就是叶子节点,它是将数据(也就是D0、D1、D2和D3)进行hash运算后得到的ha

    2024年04月10日
    浏览(22)
  • 区块链的数据结构(二)——默克尔树(Merkle Tree)

    区块链的数据结构(二)——默克尔树(Merkle Tree)

            区块链中的另外一个数据结构是Merkle tree,在比特币中使用的就是这种结构:         可能没有听说过Merkle tree,但一定听说过binary tree(二叉树)。         Merkle tree和binary tree的区别:Merkle tree用哈希指针代替了普通的指针         每个框内的两个哈希值

    2024年02月21日
    浏览(9)
  • 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明

    区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明

           是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统的公式自动调整难度,这个公式是由最新2016个区块的花要时长与期望时长(期望时长为20160分钟,即两周,是按每10分钟一个区块的产生速率计算出的总时长 )比较得出的,根据实际时长与期望时

    2023年04月08日
    浏览(36)
  • python生成特殊矩阵:循环矩阵、汉克尔矩阵、费德勒矩阵……

    scipy.linalg 中提供了一系列特殊矩阵的生成方法,包括循环矩阵、汉克尔矩阵、费德勒矩阵、阿达马矩阵、莱斯利矩阵、希尔伯特及其逆矩阵、帕斯卡及其逆矩阵等。 现有一向量 c = [ c 0 , c 1 , ⋯   , c n ] c=[c_0, c_1,cdots,c_n] c = [ c 0 ​ , c 1 ​ , ⋯ , c n ​ ] ,则 circulant(c) 返回一

    2024年02月13日
    浏览(7)
  • 基于Lasso回归的实证分析(Python实现代码)

    基于Lasso回归的实证分析(Python实现代码)

    基于Lasso回归的实证分析 一、背景 随着信息化时代的到来,对如证券市场交易数据、多媒体图形图像视频数据、航天航空采集数据、生物特征数据等数据维度远大于样本量个数的高维数据分析逐渐占据重要地位。而在分析高维数据过程中碰到最大的问题就是维数膨胀,也就是

    2024年02月01日
    浏览(25)
  • BP神经网络(Python代码实现)基于pytorch

    BP神经网络(Python代码实现)基于pytorch

     BP(Back Propagation)神经网络是一种按误差逆传播算法训练的多层前馈网络,它的学习规则是 使用梯度下降法 , 通过反向传播来不断调整网络的权值和阈值 ,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hiddenlayer)和输出层(output layer)。BP网络的学习

    2024年02月11日
    浏览(37)
  • rabbitMQ~工作模式代码实现【基于python pika模块】

    rabbitMQ~工作模式代码实现【基于python pika模块】

    1 简单模式 2 工作模式 3 发布订阅模式 4 路由模式 5 主题模式

    2024年01月23日
    浏览(29)
  • Python 基于pytorch实现多头自注意力机制代码;Multiheads-Self-Attention代码实现

    Python 基于pytorch实现多头自注意力机制代码;Multiheads-Self-Attention代码实现

    多头自注意力机制(Multi-Head Self-Attention)是一种注意力机制的变体,用于增强模型在处理序列数据时的建模能力。它在自注意力机制的基础上引入了多个头(Attention Head),每个头都可以学习到不同的注意力权重分布,从而能够捕捉到不同的关系和特征。 多头自注意力机制可

    2024年04月26日
    浏览(8)
  • 基于python实现最近邻插值双线性插值径向基函数插值(代码实现详细教程)

    基于python实现最近邻插值双线性插值径向基函数插值(代码实现详细教程)

    三种插值方法都是使用Python自己实现的。 寻找每个中心点周围的八个点中有无未丢失的点,如果有的话就赋值为第一个找到的点,如果没有就扩大范围再次寻找,在最大范围内都找不到的话就跳过。 使用解方程的方法求解,整体思路类似colorization作业的实现,每个点用周围

    2024年02月07日
    浏览(13)
  • python基于opencv和tkinter实现人脸识别【内附完整代码】

    人脸识别技术已经在许多领域得到了广泛应用,例如安防、金融、医疗等等。人脸识别可以帮助我们识别和验证一个人的身份,这是一项非常重要的任务。本篇博客将介绍如何使用Python和OpenCV库进行人脸识别。我们将学习如何使用OpenCV中的人脸检测器检测图像中的人脸,如何

    2023年04月14日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包