详解比特币隔离验证呼吁SW合成分叉共识

2016-12-22 09:39 来源:巴比特资讯 阅读:6037
融合Bitcoin Fusion合成分叉,并不是由某一个人提出来的,而是由我们中文比特币币圈里的多个人相互交流完善所提出的概念。这是我们整个中文币圈的整体思想智慧的结晶,是我们中文比特币圈对全球的贡献。

第一篇  “合成分叉”的由来  

  融合Bitcoin Fusion合成分叉,并不是由某一个人提出来的,而是由我们中文比特币币圈里的多个人相互交流完善所提出的概念。这是我们整个中文币圈的整体思想智慧的结晶,是我们中文比特币圈对全球的贡献。

较全面地早期的一篇介绍博文见:《融合分叉Bitcoin Fusion:一种结合软分叉与硬分叉的最佳分叉方案》2016-10-19,具体可通过下面这个图来理解:

  思想萌芽是由@江卓尔 在《【彻底终结软硬分叉之争】安全硬分叉就是软分叉扩容》中提出的,其有在硬分叉之前要统一算力的思想。另外同时也有人提出过引入算力难度炸弹,让较少算力的一方无法继续挖矿等思路。

具体较详细的方案提出,来自于@vatten 介绍地《再来简述一下安全硬分叉或称合成分叉的新分叉方案》,进而通过交流大致确认了分两步,第一步用软分叉形式来统一算力的设想。然后就有了上面那博客文,详细介绍用“融合合成分叉”,简称“合成分叉”的这个名称。并且建立微信群进行全面交流(目前此Bitcoin Fusion群为币圈中质量较高的讨论交流群,欢迎大家留言联系加入)。

最新的情况是,SW软分叉(24%左右支持),和BU硬分叉(13%左右支持),均难以达成充分的共识。越来越多人将眼光转向了合成分叉。像这个@wwkmtg 的贴《首发 通过现象看本质,论(拉链效应)是不是去中心化项目必然产生的现 象!》 其中有个核心的图,见下图,就是本质是融合合成分叉的思想。有趣味的是其图中也提到融合这个词。根据交流,楼主之前应该是没有听过融合合成分叉的。应为“英雄所见略同”,不谋而合的共识。

  拉链效应共识示意图

  结合现有的由Core推出的SW软分叉,以及BU支持者这边提的SW硬分叉的概念。我这里提倡一个融合两者的SW合成分叉:简单说就是在SW软分叉之后再绑定一个HF硬分叉。这个“SW+HF”是融合一体的,在投票支持SW的同时意味着投票同意支持稍后的HF,且在SW激活之后,HF会自动地在判断满足一定条件后,自动激活。硬分叉HF时不需要额外的激活投票,因为之前在第一步SW时已投票通过且算力统一了,在HF中保含了2M扩容或类似BU但EB有上限的扩容,同时包含简化SW硬分叉代码,删除了不再需要的兼容代码。所谓“判断满足一定条件”,主要是要继续确认算力全支持,以及全节点占比的大多数同意(目前0.13.1的SW全节点已经占比超40%),从而避免大量节点因硬分叉而失效提出网络。

希望大家共识多多支持SW合成分叉,以便早日解决扩容问题,其实这个也是香港圆桌扩容共识的思想延伸。

 第二篇  “隔离验证”的误解

Steve Sokolowski列举了6个“技术缺陷”《为什么我反对隔离验证软分叉》

Jaqen Hash’ghar也在3列出6个SW问题《隔离见证:作为软分叉将拖累比特币》

两篇文章所列的SW的问题有重合,且描述很拗口,用通俗易懂的语言总结梳理出以下8个点,并对其描述理解进行我的解读,若有其它对隔离验证的其它问题也可留言交流。解释一些常见的对SW的错误理解。

2.1 SW是很复杂的改进?

详细见Steve文章的第2、3条和Jaqen的第3条,他们说SW各种复杂,各种升级和学习困难,还给出了个很高大上的词“技术负债”,即在复杂下未来其它升级也更困难。

