本发明专利技术提供了一种基于阶段桶的复杂智能合约状态同步方法,包括如下步骤:(1)判断状态类型交易,确定需要更新状态的账户地址;(2)根据状态交易的信息生成阶段桶,然后为每个阶段桶设定一个计时器;(3)统计阶段桶内的状态信息,并分别统计每类信息的条数;(4)检查步骤(3)的结果,确定某阶段桶是否已达成一致,如果已达成一致,继续执行步骤(5),否则继续执行步骤(7);(5)将状态存储到状态区块链中;(6)标记该阶段桶为“已达成一致”,然后删除该阶段桶;(7)检查阶段桶的计时器是否已超时,如果未超时则跳转执行步骤(3),否则继续执行步骤(8);(8)标记该阶段桶为“已超时”,然后删除该阶段桶,此时的阶段桶称为“废桶”。
【技术实现步骤摘要】
本专利技术涉及一种区块链技术,特别是一种基于阶段桶的复杂智能合约状态同步方法。
技术介绍
所谓复杂智能合约,就是执行时间长,逻辑较复杂的合约,通常具有多个阶段。在区块链系统中,智能合约需要部署在所有节点上,并且智能合约在每次执行时也需要系统中所有节点来同时执行,以使得所有的节点状态保持一致。然而,在实际中,区块链系统中的各个节点的环境可能各有不同,智能合约在各个节点运行的速度可能各不相同,加之逻辑复杂,智能合约可能会在运行中的任何一个阶段改变其所在节点的状态,而现有技术的方案并没有针对只能合约节点环境存在差异情况下的智能合约执行方法,因此会产生合约状态异步,区块链系统对于支持复杂智能合约执行的能力低的技术缺陷,同时,多个独立节点同时执行合约时数据一致性,结果统一性,数据的完整性以及数据的隔离性难以保证,数据同步会相互干扰。
技术实现思路
本专利技术的目的在于提供一种基于阶段桶的复杂智能合约状态同步方法,允许执行智能合约的各节点环境存在差异,并且在执行同一个智能合约时的速度存在差异,包括如下步骤:(1)判断状态类型交易,确定需要更新状态的账户地址;(2)根据状态交易的信息生成阶段桶,然后为每个阶段桶设定一个计时器;(3)统计阶段桶内的状态信息,并分别统计每类信息的条数;(4)检查步骤(3)的结果,确定某阶段桶是否已达成一致,如果已达成一致,继续执行步骤(5),否则继续执行步骤(7);(5)将状态存储到状态区块链中;(6)标记该阶段桶为“已达成一致”,然后删除该阶段桶;(7)检查阶段桶的计时器是否已超时,如果未超时则跳转执行步骤(3),否则继续执行步骤(8);(8)标记该阶段桶为“已超时”,然后删除该阶段桶,此时的阶段桶称为“废桶”。优选的,步骤(1)的所述交易是从交易区块链发来的。优选的,步骤(2)中所述信息包括合约账户的地址、该合约账户总共被触发执行的次数以及需要更改的账户地址,优选的,步骤(3)所述统计阶段桶内的状态信息是对阶段桶内的来自交易区块链不同节点的相同内容信息进行归类。优选的,步骤(4)所述确定某阶段桶是否已达成一致是确定否有超过2/3的合约执行节点拥有相同的状态。优选的,步骤(8)所述“废桶”是由某个阶段桶中的意见长期无法达成一致产生的。优选的,废桶是由于桶内已经收集了所有执行合约的节点的意见,但相同的状态信息总数小于总节点数的2/3而没有达成一致所产生的。优选的,废桶是由于执行智能合约的个别节点执行速度慢,当它将自己的sTx发送到状态区块链时,状态区块链已经完成了对该阶段的状态统计,超过2/3的节点已经对该阶段的状态改变达成了一致,并已经销毁了对应的阶段桶而产生的,状态区块链会为该条sTx新建一个阶段桶并等待永远无法完成的状态统计。优选的,废桶是由于某些sTx未能到达状态区块链,或者某些节点未能成功发送sTx导致对某阶段的状态统计达不到执行合约总节点数的2/3以上所产生的。优选的,废桶产生后,对于该合约的后续状态无论是否一致都不再统计,记录本次合约的源账户地址和标记了本次执行是合约第几次被激活执行的本次的执行序号,如果后续sTx是对同一合约的相同执行序号的状态信息,则直接丢弃。优选的,执行智能合约的个别节点执行速度慢时,对于最近一段时间内已经确认达成一致的阶段桶,系统动态维护一张“状态表”,销毁该阶段桶时在表中记录了桶的标记名,以及销毁时桶内累计的意见总数,如果随后的sTx对应标记名与表中记录的标记名匹配,直接丢弃该sTx并将累计在该标记名的意见总数加1,当一条阶段桶缓存记录上所累积的意见总数达到执行合约的所有节点的节点点数,即执行合约的所有节点已经执行完这个阶段,或者该缓存记录超过了一定时间限制时,将记录写入日志,然后在“状态表”中清除它。优选的,某些sTx未能到达状态区块链,或者某些节点未能成功发送sTx时,系统在每次新建阶段桶的时候都会启动一个计时器,当一个阶段桶经过一段时间后还没有达成状态一致时,系统将销毁阶段桶。本专利技术通过在单独存储状态的区块链上使用“阶段桶”的办法来保证执行智能合约的各节点状态的一致,区块链系统对于支持复杂智能合约执行的能力提高,同时,多个独立节点同时执行合约时数据一致性,结果统一性,数据的完整性以及数据的隔离性的以保证,数据同步不会相互干扰。根据下文结合附图对本专利技术具体实施例的详细描述,本领域技术人员将会更加明了本专利技术的上述以及其他目的、优点和特征。附图说明后文将参照附图以示例性而非限制性的方式详细描述本专利技术的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。本专利技术的目标及特征考虑到如下结合附图的描述将更加明显,附图中:图1是根据本专利技术实施例的简单账户结构示意图;图2是根据本专利技术实施例的复杂合约账户结构示意图;图3是根据本专利技术实施例的状态同步流程示意图。具体实施方式在进行具体实施方式的说明之前,为了更为清楚的表达所论述的内容,首先说明本专利技术所涉及的一些重要概念。1、账户智能合约附属于某个账户,账户的结构描述如下:(1)激活状态:账户是否已被激活。0代表未被激活,1代表已激活。如果该字段为0,则账户不能发送交易,并且忽略除激活信息外一切发送到它的交易信息,直到重新被激活;(2)创建时间和更新时间:记录了此账户被创建的时间和上一次更新的时间;(3)合约哈希值:对合约账户而言,这个字段记录了与该账户关联的合约代码的哈希值,账户一旦生成,这个值就不再改变;(4)nonce:一个整数,记录从该账户地址共发出了多少交易;(5)number:记录有多少交易发送到了该账户地址,记录了合约被激活执行的次数;(6)账户类型:分为两种类型,1表示普通合约账户,2表示复杂合约账户;(7)账户地址:一个20位长的字符串,在系统中唯一标识一个账户采用的是非对称加密技术生成的公钥和私钥,然后对公钥进行md5哈希,取最后20个字符作为地址;(8)账户缓存:暂时记录合约执行过程中产生的临时数据。对于简单的合约,完全可以将编译完成后的二进制数据直接存储在区块链上,以提高加载速度。但是对于复杂智能合约,如果将合约执行相关的文件直接存储在区块链上将可能造成区块体积过大,因此复杂合约只在账户中保存了相关文件的地址以节省空间,真正的文件保存在区块链外。账户的结构如附图1和图2所示。2、交易区块链和状态区块链交易区块链接收来自区块链系统外部的信息,并将这些信息存储至区块中,智能合约的执行在交易区块链的节点中完成。状态区块链专门存储状态信息,维护账户信息,它负责智能合约执行过程中和执行完毕后的状态同步及存储。3、状态型交易在智能合约执行的过程中,每当有状态改变的操作时,各执行合约节点都会向专门存储状态的区块链发送状态型交易(sTx)来进行状态同步。sTx的内容如下:(1)源地址:发出该状态交易的账户地址;(2)源账户的公钥:对这个公钥进行哈希后取其最后20个字符,应该与源地址相同;(3)执行信息:本次合约的执行信息,包括记录本次是合约的第几次执行;(4)对象账户地址:改变状态的账户地址;(5)状态信息:状态改变信息,与具体的领域有关;(6)签名:使用源地址的私钥对对象账户地址、执行信息、状态信息生成的摘要字段的签名;(7)时本文档来自技高网...
【技术保护点】
一种基于阶段桶的复杂智能合约状态同步方法,其特征在于,包括如下步骤:(1)判断状态类型交易,确定需要更新状态的账户地址;(2)根据状态交易的信息生成阶段桶,然后为每个阶段桶设定一个计时器;(3)统计阶段桶内的状态信息,并分别统计每类信息的条数;(4)检查步骤(3)的结果,确定某阶段桶是否已达成一致,如果已达成一致,继续执行步骤(5),否则继续执行步骤(7);(5)将状态存储到状态区块链中;(6)标记该阶段桶为“已达成一致”,然后删除该阶段桶;(7)检查阶段桶的计时器是否已超时,如果未超时则跳转执行步骤(3),否则继续执行步骤(8);(8)标记该阶段桶为“已超时”,然后删除该阶段桶,此时的阶段桶称为“废桶”。
【技术特征摘要】
1.一种基于阶段桶的复杂智能合约状态同步方法,其特征在于,包括如下步骤:(1)判断状态类型交易,确定需要更新状态的账户地址;(2)根据状态交易的信息生成阶段桶,然后为每个阶段桶设定一个计时器;(3)统计阶段桶内的状态信息,并分别统计每类信息的条数;(4)检查步骤(3)的结果,确定某阶段桶是否已达成一致,如果已达成一致,继续执行步骤(5),否则继续执行步骤(7);(5)将状态存储到状态区块链中;(6)标记该阶段桶为“已达成一致”,然后删除该阶段桶;(7)检查阶段桶的计时器是否已超时,如果未超时则跳转执行步骤(3),否则继续执行步骤(8);(8)标记该阶段桶为“已超时”,然后删除该阶段桶,此时的阶段桶称为“废桶”。2.根据权利要求1所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:步骤(1)的所述交易是从交易区块链发来的。3.根据权利要求1所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:步骤(2)中所述信息包括合约账户的地址、该合约账户总共被触发执行的次数以及需要更改的账户地址。4.根据权利要求1所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:步骤(3)所述统计阶段桶内的状态信息是对阶段桶内的来自交易区块链不同节点的相同内容信息进行归类。5.根据权利要求1所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:步骤(4)所述确定某阶段桶是否已达成一致是确定否有超过2/3的合约执行节点拥有相同的状态。6.根据权利要求1所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:步骤(8)所述“废桶”是由某个阶段桶中的意见长期无法达成一致产生的。7.根据权利要求6所述的一种基于阶段桶的复杂智能合约状态同步方法,其特征在于:所述废桶是由于桶内已经收集了所有执行合约的节点的意见,但相同的状态信息总数小于总节点数的2/3而没有达成一致所产生的。8.根据权利要求6所述的一种基于...
【专利技术属性】
技术研发人员:邓恩艳,
申请(专利权)人:北京天德科技有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。