一种打包区块、验证区块和智能合约执行的方法
技术领域
本发明实施例涉及区块链技术领域,特别是涉及一种打包区块、验证区块和智能合约执行的方法。
背景技术
程序的原子性是指,整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
本发明的发明人在实现本发明的过程中,发现:本身每一个事务具有天然的原子性,区块链的共识机制保证了每一个事务的唯一,不可篡改以及执行结果的唯一性。但是在实际应用业务需求中,单个事务的原子性并不能满足特殊业务逻辑的需求。比如一个复杂的业务,受限于当前区块链底层技术的限制,不得不发送多个事务以实现业务逻辑。分离的事务不能保证整体的原子性,可能部分事务执行成功,部分事务执行失败,部分事务可能共识于某个块,部分事务可能延迟共识到其他的区块,这些情形会给应用逻辑造成很大的复杂性,甚至是错误。应用不得不做很多的特殊处理来应对各种由于非原子性操作带来的一系列问题。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的打包区块、验证区块和智能合约执行的方法、计算设备及计算机存储介质。
为解决上述技术问题,本发明实施例采用的一个技术方案是:提供一种打包区块的方法,包括接收事务;判断所述事务是否为原子事务,其中,所述原子事务是指具有关联顺序的事务;若是,判断所述原子事务对应的所有事务是否均已存在;若是,则按所述关联顺序,将所述原子事务对应的所有事务打包进入所述区块链的区块。
可选的,所述原子事务对应的所有事务位于同一区块。
可选的,所述方法还包括:在所述接收事务步骤之后,记录接收到所述事务的当前时间;获取接收到第一个原子事务的起始时间;判断所述当前时间与所述起始时间之间的时间间隔是否超过时间阈值;若是,则丢弃所述第一个原子事务及其对应的所有原子事务,并且继续执行所述判断所述事务是否为原子事务的步骤。
可选的,所述事务的事务头中包含原子事务的标识和所述关联顺序;所述判断所述事务是否为原子事务包括:判断所述事务的事务头中是否包含原子事务的标识;若是,则确定所述事务为原子事务;若否,则确定所述事务为非原子事务。
可选的,所述事务的事务头中还包含有原子事务的事务总数;所述判断所述原子事务对应的所有事务是否均已存在包括:获取所述原子事务对应的已存在的事务的数量;判断获取到的数量是否达到所述事务总数;若是,则确定所述原子事务对应的所有事务均已存在;若否,则确定所述原子事务对应的所有事务还没有均存在。
为解决上述技术问题,本发明实施例采用的另一个技术方案是:提供一种验证区块的方法,包括接收打包节点发送的区块;判断所述区块中的事务是否包含原子事务,其中,所述原子事务是指具有关联顺序的事务;若包含,判断所述区块中所包含的原子事务是否完整;若完整,则对所述区块执行共识验证;当共识验证通过时,向所述打包节点返回共识验证成功消息;当共识验证失败时,向所述打包节点返回共识验证失败消息。
可选的,若不完整,直接向所述打包节点返回共识验证失败消息。
可选的,所述事务的事务头中包含有原子事务的标识和原子事务的事务总数;所述判断所述区块中所包含的原子事务是否完整包括:从属于原子事务的事务的事务头中提取所述事务总数;计算位于所述区块中的并且同属于所述原子事务的事务的数量;判断计算得到的数量与事务总数是否相同;若是,则确定所述区块中所包含的原子事务完整;若否,则确定所述区块中所包含的原子事务不完整。
为解决上述技术问题,本发明实施例采用的另一个技术方案是:提供一种智能合约执行的方法,包括接收事务;判断所述事务是否为原子事务,其中,所述原子事务是指具有关联关系的事务;若是,则获取先前预执行的并且同属于所述原子事务的事务;判断所述事务与获取到的事务是否满足原子事务所规定的预设执行条件;若满足,则对所述事务进行预执行;若不满足,将先前预执行的同属于所述原子事务的事务进行回滚操作。
可选的,所述方法还包括:在所述事务与获取到的事务满足原子事务所规定的预设执行条件时,判断所述事务是否所述原子事务中最后一个事务;若否,则进入所述所述事务进行预执行;若是,则调用所述合约代码执行所述事务和先前接到的同属于所述原子事务的事务。
可选的,所述原子事务及其关联的事务根据其关联顺序,在其内容中包含有表示起始、中间和结束的标识;所述判断所述事务是否所述原子事务中最后一个事务包括:判断所述事务的内容中是否包括表示结束的标识;若是,则确定所述事务是所述原子事务中最后一个事务;若否,则确定所述事务不是所述原子事务中最后一个事务。
为解决上述技术问题,本发明实施例采用的另一个技术方案是:提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述方法对应的操作。
为解决上述技术问题,本发明实施例采用的另一个技术方案是:提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述方法对应的操作。
本发明实施例的有益效果是:区别于现有技术的情况,本发明实施例将包含原子事务标识的一组事务打包进入区块链的同一区块,实现多事务出块的原子性,提高了业务逻辑的执行效率,降低了业务逻辑的复杂性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施例。
附图说明
通过阅读下文优选实施例的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明一种打包区块的方法实施例的流程图;
图2是本发明一种打包区块的方法实施例中判断所述事务是否为原子事务的流程图;
图3是本发明一种打包区块的方法实施例中判断所述原子事务对应的所有事务是否均已存在的流程图
图4是本发明另一个实施例一种打包区块的方法的流程图;
图5是本发明一种验证区块的方法实施例的流程图;
图6是本发明一种验证区块的方法实施例中判断所述区块中所包含的原子事务是否完整的流程图;
图7是本发明一种智能合约执行的方法实施例的流程图;
图8是本发明另一个实施例一种智能合约执行的方法的流程图;
图9是本发明另一个实施例一种智能合约执行的方法中判断所述事务是否所述原子事务中最后一个事务的流程图;
图10是本发明实施例一种打包区块的装置图;
图11是本发明另一个实施例的一种打包区块的装置图;
图12是本发明实施例一种验证区块的装置图;
图13是本发明另一个实施例的一种验证区块的装置图;
图14是本发明实施例一种智能合约执行的装置图;
图15是是本发明另一个实施例的一种智能合约执行的装置图;
图16是本发明计算设备实施例的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1为本发明一种打包区块的方法实施例的流程图。如图1所示,该方法包括以下步骤:
步骤S101:接收事务。
在本步骤中,所述事务为实现一种业务需求的代码。但对于一个复杂的业务,由于区块链底层技术的限制,需要多个事务共同实现其业务逻辑。
步骤S102:判断所述事务是否为原子事务,其中,所述原子事务是指具有关联顺序的事务。若是,则执行步骤S103。
在本步骤中,原子事务是指实现同一业务要求的一组事务中的事务,这些事务具有顺序关系。为了保证这组事务的原子性,需要矿工(即打包节点)将这些事务和普通事务区分开来,使其在一块打包。所以在确定接收到的事务是原子事务后,先将其缓存,等到和其它实现同一业务要求的原子事务一同出块。
在一些实施例中,如图2所示,判断所述事务是否为原子事务的流程图,具体包括以下步骤:
步骤S201:判断所述事务的事务头中是否包含原子事务的标识。若是,则执行步骤S202,若否,则执行步骤S203。
原子事务在发送给矿工前,会预先对其进行标识,其事务头中包含原子事务的标识和所述关联顺序。所述原子事务的标识表明其是实现同一业务要求的一组事务中的一件事务,而对于实现另一业务要求的一组事务,其原子事务的标识是不同的。
步骤S202:确定所述事务为原子事务。
在确定所述事务为原子事务,会将其缓存。
步骤S203:确定所述事务为非原子事务。
在确定所述事务为非原子事务时,可以直接选择包含此事务到新区块中。
步骤S103:判断所述原子事务对应的所有事务是否均已存在。若是,则执行步骤S104,若否,返回步骤S101。
在本步骤中,所述原子事务对应的所有事务指的是实现同一业务要求的所有原子事务。
根据所述判断所述原子事务对应的所有事务是否均已存在的流程图,如图3所示,该方法具体包括以下步骤:
步骤S301:获取所述原子事务对应的已存在的事务的数量。
在步骤S202中,在判断事务为原子事务后,会先将其缓存,而原子事务的事务头有原子事务的标识。本步骤通过计算已缓存的和步骤中原子事务的原子事务的标识相同的原子事务的数量,即可得到和本步骤中的原子事务对应的已存在的事务的数量。
步骤S302:判断获取到的数量是否达到所述事务总数。若是,则执行步骤S303,若否,则执行步骤S304。
原子事务的事务头中还包含有原子事务的事务总数,通过对比原子事务对应的已存在的事务的数量和原子事务的事务总数即可判断获取到的数量是否达到所述事务总数。
步骤S303:确定所述原子事务对应的所有事务均已存在。
步骤S304:确定所述原子事务对应的所有事务还没有均存在。
步骤S104:按所述关联顺序,将所述原子事务对应的所有事务打包进入所述区块链的区块。
关联顺序表示实现所述同一业务要求的原子事务的执行顺序,按照关联顺序将原子事务对应的所有事务打包可以降低业务逻辑的执行的复杂性。此外,将这些实现同一业务要求的原子事务的共同打包,可以实现出块的原子性。此外,打包出去的原子事务不再保存在缓存池内,以免占用资源。
在一些实施例中,原子事务对应的所有事务位于同一区块。因为不同区块的共识时间可能不同,如果不在同一区块,可能会造成部分区块内的事务已经先执行,会给应用逻辑造成很大的复杂性。但是在宽松业务需求逻辑下,也可以允许部分事务处于不同的区块,或者出现在相邻区块当中。
在一些实施例中,还需要对每个原子事务增添时效限制,超时的原子事务实施丢弃策略。这是为了保障不被恶意节点发送不完备的原子事务链,,从而占用矿工的事务缓存池。
请参阅图4,图4是本发明另一个实施例一种打包区块的方法的流程图,本实施例与上述实施例的不同之处在于,在步骤S101之后,方法还包括:
步骤S401:记录接收到所述事务的当前时间。
在本步骤中,不管所述事务是否为原子事务,都会记录它的当前时间。
步骤S402:获取接收到第一个原子事务的起始时间。
在步骤S102中会判断接收的事务是否为原子事务,原子事务将会被缓存。所以可以在缓存池中找到第一个缓存的原子事务,该原子事务接收的起始时间会在步骤S401中记录到。
步骤S403:判断所述当前时间与所述起始时间之间的时间间隔是否超过时间阈值。若是,则执行步骤S404,若否,执行步骤S102。
步骤S404:丢弃所述第一个原子事务及其对应的所有原子事务,然后继续执行步骤S102。
在本步骤中,所述对应的所有原子事务是指和所述第一个原子事务具有相同原子事务的标识的事务,即与所述第一个原子事务实现同一业务要求的所有原子事务。如果所述当前时间与所述起始时间之间的时间间隔超过了时间阈值,说明所述第一个原子事务及其对应的所有原子事务很长时间都没有被打包出块,则可以将这些原子事务视为恶意占用缓存池垃圾文件,所以需要被清除出去,以免占用资源。而有效的原子事务会在所述时间阈值内被打包出块,之后不会存在缓存池内。
在本发明实施例中,带有原子事务标识的事务会等到与其相关的所有原子事务都被接收到,再一同按关联顺序打包出块,并且进入同一区块,这样防止实现同一业务要求的事务被分开执行,从而给应用逻辑造成很大的复杂性。此外,本发明还可以清除超时的被缓存的事务,防止被恶意占用缓存池的可能性。
在原子事务被打包后,还需要其他矿工的共识验证,为了保证实现同一业务需求的所有事务在同一区块中,本发明实施例还提供一种验证区块的方法,请参阅图5,图5为本发明一种验证区块的方法实施例的流程图,该方法包括以下步骤:
步骤S501:接收打包节点发送的区块。
步骤S502:判断所述区块中的事务是否包含原子事务,其中,所述原子事务是指具有关联顺序的事务。若包含,则执行步骤S503,若不包含,则执行步骤S505。
本步骤中的原子事务与上述实施例中的原子事务的含义和所包含的内容相同,具体内容请参阅上述实施例,此处不再一一赘述。
步骤S503:判断所述区块中所包含的原子事务是否完整。若是,则进行步骤S505。
在一些实施例中,在步骤S503判断不完整后本发明还包括步骤S504:直接向所述打包节点返回共识验证失败消息。
原子事务必须要包括与其相关的所有事务才能被视为完整。当然,区块中不包含原子事务也可以进行共识验证,只有包含的原子事务不完整才不能进行共识验证。
在一些实施例中,如图6所示,判断所述区块中所包含的原子事务是否完整的流程图,包括以下步骤:
步骤S601:从属于原子事务的事务的事务头中提取所述事务总数。
步骤S602:计算位于所述区块中的并且同属于所述原子事务的事务的数量。
可以通过统计所述区块中包含相同原子事务的标识的事务来计算属于所述原子事务的事务的数量。
步骤S603:判断计算得到的数量与事务总数是否相同。若是,则执行步骤S604,若否,则执行步骤S605。
计算得到的数量与事务总数相同可以说明与原子事务相关的所有相关事务在同一区块中,即可进行共识验证。
步骤S604:确定所述区块中所包含的原子事务完整。
步骤S605:确定所述区块中所包含的原子事务不完整。
步骤S505:对所述区块执行共识验证。若验证通过,则执行步骤S506,若验证不通过,则执行步骤S507。
步骤S506:向所述打包节点返回共识验证成功消息。
步骤S507:向所述打包节点返回共识验证失败消息。
步骤S505中的共识验证为现有技术,与本发明实施例的发明点无关,此处不会对其详细阐明。
本发明实施例通过在共识验证前判断原子事务是否完整,进一步保证了原子事务相关的所有事务在同一区块中。
正常情况下多个事务打包至一个区块中,即出块原子性,会在很大程度上满足大部分应用业务的需求。但是也不排除一些特殊的业务逻辑,比如多个整体需要具有原子逻辑操作的事务并不能同时发出执行的情况。例如投票执行某个智能合约的场景。当某个合约接口被所有需要通过身份认证后的用户调用执行后,再触发下一步程序逻辑的情况。由于用户可能在不同的时段或节点发起事务调用合约,所以出块事务原子性并不能得到保障,或者即使特殊的出块事务链原子性协议能够保证不同时段及节点发起的事务也最终打进同一区块中,这个也需要分布式应用做更多的事务发起逻辑,比较复杂。因此本发明实施例还提供一种智能合约执行的方法,请参阅图7,图7为本发明一种智能合约执行的方法实施例的流程图,该方法包括:
步骤S701:接收事务。
本步骤中的事务是打包好的在区块中的事务,此外,接收的事务可以是来自不同区块的事务。
步骤S702:判断所述事务是否为原子事务,其中,所述原子事务是指具有关联关系的事务。若是,则执行步骤S703。
在本步骤中,原子事务的内容中包含原子事务的标识,该标识可以被智能合约读取到,当智能合约读取到原子事务的标识时,即可判断该事务为原子事务。
如果所述事务不是原子事务,则可以直接判断该事务是否满足智能合约的预设执行条件,来确定其是否执行。
步骤S703:判断所述事务与获取到的事务是否满足原子事务所规定的预设执行条件。若满足,则执行步骤S704,若不满足,则执行步骤S705。
在智能合约中,所有事务都有其执行条件。例如,在一种投票智能合约中,用户手中有5票,但其要给一目标投10票,则给一目标投10票不满足执行条件,所以该事务无法执行。
步骤S704:对所述事务进行预执行。
在本步骤中,预执行表明该事务没有真正执行,但会将用户的状态变更为执行该事务后的状态。例如,在一种投票智能合约中,用户手中有15票,第一件原子事务是对目标A投10票,该原子事件满足执行条件,进行预执行,用户的状态变为5票,目标A的状态变为10票,但实际上并没有变化。之后接收到的第二件原子事务是对目标B投10票,由于用户的票数状态只有5票,该事件无法执行,即使用户实际有15票。
步骤S705:将先前预执行的同属于所述原子事务的事务进行回滚操作。
本步骤中的回滚操作是指之前预执行的事务全都不执行,在上个步骤的例子中,当第二件原子事务执行不成功时,第一件原子事务也不会执行,所以最终结果是用户手中仍有15票,二目标A和B都是0票。
在一些实施例中,还要判断是否所有原子事务相关的事务都已经进行了预执行,来决定是否真正执行这些原子事务。
请参阅图8,图8是本发明另一个实施例一种智能合约执行的方法的流程图,本实施例与上述实施例的不同之处在于,在所述事务与获取到的事务满足原子事务所规定的预设执行条件时,方法还包括:
步骤S801:判断所述事务是否所述原子事务中最后一个事务。若否,则执行步骤S704,若是,则执行步骤S802。
如果所述事务是所述原子事务中最后一个事务,则说明原子事务相关的所有事务都已经满足了预执行条件,则可以将其真正执行。
步骤S802:则调用所述合约代码执行所述事务和先前接到的同属于所述原子事务的事务。
例如,在一种投票智能合约中,当用户手上有20票时,第一件原子事务是给目标A投10票,第二件也是最后一件原子事务是给目标B投10票。当执行完第一件原子事务后,接收到第二件原子事务时,用户的状态为10票,则可以确定第二件原子事务满足执行条件,同时第二件原子事务也是最后一件原子事务。此时调用所述投票智能合约的代码将第一件和第二件原子事务都执行,最终用户手中为0票,而目标A和B各10票。
在一些实施例中,如图9所示,判断所述事务是否所述原子事务中最后一个事务的流程图,包括以下步骤:
步骤S901:判断所述事务的内容中是否包括表示结束的标识。若是,则执行步骤S902,若否,则执行步骤S903。
原子事务及其关联的事务根据其关联顺序,在其内容中包含有表示起始、中间和结束的标识。例如,如果该事务是实现同一业务要求的事务中的第一个事务,其内容中会有标识s,表示其是第一个原子事务。而实现同一业务要求的事务中的最后一个事务,其内容中会有标识e。当智能合约识别到标识e时,会判断该事务为原子事务中最后一个事务。
步骤S902:确定所述事务是所述原子事务中最后一个事务。
步骤S903:确定所述事务不是所述原子事务中最后一个事务。
本发明实施例通过先将接收到的原子事务预执行,等到原子事务相关的所有事务都预执行后,同时将原子事务相关的所有事务全部执行;同时,当原子事务相关的所有事务中有一件不满足执行条件,原子事务相关的所有事务都不执行,这样可以实现多事务的单一性,降低业务逻辑的复杂程度。
本发明提供打包区块的装置实施例,如图10所示,打包区块的装置包括第一接收模块101、第一判断模块102、第二判断模块103和打包模块104。
第一接收模块101,用于接收事务。
第一判断模块102,用于判断所述事务是否为原子事务,其中,所述原子事务是指具有关联顺序的事务。
第二判断模块103,用于判断所述原子事务对应的所有事务是否均已存在。
打包模块104,用于按所述关联顺序,将所述原子事务对应的所有事务打包进入所述区块链的区块。
在一些实施例中,所述原子事务对应的所有事务位于同一区块。
在一些实施例中,第一判断模块102包括第一判断子单元1021、第一确定单元1022和第二确定单元1023。
第一判断子单元1021,用于判断所述事务的事务头中是否包含原子事务的标识。
第一确定单元1022,用于确定所述事务为原子事务。
第二确定单元1023,用于确定所述事务为非原子事务。
在一些实施例中,第二判断模块103包括获取子单元1031、第二判断子单元1032、第三确定单元1033和第四确定单元1034。
获取子单元1031,用于获取所述原子事务对应的已存在的事务的数量。
第二判断子单元1032,用于判断获取到的数量是否达到所述事务总数。
第三确定单元1033,用于确定所述原子事务对应的所有事务均已存在。
第四确定单元1034,用于确定所述原子事务对应的所有事务还没有均存在。
请参阅图11,图11是本发明另一个实施例的一种打包区块的装置图,本实施例与上述实施例的不同之处在于,装置还包括:计时模块111、第一获取模块112、第三判断模块113和清除模块114。
计时模块111,用于记录接收到所述事务的当前时间。
第一获取模块112,用于获取接收到第一个原子事务的起始时间。
第三判断模块113,用于判断所述当前时间与所述起始时间之间的时间间隔是否超过时间阈值。;
清除模块114,用于丢弃所述第一个原子事务及其对应的所有原子事务。
本发明还提供提供验证区块的装置实施例,如图12所述,验证区块的装置包括第二接收模块121、第四判断模块122、第五判断模块123、验证模块124、第一返回模块125和第二返回模块126。
第二接收模块121,用于接收打包节点发送的区块。
第四判断模块122,用于判断所述区块中的事务是否包含原子事务,其中,所述原子事务是指具有关联顺序的事务。
第五判断模块123,用于判断所述区块中所包含的原子事务是否完整。
验证模块124,用于对所述区块执行共识验证。
第一返回模块125,用于向所述打包节点返回共识验证成功消息。
第二返回模块126,用于向所述打包节点返回共识验证失败消息。
请参阅图13,图13是本发明另一个实施例的一种验证区块的装置图,本实施例与上述实施例的不同之处在于,装置还包括第三返回模块131,用于直接向所述打包节点返回共识验证失败消息。
在一些实施例中,第五判断模块123包括第一提取单元1231、第一计算单元1232、第三判断子单元1233、第五确定单元1234和第六确定单元1235。
第一提取单元1231,用于从属于原子事务的事务的事务头中提取所述事务总数。
第一计算单元1232,用于计算位于所述区块中的并且同属于所述原子事务的事务的数量。
第三判断子单元1233,用于判断计算得到的数量与事务总数是否相同。
第五确定单元1234,用于确定所述区块中所包含的原子事务完整。
第六确定单元1235,用于确定所述区块中所包含的原子事务不完整。
本发明还提供提供智能合约执行的装置实施例,如图14所述,智能合约执行的装置包括第二接收模块141、第六判断模块142、第二获取模块143、第七判断模块144、预执行模块145和回滚模块146。
第二接收模块141,用于接收事务。
第六判断模块142,用于判断所述事务是否为原子事务,其中,所述原子事务是指具有关联关系的事务。
第二获取模块143,用于获取先前预执行的并且同属于所述原子事务的事务。
第七判断模块144,用于判断所述事务与获取到的事务是否满足原子事务所规定的预设执行条件。
预执行模块145,用于对所述事务进行预执行。
回滚模块146,用于将先前预执行的同属于所述原子事务的事务进行回滚操作。
请参阅图15,图15是本发明另一个实施例的一种智能合约执行的装置图,本实施例与上述实施例的不同之处在于,装置还包括第八判断模块151和调用模块152。
第八判断模块151,用于判断所述事务是否所述原子事务中最后一个事务。
调用模块152,用于调用所述合约代码执行所述事务和先前接到的同属于所述原子事务的事务。
在一些实施例中,第八判断模块151包括第四判断子单元1511、第七确定单元1512和第八确定单元1513。
第四判断子单元1511,判断所述事务的内容中是否包括表示结束的标识。
第七确定单元1512,用于确定所述事务是所述原子事务中最后一个事务。
第八确定单元1513,用于确定所述事务不是所述原子事务中最后一个事务。
关于上述各个模块的具体结构和工作原理可参照方法实施例中相应步骤的描述,此处不再赘述。
本申请实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的方法。
图16为本发明计算设备实施例的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图16所示,该计算设备可以包括:处理器(processor)1602、通信接口(Communications Interface)1604、存储器(memory)1606、以及通信总线1608。
其中:
处理器1602、通信接口1604、以及存储器1606通过通信总线1608完成相互间的通信。
通信接口1604,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器1602,用于执行程序1610,具体可以执行上述打包区块的方法、验证区块的方法和智能合约执行的方法实施例中的相关步骤。
具体地,程序1610可以包括程序代码,该程序代码包括计算机操作指令。
处理器1602可能是中央处理器CPU,或者是特定集成电路ASIC(Appl icationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器1606,用于存放程序1610。存储器1606可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序1610具体可以用于使得处理器1602执行以下操作:
接收事务;
判断所述事务是否为原子事务,其中,所述原子事务是指具有关联顺序的事务;
若是,判断所述原子事务对应的所有事务是否均已存在;
若是,则按所述关联顺序,将所述原子事务对应的所有事务打包进入所述区块链的区块。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
在所述接收事务步骤之后,记录接收到所述事务的当前时间;
获取接收到第一个原子事务的起始时间;
判断所述当前时间与所述起始时间之间的时间间隔是否超过时间阈值;
若是,则丢弃所述第一个原子事务及其对应的所有原子事务,并且继续执行所述判断所述事务是否为原子事务的步骤。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
判断所述事务的事务头中是否包含原子事务的标识;
若是,则确定所述事务为原子事务;
若否,则确定所述事务为非原子事务。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
获取所述原子事务对应的已存在的事务的数量;
判断获取到的数量是否达到所述事务总数;
若是,则确定所述原子事务对应的所有事务均已存在;
若否,则确定所述原子事务对应的所有事务还没有均存在。
程序1610具体还可以用于使得处理器1602执行以下操作:
判断所述区块中的事务是否包含原子事务,其中,所述原子事务是指具有关联顺序的事务;
若包含,判断所述区块中所包含的原子事务是否完整;
若完整,则对所述区块执行共识验证;
当共识验证通过时,向所述打包节点返回共识验证成功消息;
当共识验证失败时,向所述打包节点返回共识验证失败消息。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
若不完整,直接向所述打包节点返回共识验证失败消息。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
从属于原子事务的事务的事务头中提取所述事务总数;
计算位于所述区块中的并且同属于所述原子事务的事务的数量;
判断计算得到的数量与事务总数是否相同;
若是,则确定所述区块中所包含的原子事务完整;
若否,则确定所述区块中所包含的原子事务不完整。
程序1610具体还可以用于使得处理器1602执行以下操作:
接收事务;
判断所述事务是否为原子事务,其中,所述原子事务是指具有关联关系的事务;
若是,则获取先前预执行的并且同属于所述原子事务的事务;
判断所述事务与获取到的事务是否满足原子事务所规定的预设执行条件;
若满足,则对所述事务进行预执行;
若不满足,将先前预执行的同属于所述原子事务的事务进行回滚操作。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
在所述事务与获取到的事务满足原子事务所规定的预设执行条件时,判断所述事务是否所述原子事务中最后一个事务;
若否,则进入所述事务进行预执行;
若是,则调用所述合约代码执行所述事务和先前接到的同属于所述原子事务的事务。
在一种可选的方式中,程序1610具体可以进一步用于使得处理器1602执行以下操作:
判断所述事务的内容中是否包括表示结束的标识;
若是,则确定所述事务是所述原子事务中最后一个事务;
若否,则确定所述事务不是所述原子事务中最后一个事务。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施例。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施例的权利要求书由此明确地并入该具体实施例,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的打包区块的装置、验证区块的装置和智能合约执行的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。