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

基础课程第十六课 分叉

第十六课 分叉

挖矿过程中需要全球多个矿工共同竞争去获取记账权,由于区块链是去中心化的数据结构,所以不同副本之间不能总保持一致,区块有可能在不同时间到达不同节点,因此相互竞争的链之间是存在差异的。这就是我们所提到的分叉,分叉主要有三种类型:临时分叉、软分叉和硬分叉。

01

临时分叉

数字货币进行的是竞争记账方式,也就是谁先算出来难题,将交易打包成区块,并将区块公布到网络中,得到其他节点的验证和接收,大家就在自己的区块链上加上新的区块,并进行下一轮的计算。

但是这里会出现一个问题,因为广播是需要时间的,如果A和B两个区块分别被不同的矿工挖出,并分别在网络中广播,一部分节点先得到A区块,后得到B区块,则他们把A作为主链,而B作为临时分叉保存,这些节点被称为红军;另一部分节点先得到B区块,后得到A区块,则他们把B作为主链,而A作为临时分叉保存,这些节点被称为绿军。

这就是我们所说的临时分叉,那么接下来是以谁为准呢,红军和绿军彼此并不服气啊,所以谁也说服不了谁,区块链的顶点产生了分歧,一派以红色区块为顶点,一派以绿色区块为顶点。

于是大家制定了一个规则,先在谁的基础上算出下一个区块,按照最长链原则就以谁为准,后续,基于绿色区块计算的粉色区块率先出现并被全网接收和认可,也就是在绿军的基础上增加了粉军,他们现在是红军一倍的实力,所以绿军就打败了红军,也就是所有节点将B+C作为主链,A区块分叉被抛弃,临时分叉结束。

在实际应用中,临时分叉并不常见,不过存在这种可能性,所以提前约定好了处理办法以解决这种可能出现的情况。而且临时分叉如同名字所表达的,它只是一个临时出现的情况,后续就还会合并到一条主链上。

02

软分叉

软分叉又称为兼容性分叉,这也是软分叉和硬分叉最大的区别。硬分叉是实实在在的分成了两条链,而软分叉还是在一条链中,只是彼此前后节点所遵守的规则有可能不同。简单举一个例子,硬分叉就像是另外开辟了一条新路,而软分叉就像是在原来的土路上,我们开始修建水泥道路啦,这还是一条路,只是用料(规则)有所不同啦。

在此之前,说说分叉的原因吧,因为中本聪老先生设计比特币的时候,没想到比特币发展会如此迅猛,所以当初一个区块的大小只设计了1M大小,也就是1000字节k,按照一笔交易250字节来算,一个区块也就是能放4000笔交易,一个区块按照10分钟计算,一秒钟只能处理7笔交易。随着比特币的发展,这个处理能力明显是不足的,所以大家就考虑扩容。可是扩容的方案太多啦,有的说扩成2M,有的说扩成无限大,有的说扩成可调节的,按照之前的2016个节点的大小需求去取平均值。谁也说服不了谁,于是社区就各自按照自己的思路去对比特币进行了扩容,在此基础上就出现了软分叉和硬分叉。

软分叉例子:

1、P2SH软分叉升级

P2SH包含在BIP16中,通过软分叉进行升级比特币系统,让比特币在支持P2PKH基础上,再支持一种叫P2SH的标准交易类型。

2、SegWit软分叉升级

SegWit主要包含在BIP141-144中,通过软分叉进行升级比特币系统,让比特币支持一系列SegWit的功能集。

03

硬分叉

相对于软分叉这种比较温柔的扩容方式之外,硬分叉则是不再承认原来的链条,而是在某个区块之后,完全采取新的区块规则。

目前已发生的区块链硬分叉的案例有:

a、比特现金(BCC)

Bitcoin Cash(BCC),中文名译为比特现金,其客户端软件Bitcoin abc是对Bitcoin core 0.14进行fork(复制并修改)得来的版本,将区块大小调整到了8M,并且移除了隔离见证(SW)。2017年8月1号UTC时间12:37,比特币区块高度478558开始分叉,BCC由此而来,可将其视作比特币(BTC)的分叉币或竞争币。

