精通比特币:全节点和简易支付验证
小姐姐带你5分钟读懂比特币的全节点和简易支付验证(SPV)节点
full nodes and simplified payment verification
概念:
什么是全节点:
维持包含全部交易信息的完整区块链的节点 。
什么是简易支付验证节点(SPV节点):
为了便于操作和实时交易的需求,出现了许多可以在手机,平板电脑,嵌入式系统用了使用的比特币客户端,但是,这样的设备由于空间和功率的有限性,是必须通过另外一种方式进行支付验证,这就诞生了简易支付验证,简称SPV(Simplified Payment Verification)。
全节点和简易支付验证节点的对比
一:存储数据的区别:
1)全节点下载每个块的交易信息
2)简易支付验证节点只需下载区块头
二:下载的存储数据的大小的区别:
1)全节点:1000
2)简易支付验证节点:1/1000(全节点的)
三:关于UTXO数据库:
1)全节点:所有区块的未花费的UTXO库
2)SPV节点:没有UTXO库
四:验证交易的方法的不同:
1)全节点: 参考交易在区块链中的高度来验证(工作量证明)
构造一条验证链,这条链由按照时间倒序,一直追溯到创世区块的数千条区块以及交易组成
2)SPV节点:通过参考交易在区块链中的深度来证明
一个spv节点会验证所有区块的链(不包括所有交易),并且把区块链和有关交易连接起来。
举个例例:节点小花 (全节点)和节点小草(spv)
节点小花 :作为为一个全节点,想要检查999号区块中的某个交易,你就要把从这个区块开始一直追溯到创世区块的999个区块全部连接起来,然后建立一个完整的utxo数据库,通过确认该utxo是否还未被支付来证实交易的有效性。
节点小草:作为一个spv节点,不能验证utxo是否还未被支付,小草会在该交易信息和它所在的区块之间用一个merkle路径建立一条链接,接下来小草就一直等着啊等,直到序号1000到1006的6个区块堆叠在该交易所在的区块上,并且通过确立交易的深度是在第1000-1006之下来验证交易的有效性。
如果网络中其他节点都接受了第999区块,并通过足够的工作在该块之上又生成了6个区块,根据代理网关协议,就可以证明该交易不是双重支付。
五:安全性
spv由于没有全部的交易记录,不能验证某个交易不存在,这个漏洞会被针对spv节点的拒绝服务或者双重支付攻击利用。
六:如何防御?
spv节点需要随机链接多个节点,增加与至少一个可靠节点相连接的概率,但是这种随机链接的需求也会容易受到网络分区和sybil攻击。
sybil攻击使得spv节点没有通过可靠或者真正的比特币网络的连接而是被被链接到虚拟节点或者虚假网络中。
备注:扫盲sybil攻击 :女巫攻击
七:获取区块的过程
spv节点使用getheaders 消息获取区块头,发出的响应的对等节点将用于一条headers消息发送多达2000个区块头,全节点也是用同样的方式。spv节点在与对等节点的链接上设置了过滤器,用来过滤从对等节点发送来的未来区块和交易数据流。另外spv的过滤器也避免了在调用特殊交易请求时可能出现的隐私问题。
2018.2.25
lola
小姐姐的打赏地址:(imToKen)
0x9a91F261dDA8619fC8E022886D293e0f64FA9e8c