隔离见证使用五个BIP:141, 142, 143, 144 和145。BIP141总体上描述了SW。 BIP142描述了支持隔离见证的支付给隔离见证公钥的哈希(P2WPKH)的格式和支持隔离见证的支付到见证脚本哈希(P2WSH)的格式。 BIP143介绍了SW中交易验证的细节,以及SW如何解决二次签名哈希。 BIP144讨论了SW的结果给网络信息带来的变化。 BIP145概括了针对比特币Core客户端的getblocktemplate、JSON-RPC调用的变化。

Jaqen还特意用整个第2章来绘图描述,各种图表和代码。弄得不懂技术的人一看,会觉得确实很复杂呀,不明觉厉。

【分析】然而事实是见下图,整个比特币交易就类似填写一个表单,只要按定义来填写需要的数据就可以了。总体格式就是前面是输入块,后面是输出块。这个在区块链浏览器上,也可同样看到的。

虽然具体细节变动较多,但宏观整体上说,SW仅仅是将下图中红框中的解锁脚本移动出来放到了后面而已,变成输入块、输出块和验证块。其它地方没有太过大的改动。而至于Jaqen描述的那些具体代码,都是固定的,只要有模板套用即可,并不用去重新写首发交易的代码。像多重签名,需要明白各个脚本是什么意思吗?不需要。因此Jaqen画那么多复杂的图意义不是很大。可能入门有点门槛,但是给出几笔SW交易的具体代码示例后,应该是没有什么难度的。最后这也只是对开发人员,对于普通用户根本就不需要去自己构造交易。其实隔离验证是优化了区块结构,有利于开发者更高效方便地利用比特币区块链开发的。具体点击链接的比太介绍隔离验证的公开课描述。

2.2 SW区块数据占用太大?

在Steve的第1条和Jaqen的第1条,在隔离验证下,交易数据分为:基础数据和验证数据。按Jaqen的说法,在1MB的基础数据限制下,最多能有总共4MB的交易数据,而实现的效果,相当于1.7MB的扩容效果。基于这种情况,其就想未来若基础数据1MB变2MB,那么整个交易数据就可能最多4MB变8MB,从而其得出结论,使未来的容量增加更加困难。

【分析】实际最多使用4MB,却只有1.7MB的效果,看似有点亏。但是注意这是在兼容实现软分叉。虽然“浪费”了验证数据的空间,但是不需硬分叉地精简优化了珍贵的基础数据的空间,从而容纳更多交易。另外验证数据只是一次性的,当已经写入历史区块链后,就没有用了,以后应该是可以清理掉,从而节省存储空间。而至于网络带宽其实更加问题不大,矿池大都是SPV挖矿只要很短的区块头即可挖,而普通的完整全节点,不用挖矿,只要有可以十分钟左右同步一个区块的网速即可,对网速带宽要求不高。其实矿业很早就共识只要不超8MB就不会有问题了,并不会给未来扩容带来太大的困难。更加不会像有些硬扩者说的,SW之后就不能再进行硬扩容了。

2.3 SW解决交易延展性?

在Steve的第5条和Jaqen的第2条,说在SW软分叉下,因为不强制所有交易都SW,非SW输出,仍然易受交易延展性攻击。依靠用户改变其行为以采取更好的安全实践这一假设,基本上注定失败。Steve甚至说解决交易延展性攻击有“画蛇添足”的嫌疑,只要处理得当,延展性问题不会导致资金损失。

【分析】SW不是为了解决交易延展性攻击下资金损失的,其实门头沟未必真的是因此问题而丢币,很可能只是让这个问题背黑锅而已。SW解决这个问题,主要是为了优雅地进行闪电网络和侧链技术等等铺平道路的。而至于非SW的输出依旧有交易延展性攻击问题,可不允许这些非SW输出使用这些闪电网络。就是说用闪电网络就要用SW输出交易,即可完全解决交易延展性在闪电网络中引起的问题。而非SW输出经过一笔交易即可变SW输出,因此应该不会有太大的区别,不会太影响比特币的可替代性。

