比特币之八分叉

正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。

8.分叉

分叉一共分为三种情况:1.分叉攻击:从某一次交易开始,为了回滚某次交易、boycott攻击或其它原因强行分叉;2.两个节点同时挖到矿:如果有两个节点同时挖到矿并且同时发布出去,这就是自然产生的分叉;3.协议升级:因为比特币是个去中心化的,所以软件升级可能是一个很困难的过程,有些节点可能不承认新的协议,这样会产生分叉。按照这种方法,分叉分为hard fork和soft fork,即硬分叉和软分叉。

8.1hard fork:所有节点都必须承认才能取消分叉

肖老师指的是协议不一样的情况。比如区块大小是1M这个问题,有的人就不认,因为1M势必会增加带宽消耗,很吃力。但是不加的话,哪怕1M的区块,按照一个交易250字节算,1s钟也才能处理7个交易,这个值太小了。如果大部分节点(算力大小,即大部分算力的节点都支持了1M的协议,因为打包是由算力决定的)都支持了1M,如果一旦挖出了1M的区块,旧节点就会不认,认为是无效节点,接着之前的往后挖,但是新节点都会接着1M的挖,这样就出现了硬分叉。没有1M块的话不会有分叉,一旦出现1M的区块后不更新协议的节点就会永远出现分叉

以太坊曾经出现过社区硬分叉的问题。曾经有黑客把以太坊的币盗走了,社区就决定强行回滚,硬分叉,把黑客偷走的钱再回滚掉。但是有的人认新的,叫做ETH,有的人不认新的,就出了ETC两种币。问题就来了,那分叉前的币是不可以在ETH和ETC上同时花费呢?确实出现过这种问题。相当于这种人有了两倍的钱,结果后来就出现了回放,也就是在ETH上花的钱再ETC上同步,反过来也同步。不过这个回放好像不是必然的,而且后来又出现了利用回放套币的情况(没听懂,貌似是交易之后把币退回导致的)。现在这个问题解决了,每条链有各自的chainid(还是没懂)。

8.2soft fork:大部分节点承认新协议即可取消分叉

如果有一部分节点提出0.5M一个区块(当然这是不可能的,因为1M都不大呢),这就分叉了,新结点因为不认大区块的,就会沿着旧节点的往后挖,而旧节点也接受小区块,会按着新结点的区块往后挖。如果出现了承认新协议的节点算力比旧节点长的长,旧节点会放弃自己的链,这时候分叉就消失了

新结点
旧节点

这样的例子还有,例如有的人建议将coins域除了前8个字节用于extra nonce以外,后面的也用。用途是这样的,我没懂,大概描述一下。如果有一个轻节点,它要向全节点请求UTXO,但是它也不知道返回的结果对不对,它没法验证,有人就提议,把UTXO的结果也集合成一个merkle tree,将根节点哈希放在coinbase域后面的字节中。

实际出现过的软分叉就是P2SH的支持。

发布了38 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qigezuishuaide/article/details/104244499
今日推荐