本篇博文总结了博主学习以太坊时接触过的数据结构。
哈希
参考: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改进树,基于基数树,即前缀树改进而来,大大提高了查找效率。