每笔交易都需要先确认对应比特币之前的状态,如果它之前已经被标记为花掉,那么新的交易会被拒绝。
-如果先发起一笔交易,在它被确认前,也就是这个时间段的交易还未被记账成区块block时,进行矛盾的第二笔交易,那么在记账时,这些交易会被拒绝。
现在tricky的部分开始了。如果**者刻意把第一笔交易向一半网络进行广播,把第二笔交易向另一半网络广播—这个**者智商还挺高—然后两边正好有两个矿工几乎同时取得记账权,把各自记的block发布给大家的话(这个概率很低),网络是不是会混乱呢,区块链的规则是这样的:先选择任意一个账本都可以,这时候原来统一的账本出现了分叉:但是在两个账本中各只有一笔交易,**者不会有好处。接下来,下一个矿工选择在A基础上继续记账的话,A分支就会比B分支更长,根据区块链的规则,最长的分支会被认可,短的分支会被放弃,账本还是会回归为一个,交易也只有一笔有效:
那么如果这个**犯真的智商非常高,他会这么做:如果是A分支被认可(B也一样),相应交易确认,拿到商品之后,立刻自己变身矿工,争取到连续两次记账权,然后在B分支上连加两个block,就像这样:于是B分支成为认可的分支,A被舍弃,A分支中的交易不再成立,但他已经拿到商品,**成功。
在B分支落后的情况下要强行让它超过A分支,其实是挺难的,假设**者掌握了全网1%的计算能力,那么他争取到记账权的概率就是1%,两次就是10的负4次方。但这个概率还没有太低。
应对办法呢?建议大家在一笔交易确认后,也就是一个block被记下来之后,再等5个block,也就是等6个block被确认后再把交易对应的商品交付。这样,**者还能追上的概率就几乎为0了。除非……
如果**者掌握了全网50%以上的计算力,那么,即使落后很多,他追上也只是时间问题,这就是比特币的“51%攻击”。
这就是区块链需要警惕的问题。虽然在比特币网络中,用户已经极多,全网算力总和非常大,如果真掌握50%以上,也不用靠这个**了,挖矿的收益都更高。但是在小的区块链网络中呢?况且,没有50%以上的算力,还是有机会成功的,只是概率低而已。
什么是双花
双花就是同一枚比特币被使用两次,但是无论在比特币网络中还是现实世界都不可能发生,就像在现实中你不能用1块钱买个苹果,又用同一张1块钱买橙子。如果这都可以的话,钱就变得毫无价值了,因为这样每个人都会拥有无数多的钱,用也用不完,货币价值也就没有了。比特币核心网络在比特币区块链中验证每笔交易来防止双花。
那比特币网络如何防止双花呢?
假如你有1个比特币,你想要花两次。于是你向商家买了价值1个比特币的商品。然后,你再在另一个比特币地址上签名,并发送相同的1个比特币。
两笔交易都进入了还未进行验证的交易池。你的第一笔交易得到了确认,并在下一个区块中得到了矿工的工作量验证。但是矿工会认为第二笔交易是无效的,这样就没办法获得足够的确认,就会被撤出网络。
但是如果这两笔交易是由矿工同时操作呢?
当矿工同时从池中提取交易时,获得网络中确认数量最大的交易将会保留在区块链中,而另一个将被撤出。也有可能真实的那笔交易无法获得确认。这就需要6次确认机制。“6次确认”就是在这笔交易被添加到区块链之后,另外6个包含多个其他交易的区块就会被添加到这个区块之后。每一个都需要“6次确认”,且都和前一个区块有关联。所有这些确认和交易都在加上了时间戳,这就使得区块不可逆转,而且无法篡改。
而当你掌握的算力超过50%时,就可以无限逆转区块。但是有些区块链网络已经非常之大,想要和它对半抗衡是不可能的,但有一些区块链网络比较小,节点比较少,也有可能遭遇51%算力攻击,今天的BTG就是一个例子。
那名矿工为了实施双花攻击,获得了至少51%的BTG网络算力,就能够临时控制BTG区块链。像BTG这样的小型网络上,获得这么大的哈希算力也是非常费钱费力的,但是无利不讨好嘛,实施双花之后就有钱可赚了。
控制了网络之后,攻击者开始往加密货币交易所充值比如1000个BTG,让其进入市场,或者提现出来。再运用手中的算力,从自己对外付款交易之前的区块开始,忽略自己所有对外的付款交易,重新构造后面的区块,利用算力优势与全网赛跑,当最终创建的区块长度超过原主分支区块,成为新的主分支,至此,攻击完成;结果就是,由于撤销了所有对外付款交易,等于收回来所以已卖掉的BTG。就这样,他们能够向交易所充值后再迅速收回资金。
比特币黄金开发人员建议交易所在用户交易时通过确认交易数量来应对攻击。区块链数据表明,攻击者成功逆转了22个区块,这导致开发者建议将需要确认的区块提高到50个。
正加财富网内容推荐 | ||
OK交易所下载 | USDT钱包下载 | 比特币平台下载 |
新手交易教程 | 平台提币指南 | 挖矿方法讲解 |