另外还有一些硬扩支持者说,可以通过其它方式来解决交易延展性,没有必要非要用SW。Steve说的BU的极瘦区块(估计应该只是类似SPV挖矿,无法解决吧),和Classic的弹性交易(重新构架交易自宝内容),以及修改计算TXID的算法跳过签名等等。但是我觉得综合考虑兼容性,可靠性和可实施性,SW应该是这些方案中较好的。

2.4 几乎没有人会去用SW交易?

在Steve的第1条和Jaqen的第3条,说SW软分叉升级可能会很慢或者根本不会进行。另外如果其他人升级并将采用SW其数据移至见证字段,节省了基础数据空间,那么自己即使不升级或不使用SW交易也同样可以受益。因而更愿意让其他人首先承担风险,而不是先采取行动。

【分析】进行SW交易并不是只有风险,而没有好处的。其实下面这条他们自己提的问题就解决自己的这个疑问了,SW交易的使用者,因为隔离出来验证数据,减少了基础数据,因能有节省交易手续费的好处。在手续费减少的诱惑下,自然就会有一些人使用SW交易的。在观察这些交易没有问题后,会渐渐越来越多的人使用的。

2.5 补贴SW交易的手续费?

在Steve的第1条和Jaqen的第4条,说SW对补贴了大量交易手续费。也有些文章说是相当于对SW交易打了75%折扣。Jaqen甚至说这会改变经济激励政策。

【分析】根据上面1MB基础数据和最多4MB的整体交易数据,和这个75%,即1/4相对应,可以理解为,因为仅仅对这1MB中的基础数据收交易手续费,进而相当于给SW交易的验证数据进行了豁免。从而降低了SW的整体交易手续,最低降低为非SW交易的只有1/4。

看似费用设计不合理,对SW有优惠,但是实际上是合理的SW因为占用了1MB基础数据的数据较少,自然而然就应降低手续费。在矿工打包交易时,那1MB基础数据是稀缺的,谁在1MB中交易数据占用的数据空间少,那么当然就可手续费少。因为SW中签名数据不会去占用那1MB数据,故SW手续费自然低,是合理的。虽然SW交易手续费低但可以量多,那么综合看就不会减少矿工的交易手续费实际总收入。例如一个传统的非SW交易的所占的空间,最多约可以放入4个SW交易的空间,那就可以4*1/4=1而不会减少收入了。

2.6 SW降低完整节点的安全性?

在Jaqen的第5条,说SW会让不愿意升级的完整节点,降级成为SPV节点而无条件地接受安全损失。进而还降低比特币网络的整体完全性。

【分析】数据说话,根据下图来自21.co的最新的统计,已经有超过40%的完整全节点,在运行支持隔离严证的Satoshi:0.13.1版本。而其说的激活SW后降级为SPV节点的全节点,仅仅只是没有进行升级的旧节点。并且其作为SPV节点可以继续正常的收发比特币,并不会产生安全损失的。已经有超40%的SW节点来验证比特币的新SW交易,足够维护比特网络整体安全。另外这还是在SW尚未激活的情况下,未来激活了这个节点占比还会继续提升的。在SW达到区块95%而激活时,相信那时SW节点数量早就过半了,从而会有大量支持SW的全节点来校验SW交易的安全,不会影响比特币网络的安全性。

2.7 假设SW有关键缺陷无法撤销?

在Steve的第4条和Jaqen的第6条,说SW一旦激活就会必须永远保留在Bitcoin代码库中,就算万一有关键缺陷也无法撤销。他们考虑的问题点在于,看上面的图,SW为了兼容,将SW交易在旧节点看来是可以任何人都可以花的交易,就是说旧节点会失去对SW交易的校验能力,只是单纯接受的。SW交易由SW节点来校验。于是就认为即使SW出现问题,也无法再退回到没有SW的状态。

【分析】其实他们小看了硬分叉的能力,硬分叉几乎可以做任何事的。万一真发现SW有巨大缺陷,完全可以通过硬分叉返回无SW的。注意这个比SW还新的无SW新版本,而不是SW之前的无SW旧版本。在硬分叉的无SW新版本中,可以将在旧版本中看似可任意花的SW交易,由系统来统一收回,然后系统来提供新的代码来重发分配给私钥持有人即可。这些工作是可以在代码层面完成实现的,并不需要有中心化的人或团队来充当中介,当然不会直接硬分叉退回人人可以花币的无SW旧版本。硬分叉可以做任何事和修复任何漏洞。

