一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。
区块链-《精通比特币》笔记六:
《精通比特币》第二版网络在线阅读地址:
http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch08.html
SPV节点:简化支付验证节点,不必存储完整的区块链的情况下正常工作,也称作SPV客户端或者轻量级客户端,目前钱包所采用的最常见的方式。
SPV节点工作原理:SPV节点只下载区块头,不下载区块中的交易信息,大小是完整的区块链数据的千分之一。SPV节点无法构建所有可用于消费的UTXO全貌,SPV节点在验证交易时通过依赖对等节点按需提供区块链的相关部分的局部视图。简化支付验证通过参考交易的深度来验证,在一个全节点会构建一个验证链,该链由沿着区块链按时间倒序一致追溯到创世区块的数千区块和交易组成,SPV节点验证区块的链,并把验证的链和交易相关联。SPV节点不能验证UTXO是否还未被支付,SPV节点在该交易信息和它所在区块之间用merkle路径建立链接,之后6个区块链堆叠在该交易区块之上,验证之后6个区块的有效性,保证交易正常。
SPV节点工作过程:SPV节点使用一条getheaders消息,而不是通过getblocks消息来获得区块头。响应节点发送一条headers的消息发送大量区块头,SPV节点同时在对等节点的连接上设置过滤器,用于过滤对等节点发来的区块和交易数据流,任何目标交易都是通过一个getdata的请求来读取,对等节点则生成一条包含交易信息的tx消息作为响应。过程:nodea-getheaders-nodeb、nodeb-headers-nodea、nodea-getheaders-nodeb、nodeb-headers-nodea。理论上来说SPV在需要读取特定交易而选择性的验证交易,存在一定的隐私风险,在对特定数据的请求可能投入钱包地址信息。
Bloom过滤器:允许用户描述特定的关键词组合而不必精确表述的基于概率的过滤方法,让用户有效搜索关键词的同时保护他们的隐私。Bloom过滤器让SPV节点制定交易的搜索模式,搜索模式可以基于准确性或私密性考虑调节,理解为:在过滤器中只包含关键词,那么更多的相应交易被搜索出来,在包含若干无关交易的同时有更高的私密性。
Bloom工作原理:实现通过一个可变长度N的二进制数组和可变数量M的一组hash函数组成,hash函数的输出值始终在1和N之间,该数值与二进制数组相对应,函数为一个确定性函数,理解为,任意一个使用bloom过滤器的节点通过该函数都能对特定输入得到同一个的结果,bloom过滤器的准确性和私密性能通过长度N和hash函数的数量M来调节。Bloom过滤器数组中每一个数的初始值为0,关键词被加到bloom过滤器中之前,依次通过每一个hash函数运算一次。通过hash函数运算后得到一个1到N之间的数,在数组中对应的位置被置为1,从而把hash函数的输出记录下来,接下来再进行下一个hash函数的运算,另一位置为1,不断重复该过程,当全部M个hash函数都运算后,一共有M个位置被置为1,这样一个关键词就被记录在bloom过滤器中。但增加第二个关键词重复之前的步骤。随着更多的关键词指向了重复的位,那么bloom过滤器随着位1的增加而饱和,准确性就相应的降低了。当将关键词逐一代入各hash函数中运算,结果和之前的原数组比较,那么所有结果都成了1,就表示这个关键词可能已经被该过滤器记录,当然这个结论是可能是的一个效果,因为这些字节的1也有可能是其他关键词运算的重叠结果。但验证一个关键词结果字段为0,那么就确定没有被匹配。
SPV节点中使用bloom过滤器:bloom过滤器用于过滤SPV节点从其对等体接收的交易,仅选择SPV节点感兴趣的交易,不泄露相关地址和密钥。SPV节点初始化将过滤器为空状态,SPV节点列出相关感兴趣的地址、密钥、散列,通过从其钱包控制的任何UTXO中提取公钥hash、脚本hash、交易ID来实现,SPV节点将其中的每一个都添加到bloom过滤器,如果这些模式存在于交易中,那么bloom过滤器则匹配,但不自动显示模式。此时,SPV节点将向对等节点发送一个过滤器加载消息,在对等节点上,针对每个传入交易检查bloom过滤器,全节点根据bloom过滤器检查交易的几个部分然后进行匹配。检查组件通过使用bloom过滤器来匹配公钥hash、脚本、OP_RETURN值、签名中的公钥或者智能合同复杂脚本的任何未来组件。建立过滤器后只有匹配交易才发送到节点,响应节点的getdata消息,对对等节点发送一个merkleblock消息,该消息仅仅包含过滤器匹配的块和每个匹配交易的merkle路径的块头,同时对等节点发送包含过滤器匹配的交易和tx消息。全节点向SPV节点发送交易,SPV节点丢弃任何误报,使用正确的匹配的交易更新UTXO集和钱包的余额,同时也修改bloom过滤器,然后全节点就可使用新的bloom过滤器来匹配性的交易。
本文由币乎社区(bihu.com)内容支持计划赞助。
之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:
领取专属 10元无门槛券
私享最新 技术干货