首页
学习
活动
专区
工具
TVP
发布

复杂的比特币升级分析(3)

本文主要讲解交易和区块的“旧版本兼容新内容并新版本兼容旧内容”的升级方案。

有人会说,这种应该是最理想最好的升级方案!毕竟双方都互相兼容对方!

实际上,这种方案看似最理想最好,实际上暗藏风险。

我们先继续按照前两篇文章的方式分析,然后再评估为什么暗藏风险。我们只需要分析新旧节点接收旧新数据的问题,即只需要讨论交易传播形式中旧交易传播给新矿工、新交易传播给旧矿工、区块传播形式中旧版本区块传播给新版本矿工、新版本区块传播给旧版本矿工,这4种形式所能发生的问题。

其实现实中这种新旧完全兼容的案例确实有,即ETH和ETC案例。

以太坊在2016年6月17日发生了一起著名的the DAO事件,黑客将以太坊三分之一的币都发送到了他自己的地址中,但由于the DAO的机制,需要一个月的时间才可以二次转移,故留给了以太坊创始人v神及其团队不太多的时间去处理这个事情。由于部分人坚持认为之前的合约是具有契约性,并且去中心化的区块链网络不应该有回滚一说,这笔交易就应该被承认。但是v神以及大部分人都不同意。于是,在2016年7月20日,分叉出了ETH,ETH是从那笔恶意交易所属区块之前的那个区块重新开始生成区块的。而另一拨少数人则坚持不动,坚持了原来那条链,原来的链叫做ETC。

ETH与ETC对比来说,在当时,除了修复了the DAO的bug之外,并没有其它任何修改。这就导致了在分叉成功之后,用户在使用ETH进行交易时,发现自己的ETC也同时被交易出去了。

这就是昨天提到的未做重放保护导致的问题,即,一次交易,将两个币种的币都交易出去了。

这也就是今天主要讲的升级方案,即,分叉升级后,ETH交易仍然被ETC矿工承认、ETC交易仍然被ETH矿工承认、ETH区块仍然被ETC矿工承认、ETC区块仍然被ETH矿工承认。

大家互相承认对方的交易、区块没问题,于是由于ETH、ETC的私钥、公钥、地址、交易记录都是一模一样的,导致用户在发生一笔交易时,维护ETC的节点认为用户是要发起ETC交易、维护ETH的节点认为用户是要发起ETH交易,这就引发了这个重复交易的问题。因为分明已经是两个币种了,一次交易理论上是不应该联动两个币种的交易的。

这就是新旧相互兼容所带来的风险。这种风险是一定要杜绝的,因为会莫名损失用户的币。

所以,才有了前文提到的“重放保护”,即,将其中一个币种的签名规则修改为与另一种不一样的规则,这样,在各方校验交易时,由于都不认识对方的规则,所以都不认可对方的交易;即使在验证区块时,也由于区块里的交易签名规则不正确,也会拒绝对应的区块。这样的话,就不会发生上述所说的“一笔交易会触发多个币的同时交易”这样的事情了。

这就是相互兼容的升级方案。

在这里顺便提一下第4种升级方案:交易和区块的“旧版本不兼容新内容但新版本兼容旧内容”的升级方案,这种方案本身并不具有实际意义,所以并不存在。

补充说明:

实际上,除了这几篇文章提到的这4种升级方案,还有其它的升级方案。

我们之前一直在讨论交易和区块同时满足“新旧节点是否兼容”的方案(维度分为:交易区块维度、钱包新旧版本维度、矿工新旧版本维度、是否兼容维度)。其实,将交易和区块拆分开分析,那么就会有4种可能性:

· 交易验证通过并且区块验证通过

· 交易验证通过并且区块验证不通过

· 交易验证不通过并且区块验证通过

· 交易验证不通过并且区块验证不通过

我们需要知道的是,交易检验如果没问题,那么区块检验也一定会通过,一定不会不通过;交易检验如果不通过,区块检验可能会拒绝,也可能不会拒绝。

我们会发现,“交易验证通过并且区块验证通过”、“交易验证不通过并且区块验证不通过”这两个方案,是交易和区块同时满足是否验证通过的方案,之前几篇文章已经论述过。

“交易验证通过并且区块验证不通过”这个方案,在交易验证通过的情况下,并不会出现区块验证不通过的情况,所以此种情况可以不用论述。

目前只剩下一种情况,即,交易验证不通过的情况下,区块还仍然能验证通过。

实际上到底有没有这种情况?其实是有的。我们明天的文章中会详细讲述。

关注【通俗易懂区块链】,学懂区块链

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180216G0CV6J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券