技术视角玛雅总结:比特币软扩容硬扩容之争

作者:狗狗币

发布时间:2019年7月23日

网络来源:新浪微博

惊天动地,荡气回肠的比特币扩容路线之争,现已成为历史。很有幸我(玛雅,cndx)2013年接触比特币并学习币知识进入币圈,因此几乎全程见证了整个过程及参与了巴比特,币科技,微信群等上的很多很多场软扩硬扩辩论。先说下结果,很开心,事实胜于雄辩,我们所支持的SW+LN的软扩容路线成为币圈的共识认可的比特币扩容路线。

之所以有动力花很多时间来整理写出本文,在于有硬扩容的支持者撰写了长文《比特币扩容之争始末》,虽然宏观上不少事件是事实,但是太多太主观的描述,漏了很多,也包含很多严重的技术错误。问题太多与其一点点地指出,还不如自己以技术的视角,来重新梳理下比特币的软扩容硬扩容之争。历史会因撰写人的立场视角而变化,但是从技术视角一般不会。比特币是全球币圈所有人的比特币,而不只是某些人的比特币,因此本文以通俗易懂地讲客观技术为主,尽量少涉及一些人观点,关于技术的描述若有误,欢迎大家指正。

一、起源:中本聪埋下的1MB区块限制伏笔

2010年7月,中本聪亲自设置了区块上限1MB的限制,当时几乎没人能明白原因(现在看来应该是为降低全节点门槛实现高度去中心化),他也没明确说。有人在没多久后的10月,就提出了扩容到7.1MB的建议,结果被中本聪当场否决。也有人说在中本聪设限制1MB前,是从32MB降下来的。其实是最早代码层面是没有限制地,只是当时地数据存储模块的能力有自己天然的上限大约32MB那么大,再大存储不下而已。即规则“区块上限1MB”应该是中本聪,经过深思熟虑后的决策,是应同2100万BTC上限,四年左右产量减半,区块间隔十分钟左右,SHA256挖矿算法,2016区块约两周调整挖矿难度等等,共同构成整个中本聪比特币核心协议的一部分。

  区块链可以看成是账本。而区块大小,可以看成是账本的每页纸的尺寸大小,A4纸还是A8的纸。不论有没有写满,十分钟左右,翻页在新页上记录。

中本聪是眼光很长远的,早就规划好了未来几十年甚至上百年产量减半计划,区块激励转向手续费为主的计划等。因此其在当时几乎没有多少交易可记录时,就设计定下1MB区块大小,应该有其深意。甚至有人猜,他可能早就提前预知了,因这设计将来到达1MB附近时,必然会引起整个币圈的争议,大辩论甚至分叉。但他依旧坚持着这个区块大小1MB设计,没有变大,没有像挖矿难度那样自动调整,更没有直接取消。

二、观点分歧:软扩容路线阵营与硬扩容路线阵营诞生

中本聪隐身之后,将代码开发交给了开源开发社区。开源开发社区是由很多开发者形成的社区,共同管理,是没有严格的绝对代码管理权限的。若某个人不分权试图掌握全部权限,其又没有中本聪的影响力,会有很多开发者不服,甚至直接fork代码成立一个新的开源社区。因此由多位有核心权限的开发者共同管理,是中本聪认可和预想中的,也是其认为已经到隐身可以交给社区维护代码的时机。出现一些重大调整时,可由整个社区共识,而不是被某个人控制。

随着区块越来越大,关于区块大小上限的讨论越来越多,2015年5月,基金会首席科学家Gavin公开提出正式建议:在2016年3月1日硬分叉将区块限制扩大到20M。虽然因区块大小还不大,当时响应的人不多,但这标志着硬扩容路线阵营的正式诞生。

2015年12月,Core核心成员Pieter Wuille在香港举行的“比特币扩容研讨会”上,正式提出比特币SegWit软扩容方案,这标志着软扩容路线阵营的正式诞生。隔离验证(Segregated Witness)方案,就是通过调整比特币交易结构的方式,将交易中签名字串隔离放置到1MB之外,在兼容老版本的同时,间接提高1MB的交易存储量。因普通交易有约一半是签名信息字串,因此SW能有相当于1.7MB左右的区块扩容效果。

  再用上面账本的例子,硬扩容很简单,就是原来A8的纸换成A4,A2甚至直接A1的大纸,简单粗暴的解决问题,但是和之前纸大小不一不兼容,要所有全节点都要换新账本新版本。而SW软扩容,则是发现记账的格式可改进,简单理解可字写小点,就能记更多账了。不用所有人都换账本。

  能SW软扩容下能实现“字写小”,在于每笔交易中有很大一部分是用于证明交易正确的签名信息,SW是通过软分叉,将签名信息隔离在1MB之外,将宝贵的1MB只用来记录纯交易。注意并非某些人宣传的不要签名了,只是换了个位置而已。为了兼容未升级的老版本钱包,在老版本看SW交易时,其看起来就像没有签名随便花。但是当然并不会真的可随便花,还有很多已经升级了SW的全节点来验证在隔离区里的签名,以保证交易正确。

  SW软扩容方案一经推出,便赢得社区的广泛好评,包括很多硬扩支持者也纷纷表示并不反对。软分叉兼容旧版本减少升级风险,不仅仅有可观的软扩效果,在隔离了签名后,交易TXID也固定了下来,解决了交易可锻性问题,为二层网络闪电网络LN及侧链开发等奠定了技术基础。

