摘要:区块链的分支或分叉1.区块链为什么有分叉分叉会发生什么情况 区块链的分叉(fork)的形成原因可能有多种。 当两个结点几乎在同一个时间挖到了...
区块链的分支或分叉
1. 区块链为什么有分叉分叉会发生什么情况
区块链的分叉(fork)的形成原因可能有多种。
当两个结点几乎在同一个时间挖到了矿并同时发布区块,此时就出现临时性的的分叉(state fork),
本质上是对比特币这个区块链当前的状态产生了意见分歧,
当人为的发起分叉攻击(forking attack),也就是故意造成这类分叉(deliberate fork)还有一类分叉是,当比特币的协议发生了改变的时候,软件需要升级。而在分布式系统中不能保证所有节点同时升级软件,假设存在部分节点未升级,会导致协议分叉(protocol fork)。对协议修改的内容的不同,又可以将分叉分为硬分叉(hard fork)和软分叉(soft fork);
比特币协议增加新协议,扩展新功能,未升级软件的旧节点会不认可这些修改,会认为这些特性是非法的。这也就是对比特币协议内容产生分歧,从而导致的分叉叫 硬分叉 。此时,就出现了新节点永远沿着新节点产生的链挖矿,旧节点永远沿着旧节点链挖矿,由于新节点算力足够强,所以形成两条永远都在延伸且平行的链。只要这部分旧节点永远不更新,则旧链将一直延续,可见这种分叉是持久性的。
出现hard fork后,便变成了两条平行的链,也就造成了社区分裂。社区中有一部分人,会认为下面的链才是根正苗红,各个链上的货币独立。以太坊历史上的一件大事就是硬分叉事件。以太坊称为ETH,但目前看到的ETH已经不是最初的ETH了,以太坊在历史上发生过硬分叉,另一个链称为ETC。实际上,ETC才是以太坊设计原本的协议,而ETH是黑客攻击ETH上一个智能合约THE DAO后,进行回滚的协议链(将黑客攻击偷取的以太币采用硬分叉方式回滚回到另一智能合约,然后退还给真正拥有者)。
分叉之初,由于两个链分叉造成了互相影响,产生了很多麻烦。比如:在ETH链上有一笔转账B->C,有人便在ETC链上回放,将ETC链上的货币页转给了C(C收到两笔钱)。后来,对两条链各添加了一个chainID,将两个链区分开,才使得这两条链真正分开。
如果对BTC协议添加限制,使得原本合法交易在新交易中不合法,便会形成软分叉。
当大多数节点已经更新完毕之后,旧节点认可新节点挖出的区块,因此发布自己挖出的区块,但新节点不认可旧结点挖出的区块,便沿着上一个新节点发布的区块继续挖矿,当新节点拥有大部分算力的时候,新链会越来越长,从而旧节点挖出并发布的区块一直被抛弃,无法获得出块奖励,最终倒逼旧节点升级软件,实现所有节点认可新协议并进行升级。可见,只要系统中拥有半数以上算力节点更新软件,此类分叉不会出现永久性分叉。比特币脚本中的P2SH就是通过软分叉方法加进去的。
这一部分我并没有查到太多的资料,但是在绝大多数共识协议之中我们都假设需要过半算力;
在理论上,如果掌握了50%以上的算力,就拥有了获得记账权的绝对优势,可以更快地生成区块,也拥有了篡改区块链数据的权利。因此,当具有过半的算力,也就是51%都是诚实可靠的,能保证整一个区块链在合法有序的进行运行。
但是为什么选择过半的算力,而不是过半的用户?比特币系统,任何人都可以加入,且创建账户及其简单,只需要本地产生公私钥对即可。只有转账(交易)时候,比特币系统才能知道该账户的存在。这样,黑客可以使用计算机专门生成大量公私钥对,当其产生大量公私钥对超过系统中一半数目,就可以获得支配地位(女巫攻击)。因此,比特币系统中很巧妙的使用算力作为投票的依据。
2. 什么是比特币中的硬分叉和软分叉他们各自有什么特点
简单来说,因为兼容性的不同,因此就产生了硬分叉和软分叉,软分叉是暂时的,而硬分叉则是永久的。
区块链发生永久性分歧,在新的共识规则发布之后,一些没有及时升级的节点则没有办法验证已经升级的节点所产生的区块。这个时候硬分叉就会发生。对于硬分叉,行业内的定义是这样的,硬分叉是指比特币的区块格式或者交易格式(也就是大家所熟知的“共识”)发生改变时,没有升级的节点会拒绝验证已经完成升级的节点所生产出的区块。而已经升级的节点则可以验证未升级节点所产生的区块。然后大家各自延续自己认为正确的链。因此就分成了两条链:新链和旧链。
软分叉具有如下的特点:
1, 具有很好的兼容性,之前的旧版本部分功能可用,可以不用升级。
2,在区块链的层面没有分叉的链,只是组成的链的区块有新旧区块之分;
3,在相当长的时间里,可以允许不进行升级,继续使用原有的版本生成旧的区块,并与新区快并存。
3. 区块链入门的教程
可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。
下面,我就来尝试,写一篇最好懂的区块链教程。毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。
需要说明的是,我并非这方面的专家。虽然很早就关注,但是仔细地了解区块链,还是从今年初开始。文中的错误和不准确的地方,欢迎大家指正。
一、区块链的本质
区块链是什么?一句话,它是一种特殊的分布式数据库。
首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。
其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。
二、区块链的最大特点
分布式数据库并非新发明,市场上早有此类产品。但是,区块链有一个革命性特点。
区块链没有管理员,它是彻底无中心的。其他的数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。
正是因为嫌败无法管理,区块链才能做到无法被控制。否则一旦大公司大集团控制了管理权,他们就会控制整个平台,其他使用者就都必须听命于他们了。
但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?请接着往下读,这就是区块链奇妙的地方。
三、区块
区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分。
区块头(Head):记录当前区块的特征值
区块体(Body):实际数据
区块头包含了当前区块的多项特征值。
生成时间
实际数据(即区块体)的哈希
上一个区块的哈希
...
这里,你需要理解什么叫哈希(hash),这是理解区块链必需的。
所谓哈希就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。
举例来说,字符串123的哈希是(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。(理论上,其他字符串也有可能得到这个哈希,但是概率极低,可以近似认为不可能发生。)
因此,就有两个重要的推论。
推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。
推论2:如果区块的内容变了,它的哈希一定会改变。
四、 Hash 的不可修改性
区块与哈希是一一对应的,每个区块的哈希都是针对区块头(Head)计算的。也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。
Hash = SHA256( 区块头 )
上面就是区块哈希的计算公式,SHA256是区块链的哈希算法。注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定,
前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改弯首变。
这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。
正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。
每个区块都连着上一个区块,这也是区块链这个名字的由来。
五、采矿
由于必须保证节点之间的同步,所以新区块的添加速度芹闹颤不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。
所以,区块链的发明者中本聪(这是假名,真实身份至今未知)故意让添加新区块,变得很困难。他的设计是,平均每10分钟,全网才能生成一个新区块,一小时也就六个。
这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效哈希,从而把新区块添加到区块链。由于计算量太大,所以快不起来。
这个过程就叫做采矿(mining),因为计算有效哈希的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算哈希的机器就叫做矿机,操作矿机的人就叫做矿工。
六、难度系数
读到这里,你可能会有一个疑问,人们都说采矿很难,可是采矿不就是用计算机算出一个哈希吗,这正是计算机的强项啊,怎么会变得很难,迟迟算不出来呢?
原来不是任意一个哈希都可以,只有满足条件的哈希才会被区块链接受。这个条件特别苛刻,使得绝大部分哈希都不满足要求,必须重算。
原来,区块头包含一个难度系数(difficulty),这个值决定了计算哈希的难度。举例来说,第100000个区块的难度系数是 14484.16236122。
区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。
哈希的有效性跟目标值密切相关,只有小于目标值的哈希才是有效的,否则哈希无效,必须重算。由于目标值非常小,哈希小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。
前面说过,当前区块的哈希由区块头唯一决定。如果要对同一个区块反复计算哈希,就意味着,区块头必须不停地变化,否则不可能算出不一样的哈希。区块头里面所有的特征值都是固定的,为了让区块头产生变化,中本聪故意增加了一个随机项,叫做 Nonce。
Nonce 是一个随机值,矿工的作用其实就是猜出 Nonce 的值,使得区块头的哈希可以小于目标值,从而能够写入区块链。Nonce 是非常难猜的,目前只能通过穷举法一个个试错。根据协议,Nonce 是一个32位的二进制值,即最大可以到21.47亿。第 100000 个区块的 Nonce 值是274148111,可以理解成,矿工从0开始,一直计算了 2.74 亿次,才得到了一个有效的 Nonce 值,使得算出的哈希能够满足条件。
运气好的话,也许一会就找到了 Nonce。运气不好的话,可能算完了21.47亿次,都没有发现 Nonce,即当前区块体不可能算出满足条件的哈希。这时,协议允许矿工改变区块体,开始新的计算。
七、难度系数的动态调节
正如上一节所说,采矿具有随机性,没法保证正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。
为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此接下来的难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此接下来的难度系数就要调低10%。
难度系数越调越高(目标值越来越小),导致了采矿越来越难。
八、区块链的分叉
即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢?
现在的规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为六次确认)。按照10分钟一个区块计算,一小时就可以确认。
由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。
九、总结
区块链作为无人管理的分布式数据库,从2009年开始已经运行了8年,没有出现大的问题。这证明它是可行的。
但是,为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。
因此,区块链的适用场景,其实非常有限。
不存在所有成员都信任的管理当局
写入的数据不要求实时使用
挖矿的收益能够弥补本身的成本
如果无法满足上述的条件,那么传统的数据库是更好的解决方案。
目前,区块链最大的应用场景(可能也是唯一的应用场景),就是以比特币为代表的加密货币。
4. 【区块链知识】当我们遇到分叉问题时,该怎么办
遇到分叉问题,该听谁的?
假想这样一个场景,在区块链中,一定会遇到这样的情况,区块甲和区块乙同时把一条信息记录下来,并且做好编码和时间戳。
他们两个区块同时发布信息,说这个编码为4495662的信息是我记账的,它的报酬应该归我!
然后,大家就有的认为报酬应该归区块甲,有的则认为归区块乙,而报酬只有一份,只能给一个区块。这下好了,出现不同意见了,该怎么办?
更严重的是,有的区块会认为这件事是区块甲做的,也记下来,顺着编码继续往后记账;另外一些区块则认为这件事是区块乙做的,跟着在区块乙后边继续记账。
这样事情就大条了!原本严谨的唯一的一条信息链,到区块甲和区块乙这里,硬生生给分开了,它们各自后边分别跟着常常的链条。
这种情况持续下去,就导致每个人都无法辨别自己掌握的信息链,是否正确了!
为了解决这个问题,区块链技术又出台了一个新的规则:每条记录都要顶格写,同时要保证中心离田字格上边缘要保持0.897 57毫米的位置上。
为了符合要求,每个人都得拿着尺子去量好位置,然后才能开始记录。这样记录每条信息时,增加了难度,延长了操作时间。
只要一个人做好了记录,大喊一声,我记录好了!
其他人就停笔不再记录这条信息,反而开始记录这条信息是某某记录的接着那个编码继续往下记录。
遇到分叉问题,就是这样解决的。
5. 区块链中硬分叉和软分叉的区别是什么
硬分叉是由于区块链不可接受的永久性分歧造成的,软分叉则是区块链的可接受分歧造成的。硬分叉的出现意味着出现一条无法接受新共识机制的区块链,这条区块链相当于系统的旧版本,而接受了新共识机制的则是新版本,两者虽然不版本不同,但是还是相互联系。而软分叉造成的区块节点是可以和新共识机制兼容的,不会另外形成一条区块链。硬分叉和软分叉是币圈中比较常见的事情。区块链除了炒币,其实可以应用的地方还有很多,包括医疗、保险、教育、食品等。我认识一家专门做区块链开发的公司,煊凌科技。他们在行业内的评价还不错。
6. 区块链分叉后是分别独立的吗
区块链分叉分为两类:一类是硬分叉,一类是软分叉。两者最大的区别在于是否兼容旧版本协议,硬分叉是完全不兼容,而软分叉是可以兼容的。所以硬分叉后是分别独立的,而软分叉不是。
7. 分叉数和节点数有啥区别
分叉数和隐梁棚节点数是区块链中的两个不同的概念。
分叉数是指在区块链中存在的分支数量。当区块链中出现分支时,分叉数就会增加。例如,如果有两个分支,分叉数为2。分叉数越高,表示区块链中存在更多的不同版本,这可能会导致区块链的不稳定性和安全风险。
节点数是指连接到区块链网络的节点数量。每个节点都是区块链网络中的一部分,并且可以渣灶验证和广播交易和区块。节点数越多,表示区块链网络越强大和稳定。
因此,分叉灶则数和节点数是两个不同的指标,但它们都可以影响区块链的稳定性和安全性。
8. 区块链的分叉是什么意思
区块链的分叉是区块链网络中独有的一种版本升级枝睁方式,来解决用户的一些使用问题,区块链升级比较特别,升级时由参与的矿工共同来决定,还会产生更多的版本,分叉出来的两条链相当于是一个老的版本激滚,逐渐向新猛铅岁链过度,最终完成升级,只剩新链。
9. 区块链中通常说的分叉是什么
分叉是通过在网络的不同部分同时创建两个区块来创建一个正在进行的区块链替代版本。这会创建两个平行的区块链,其中一个是获胜区块链。
10. 区块链分叉是什么
区块链分叉是什么?分叉会导致我的比特币一分为二吗?在中心化系统中升级软件十分简单,在应用商店点击“升级”即可。但是在区块链等去中心化系统中,“升级”并不是那么简单,甚至可能一言不合造成区块链分叉。简单说,分叉是指区块链在进行“升级”时发生了意见分歧,从而导致区块链分叉。因为没有中心化机构,比特币等数字资产每次代码升级都需要获得比特币社区的一致认可,如果比特币社区无法达成一致,区块链很可能形成分叉。以比特币为例,2017年7月,为了解决比特币区块链拥堵问题,一些比特币爱好者提出了bitcoin cash分叉方案,导致比特币区块链一分为二。根据分叉后的区块链是否能兼容旧区块链,分叉又分为“硬分叉”和“软分叉”。