公开/公告号CN107688945A
专利类型发明专利
公开/公告日2018-02-13
原文格式PDF
申请/专利权人 杭州秘猿科技有限公司;
申请/专利号CN201710684961.2
发明设计人 谢晗剑;
申请日2017-08-11
分类号G06Q20/40(20120101);
代理机构33200 杭州求是专利事务所有限公司;
代理人黄欢娣;邱启旺
地址 310013 浙江省杭州市西湖区文三路478号华星时代广场A座702
入库时间 2023-06-19 04:31:42
法律状态公告日
法律状态信息
法律状态
2020-04-10
授权
授权
2020-04-10
专利申请权的转移 IPC(主分类):G06Q20/40 登记生效日:20200324 变更前: 变更后: 申请日:20170811
专利申请权、专利权的转移
2018-03-13
实质审查的生效 IPC(主分类):G06Q20/40 申请日:20170811
实质审查的生效
2018-02-13
公开
公开
技术领域
本发明在原有区块链模型的基础之上,讨论了在许可链情境下,如何处理交易排序、状态计算和状态共识的顺序问题,以求最大限度地提高区块链的计算能力和吞吐量。
背景技术
区块链是一种新的分布式技术,用户发起一个个的交易,出块节点验证交易的合法性,并将交易排序并打包成块后,广播给其他节点进行共识。目前的区块链系统是同步进行交易排序和状态共识的,均在一个块内达成。
比特币的区块只存储交易列表,而未花费货币列表作为全链的状态并没有在区块里有一个显示的记录。出块人打包交易时,校验的范围包括交易签名,还包括该交易的输入是否在全链的状态里,如果是未花费货币则为合法交易,并打包交易并广播。其他节点保留了同样的本地未花费货币列表,做同样的校验,并修改本地状态。区块的交易排序,状态计算和状态共识是同步的,在一个区块内完成。
以太坊的区块存储了交易列表,回执root,最新状态root。以太坊的出块节点在打包交易时,逐个验证交易的签名,并计算用户的余额是否足够进行转账和支付手续费,如果满足则加入区块中,并修改本地的状态,最终将回执和最新状态进行Merkle PatriciaTree的存证处理生成两个root存储于当前块中,并广播给其他节点验证。其他节点根据待验证块的交易列表和自己本地的状态,进行计算,比对回执root和最新状态root,如果一致则为合法区块。区块的交易排序,状态计算和状态共识也是同步的,在一个区块内完成。
目前的公有链一般存在一定的出块时间间隔,比如以太坊就是15秒左右,但如果是同步的交易排序和状态共识,那么出块节点需要在这15秒期间,首先花费一半的时间验证其他出块节点广播过来的区块链,再在这一区块的基础上花费一半的时间计算下一个新区块。如果是许可链,则可能还不到一半的时间,因为多轮投票共识还需要消耗很多网络时间,所以单个区块的计算时间大概只有出块间隔的三分之一。
在公有链的情境下,如果节点只是简单验证签名就打包交易,而不进行状态计算,则可能会有很多无效的交易被打包入块,比如余额不足以支付计算消耗的手续费等。而许可链情境下,用户均有实际身份,而且系统内有简化的余额模型和计算消耗模型,不会出现大规模恶意发送无效交易的情况,所以可以将交易不经过计算直接打包入区块,将计算通过异步的情况完成,但如果不进行状态共识,又无法保证节点间状态的一致,所以可以采用延后共识的方法,将状态root记录在后面的区块中。
发明内容
本发明的目的在于针对现有技术的不足,提供一种基于延迟状态共识的高效许可链。
本发明的目的是通过以下技术方案实现的:一种基于延迟状态共识的高效许可链,所述区块链中,异步处理交易排序及共识、状态计算的操作,每个节点使用一个进程进行交易排序及共识,另一个进程进行状态计算,
其中,所述交易排序的步骤如下:
步骤1:将所需的数据置入创世块中,生成创世块状态root_0,许可链从创世块启动。
步骤2:所有节点生成本地空状态列表root_list,用于存放已经完成计算的状态,同步创世块后,将root_list中的第一个元素root_list[0]设置为root_0,并设置当前已完成共识的高度consensus_h为0。
步骤3:用户发送交易,签名后广播给共识节点。
步骤4:出块节点将出高度为H(H≥1)的区块时,首先收集用户交易,验证交易的用户权限和交易签名,但不进行计算,直接打包进区块中,并取出root_list中下标(该下标指列表root_list中的元素从0开始的序号)大于等于consensus_h的状态子列表root_delta(可以为空),将root_delta作为前序状态也放置于块中。
步骤5:出块节点签名高度为H的区块并广播给其他的节点,并将consensus_h设置为H。
区块共识的步骤如下:
步骤1:节点在收到广播的高度为H的区块时,首先验证区块内交易的用户权限和交易签名,并从自己root_list中取出下标大于等于consensus_h的区块根组成的一个子集root_delta’,若root_delta’元素个数小于收到的区块中root_delta的元素个数,则等待一定时间后重取。
步骤2:节点比对root_delta’和root_delta的所有状态,如果一致,则表示状态共识验证通过,将该区块作为合法区块进行后续投票等操作,并设置consensus_h为H。
进一步地,所述状态计算的方法如下:
步骤1:所有节点监听共识完成后的新区块,若收到这样的区块,即将该区块放入等待计算的队列中,并按区块高度逐一递增的顺序进行计算。
步骤2:节点每计算完一个区块后,就将最新的状态添加到root_list的队尾。并更新状态高度state_h,并将该区块从等待计算的队列中删除。
本发明的有益效果在于:本发明异步处理交易排序,状态计算和状态共识的操作,使节点可以使用一个进程consensus进行交易排序和对历史块状态的共识,另一个进程chain进行状态计算,使这两类耗时操作都可以完全地独立利用出块间隔时间,而不是串行处理地共用出块间隔时间。并且在交易量大的峰值期,如果状态计算跟不上,可以先对交易列表进行打包和共识,状态共识可以延后不止一个区块,最大限度地提高区块链的计算能力和吞吐量。
附图说明
图1为高效许可链的架构图;
图2为延迟共识的示意图。
具体实施方式
区块链中的每一个节点会进行如下两个进程:
1.交易排序和对历史块状态共识的进程consensus:对新交易进行排序、验证、打包出块,并广播给其他节点,其他节点进行状态共识。共识高度记为consensus_h,即当前节点已完成共识的区块链的高度。具体如下:
(1)交易排序:
步骤1:将所需的数据置入创世块中,生成创世块状态root_0,许可链从创世块启动。
步骤2:所有节点生成本地空状态列表root_list,用于存放已经完成计算的状态,同步创世块后,将root_list中的第一个元素root_list[0]设置为root_0,并设置当前已完成共识的高度consensus_h为0。
步骤3:用户发送交易,签名后广播给共识节点。
步骤4:出块节点将出高度为H(H≥1)的区块时,首先收集用户交易,验证交易的用户权限和交易签名,但不进行计算,直接打包进区块中,并取出root_list中下标(该下标指列表root_list中的元素从0开始的序号)大于等于consensus_h的状态子列表root_delta(可以为空),将root_delta作为前序状态也放置于块中。
步骤5:出块节点签名高度为H的区块并广播给其他的节点,并将consensus_h设置为H。
(2)对历史块状态的共识:
步骤1:节点在收到广播的高度为H的区块时,首先验证区块内交易的用户权限和交易签名,并从自己root_list中取出下标大于等于consensus_h的区块根组成的一个子集root_delta’,若root_delta’元素个数小于收到的区块中root_delta的元素个数,则等待一定时间后重取。
步骤2:节点比对root_delta’和root_delta的所有状态,如果一致,则表示状态共识验证通过,将该区块作为合法区块进行后续投票等操作,并设置consensus_h为H。
2.计算进程chain:收到共识完的新块,并对新区块逐一进行状态计算,将计算后得出的状态放入状态列表root_list中的队尾。root_list的长度即状态高度state_h。具体流程如下:
步骤1:所有节点监听共识完成后的新区块,若收到这样的区块,即将该区块放入等待计算的队列中,并按区块高度逐一递增的顺序进行计算。
步骤2:节点每计算完一个区块后,就将最新的状态添加到root_list的队尾。并更新状态高度state_h,并将该区块从等待计算的队列中删除。
如图2所示,在某一特定时刻下,状态高度state_h往往会比共识高度consensus_h延后。如按照图2的例子,在T1时刻,已完成共识的高度为1,状态高度为0,即状态共识延迟了1个高度;在T2时刻,已完成共识的高度为3,状态高度为2,即状态共识延迟了1个高度;在T3时刻,已完成共识的高度为4,状态高度为2,即状态共识延迟了2个高度。
下面结合实施例对本发明作进一步说明。
1.交易排序及共识进程:
节点Node A:当前consensus_h为2,收到新交易通知,执行以下步骤:
(1)收集新交易、交易排序、验证,但不做状态计算。
(2)出高度为3的新块blk_3,设置blk_3的前序状态root_delta,root_delta为root_list中下标大于等于2的元素组成的子列表,根据root_list的进度快慢,可分析如下不同情形:
(3)广播给别的节点,并更新consensus_h为3
节点Node B:当前consensus_h为2,收到广播的blk_3,假定blk_3中的前序状态为[root_2]。执行以下步骤:
(1)验证区块,并从本地root_list中取出下标大于等于3的状态构成本地的root_delta’。
(2)将root_delta’与blk_3中的root_delta做比对,可分析如下不同情形:
2.计算进程:
节点Node I,当前的root_list为[root_0,root_1],收到共识完成的新块blk2,blk3,执行以下步骤:
(1)计算blk2,得到新状态root_2,加入root_list中。
(2)计算blk3,得到新状态root_3,加入root_list中。
机译: 用于将执行作业的使用过的许可证设置为未使用许可状态并基于优先级将所设置的未使用许可分配给待执行作业的装置
机译: 在基于云的计算环境中为分布式分区技术提供智能共识,智能共识,智能共识和加权共识模型的系统,方法和设备。
机译: 使用基于共识的交易模型进行高效,可伸缩的交易处理