三、版本Fork:全节点版本竞争硬扩版本接力赛

比特币各版本全节点数量走势图

从2015年8月Bitcoin XT版本的比特币客户端开始,比特币的软扩硬扩容之争,从早期的观点分歧,进入了全节点Fork版本之争阶段。注意,所有版本的全节点之间都是完全兼容的,版本中包含的不兼容内容都没有激活,都在使用同一个主链,即没有链分叉。

上图可看到硬扩容版本在不断地迭代替换中,XT因黑比特币失败而没有人气了,替换为Classic,而Classic因站台CSW而没有人气了,再替换成BU,BU又因多次大量Bug而没人气了,再btc1。现在比特币全节点们共识认可Core,占比高达到96.88%,大区块版本除BU还0.27%外,其它连0.1%都不到了。有人可能担心只Core过于单一,其实有很多Core历史版本的,Core不硬分叉,很多历史版本都可共存使用,因此具体版本数量很多还是很丰富多样的。

目前比特币全节点的各版本占比情况

1、Bitcoin XT开启潘多拉魔盒

这个版本是在2015年由支持大区块路线的Mike Hearn和Gavin一起推出的。打破了比特币只有一个核心钱包版本Core的历史,开始了多版本竞争时代。

一个是为了尝鲜,一个是当时的观点分歧已较激烈,大区块硬扩容有了自己可支持的方式,因此开始时全节点数量快速增加,达到了1000左右。

然而XT版本,从技术角度看并不是纯粹的硬扩版本,其还加入了审查机制,IP地址名单列表等等很多新内容影响了全节点隐私保护,不能更好的去中心化。随着曝光问题的增多,以及比特币社区的封杀,XT全节点量越来越少。而下面的这件事直接宣判其失败。

在2016年初,Mike Hearn忽然宣布比特币作为一场社会实验已然失败,自己将会退出核心开发小组,并售出自己全部的比特币。结果在他抛在了低点之后2017大牛市渐渐来临了。《比特币不会失败,失败的是Mike Hearn自己》中总结了Mike Hearn 的指控主要观点:

1),区块大小的调整无法在社区取得协调一致的观点;

2),比特币系统目前已经完全被中国控制;

3),社区分裂,XT协议遭受攻击。

区块大小既然无法一致共识,那么就应维持原来现有的1MB不变的共识即可。只是锦上添花,即使不进行软扩容或硬扩容任何扩容,也不会失败。至于说被中国控制,更说明了其对比特币生态的不懂,矿业中矿工才是真正独立投票的个体,矿池集中并不代表矿业被控制。另外矿业也只是比特币生态中的一环,即使大致控制了矿业(例如某矿霸),也无法控制全节点,无法控制开发,无法控制交易平台。比特币高度去中心化,无中心能控制。至于最后一条那只是XT的失败,是Mike Hearn自己的失败,而不是比特币的。那时还没有到分裂的程度,还是同一条区块链。另外就算分裂只要大多数币圈人共识在一个链上,别是势均力敌的分裂,那就不怕。

2、Bitcoin Classic与香港共识

紧接打头阵的XT失败之后,Gavin与Jeff Garzik和Peter Rizun建立了一个新的开发组Bitcoin Classic。这次吸取了XT失败的教训,基本没有加入其它有争议的内容,集中精力只谈硬扩。另外为了减少对大区块的担心,其只2MB扩容。Gavin也从后台到前面作为主开发。虽有刷量的因素,但最高时全节点占比曾达到1/3。可惜了败笔在于从XT继承来的仅仅75%算力,就激活的硬分叉的激活门槛。就是说极端情况下,每四个人就还有一个反对时就匆忙激活,将分裂成3:1占比的社区。

