一种区块链系统中核心协议的升级方法与流程

文档序号:14714014发布日期:2018-06-16 00:58阅读:397来源:国知局
一种区块链系统中核心协议的升级方法与流程

本发明涉及区块链技术,尤其涉及一种区块链系统中核心协议的升级方法。



背景技术:

当前区块链技术被认为是继蒸汽机、电力、互联网之后的下一代颠覆性的核心技术。如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网彻底改变了信息传递的方式,那么区块链作为构造信任的机器,将可能彻底改变整个人类社会价值传递的方式。

区块链技术(Blockchain Technology,BT)是一种互联网数据库技术,其特点是去中心化、公开透明,允许每个人均可参与数据库记录。区块链的基本概念包括:交易(Transaction),一次操作,导致账本状态的一次改变,如添加一条记录;区块(Block),记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识;链(Chain),由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。

如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。

假设数据库是一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理是在一段时间内由一部分人来记账,然后将账本的这一页信息发给整个系统里的其他所有人。这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(Distributed Ledger)技术。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。而所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。

区块链系统由于其天生的去中心化特性,不能象普通软件那样进行版本迭代强制用户升级其客户端及协议。现有区块链系统中的协议升级往往会引发区块链“软分叉”或“硬分叉”现象,从而造成巨大的损失,这更进一步限制了区块链系统的应用场景。所谓的软分叉,是指区块链交易的数据结构(即“共识”)发生改变时,未升级的节点可以验证已经升级的节点生产出的区块,而且已经升级的节点也可以验证未升级的节点生产出的区块。所谓的硬分叉,是指区块链的区块格式或交易格式(即“共识”)发生改变时,未升级的节点拒绝验证已经升级的节点生产出的区块,不过已经升级的节点可以验证未升级节点生产出的区块,然后大家各自延续自己认为正确的链,所以分成两条链。

以比特币为例,社区关于区块扩容至今仍然存在巨大的争议,导致比特币协议进化缓慢,区块容量严重不足,曾出现过近100万笔交易在交易池等待被写入区块的现象。用户很多时候不得不额外支付高昂的“交易加速费”,因此严重影响了用户体验。此外,现有区块链系统,如从以太坊的“硬分叉”来看,虽然暂时解决了The DAO问题,但是又产生了ETH和ETC“重资产”和社区分裂的“副作用”。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种区块链系统中核心协议的升级方法,通过将核心协议内置于区块数据结构中,利用对区块链上数据的追加机制来实现核心协议的升级,以避免开发者和社区的分裂或产生软、硬分叉的可能性。

为达到上述目的,本发明的技术方案是这样实现的:

一种区块链系统中核心协议的升级方法,包括如下步骤:

A、在区块链的区块结构中,增加新的数据类型,即增加核心协议代码Protocol Code和投票统计Votes域;

B、将所述Protocol Code的发布者设置为所述区块链核心开发组保留地址,规定该地址在创世区块内部硬编码无法变更;所有记账节点均验证Protocol Code签名,签名不通过则视为非法数据;

C、通过区块链客户端节点从当前最新区块的Protocol Code存储区获取编译后的虚拟机字节码,如果当前最新区块有Protocol Code数据,说明核心协议需要升级,则将升级代码通过公开渠道进行讨论和投票;如果所述投票统计Votes域中投票结果显示超过一定比例的社区成员同意核心协议升级,则将Protocol Code数据上链后开始投票,投票通过则生效。

其中,步骤B之后还包括:

通过区块链客户端节点从当前最新区块的Protocol Code存储区获取编译后的虚拟机字节码,如果当前最新区块没有Protocol Code数据,说明核心协议没有变更,就往前追溯到最近区块的Protocol Code。

其中,所述追溯的Protocol Code,是指上一个投票通过的Protocol Code,投票结果也在链上,用于保证全网在Protocol Code上的一致性。

其中,步骤A所述增加的核心协议代码Protocol Code域,包括如下子域:哈希值Hash;核心协议的字节码Code;签名Signature;标识核心协议版本号Version;标识唯一性Nonce。

步骤A所述增加的投票统计Votes域,用于核心协议是否需要升级的投票;包括如下子域:投票人From;投票区块哈希值VoteHash;核心协议代码哈希值Protocol Code Hash;投票类型VoteType;投票签名Signature。

步骤C所述将升级代码通过公开渠道进行讨论和投票,具体包括:

通过智能合约或者论坛投票的形式进行,当绝大部分社区成员同意核心协议升级。

还包括:将描述区块链核心协议的代码保存在区块链上,通过修改Protocol Code,增加区块容量,然后将新的Protocol Code打包到区块中,提交到链上;当同意升级的赞成票票数大于2/3时,Protocol Code开始生效;通过各个节点的虚拟机加载新的Protocol Code,之后扩容后的区块将能被所有区块接受,区块链得到升级。

本发明的区块链系统中核心协议的升级方法,具有如下有益效果:

该区块链系统中核心协议的升级方法,通过将核心协议内置于区块数据结构中,利用对区块链上数据的追加机制来实现核心协议的升级,从而解决了现有区块链系统中核心协议一旦确定后不可再升级的问题(强制升级通常会造成软分叉或硬分叉),从而避免了开发者和社区的分裂或分叉的可能性。

附图说明

图1为本发明实施例区块链系统中核心协议的区块结构以及核心协议代码在区块结构的位置示意图;

图2为本发明实施例区块链系统的核心协议的升级过程示意图。

