通俗易懂区块链系列——双重支付/双花支付

 0 <http://www.sanlian.me/archives/24617#respond>


双重支付,又称为双花支付,是指同一笔钱花了两次甚至是多次。不同于实物货币,由于比特币是数字货币,本身就是一些代码,所以具有可复制性,而且由于比特币网络的开放性,任何人都可以将交易自由的广播到比特币网络上,所以不诚实的节点就可能会做出双花支付,不过由于
区块链 <http://www.sanlian.me/archives/tag/%E5%8C%BA%E5%9D%97%E9%93%BE>
本身所提供的共识机制是完全可以阻止这种情况的出现的,但是如果有人控制了比特币网络中的大量算力,那么双花支付就可能成功。



 

 

我们首先来看区块链本身是如何解决双花问题的?



 

 


假设在比特币网络中,一个不诚实节点发起了双花交易。但是根据区块链的共识机制,网络节点只接受收到的第一个交易,所以第二个交易将被拒绝。不过,由于区块链网络是多点连接,所以有可能出现这种情况,一些节点接受了第一笔交易,另外一些节点接受了第二笔交易,那这种情况如何避免双花交易。


这就需要用到临时分叉的知识了。矿工在挖矿过程中,会将交易打包到区块中,接受了第一笔交易的矿工和接受了第二笔交易的矿工的节点数量肯定会有所不同,所以在后续的挖矿过程中,两笔交易将处于不同的临时分叉链上,最终只有最长链上的交易能够保存下来,这也是为什么在比特币系统中要求一笔交易的确认必须要等待6个以上的区块确定之后才可以的原因。

当然,在区块链还采用了其他的技术来进一步确保双花支付的不会发生,包括时间戳技术、数字签名等等。



 

 

虽然区块链本身可以防止双花支付的发生,但是如果攻击者控制了整个网络51%以上的算力,就可以在控制算力的期间,发动双花攻击,我们来看一下整个过程:



 

 


首先,攻击者在控制算力的期间,把一定数量的虚拟币发送给自己在交易所的钱包,然后,他又发起一交易,把这些虚拟币再发送给另外一个自己控制的钱包,由于区块链默认的情况下只会承认第一笔交易,所以与交易所的交易有很大的概率会得到确认,在这笔交易确认后,攻击者立刻卖掉虚拟币,并且从交易所套现。但是,攻击者在挖矿过程中,故意只打包第二笔交易,并且在第一笔交易之前的区块之后开始挖矿,由于攻击者控制者51%以上的算力,所以在后续的挖矿过程中,攻击者所在区块链的长度会超过另外一条链,从而成为区块链中的主链。所以第一笔交易所在链就成为了临时分叉,从而被抛弃掉,同时原来确认的交易也会被回滚掉。这样,攻击者之前花掉的虚拟币又回到了自己的手中,从而实现了一次双花攻击。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信