2016年1月23日中国矿业聚会,达成“92共识”,即90%以上算力支持下再激活扩容2M的共识。其实那是只要Gavin能放下偏执,将75%提升到90%,可能硬分叉扩容这事儿可能就成了,有算上刷量的约1/3的全节点,又有中国矿业支持。达到90%面临激活时,SW才刚提出不成熟,Core也可能会共识出加入2MB的。可以说这个时刻是硬扩容路线最接近成功的时刻。可惜Gavin死守着75%不变,辩解说75%已经足够安全。错失机会,香港共识也举办。

2016年2月21日,众多币圈大V和五名开发者在香港的数码港召开会议,史称“香港共识”,《【共识解读】比特币圆桌会议达成扩容共识》。此共识的达成,几乎赢得了整个币圈各方的好评,认为软扩硬扩之争问题已基本解决。Classic也便越来越弱势下去。并且此共识内容也成为之后软扩和硬扩方争论经常引用的点。内容不多,见下方:

  1.我们同意隔离见证会继续以软分叉的方式积极地进行开发, 预计在未来两个月按原有时间表发布。
2.我们会继续和整个比特币开发社区一同公开开发一个基于隔离见证改善之上的安全硬分叉。出席比特币圆桌会议的Bitcoin Core贡献者同意:在隔离见证发布后三个月之内,会去实现一个这样的硬分叉,作为建议,提交给Bitcoin Core。
3.这个硬分叉应该会包括一些在技术社区正在讨论中的功能, 包括:增加非见证数据至2MB左右,而总体积不超过4MB。该硬分叉只会在得到整个比特币社区广泛支持的情况下才会实行。
4.Bitcoin Core在发布了一个包含上述硬分叉代码的版本之后,我们才会在生产环境中运行隔离见证。
5.在可见​​的将来, 我们只会运行和Bitcoin Core共识协议兼容的系统,这个系统未来最终会包括隔离见证和上述硬分叉。
6.我们一直致力于开发出能够更有效地运用区块空间的扩展技术, 例如Schnorr 多重签名等。

基于以上内容, 时间节点预计如下:
2016年4月,隔离见证发布;
2016年7月,硬分叉的代码开发完成,可供使用;
2017年7月,如果能够得到社区的广泛支持,硬分叉生效。

总体来说共识内容是:签名的那五位Core开发者提交包含2MB硬分叉的版本给Core社区,来换取矿业只运行Core版本。另外也表达了矿业对SW隔离验证的支持。也规定了硬分叉需要在整个比特币社区共识支持下才能激活。注意SW软分叉和硬分叉,本来是可并行的方案。但在香港共识里这里对SW的支持,成为要挟Core硬分叉版本发布的筹码。更严重的是仅仅只有五位Core开发者参与签名,他们也只是说作为建议提交,他们无法代表开源的Core开发社区。

香港共识,只是造成Classic失去矿业支持而衰弱,但正式失败,还是和XT的失败类似,出现在项目的主开发者自己身上。Gavin此时可能是因太希望得到中本聪的支持了,因此被CSW抓住了机会,只是简单沟通交流,在获知CSW支持其大区块路线后,连严格验证签名都没有去做,就盲目地去站台CSW是中本聪了。Gavin曾经说过,自己的权限随时给中本聪开放,那么其认可CSW是中本聪,就意味着CSW可能通过他有比特币代码的核心权限了。因此在Gavin站台后没多久,Core马上移除了Gavin的核心权限,即正式被移出Core社区,而在此之前Gavin忙着各Fork大区块项目,也很久都没来Core提交维护代码了。站台CSW一事,虽然捧红了CSW,但Gavin的名声却全完了失去了社区信任,随后他宣布退隐,Classic也随即失败。

3、Bitcoin Unlimited的矿业投票僵局

失去了核心开发者的XT和Classic,只能转向由二流开发团队开发的BU,细看上走势图,其实早在Classic诞生之前,BU就已经诞生了,只是一直没有关注节点很少而已。因为他太激进了。XT是20MB,8MB,而Classic是2MB,BU根据其名字是无限,实际上还是有限地,即涌现共识,简单点说就是由矿工算力投票决定,想多少MB就多少MB,不定时地不停可能硬分叉。BU是一个给矿业最大权限的版本,把本来应该由整个币圈决定的区块大小参数,完全交给矿业。

中国矿业尤其是某矿霸已经陷入了必须硬扩的执念中,现在XT和Classic都因开发者问题而没有了,他们也只能选择BU来支持,况且这还是对自己矿业名义上最友好的版本。这时SW隔离验证技术也基本成熟,开始进入投票激活阶段。

见统计Bitqt.com 软扩硬扩最激烈大多都表态了的时期,各矿池平台的算力投票情况。

