[ethereum源码分析](2) ethereum基础知识

前言

  上一章咱们介绍了如何搭建ethereum的debug环境。为了更深刻的了解ethereum,咱们须要了解一些ethereum的相关的知识,本章咱们将介绍这些知识。html

ethereum相关知识

  在学习ethereum的过程当中,咱们可能会遇到下面的一些知识:算法

  1. hash
  2. merkle tree
  3. merkle patricia tree
  4. rlp

Hash(散列函数)

  Hash,通常翻译作“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫作预映射pre-image)经过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间一般远小于输入的空间,不一样的输入可能会散列成相同的输出,因此不可能从散列值来肯定惟一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。(本段来自百度百科>._<)segmentfault

下面让咱们来看看hash的一些特性(想了解更多关于hash的知识请自行百度):网络

  1. 能够将输入映射成定长的输出(例如:有两段文本A[长度=100]和B[长度=300],那么他们被hash事后都会生成长度为n的文本)
  2. 很难找出不一样的输入会有相同的输出,也就是说映射成的输出就像指纹同样能够标识该输入。

hash主要是应用在数据的验证、区块的标识、钱包地址中,下面让咱们来看看ethereum使用的是什么hash函数:ide

func rlpHash(x interface{}) (h common.Hash) {
    hw := sha3.NewKeccak256()
    rlp.Encode(hw, x)
    hw.Sum(h[:0])
    return h
}

 

经过上面的代码咱们能够看到 sha3.NewKeccak256() 这段代码,那么ethereum中就是用的是 Keccak256 这种hash算法。对于算法咱们没有必要深刻去研究,咱们只须要知道算法的特性是什么就能够了。函数

 

Merkle Tree(梅克尔树)

   Merkle Tree,是一棵hash树。它的叶子结点是数据,而根节点和子节点都是hash值(关于Merkle Tree的学习,请点击这里)。源码分析

  Merkle Tree特性:学习

  1. 除了叶子节点全部的节点都是hash值
  2. 知道hash路径,就能够知道数据是否在这颗树上

经过应用Merkle Tree,解决了区块链轻节点上数据验证的问题。区块链

 

Merkle Patricia Tree(梅克尔帕特里夏树)

  Merkle Patricia Tree,对于Merkle Patricia Tree的介绍请点击这里,这篇文章已经说明的至关好了,这里就再也不赘述。 编码

Recursive Length Prefix(RLP,递归长度前缀)

   Recursive Length Prefix,是一种编码规则。我的以为数据通过它的编码,实现了一部分的数据压缩,能够减小网络传输数据的大小。对于RLP的介绍,请点击这里

相关文章
相关标签/搜索