美文网首页
[学习笔记]Merkle Tree go语言实现

[学习笔记]Merkle Tree go语言实现

作者: William1125 | 来源:发表于2018-07-17 23:28 被阅读0次

梅克尔树的结构比较简单,其设计思想比较巧妙,它是SPV实现的关键。
梅克尔树是二叉树,节点存储哈希指针,叶子节点保存数据。

  1. Merkle Tree节点结构体
type MerkleNode struct {
    Left *MerkleNode
    Right *MerkleNode
    Data []byte
}
  1. 创建Merkle Tree节点
func NewMerkleNode(left,right *MerkleNode, data []byte) *MerkleNode {
    mNode := MerkleNode{}

    if left == nil && right == nil {
        hash := sha256.Sum256(data)
        mNode.Data = hash[:]
    }else {
        prevHashes := append(left.Data,right.Data...)
        hash := sha256.Sum256(prevHashes)
        mNode.Data = hash[:]
    }

    mNode.Left = left
    mNode.Right = right

    return &mNode
}
  1. 构建Merkle Tree
func NewMerkleTree(data [][]byte) *MerkleTree  {
    var nodes []MerkleNode

    if len(data) % 2 != 0 {
        data = append(data, data[len(data) - 1])
    }

    for _, dataitem := range data {
        node := NewMerkleNode(nil, nil, dataitem)
        nodes = append(nodes, *node)        
    }

    for i := 0; i<len(data)/2; i++ {
        var newNodes []MerkleNode

        for j := 0; j < len(nodes); j += 2 {
            node := NewMerkleNode(&nodes[j], &nodes[j+1], nil)
            newNodes = append(newNodes , *node)
        }

        nodes = newNodes 
    }

    mTree := MerkleTree{&nodes[0]}

    return &mTree
}

相关文章

  • [学习笔记]Merkle Tree go语言实现

    梅克尔树的结构比较简单,其设计思想比较巧妙,它是SPV实现的关键。梅克尔树是二叉树,节点存储哈希指针,叶子节点保存...

  • 2.BTC-数据结构

    本篇文章主要介绍比特币中的数据结构:Merkle Tree。 一、Merkle Tree Merkle Tree翻...

  • 浅析Merkle Tree——分布式系统数据校验的基石

    什么是Merkle Tree Merkle Tree是一种基于哈希的数据结构。Merkle Tree是一种树状数据...

  • Merkle Tree学习

    转载于:风之舞555 Merkle Tree学习 /最近在看Ethereum,其中一个重要的概念是Merkle T...

  • Merkle Tree算法学习

    默克尔树详细讲解推荐文章Merkle tree wikipedia Merkle Tree Structure M...

  • Merkle Tree浅议

    Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的...

  • 笨办法学golang(三)

    这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布...

  • 《锋哥论道区块链》之三区块链基础--Merkle Tree

    1.Merkle Tree基本概念Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储has...

  • Merkle DAG

    Merkle DAG   Merkle DAG跟Merkle Tree很相似,但不完全一样,Merkle DAG不...

  • 笨办法学golang(二)

    这是Go语言学习笔记的第二篇文章。 Go语言学习笔记参考书籍「Go语言编程」、Go官方标准库 前文提要 上篇文章中...

网友评论

      本文标题:[学习笔记]Merkle Tree go语言实现

      本文链接:https://www.haomeiwen.com/subject/nzhnpftx.html