各矿池的SW与BU投票支持情况

可以看到主要是相关的某系的矿池在支持BU,而其它矿池支持SW。而从将投票权交给其矿工的Slush矿池的投票情况看,也是大多数矿工也都支持SW。

虽然SW的支持率较高,但是SW尽管是软分叉,为了安全激活门槛仍然设为95%那么高。超过“92共识”的90%。而BU延续硬分叉风格,依旧仅仅75%就去冒险激活硬分叉。

无论SW还是BU都远远无法达到激活门槛,算力投票陷入了僵局。

4、新方案频出和BU的漏洞无限淘汰

当投票陷入僵局后,币圈便纷纷各种出着,一时间出现了很多概念很多方案。这段时期应该是币圈技术的最活跃时期之一。当时诞生的一些技术,将来应该也有可能会用得到。

比特币软扩容硬扩容之争技术图

首先是探寻软扩硬扩之外的方案。例如RSK根链测链,以及ExtBlock扩展区块等,尤其后者可以软分叉形式实现类似硬扩效果,曾经很多人很看好,现在莱特币扩展其匿名交易,也是采用ExtBlock技术。软扩加硬扩的方案,即是后来纽约共识中的方案SegWit2x,而BIP91激活方案的SW,正好两者结合也成为最后的激活SW落地方案。

UASF是重大的技术。而硬分叉方对应提的UAHF就是不需共识的分叉山寨的分山币。具体的UASF当时分为BIP148和BIP149,在Core主版本中是从未激活过UASF的,要想支持UASF需要用UASF版本,像用Classic,BU这些版本样。看上面走势图,UASF版本节点,一度超过了BU节点,若不是SW已经顺利激活,有可能继续增加下去成主版本了,而这是矿工最不想看到的,这也是迫使矿业最后妥协先激活SW的重要原因之一。

BIP 148的规定将在2017年8月1日生效,到那时候,矿工将必须通过使用“bit-1”版本号创建区块来向比特币网络表示他们已经为SegWit做好准备。与BIP 148兼容的节点将拒绝那些未信号升级的矿工的区块。简单点说BIP 148的UASF即让矿业投票支持SW,否则8月1日后不接受其区块。根据计算,当时已经超过80%的比特币节点已经准备好激活SegWit。

BIP 149也是一种UASF,但是与BIP 148不同,矿工在节点升级到SegWit时不需要做太多的事情。相对于BIP 148要求信号支持SegWit,BIP 149下矿工只需要避免不要将使用SW了的区块认定为无效的区块就行。BIP 149将在SegWit部署在11月份过期之后若还没激活SW则开始,等到上一个SegWit过期后再创建一个新的部署会更加安全,否则可能会出现与旧节点不兼容的情况。

不过所有努力中,最给力的不是别人,正是BU自己,Bugs Unlimited 漏洞无限。

见文《B1.Bite酱一被戏称漏洞无限的BU版重大漏洞汇总

2017年1月29日6:58:48,运行BU 1.0.0的某矿池意外生产了一个大小为1,000,023 byte的第450529号无效区块。损失了一个区块的奖励。之后估计某些矿池都要表面修改coinbase投票BU,背后实际在运行的是稳定的Core了。

而之后又是连续3月14日,4月23日等多次的BU全节点崩溃,数量锐减。社区可能已经对BU有无限多Bug这个事实已经麻木了。最后连BU支持者,也不得不承认BU技术不行,进而不得不寻找新的下一个硬扩开发团队。

一个是Bitcoin ABC,即后面的BCHABC的团队。另一个即SW2x的btc1。

四、分山IFO:纽约共识和UASF下激活SW也出现分山币

随着牛市的渐渐到来,交易增多。软扩和硬扩僵持下,可及时确认的手续费已经很高了,必须要决定软扩还是硬扩了。注意是【满而未赌】状态,主链区块依旧是十分钟左右出一个块,只要你付足够高的手续费即可及时地在下个区块确认,而感觉不到堵。所有所谓堵的交易,都是因手续费不够高。并且那是的超多待确认交易中,有不少是垃圾粉尘交易,施加扩容压力的。

社区已经形成越来越强烈的共识要先激活经过莱特币提前测试无技术问题的SW隔离验证软分叉。硬扩方的主要阻碍SW的安全问题借口,也在莱特币激活SW后已经几乎没有了。UASF的全节点数量也越来越多的获得支持。

