区块链—双花问题

  • Post author:
  • Post category:其他




双花问题

双花实际上指的是双重花费,即一份货币使用了两次。

传统现实中,因为低延迟网络以及中心化管理的原因,是不会出现双花现象,无论是线下交易的现金支付,或者网上支付的第三方监管交易确认,都可以避免双花问题。

那在区块链上面,如何会出现这个问题,又该如何避免?我们通过一个示例来逐步解答:




场景:

首先,以下示例主要是为了帮助大家理解,我们将区块链上的数字资产统称为:比特币(注意:使用比特币来充当数字货币资产是不严谨的,在这里只是为了帮助大家更好的理解)。

假设小明区块链上的账户总资产为10个比特币。小明向全网广播:“我小明向小红支付10个比特币”。

每一个区块链的区块生成都需要相应的时间,具体原因之前的文章探讨过了,这里不做累赘。

此时该交易,通过广播到网络,但由于负责整理区块的矿工们在整理区块时存在时间差,该交易尚未被记录到区块中,并被全网认可,此时,小明立马又发布一条新的广播:“我小明向小黄支付10个比特币”


你可能会认为这就是所谓的双花问题,只要你广播的间隔足够小,就能混淆视听。将一份资产重复消费。很快,小明的其中一笔交易被拒绝了。原因如下:

区块链网络中,每笔交易都需要先确认对应资产之前的状态,如果它之前已经被标记为花掉,那么新的交易会被拒绝。所以,当上述小明的两条广播其中一条被记录到区块链上的时候,另一条交易将会被系统自动拒绝,无效的交易。

小明深知区块链的原理,于是不停的重复上述的步骤(我们假设小明有数不清的账户,每个账户都只有10个比特币),不知道经过了几万次的重复,终于,出现了这样一种情况:

小明的两笔交易同时出现在了不同的区块中,此时,由于小明这种恶劣行为,导致该区块链出现了所谓的“分叉”情况:

正好有两个矿工几乎同时取得记账权,并把各自整理的区块(block)发布到网络中(这个概率很低),刚好,由于网络延迟问题,两笔交易被分别整理到了一个区块上。

在这里插入图片描述

此时,A区块中记录着“小明向小红支付10个比特币”,而B区块中记录着“小明向小黄支付10个比特币”,那么此时,小明是不是就实现了双花?

当然,细心的小伙伴可能会发现,一条区块链长成这样肯定是有问题的,事实上,区块链规定,当出现分叉的时候,最长的分支会被认可,短的分支会被放弃,账本还是会回归为一个。

我们假设,终究A分叉的区块数超过了B分叉…如下:

在这里插入图片描述

终究都只有一条分支有效。小明在一番绞尽脑汁之后,开始了如下操作:

既然A分叉被认可了,小明立马跑到小红那里,顺理成章的用花费的10个比特币换了10台iphone 回来,一切都是那么的理所当然。接着,小明打开自己的电脑,进行挖矿,即:参与区块的整理和发布。

假设小明拥有强大的算力,在A分叉再次衍生出下一个区块时,小明已经整理好了三个区块,并且,发布在了B分叉上(如下图),而此时,A支链不再被认可:

上一篇文章中有提到过,工作量证明机制,即计算出一道很难的数学题之后,才能进行区块整理发布,理论上,当算力足够大的时候,是可以实现上述小明的做法。

在这里插入图片描述

终于,小明实现了双花,他已经从小红那里拿了10台iphone,接着,依旧可以光明正大的跑到小黄那拿10台iphone,一切都是这么美好,小明似乎达到了人生巅峰~~(全篇完)




如何实现双花

等等,我们似乎忽略了一个问题,小明如何能从当A链衍生出一个区块的时候,自己整理出三个新的区块发布到B支链上的呢?

有两种可能:

我们暂且假设整个网络中的每台计算机算力是一样的,整个网络中一共有1亿台计算机参与算力运算。



第一种,穷人靠变异:

假设小明正常人,拥有一台普通的计算机,此时如需要在短时间内连续通过三次工作量证明机制,该机制实际上是计算某种Hash值,只有当该Hash值得前10位全部为0的时候,则该Hash是有效的,此刻你就可以发布一个新的区块,理论上,你运气足够好的话,可以连续3次就或者3个有效的Hash值。整理好三个区块,他的概率为:1/100000…000(27个0)的概率,这个概率你中大乐透特等奖可以中超过1亿亿次。



第二种,富人靠Money:

假设小明非常非常的有钱,控制了超过5000万台的计算机算力,此时,小明就可以高枕无忧的坐在家里等着B支链的长度超过A支链了,因为这是迟早的事。

这就是所谓的“51%攻击”问题,其实,只要在B上面发布区块的矿工数量大于50%,早晚有一天,这个B支链长度会超过A支链,从而被认可,但问题在于,你需要控制超过50%的算力,这样才能按照你的意愿操控B支链。

那么以上就是实现双花的两种具体方案




如何避免双花

那行吧,既然你和我一样的善良,那我们来看看如何避免双花问题。



第一种

如果一条区块链的节点数量不是很多,那么双花的可行性也将变得可能,同理,如果一个区块链的节点有好几亿个,那么双花可行性也将无乎其微。

如果一条区块链一共就100个节点,那么控制51个节点是现实可行的。



第二种

另一方面,假设我们是小红,我们可以等一个block(区块)被记下来之后,再等5个block(区块),也就是等6个block(区块)被确认后再把交易对应的商品交付。这样,B链要想赶超6个block(区块)的难度也将是指数式系数增长的。


以上是个人对区块链双花问题的梳理。

如果你感觉这篇文章给您带来收获,请帮忙点赞一下吧,如果给你带来困惑,请评论留言,我将及时回复探讨解答。



版权声明:本文为weixin_41087220原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。