这个问题也被一些硬扩支持者,引伸为类似重放攻击的“盗币”攻击,就是说可在SW激活时,弄个硬分叉。重放在SW主链上的SW交易,从而可以在分叉链上获得SW交易的币。首先SW是在95%下激活的,在51攻击威慑下,5%的算力能否维持这个硬分叉安全存活都是个问题。另外就算存活下来其价格也不会很高。重放“盗”损失的只是这个分叉链上的分裂币,而在SW主链上的比特币会一直安全一切正常。而是这个分叉链,并非而主链,受到了这个重放攻击影响。另外,SW交易并非强制的,即使在SW激活之后,可以继续发非SW交易,若那时真发现有这个硬分叉链存活,那么大家只要暂时不发大额SW交易即可。

2.8 用硬分叉实现SW会更好?

在Steve的第6条和Jaqen的第5条,说软分叉是懦夫的行为,他们用这种方式将人们不想要的改变强加给他们。软分叉是不好的,因为比特币的用户(即除了矿工以外的其他人)没有机会同意或选择退出,尽管他们受到这种彻底改变的影响最大。硬分叉,可以让社区内的每一个人掌握决定权。通过硬分叉激活隔离见证可确保整个社区(而不仅仅是矿工)都可以决定对协议所做的更改。

【分析】这个观点是硬扩支持者阻碍SW技术的最后退路,即承认了SW确实是好东西,但是必需要SW硬分叉激活,而不是SW软分叉激活,想以此来阻碍SW的正常推进。

包括V池,Roger,加文和江卓尔等等很多硬扩支持者,都已经共识了SW确实是好东西,表示不反对了,但是其却坚持必需要通过硬分叉来激活SW,而不是通过软分叉。理由如下:

1)软分叉“欺骗”旧节点,硬“诚实”

所谓“欺骗”其实仅仅只是为了兼容性,让未升级的节点也能继续接入网络,只是不能验证SW交易,降级为收发币的SPV钱包而已,应该不算骗。若是硬分叉,所谓“诚实”则是不兼容,不升级就会在比特网络中直接踢出这些未升级节点,完全不能再使用。显然“不能验证新交易但能收发交易”的软分叉是要好于“完全踢出”的硬分叉。另外也不用担心SW交易没有得到有效验证,由大量已经升级的新版本的SW全节点来验证。

2)软分叉只需要矿工投票,硬全体投票

其实矿工投票本来就是代表全体投票,全体可以通过社区去影响矿工的投票。另外矿工用区块投票可以方便量化统计。还有个好处就是整个社区不用直接投票,可以避免持反对票的用户流失。软分叉下,即使反对SW,若激活了SW但是你的QT钱包依旧可以使用,而不用离开。而在硬分叉下,若你反对SW,若激活了SW,那么你不支持SW的QT钱包版本将无法再使用,会逼迫你要么接受要么离开。最好不要因升级问题,而导致任何人离开。

3)软分叉代码复杂,硬SW的代码简单

确实硬分叉不用考虑兼容性问题,可以简化一些代码。但是我觉得简化的效果应该不会太明显的。软分叉实现SW需要隔离出来签名,硬分叉SW同时样的要隔离出来签名,在主要代码上,估计不会简化多少代码的。核心开发者们,创造性地实现了兼容,可以不强迫旧节点升级,这是好事。例如从文档doc升级为docx,后面的支持docx版本能兼容前面的doc,这不是好事吗?若没有做出来,说花太多时间和精力,去实现兼容,有点不值得去做还有道理。然而现在是已经做出来兼容了,还要去删掉故意不兼容,有点不可理喻。

另外这些硬扩支持者有代码量多,bug就多的过于直观地外行结论。这是对程序的不懂的表现,有时一些用于兼容的代码的增多,反而有利于bug的减少。SW软分叉已经在测试网络上运行测试很久了,有bug出现可能不大。再说出bug也并不可怕,有足够强大的开发团队来及时修复即可。

 第三篇  正确扩容路线的建议

