待字闺中开发了一门区块链方面的课程:《深入浅出ETH原理与智能合约开发》,马良老师讲授。此简书文集记录我的学习笔记。
课程共8节课。其中,前四课讲ETH原理,后四课讲智能合约。
第四课分为三部分:
- Ethash算法
- EVM框架
- Bloom Filter / Recipt
这篇文章是第四课第三部分的学习笔记:Bloom Filter / Recipt 。
这节课主要讲解了Bloom Filter的原理,收据和日志,以及前四课总结。
1、Bloom Filter
Bloom FilterBloom过滤器是一个允许用户描述特定的关键词组合而不必精确表述的基于概率的过滤方法。它能让用户在有效搜索关键词的同时保护他们的隐私。
以问路为例。问的越详细,得到的结果越精确,但是隐私就暴露了。而问的越少,得到的结果就越不准确,隐私得到了保护。具体操作过程中要考虑隐私性和准确性的平衡。
Bloom过滤器如何工作:
上图中举一个简单的Bloom过滤器的例子,有一个16位的字段和三个哈希函数。
往Bloom Filter里添加关键词P1时,三个哈希函数分别将三个位置的数据变成了1。再往Bloom Filter里添加关键词P2时,又有一些位置被设置为了1。如图所示。依次添加其它的关键词。
当判断关键词P3是否属于前述的关键词时,代入到各哈希函数,如果所得结果对应的位都为1,表示这个关键词有可能已被该过滤器记录。之所以这一结论并不确定,是因为这些字节1也有可能是其他关键词运算的重叠结果。简单来说,Bloom过滤器正匹配代表着“可能是”。
而另一方面,如果我们代入关键词计算后的结果某位为0,说明该关键词并没有被记录在过滤器里。负匹配的结果不是可 能,而是一定。也就是说,负匹配代表着“一定不是”。
2、Recipt and Log
Recipt and Log收据的结构主要分为三个部分。
第一部分是Post state,即处理后的状态。在一个交易执行后,有一个state object的对象代表所有在全局状态树中的节点,这些所有state object加总(RLP)后的Keccek就是这里的Post state。
第二部分是Log。有两类,一是虚拟机每一步的执行过程,一是智能合约的事件。
这些日志包含三部分内容:topic、 data、 contract address。其中topic的举例如图。
接下来的bloom即前一小节介绍的内容,作用查询某个日志是否在这个结构中。
第三部分是与Gas有关。CumulativeGasUsed是交易执行到跟这个收据有关的交易时,总共使用的Gas,作用是控制全局使用的Gas,要小于区块的Gas上限。GasUsed是本交易使用的Gas。
3、原理部分总结
原理部分总结不足之处,请批评指正。
网友评论