本文主题:比特币分叉
全文字数:6772
阅读时间:10分钟
关键词:隔离验证,扩容,软分叉,硬分叉,共识,价值观,意识形态,社区治理,Segwit,Segwit2MB
前段时间爆出来的李老师的录音中提到了莱特币创始人李启威无意识间提出了"比特金莱特银"这种天才般的宣传语,才是莱特币被社区接受的最大原因所在。莱特币确实逃不过的,代码拷贝自比特币,只是修改了一些参数,和工作量证明的算法逻辑。本质上也是比特币的分叉币。而提起分叉,到底是什么概念呢?
一、硬分叉 vs. 软分叉
对于2018年才开始进场体验数字货币的朋友们来说,分叉这个概念可能不如17年进场的朋友体会强烈。而这两个词本身,从中文角度理解起来,也相对容易很多。即使对区块链技术本身并未投入过多关注,也能从中读出分歧,分道扬镳的含义。是的,这种感性的认识和实际上发生的事情,差别也不是特别大。而从分叉中我们不仅可以读到技术之争,更能读到背后的思想之争,利益之争,甚至于大一点说,更是人性之争。
如果换一个语境,从英文的角度来思考这两个词。
- Hard Fork:硬分叉
- Soft Fork: 软分叉
1.分叉
首先Fork
这个词的含义是复制并修改。对于使用Github
开源代码的朋友来说这个词是不陌生的,到别人开源的代码仓库里,点击Fork
按钮,就能把别人的代码搬到自己的仓库。然后我们可以在搬过来的代码上,做任意的修改,如果觉得自己改动的部分很有意义,就可以通过提交修改请求的方式给原仓库,对方审核觉得还不错的时候,就能被加入到原代码中。这本身是一种开源的分布式协作的方式,也是技术交流的方法。深受广大程序员们的推崇。
而进一步细化到软/硬分叉,就进入到区块链世界里来了。
2.硬分叉
这种分叉方式要求托管区块链的全部节点更新到最新的协议软件。而运行先前版本软件的节点挖出的区块不被新的协议认可,也就意味着无效。举个例子,假定比特币硬分叉到新的协议上来了,你也有一台矿机,所有的矿机都已经更新到了最新的软件,而你还在用旧的,你以为你的矿机还在帮你赚钱,其实已经是在浪费资源了,因为挖出来的区块没人认可。不过这个说法也是有一定的问题,后面我们会再提到,硬分叉本身诞生了两条链,如果两条链都有价值,就还是可以挖矿赚钱,比如BTC和BCH两个币种,BCH就是分叉币,比特币相对来说是老版本。
导致硬分叉发生原因有:添加新功能,或者交易回滚等操作。比如以太坊上的the DAO
事件,被黑客盗走6000万美金后,以太坊发生硬分叉,从而出现了两个币种,这两个币种本身到今天仍然在并存,且都有一定的支持:
- ETH:分叉后的,新的币种
- ETC: 更老一点的
简单总结:硬分叉不支持向前兼容,新版本不能识别旧版本的数据。会有新的币种诞生。
3.软分叉
根据对比思考,我们可以知道,软分叉方式不要求全部节点更新到最新协议,允许新的旧的协议并存。即使你的矿机还在运行老版本的软件,仍然是在对同样的目标努力着,达成的是同样的共识。
简单总结:软分叉向前兼容,可以看作是虚拟币软件本身的升级,新版本能够识别旧版本的数据。不会有新的币种诞生。
4.软硬对比
二者实际上都是对代码的修改,新版本的软件协议都是被创造出来了,现在的问题是旧版本的去留问题。软分叉的结果是,节点慢慢更新,新旧并存;硬分叉就是创造出了两条链,互相不承认。
对于普通软件来说,分叉|Fork
这种开源方式并不会带来太多利益纠纷。而事情到比特币这里就不一样了,因为牵涉到了钱。
比特币出现后,大量虚拟币的产生是通过复制比特币代码,并做一定的修改,典型如莱特币,狗狗币,点点币等,而它们的代码修改部分不足1%,也就意味着99%雷同。因此,从技术上来说,这些都是比特币的分叉币。软件的分叉,形成的是不同版本的软件。而比特币的分叉,却会因为它的货币属性,诞生了新的币种,在区块链世界,币就是钱。
对于软分叉和硬分叉的概念,到这里结束,而关于比特币的分叉,下面会用很大的篇幅来做解读。也算作是自己的一次复盘吧。
------认真的分割线-----
二、比特币分叉的背景
1.为何要说起分叉的背景
单纯讲一讲分叉,其实非常简单,但是并不足以还原为何分叉背后的动机。站在2018年这个时间角度去看待发生在2017年风风火火的分叉(甚至在12月份,比特币分叉出一堆儿子),似乎分叉动机就是为了圈钱。也不否认大部分项目跟风炒作圈钱,比如SBTC这种,就是上来硬分叉,圈一波钱,留下一地鸡毛。而回顾比特币社区长达三年的争论,在BCH这种币分叉出来之后,瞬间就获得全球支持这种现象,似乎事情又不像我们想象的那样简单。
2.比特币拥堵
比特币的分叉问题,其实大部分原因都要归结于比特币网络的拥堵问题。
我们知道比特币的区块大小为1MB,10分钟打包一次交易,形成一个区块。而在每个区块都接近这个1MB大小时,就意味着交易很多。为什么这么说呢?在2014年,虽然每个区块的大小上限是1MB,但是几乎所有的区块大小都在200KB~300KB之间。所以每10分钟几乎能把这十分钟内发生的交易全部打包完毕。而每个区块都是1MB时,可以知道这10分钟内产生的交易数,一个区块打包不完,需要等下一个,甚至好几个区块才能打包完这个10分钟内产生的交易。
交易很多,就需要排队,排队就会导致一个新的问题:大家需要给更高的手续费以获得优先处理权。
这很像早期的搜索引擎,开始网页不多的时候,引擎是儿子,巴不得把所有的网页都放到自己的数据库里。
而越往后,网页越多,引擎就变爸爸,谁想被优先显示,就要先交钱,都交钱吗?那谁给的多谁上前排。
而关于比特币为什么要设定在1MB大小呢?风靡网络的解释是下面这种:
比特币早期本身并没有限定区块大小为1MB,最初币价不高,可是一堆不怀好意的人恶意制造大量的小额转账使得网络中存在着大量的未确认交易,从而导致正常的比特币交易无法快速确认,这也就是DDoS攻击,这时候中本聪将区块定为1MB。中本聪设置这个限制之时,提到了如何解除这个限制,无非就是代码修改一下而已。
而当今天和同学讨论时,关于这个说法也并不官方,甚至只是大家的臆测。实际上,中本聪设定区块大小为1MB后,并未显式告诉任何人,甚至还让发现代码这个设定的程序员保密,他也没做过任何解释。虽然自从设定1MB这个限制以后,讨论就一直未曾停歇。
看了一些早期的讨论,我也倾向于相信下面这个说法:
对于设计系统的人来说,无论计算多么精确,仿真多么牛批,你还是要决定一些参数的值。所以区块大小可能也只是中本聪定义的一个数字罢了。至少当时1MB对他来说是比较合理的。所以就选择了1MB,没有更多神话色彩。
所以,我们不妨大胆假定中本聪犯了错,实际上他也不是只犯了一个错。我们要给予中本聪极高的历史地位,但也要认识到,他并不是神。
再从另外一个角度说:设计1MB抵制DDoS攻击是可笑的,因为在币价低的时候,恶意的小额转账并不是不缴纳手续费,只不过此时的比特币还没真的掀起财富浪潮。只是说,恶意的小额转账多了以后,真正使用比特币的人,却因为网络拥堵而体验很差。
此外,限制区块大小本身也并不能更去中心化,甚至是会让事情变得更糟糕。
为什么这么说呢?我们将在下面这个小节进行讨论。
3.区块大小与去中心化悖论
有一派论调是:区块太大会导致普通电脑无法运行,而出现中心化。小区块可以更多普通电脑参与,这样就更去中心化了。实际再推敲一下,发现并不这样简单。能更去中心化的主要推动力在于大家愿意用,更多人使用才有更好的去中心化,而硬件本身是在不断发展。大区块能带来的是更高效的支付体验,会让更多人使用。
更大的区块,矿工可以获得更高的手续费,因为一个区块内的交易费都归矿工所有,这样用户也不用付太多钱了。就好比大瓶可乐其实比小瓶可乐划算,大区块也比小区块划算。而对于担心区块变大以后导致的硬件要求变高的问题,其实也不是问题,因为存储的要求也不是一夜之间就指数级变大的,而是慢慢增长的,硬件本身也在进步。
而坚持小区块的人认为不扩大区块容量,也能解决问题啊?隔离验证,侧链不就可以?为什么一定要扩容?而且一旦扩容就会导致硬分叉,从而出现两条链了啊。这可不安全,不支持分叉。可他们 本身又是矛盾的。比特币的独裁开发小组Bitcoin Core坚持能够让比特币节点能够运行到运算能力不那么大的机器上,甚至是树莓派这种小算力的机器上,而使用者却不得不面临高昂的手续费(拥堵 --> 手续费高昂),这是矛盾之一。此外Bitcoin Core的方向是把比特币变成清算网络,但中本聪是想做支付系统,这与初衷背道而驰。我们知道比特币实际上是集支付与清算为一体,也即支付即清算。
日常生活中我们用银行卡,信用卡等付款,可以达到秒级确认,但是一旦涉及到跨境汇款,少则三天,多则一周才能完成。为什么会这样?跨境支付就要牵涉到多个银行体系间的账本清算,这是极为耗时的。而比特币虽然10分钟全球同步一次,却可以实现全球结算。这正是比特币最初出现之时给人的震撼之处。但是中本聪在白皮书里提到的是做支付,而Core小组却要退回到清算,这与原来的愿景不符。这是矛盾之二。
简单总结,坚守小区块并不能带来更好的去中心化,更好的去中心化来源于参与人数更多,使用人数更多。担心区块太大导致普通硬件不足以支撑的需要回顾一下硬件发展的摩尔定律。
三、扩容之争:三年的分手之旅
1.扩容之争开端
比特币的扩容之争,由来已久。我们要在这个部分挖掘一点比特币核心开发团队Bitcoin Core
的独裁的面目来。
2014年在社区内虽有意见相左,但是大家还是能够温和讨论扩容问题。而慢慢争论开始变大,变成了站队。进入2017年,扩容的争论就进入了白热化,双方开始公然互相辱骂。
更有趣的是,Reddit上,关于比特币还分成了两个板块
- bitcoin板块:有严格的言论控制
- BTC板块:是扩容派聚居地
在核心开发者控制的bitcoin板块,不允许大家讨论扩容问题(有违言论自由之精神),所以支持扩容的人只好在BTC板块发表自己的言论。
从这一点上看在社区上已经分裂。而换句话说,最终分成BTC和BCH两个币种是好事情,争论终于停歇,支持哪一方就去哪一方好了,不必再做无意义的争吵。
2.历史演进
2014年,Bitcoin Core
团队分裂出一个主张扩容的新团队Bitcoin XT
,他们直接提议扩容到20MB。
但是当时一个区块实际大小也就200~300KB,所以扩容问题并不紧要。因此,他们身负骂名。
这不由得让人去想,虽然太激进的解决方案就会被人骂,可是从另一个角度来说,人们并不真的接受远见,只在远见实现的未来才会对远见进行褒奖。
最终结果:Bitcoin XT
太激进,失败。
香港共识
2016年初,香港
内容:扩容会议
会议结果:核心开发者Gavin和扩容派推出Bitcoin Classic
版本,这是一个妥协的版本,区块大小2MB。支持classic的矿工和core的核心开发者们在香港达成共识,准备在16年下半年进行Segwit隔离验证+2M的升级。这是隔离验证第一次出现,共识的结果便是Bitcoin Classic宣告死亡。
可是等到了下半年该执行共识的时候了,Bitcoin core团队就违约,甚至在10月份的开发者会议上直接不允许讨论扩容问题了!
比特币的核心开发者们背叛了他们签署的共识,所以这些比特币的核心开发者们,从某个角度来看没什么好值得敬仰的,不遵守契约精神,缺乏远见。
这时候矿工们用脚投票,开始去支持Bitcoin Unlimited
,我们来了解下这又是什么:
Bitcoin Unlimited去除了区块容量大小的限制。通过市场机制决定区块大小,但是这个方案,又因为开发者能力不足而流产。最高得到50%的矿工的支持。
想法虽好,可惜执行力不足。
纽约共识
在这届共识会议上,声势浩大,全球21个国家,56家区块链初创公司共同签署了纽约共识。这些公司涵盖了全球各主要的区块链公司,80%的算力的矿池,80%的成交额的交易所,甚至一些支付公司都来了,大佬云集,这也是香港共识的一个延续。值得注意的是Core
开发组拒绝参会,他们的”满而未堵“的言论更是让人痛心疾首。在业界强烈要求主链扩容的情况下,已经大势所趋,可是Core
小组仍然独裁。前面Core开发者根本不认可香港共识的结果,最后纽约共识其实也是失败而告终,不过这也催生了后面BCC(现在通用BCH)的诞生。
不支持扩容的比特币的使用体验不好,手续费高昂。我相信很多人都支持这样一种观点:拥堵就是失败。这没有什么好洗地的,技术的进步,就应当奔着更好的用户体验去的,任何故步自封,都是对趋势的逆行。
Core团队甚至想通过市场费率调节,这实际就是干的和百度竞价排名一样的勾当。这种手段显然是失败的,这从比特币的市值比例一路下滑可以看得出来。
而币价的涨跌可以反映交易数量的多少,一般交易越多,表示用的人越多,用的人越多价格就越高。
对于我个人来说,对BCH,当时还叫BCC这种币是看走了眼的,也没能真的领会分叉背后的故事,跟从了一个所谓的大V的言论,说BCH这类币一定是要归零的,甚至说这是吴忌寒的阴谋。而真正的大V在比特币社区里都是互相辱骂争吵不休的状态,所以认知很重要,不要迷恋大V更重要,学会思辨,不要盲从。
最后这部分思考一个问题:硬分叉一定导致分裂吗?
不一定。技术手段并不真的分裂数字货币,而是背后的价值观、意识形态导致的分裂。
而在区块链世界里,共识要比技术重要。共识就是价值观和意识形态的综合。
上面提到了Segwit|隔离验证,这里也稍作解释。
3.隔离验证
这部分的解释参考:https://www.jianshu.com/p/ca054b50d4bc
隔离验证的核心目的不是扩容,而是隔离做验证,不是增加区块大小。隔离验证就是隔离验证,不是为了增加区块大小。但隔离验证能增加区块大小只是副产品。
举一个实际的例子:
签名内容:
30440220296dd1587b8290a04a9253de431b5dbb698030527df5ca75592ab29eea12e85b0220737cafd85b79a7dea1b29c0a5753432d1dacb50f5225221974e38134617ffc8501
下面这是实际交易内容:
30440220296dd1587b8290a04a9253de431b5dbb698030527df5ca75592ab29eea12e85b0220737cafd85b79a7dea1b29c0a5753432d1dacb50f5225221974e38134617ffc8501 // 签名
bitcoin-cli getrawtransaction c0a0d0f4de3be3b57f516f127a6fa5d5895f09bfacbb001853593320fb0a4164
0100000001473e2a366b081a0e6645199692ccf2f6e25e4556a18265785a88b46d50fd68c2000000006a47/*30440220296dd1587b8290a04a9253de431b5dbb698030527df5ca75592ab29eea12e85b0220737cafd85b79a7dea1b29c0a5753432d1dacb50f5225221974e38134617ffc8501*/2103dd38b9b13b24498c382045afb08a4256c3c8bf86e15122df741bd2c2a0bd120fffffffff02a0d21e000000000017a914d1640264c522d9a31aaf69207e57d0a224eb7e668770110100000000001976a914dfd6b01e5ec1ecb1568da79931ddd8327dafd9b588ac00000000
tx_id = tx_hash = c0a0d0f4de3be3b57f516f127a6fa5d5895f09bfacbb001853593320fb0a4164
raw_tx = 0100000001473e2a366b081a0e6645199692ccf2f6e25e4556a18265785a88b46d50fd68c2000000006a47/*30440220296dd1587b8290a04a9253de431b5dbb698030527df5ca75592ab29eea12e85b0220737cafd85b79a7dea1b29c0a5753432d1dacb50f5225221974e38134617ffc8501*/2103dd38b9b13b24498c382045afb08a4256c3c8bf86e15122df741bd2c2a0bd120fffffffff02a0d21e000000000017a914d1640264c522d9a31aaf69207e57d0a224eb7e668770110100000000001976a914dfd6b01e5ec1ecb1568da79931ddd8327dafd9b588ac00000000
tx_hash = double_sha256(raw_tx)
我用/*...*/
标记出了签名在交易信息中的位置,可以看出:签名设计在中间靠前的位置。
这并没什么好处,甚至坏处一堆。因为需要写很多混乱不堪的代码来实现。如果能把签名单独拿出来,放到外面就能解决这个问题。
隔离验证就是把原来比特币交易中签名的部分单独拿出来放到叫作witness
的结构中。所以隔离验证的基本原理就很明确了:把签名拿出来,放到另一个地方,这就是隔离。签名的目的是验证数据,现在签名被拿出来放到了别的地方,这整个事情的逻辑就是隔离验证。(理解到这里就可以)
交易是交易,签名是签名。
隔离验证方案本身,出于兼容的目的,被放在了另一块空间,同时修改了块的上限的计算方式,该方案本身就起到了一定的扩容作用。
隔离验证本身是对之前的比特币交易结构的优化,是用影响力尽可能小,尽可能向下兼容,软分叉的形式。
隔离验证是一次应当做的改进。但是牵涉到和块的大小的争议,隔离验证也被稀里糊涂带上了政治上的感情色彩。
为了实现向下兼容,软分叉且不出问题,需要核心开发者们,产业链上下游的企业,比特币钱包的开发者们共同努力,通力合作。
每一个比特币交易,数据可以分成两个部分:
- 交易状态:一般都可查阅
- 见证,用于证明交易的合法性(签名)
只有矿工才有必要取得见证数据。
但是隔离验证技术却面临三个方面的压力:
- 技术上:大家不够相信隔离验证能解决它承诺解决的问题
- 政治上:研究隔离验证的人受雇于侧链解决方案的公司BlockStream,技术无法中立,利益冲突
- 思想上:无法保证在提供可扩展性的同时,保持比特币网络在一定程度上的去中心化
所以现实还是要从各个方面去协调,并不单纯是技术问题。
四、BCH分叉之后,尘埃落定
BCH的优势在哪里
2017年8月1日,BCH成功在区块478559与主链分离。这是一个非常重要的节点,区块大小8MB,且后序可实现区块容量动态调整机制。BCH是完全去中心化的开发团队,而BTC实际上是被Bitcoin Core控制的,是一种非常中心化的货币。BCH有五个重量级的开发团队,开发实力非常之强:
- Bitcoin XT --主张扩容到20MB的团队,2014年被骂很惨
- Bitcoin Classic --香港共识达成之后消亡
- Bitcoin Unlimited --出了一些bug,即使矿工支持还是死亡
- Bitcoin ABC --主导了BCH的诞生
- Bitprim -- 阿根廷创业公司
BCH一下扩容到8MB并移除了隔离验证,立刻解决了拥堵问题、费率高的问题、确认速度慢的问题。
BCH一出来就被全球的主流平台支持,市值立马就被送到了第四位。另外,BTC的基础设施只需要简单的修改就能立马支持BCH。这就意味着BCH天然有一堆用户基础,且以糖果的形式空投给所有持有比特币的人。
最初挖BCH是要亏钱的,但还是会有很多匿名矿工来支持BCH,这除了是信仰之外,不知道如何解释。
BCH有一个机制是过去的6个区块间隔大于12小时,就会把难度降低20%。所以经过几次调整,BCH就开始比BTC的收益高,因此那些逐利的矿工就来挖BCH了,他们把矿机切换到BCH,就导致BTC拥堵更厉害了。然后越多的矿工支持BCH,BCH的价格就会越高。算力的变化,实际上是那个时候的币价变化的一个核心参考因素。
BCH的出现是顺应了历史潮流,是在那个当口爆出出来的历史必然,而后面出现的什么BCD,BCE,BTG,SBTC,完全就是流氓出来圈钱之举。BTCD,XBC, BTCZ,BTCRED, BTCS, BTPL等等,实在没什么好说,也没什么好洗地。
五、IFO:如果一道菜好吃,为什么不多点呢
这个概念我第一次在李笑来的微博上看到:Initial Fork Offering.
但实际上这就是打着优于比特币的旗号,变相发行代币,募集资金。根据不完全统计,比特币分叉币大概有44个,随便列举几个如下:
- 2017年12月17:SBTC在区块498888分叉,2121万,21万分叉预挖,李笑来背书
- 2017年12月23日,LBTC在区块高度499999分叉,总量2100万,共识算法为DPoS
- 2017年12月23日,BTP在区块高度500000分叉,总量2100万
- 2017年12月25日,GOD分叉,总量2100万,郭宏才主导
- 2017年12月31日,BUM分叉,高度未知,总量2100万
- 2018年1月2日,Bitcoin Cash Plus
- ....
借用Coinomi CEO George的话来说:
绝大多数基于比特币硬分叉项目的唯一目的就是赚钱。这些加密货币并没有为加密货币生态认真做出贡献。
分叉的原因也非常简单,就是蹭一蹭比特币的热度,碰瓷比特币从而获得关注。
而如今,区块链的发展已经迈入了下一个阶段,越来越多的天才头脑开始进入到这里领域,真的要从生产关系上变革这个社会,任重而道远。但我们在路上,从未停歇。从区块链1.0到2.0,3.0演化,中本聪之后的V神,BM等,都为区块链世界注入了新的思想,新的活力。
这些脊梁,才是支撑着区块链向前发展的中流砥柱,也是未来更加值得我们期待的思想、力量源泉。
参考链接:
https://bitcointalk.org/index.php?topic=2079807.0
https://github.com/bitcoin/bitcoin/commit/172f006020965ae8763a0610845c051ed1e3b522
https://www.reddit.com/r/Bitcoin/comments/63859l/github_commit_where_satoshi_added_the_block_size/
https://bitcointalk.org/index.php?topic=1347.msg15366#msg15366
https://bitcointalk.org/index.php?topic=2786690.0