比特现金虽然算是比特币较为成功的一个硬分叉,不过主流btc用户还是对此持不欢迎态度。此后又出现了什么比特黄金,比特白银等硬分叉,则基本不被接受。

b、以太经典(ETC)

The DAO(Decentralized Autonomous Organization,即“去中心化的自治组织”)于2017年5月在以太坊上进行众筹,在6月份已经成功募集价值约1.5亿美金的以太币,然而黑客利用攻击,将5000万美金的资产转移到了他们名下。为了夺回这部分资金,以太坊团队决定在2017年7月20日晚上,以太坊的第192000个区块进行硬分叉,将以太坊分为以太经典(ETC)和以太坊(ETH),将已有以太币进行回滚,以夺回黑客侵占的以太币。虽然这一决定并未得到以太坊社区半数以上的人群认可,质疑声也是很多,不过以太坊团队还是强行进行了硬分叉。

这个例子可以简单理解为,国家印了1.5亿元钱,其中5000亿被强盗抢走了,为了保证利益,国家把这1.5亿纸币宣布无效,重新印了1.5亿。这个是不是合理合法呢,就仁者见仁智者见智啦。不过以太坊的创始人V神(Vitalik Buterin)的确是一个爱剑走偏锋的人,现在国内严厉打击的ICO(Initial Coin Offering),其实也是由V神率先提出并发扬光大的,他在开发以太坊之前就是利用ICO募集比特币作为开发以太坊的资金。之前我也说过,我认为以太坊最大的技术突破是智能合约,这也是我最看好它的地方。但实际上,以太坊最受人欢迎的地方,就是它的ICO机制,可以轻松的发行各种各样金额的代币。(发个广告,各位如果有想发行代币的,从几千万到几千亿,随便说啊,我帮你们搞定。哈哈,开个玩笑,只是说明,其实那就是个数字罢了,空气中飘过的数字而已)

在以太坊之前,发代币是需要像我们这样的IT工程师的大力参与,参考比特币的源码来进行二次开发,才能发币的,成本是比较高的。但是以太坊出现之后,各种公有链的开发都可以基于以太坊平台,发币进行ICO也是如此,整个过程变的超级简单。

04

软分叉与硬分叉的比较

硬分叉和软分叉最大的区别就是新旧节点的认可关系,软分叉是新旧节点可以相互认可,彼此当做是还和原来一样的节点(其实是具有一定欺骗性的,因为新旧节点的确有区别啦),而硬分叉则是新节点不再遵循任何老节点的规则,也将按照新规则才能产生节点,而由老规则生成的节点则会被认为是无效节点被抛弃掉。

软分叉优点:

a.软分叉总是只有一条链,没有分成两条链的风险;

b.软分叉不要求所有节点同一时间升级,允许逐步升级,且并不影响软分叉过程中的系统稳定性和有效性;

但软分叉也有缺点:

a.软分叉的前提是老的节点总是能够接受新节点的区块,这就要求把系统设计成向前兼容(forward compatible);

b.软分叉总是建立在对老节点进行欺骗的基础上,它让老节点没有察觉实际上已经发生的变化,某种程度上违背了单点完整验证的原则;

这节课我给大家介绍了区块链的分叉原理以及相关案例,让大家了解到什么是区块链分叉,下一节课,我将和大家聊一聊区块链的匿名性。

P.S. 名词解释:向前兼容(forward compatible)

向前兼容是非常有意思的术语,它不同于我们通常说的软件设计中向后兼容(backward compatible)的方式。它要求对于新可能出现的区块形态、共识机制有个预先的判断,并在老的系统中留有余地或后门。当新的节点被部署时,老的节点能够接受新节点所产生的区块。

那么,比特币里是如何实现向前兼容的?

答案是:非标准交易(non-standard transaction)。

比特币中设定了如下规则:

1.将所有交易分类为:标准交易、非标准交易和非法(invalid)三种;

2.如果发现非法交易,一律拒绝,如果该非法交易在某个区块中,则拒绝整个区块;

3.在标准配置下,所有节点对非标准交易采取以下态度:

a. 不转发

b. 不接受

c.不打包

4.对于已经进入区块的非标准交易采取以下态度:

接受该区块;

对区块中的所有交易,包含该非标准交易按既有规则进行验证;

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券