请选择 进入手机版 | 继续访问电脑版

什么是双花问题,比特币是如何解决的?

[复制链接]
发表于 2018-5-17 23:42:23 | 显示全部楼层 |阅读模式
本帖最后由 渣渣辉 于 2018-5-17 23:42 编辑

我们知道,在比特币系统出现之前, 各路IT前辈就一直在探寻一套不依赖中心机构的电子支付系统,但由于技术原因,总有些问题绕不过去,因而屡屡失败。在这些问题中,主要有两个最为突出: 一个是双花问题, 一个是拜占庭将军问题, 那么接下来我们就来探讨一下"双花",拜占庭将军问题,留到明天梳理。

所谓双花,顾明思议,即一份钱花两次,其英文为"Double Spending", 由于各个节点互相平等的网络中,没有一个中心机构做统一调度,所以无法及时有效的在交易发生时,对交易双方的账户余额进行可靠的更新,进而导致系统无法正常使用。

比特币根据特定的机制(utxo + 时间戳 + 工作量证明),巧妙的解决了双花问题。
下面我们分析一下"双花"的各个场景,并探讨比特币如何逐一击破的。

背景:A 只有 1BTC,A 向 B 支付1BTC,B 向 A支付 一辆二手奥拓, A 想做坏事,欲发起双花

双花场景一:A支付B 完成,且该交易已经得到账本确认。而后,A重新发起交易,A 转 A 1BTC。
解读:此时,由于A的余额已经为0(A的地址里已经没有可以支付的UTXO了,UTXO后面讲,目前理解为余额即可),故双花失败。

双花场景二:在同一临近网络里,A支付B 1BTC,随后发起另外一笔交易 A支付A 1BTC
解读:此时,临近节点接收到两笔交易,那么比特币网络节点会根据"时间戳"来进行取舍,只接收最先接收到的交易,二选一,故双花失败。
双花场景三:在不同的网络区域里,先后发起两笔叫交易A支付B 1BTC, A支付A 1BTC,由于网络延迟问题,这两笔交易被不同的矿工打包
解读:此时,会有两种情况。
         1. 某一个矿工确认了其中一笔交易,那么另一笔会被舍弃,因为交易里的utxo已经被消耗,钱花完了,交易被认定无效了,双花失败。
         2. 这两笔交易同时被两个不同的矿工挖了出来,那么此时,比特币网络会同时保留两个区块(孤块概念),并等待新的区块到来,新区块所连接的链条会被认为是正确的(最长链机制),另外一个区块会被废弃,此时仍然只有一笔交易被确认,故双花失败。
如图示,新区块选择了Block M,顾双花失败
双花3.png
双花场景四:在场景三中,双花失败,A和B属于正常交易,A拿到货之后立即转换成矿工进行挖矿,连追两个区块解读:如果A的算力足够大(不用达到51%),那么完全有可能连续追上两个区块的,然后原来的链条就会被废弃掉,此时B人才两空,A双花成功。

双花4.png


解决办法:比特币系统为了防止场景四的情况发生,所以提议在一笔交易在写入区块链后,在过确认5个区块(1小时)后,才算是真正的交易成功。
在白皮书中,中本聪计算得出,在连续6个区块确认后在被追上的概率为:0.0002428%,这个几率微乎其微,所以可以认定为安全


喝了瓶啤酒,敲了个把小时,诸位晚安~




锁定目标,风雨兼程!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表