学习以太坊,你应该知道的数据结构

本篇博文总结了博主学习以太坊时接触过的数据结构。

以太坊中的数据结构

        • 哈希
        • 数字签名
        • Bloom filter
        • RLP
        • Trie树、Patricia树、Merkle树
        • hex prefix编码
        • MPT树

哈希

参考:https://www.jianshu.com/p/28cc0f676488

所谓哈希(hash),就是将不同的输入映射成独一无二的、固定长度的值(又称"哈希值")。

数字签名

参考:https://www.jianshu.com/p/c6514a61a641

非对称加密==》保证信息内容的安全:
比如A要把”helloworld“这个信息传给B,A会利用B的公钥加密得到一个密文,然后B收到之后,用自己的私钥来解密,得到明文helloworld。

数字签名==》确认消息发送者的身份:
A在传输信息的同时会把明文进行哈希运算,并将这个哈希值用自己的私钥来进行加密,B在收到信息之后利用A的公钥来解密得到哈希值,然后把收到的明文也进行哈希运算得到一个哈希值,验证这两个哈希值是否一致,如果一致就说明的确是A传输的信息了。

私钥根据椭圆曲线运算可以得到公钥,公钥经过哈希算法得到地址。并且这个过程不可逆。
先用对方的公钥加密保证安全 再用自己的私钥加密证明身份

Bloom filter

参考:
错误率估计 最优哈希函数的选取 : https://blog.csdn.net/jiaomeng/article/details/1495500
代码 实现及使用 https://www.cnblogs.com/z941030/p/9218356.html

以太坊为了高效的查询某个区块中的某个交易,引入了bloom filter这种数据结构。它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。

RLP

参考:
详情:https://www.jianshu.com/p/20facdbfa5b3
或者: https://segmentfault.com/a/1190000011763339
以太坊独有的数据封装方式,使用了灵活的长度前缀来表示数据的实际长度,只读取第一个字节,就可以知道数据的大小。用以屏蔽底层操作系统的差异。

Trie树、Patricia树、Merkle树

参考:https://www.cnblogs.com/fengzhiwu/p/5524324.html

  • Trie树
    Trie树,又称前缀树或字典树或者基数树(Radix树),是一种有序树,用于保存关联数组,其中的键通常是字符串。
  • Patricia树
    Patricia树,或称Patricia trie,或crit bit tree,压缩前缀树,是一种更节省空间的Trie。对于基数树的每个节点,如果该节点是唯一的儿子的话,就和父节点合并。
  • Merkle树
    Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。

hex prefix编码

参考:https://blog.csdn.net/zxkr777/article/details/82146064
在16进制编码前加两个标示码分别表示该节点是叶子结点还是拓展结点、该节点值的16进制长度是奇数还是偶数(以半个字节的形式)

MPT树

参考 :https://blog.csdn.net/txltxl22/article/details/79234639

MPT是以太坊中的merkle改进树,基于基数树,即前缀树改进而来,大大提高了查找效率。

你可能感兴趣的:(学习以太坊,你应该知道的数据结构)