具体实施方式

下面结合附图及本发明的实施例对本发明区块链系统中核心协议的升级方法作进一步详细的说明。

图1为本发明实施例区块链系统中核心协议的区块结构以及核心协议代码在区块结构的位置示意图。

如图1所示,该区块链系统中核心协议的区块结构,主要包括如下域(或者称:字段):区块头(Header)、交易数据(Transactions)、投票统计(Votes)、核心协议代码(Protocol Code)。其中:

所述区块头(Header),进一步包括如下子域:高度(Height)、父区块哈希值(ParentHash)、时间戳(Ts)、记账人地址(Miner)、状态根哈希值(StateRoot)、交易根哈希值(TxsRoot)、交易收据根哈希值(ReceiptsRoot)。

所述交易数据(Transactions),交易数据包含多个交易。其进一步包括如下子域:

交易发起地址(From);

交易接收(To),代表(普通用户或智能合约)地址,对于创建智能合约,值为0地址;

转账金额(Value);

交易的payload(Data),如果交易为创建智能合约,则为智能合约字节码;如果交易为智能合约调用,包含调用函数名称和入参值;

交易签名(Signature),

燃料上限(Gas);

燃料单价(GasPrice);

标识交易唯性(Nonce)。

所述投票统计(Votes),用于核心协议是否需要升级的投票;其进一步包括如下子域:

投票人(From);

投票区块哈希值(VoteHash);

核心协议代码哈希值(Protocol CodeHash):即核心协议代码(Protocol Code)域中的哈希值(Hash);

投票类型(VoteType);

投票签名(Signature)。

所述的核心协议代码(Protocol Code),这里,一个区块中只能有0或1;其进一步包括如下子域:

哈希值(Hash);

核心协议的字节码(Code);

签名(Signature),用于校验是否来自开发者社区保留账号的签名;

标识核心协议版本号(Version):用于每次升级都需要递增,防止恶意记账回滚到老/旧的Protocol Code;

标识唯一性(Nonce)。

图2为本发明实施例区块链系统的核心协议的升级过程示意图。

如图2所示,该升级过程即升级方法包括如下步骤:

步骤21:在上述区块链的区块结构中,增加新的数据类型,即增加核心协议代码(Protocol Code)和投票统计Votes域。

这里,将所述的核心协议代码域作为区块链数据的一部分存储在区块链上,所述区块链基础协议的升级,是通过链上数据的追加而实现的。相应的,区块数据的定义如下:

所述的核心协议代码(Protocol Code),包括如下子域:哈希值(Hash);核心协议的字节码(Code);签名(Signature),用于校验是否来自开发者社区保留账号的签名;标识核心协议版本号(Version):用于每次升级都需要递增,防止恶意记账回滚到老/旧的Protocol Code;标识唯一性(Nonce)。

所述投票统计(Votes)域,用于核心协议是否需要升级的投票;其包括如下子域:投票人(From);投票区块哈希值(VoteHash);核心协议代码哈希值(Protocol Code Hash);投票类型(VoteType);投票签名(Signature)。

步骤22:将所述Protocol Code的发布者设置为所述区块链核心开发组保留地址,规定该地址在创世区块内部硬编码无法变更;所有记账节点均验证Protocol Code签名,签名不通过则视为非法数据。

这样,是为了保证核心协议代码均是经过授权发布的,避免了被篡改的可能性。

步骤23:通过区块链客户端节点从当前最新区块的Protocol Code存储区获取编译后的虚拟机字节码(NVM字节码),如果当前最新区块没有Protocol Code数据,说明核心协议没有变更,就往前追溯到最近区块的Protocol Code。区块链的核心协议行为均由Protocol Code确定,包括验证算法、打包规则、奖励机制等,在本发明实施例中,几乎绝大部分的区块链行为都可以由Protocol Code定义。或者,执行步骤24。

这里,所述追溯的Protocol Code,是指上一个投票通过的Protocol Code,投票结果也在链上,可以保证全网在Protocol Code上的一致性。

步骤24:通过区块链客户端节点从当前最新区块的Protocol Code存储区获取编译后的虚拟机字节码(NVM字节码),如果当前最新区块有Protocol Code数据,说明核心协议有变更,此时,如果核心协议需要升级,则将升级代码通过公开渠道(如社区)进行讨论和投票。

这里,具体的投票过程,可以通过智能合约或者论坛投票的形式进行,当投票统计(Votes)域中绝大部分社区成员同意核心协议升级,则将Protocol Code数据上链后开始投票,投票通过则生效。此时,新的Protocol Code已经上链了,上链后才能投票,投票通过则立即在下一个区块(或指定的区块)生效,不用再次打包上链。

具体实施例如下:

将描述区块链核心协议的代码保存在区块链上,比如现在的Protocol Code版本是1.0。现在我们想要扩容区块的容量,而区块容量的变化会影响多个模块的修改,而这些模块的代码都在Protocol Code中,所以我们修改Protocol Code,增加区块容量,然后将新的Protocol Code打包到区块中,提交到链上。此时,所有区块链的有效地址都可以投赞成票,当赞成票大于2/3时,Protocol Code开始生效。各个节点的虚拟机将会加载新的Protocol Code,之后扩容后的区块将能被所有区块接受,区块链得到升级。

本发明上述的这种区块链核心协议升级方式,对客户端来说,均是透明的,不会造成软分叉、硬分叉现象。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1