3.1 选较好的融合合成分叉升级模式

一般的软件代码简单改动,如修复些小bug,优化下界面等,直接通过普通升级即可。当重大改动,无法用完全兼容的普通升级时,能软分叉实现时尽量用兼容性较好的软分叉。硬分叉分为为升级的主动硬分叉和修复重大漏洞的被动硬分叉。必须要进行主动硬分叉时,也要尽量选融合了软分叉与硬分叉优点的融合合成分叉方案。

呼吁扩容路线可采用:SW合成分叉

第一阶段:SW软分叉,先实现节点的兼容,不强迫旧的全节点升级,而是先统一算力,此阶段后能实现100%算力支持SW合成分叉。

第二阶段:SW+HF硬分叉,在100%的算力支持下,且检测到全节点大多数都已经切换新版本后,激活硬扩容HF和简化SW的硬分叉。此时算力和节点几乎全都支持,分裂币圈风险极小。

3.2 激活门槛最好设为95%

   目前比特币升级一般要遵循BIP9升级规范,就是说要有2016个区块中门槛的支持比例才会激活的。如SW隔离验证软分叉是95%的激活门槛。详见:9.6比特币区块版本号知识及升级规范BIP9 只要有能挖出超5%区块的矿池不同意,即可否决SW的激活,维持现状。根据近7天的区块情况,有这个版本激活否决权的矿池有九家之多,分别是:

1、AntPool,蚁池,18.7%

2、F2Pool,鱼池,15.9%

3、BW.com,币网,10.4%

4、BTCC,国池,9.2%(支持SW)

5、BitFury,8.6%(支持SW)

6、ViaBTC,V池,6%(支持BU)

7、SlushPool,5.5%(支持SW为主,少量BU和Classic等)

8、BTC.com,5.3%

9、HaoBTC,好比特币,5.1%

注意一些没有设置激活门槛,不遵循BIP9升级规范,或过低的激活门槛的版本,币圈矿业最好应该直接无视掉。真正想要竞争的版本,需要正大光明,设高的激活门槛,8.4对BU无限版本建议进行的限制,无规矩不成方圆

激活门槛的高低,在很大程度上决定了分裂币圈风险的高低。假如是50%就匆匆启动的硬分叉,将很大概率引起币圈分裂。那些支持50%共识就硬分叉的版本的人,其实已和直接支持币圈分裂很接近。

软分叉有全节点和区块链的兼容性,理论上即使很低的算力就激活,也不会形成分叉链。但是算力过低就激活时,有可能因一些人不同意,而在软分叉激活的瞬间,强行进行硬分叉,引起分裂。为了避免这种情况发生,即使是软分叉或合成分叉,也尽量在足够的算力投票共识下才进行激活。

激活的门槛越高,引起币圈分裂的可能性就越低。

3.3 留有够足够长的投票时间

分叉升级需要足够长的时间来测试和审核代码,以及科普学习具体修改了些什么。以及需要足够长的时间来达成是否升级的共识。另外用户需要时间升级最新QT钱包并同步,第三方币应用开发相兼容的APP并推送更新,以及一些代码库的兼容测试及设计更新等等都需要时间。因此尽量给足够多的时间,而不是匆匆忙忙地进行。

像隔离验证软分叉是在2016年11月18日开始统计投票,每2016区块即两周左右统计一次,有足够多的时间来做准备,若没有准备好,可下个2016区块,下下个2016区块等再投票,最久可以延续到明年底再在有可能达到95%区块支持下而激活。目前区块有25%左右,节点为40%多,而币企业有86家币公司或项目表态会支持SW,但已经准备好可支持的只有35家,还是需要时间。

https://bitcoincore.org/en/segwit_adoption/

Segwit Ready: 35, work-in-progress: 26, planned: 25

希望关注“Bite酱”,若有错误或不认同请留言交流讨论,谢谢若觉得不错请分享。

声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

点击阅读全文