矿业见差状,于是在5月21日纽约共识上找了借口和下台台阶,同意先激活SW。不同于香港共识那么有分析价值。其实纽约共识很简单,也没有Core的参加,只是矿业支持SW的台阶而已。其内容也简单,先80%投票即激活SW,然后再六个月后激活2MB硬分叉。为了区分SW2x的投票与之前SW不同,纽约共识在bit-4位投票。

当时的情况是SegWit2x(NYA)投票要先激活SW再之后2MB。而BIP148的UASF也是要8月1日激活SW。既然都是要先激活SW,有人提出了UASF的BIP91,通过让SegWit2x 和BIP148产生兼容性从而避免分裂。即矿工矿池可同时发出bit-1和bit-4投票,全节点用户可以运行支持BIP9的UASF来投票支持。

纽约共识后的各矿池的投票情况

最终很顺利的 7月21日,在BIP 91的336个区块锁定期中,超过了锁定所需要的269个区块信号支持(80%),BIP 91扩容提案被正式锁定。即困绕比特币多年的软扩硬扩之争,终于可以SW激活而结束,2017-08-24 区块高度481,824是比特币隔离见证正式激活,SegWit顺利激活的消息支撑了比特币之后的爆涨行情。

隔离验证激活后的走势图

本来币圈终于要顺利激活了SW处在一边祥和的庆祝氛围中。2017年8月1日,BCH诞生。第一个Bitcoin Cash区块由大区块支持者在区块高度478559挖出。因这时已经几乎没有任何社区分歧了。其还是强行分叉挖出。即由Bitcoin ABC团队和背后某矿霸支持。

本文《B7.Bite酱一比特币并未分裂,仅仅多了分叉山寨币而已,且未来会更多》当时就对其分类进行划分到分山币,是山寨币的一种。并预言因分山币不需共识,会有很多新的分山币。

因比特币只是BTC,因此有关比特币软扩容和硬扩容之争的事,到这里基本就以SW的成功激活,软扩容的胜利而结束了。后面的只比特币BTC和新币种分山币BCH竞争的事是另外的事了,简单了解去看交易对BCHABC/BTC的走势即可,不再是比特币内部的软扩硬扩之争。

还有就是btc1的SegWit2x硬分叉。本来最有可能成为是比特币分裂币的币种,也因为BCH的诞生和SW激活下良好表现,而渐渐失去所有原有的支持,最后并没有能落地。

五、比特币自共识选择软扩容路线以来的发展

数据图见《Segwit 上线即将满2年,对比特币产生了什么影响?》。SW隔离验证交易,经历了大幅度增长,现占比稳定在约40%左右。这是大多交易平台和钱包尚未支持隔离验证的情况下,若将来主链繁忙时交易平台支持时,可能会进一步提升,从而有更大软扩空间。

来源:Bitcoin Visuals, The Block

目前比特币日均区块大小为 1.2MB。自隔离见证 SegWit 被激活以来,比特币网络约创建了将近 71,000 个大于 1MB 的区块,其中,67 个区块等于或大于 2MB。2019 年 3 月 31 日,在比特币区块高度 566,575 上创建了最大区块,大小为 2,377,364 字节(约 2.4MB)。每个区块处理的交易数量,也从平均1,690 增加到1,875。

来源:Bitcoin Visuals, The Block

内存池未确认交易体积,也在SW激活充分应用后,快速降低回落到较低的位置,且一直维持到现在都在较低位。能正常及时确认交易的手续费也维持较为合理水平。

https://btc.com/stats/unconfirmed-tx

另外作为SW+LN软扩路线中的,闪电网络LN也已经正式落地可用,发展情况较好,闪电节点数量持续增多中,更多闪电网络信息可见BTCLN.com

https://bitcoinvisuals.com/lightning

六、总结

从技术视角看,是简单的直接扩大区块大小冒险硬分叉扩容,还是将交易数据和签名相隔离间接用兼容的软分叉扩容。本来两种方案并不是对立的,而在香港共识中,将两者对立起来。当然也有说法是因ASICBoost专利,在SW隔离验证激活后将降低其效率,后来事实也证明可能确实有此事。

总之,本来简单的兼容的软扩容SW方案,在被大区块硬扩拖延了很久很久,最后在BU漏洞无限和UASF的压力下,终于在纽约共识的台阶下同意先激活SW。而SW2M之后的2M硬分叉,又在其推出分山币下难以达成共识,因此软扩容路线,在比特币BTC上获得全面胜利。而这两年来看,也是发展地很顺利。

耗了整整半天的时间整理的,希望大家能帮忙转发分享下。若文中有误请指出,若有不同的观点也欢迎自由评论,放心不会拉黑的。谢谢大家的关注和支持。

玛雅 2019年7月23日​​​

相关文章:

发表评论