最近岛叔沉迷于吃鸡手游无法自拔。前段时间,吃鸡手游更新版本,本岛叔没注意到,结果不能和小伙伴们愉快的开黑了。于是本岛叔退出,立刻更新了版本。
对于这类传统的APP,我完全不用担心找不到小伙伴,因为这类APP,数据系统存储都是集中的,版本管理也是集中的,如果是重大升级,完全可以设置为若不更新到最新版本就不能进行登录操作,从而确保用户使用的总是正确的版本。
这些都是传统的中心化的APP,而当我们使用的应用不再是中心化管理,比如区块链要升级,也是一键升级,等待版本更新那么简单吗?
我们知道,区块链是一种去中心化的使用方式。一旦有了新的软件版本发布后,是不是每个人都会去升级到新版本,我们无法预知。
除此之外,还会出现新的版本增加了新的数据结构,之前版本不能有效识别的问题。因为部分用户升级了新版,还有一部分用户还没升级,而这些新旧版本的软件仍然在各自不停的挖矿、验证、打包区块,一段时间过后就会变成这样:
行业内把这种情况叫做分叉。分叉又被分为两种情况,硬分叉和软分叉。
分叉问题,就如同两个新生婴儿,一个留在家中养育,一个流浪在外长大,本是同根生,却互不相识。
软分叉
我们先来聊一聊什么是软分叉。老节点不能发现新协议的变化,从而继续接受新节点用新协议所挖出的区块,这种情况下叫软分叉,此时老节点矿工可能在它们完全不能理解和验证的新区块上继续添加区块。
乍一看,好像很难理解,其实很简单。
所谓的区块链,就是一个个的区块数据,通过区块的哈希值串联起来的,如此形成一个链条般的账本数据。
在形成区块3的时候,区块链突然升级了,那么区块3之后则变成了新版本,区块1和区块2就变成了老版本,在这种情况下,区块1和2依然能够识别新版本出现的数据结构,新老版本能够兼容。
其实在这个过程中,新版本不过是使用了障眼法,因为在老版本中一直存在备用的数据字段,这个数据字段一直都是闲置的,在老版本中也没有使用备用字段,因此对于这个新版本发出的区块是依然能接受的,相当于欺骗了老版本节点。
硬分叉
解释完软分叉,我们再聊一聊关于硬分叉的那些事情。
当系统中出现新版本的软件,并且和之前版本软件不能兼容,老节点无法接受新节点挖出的全部或者部分区块,导致同时出现两条链,这种情况下被称为硬分叉。
当部分人升级了区块链,还有部分人没有升级区块链的时候,由于新老节点认为对方的交易是不合法的,版本不能兼容,则会出现老节点只认识老节点的交易,新节点只承认新节点的交易,那么区块链则会变成这样:
目前就比特币出现数个不同的版本,包括Bitcoin Core,还有新推出的Bitcoin Clsaaic、Bitcoin XT以及Bitcoin Unlimited。
而以太坊经历了著名的THE DAO合约漏洞攻击事件后直接就进行了硬分叉,分为以太坊经典和以太坊,这其中又纠结了各种价值观的问题,利益问题。
就现在而言,实际运用过程中,在区块应用程序进行重大升级时,都会事先取得社区的投票同意。保证大部分的运行节点的算力要大于老版本的节点,所以一旦完成升级后,后续的打包区块基本是新版本节点发出的,也就不太会发生老版本区块和新版本区块交错链接的情况。
网友评论