发明内容
本申请实施例的目的是提供一种在区块链系统中更为同步的智能合约更新方案。
为解决上述技术问题,本申请实施例是这样实现的:
一方面,本说明书实施例提供一种一种智能合约的更新方法,应用于包含多个节点的区块链系统中,所述方法包括:
第一节点获取包含期望更新条件的新智能合约;
所述第一节点生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的第二节点,从所述区块链系统中获取所述交易中的包含期望更新条件的新智能合约,并反馈自身的准备状态至所述第一节点;
所述第一节点统计各第二节点所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的任一节点,从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
另一方面,本说明书实施例还提供一种智能合约的更新方法,应用于区块链系统的第一节点中,所述方法包括:
获取包含期望更新条件的新智能合约;
生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
获取各第二节点的所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易;
广播所述交易至所述区块链系统中,以便区块链系统中的任一节点从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,部署所述新智能合约。
再一方面,本说明书实施例还提供一种智能合约的更新方法,应用于区块链系统的第二节点中,所述方法包括:
从所述区块链系统中获取交易中的包含期望更新条件的新智能合约,其中,所述交易为第一节点生成的包含所述新智能合约的交易;
反馈自身的准备状态至所述第一节点;
从所述区块链系统中获取交易包含的更新指令;
在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
与一方面对应的,本说明书实施例还提供一种智能合约的更新系统,应用于包含多个节点的区块链系统中,在所述系统中,
第一节点获取包含期望更新条件的新智能合约;
所述第一节点生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的第二节点,从所述区块链系统中获取所述交易中的包含期望更新条件的新智能合约,并反馈自身的准备状态至所述第一节点;
所述第一节点统计各第二节点所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的任一节点,从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
与另一方面对应的,本说明书实施例还提供一种智能合约的更新装置,应用于区块链的第一节点中,所述装置包括:
获取模块,获取包含期望更新条件的新智能合约;
生成模块,生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
所述获取模块还用于,获取各第二节点的所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易;
广播模块,广播所述交易至所述区块链系统中,以便区块链系统中的任一节点从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,部署所述新智能合约。
与再一方面对应的,本说明书实施例还提供一种智能合约的更新装置,应用于区块链系统的第二节点中,所述装置包括:
获取模块,从所述区块链系统中获取交易中的包含期望更新条件的新智能合约,其中,所述交易为第一节点生成的包含所述新智能合约的交易;
反馈模块,反馈自身的准备状态至所述第一节点;
所述获取模块还用于,从所述区块链系统中获取交易包含的更新指令;
更新模块,在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
通过本说明书实施例所提供的方案,在区块链系统中的智能合约需要更新时,通过在各节点间约定期望更新条件,并且各节点在更新之前确定自己的准备状态,从而确保了新智能合约在各节点上的同步更新,确保了智能合约更新的成功率和一致性,新智能合约可以在区块链网络中的各节点上同时生效,避免了因为智能合约不同而导致的账本分叉。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
随着区块链应用场景越来越丰富,越来越多的场景需要通过编写智能合约来完成业务逻辑。随着业务场景的不断发展,智能合约需要经常进行发布和更新。目前,合约更新一般都是直接采用传统的发布模式。
在区块链的场景下,如对于智能合约的更新指的是在区块链中的所有节点中进行智能合约的更新,从而在更新以后所有节点都使用新智能合约(更新前的可以称为旧智能合约)来执行业务逻辑。具体而言,对于区块链中的每一个节点而言,即应当将新智能合约的代码写入到区块链的账本中,并且指示该节点在以后执行业务逻辑时使用新智能合约的代码。
传统的更新方式即为采用发布的方式,其它节点获取发布的新智能合约并自行更新部署。这个方式下每个节点的发布时间都不一样,在发布期间,一笔交易在不同的节点可能是新或旧两个不同的智能合约执行的结果,可能出现结果不一致等情况;或者,有些节点上可能因为系统或者硬件的对于智能合约的代码不兼容,导致更新失败,这也会导致同一笔交易可能是新或旧两个不同的智能合约执行的结果。不同的共识结果就有可能容易导致区块链分叉或者共识结果失败。
基于此,本说明书实施例提供一种同步更新智能合约的方案,如图1所示,图1为本说明书实施例所提供的一种系统架构的示意图。该示意图中的区块链系统可以是诸如联盟链、公有链或者私有链等各种形式。
基于图1所示的系统,本说明书实施例体提供一种智能合约的更新方法,应用于包含多个节点的区块链系统中,如图2所示,图2为说明书实施例体所提供的一种智能合约的更新方法的流程示意图,包括:
S201,第一节点获取包含期望更新条件的新智能合约。
在如图1所示的区块链系统中,第一节点可以是任意一个节点。也可以是预先所选定的若干指定节点。例如,在多个机构所形成的联盟链中,第一节点可以是其中的任一机构所对应的节点,也可以是预先就指定好的某个专门协调各机构节点的节点。
如前所述,所述新智能合约是相对于目前正在使用中的旧智能合约而言。显然,随着智能合约的不断升级迭代,新智能合约一旦被部署成功,就成为了旧智能合约,并且有可能在以后被其它的新智能合约所替换。
第一节点获取得到的新智能合约中应当包含期望更新条件,所述期望更新条件用于指示各节点应当在什么情况下部署所述新智能合约(即更新智能合约)。具体而言,期望更新条件可以是一个具体的期望更新时间点,例如2020年xx月xx日12点00分00秒,用于指示任一节点在该时间点部署新智能合约;或者,期望更新条件还可以是区块链系统中的一个具体的块高值(即更新块高),例如,块高5000,用于指示一个节点当区块链中的区块数量达到5000时部署新智能合约。
在一种实施方式中,获取得到的新智能合约中还可以包含有多方签名。例如,在联盟链中,多个机构经过互相协商得到一个新智能合约并进行部署,此时,新智能合约中需要该多个机构中每一个机构进行数字签名,从而第一节点可以对每一个数字签名进行验证,来确认合法性,如果验证通过,则可以确认该智能合约是得到了前述多个机构的认可的。否则,若验证失败,即终止后续的更新流程。
S203,所述第一节点生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统。
具体而言,第一节点还可以对生成的交易使用自己的私钥进行签名,从而任一其它节点还可以使用第一节点的公钥对该签名进行验证,从而确保交易的完整性。对于交易的共识和存储在当前已经很常见,此处不再赘述。
S205,区块链系统中的第二节点,从所述区块链系统中获取所述交易中的包含期望更新条件的新智能合约,并反馈自身的准备状态至所述第一节点。
区块链中的第二节点可以是除了第一节点以外的任一其它节点。在前述包含新的智能合约的交易被写入到区块链系统中以后,其它节点(即第二节点)即可以从区块链系统中获取得到该交易,并解析得到其中所包含的新智能合约。
在本说明书实施例中,第一节点和第二节点本质上并没有区别,仅是为了在一个更新流程中便于区分而进行命名。在实际应用中,一个更新流程中的第一节点,在其它更新流程中即可以是第二节点,而任何第二节点在其它的更新流程中,也可以作为第一节点生成包含所述新智能合约的交易并广播。
进而,任一第二节点都可以首先判断本地系统(包括软件方面的和硬件方面的)是不是可以兼容新智能合约,以及,当期望更新条件是一具体的时间点时,该第二节点还可以判断在该时间点本地节点是不是能够及时更新该智能合约。从而,每个第二节点都可以确定出自己对于该包含期望更新条件的新智能合约的准备状态,即“可以更新”,或者,“不能更新”,并且还可以反馈该准备状态至第一节点。
在实际应用中,可以使用特征值的方式来表征准备状态,例如,“1”表示“可以更新”,“0”表示“不能更新”等等。
在一种实施方式中,在反馈准备状态之前,第二节点还可以对智能合约的合法性进行验证,例如,验证新智能合约中所包含的签名的数量是不是满足预设条件,验证新智能合约中所包含的签名是不是包含预设的指定机构的签名,以及有,验证新智能合约中所包含的签名是不是可以解密通过,等等。如果验证不通过,则可以确定准备状态为“不能更新”。显然,发起合约更新的第一节点应当被默认为其准备状态是“可以更新”。
第二节点反馈准备状态给第一节点的方式有多种。例如,在联盟链的场景中,如果第一节点是预先指定的某个协调节点,则其它节点可能都有该协调节点的通信方式,从而可以直接发送包含自身的准备状态的信息至所述第一节点;又例如,在某些公有链的场景下,则可以是每个收到新智能合约的节点生成包含自身的准备状态的交易,并广播所述交易至所述区块链系统中,以便所述第一节点从所述区块链系统中获取所述交易中所包含的自身的准备状态。
S207,所述第一节点统计各第二节点所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统。
第一节点在获取得到各第二节点所反馈的准备状态之后,既可以对结果进行统计,从而得到统计结果。当所述统计结果符合预设条件时,生成包含更新指令的交易。
例如,预设条件可以是要求每个第二节点的准备状态都是“可以更新”。在这种实施方式下,如果有任一第二节点返回的准备状态为“不能更新”,则不再继续后续流程,即不再广播包含更新指令的交易至区块链系统。此时,这一次的同步更新即中止了,第一节点还可以再次以发起包含另一个期望更新条件的新智能合约,从而重新在各节点之间进行协调。
如果统计结果满足了预设条件,第一节点则生成包含更新指令的交易,并广播所述交易至所述区块链系统中。更新指令用于指示各第二节点部署所述新智能合约。具体而言,更新指令本质上是一段可执行代码,其作用在于当期望更新条件被满足时,执行该可执行代码,执行的效果即为新的智能合约被更新至该节点中中,即最终新智能合约通过更新指令被部署至所述区块链系统中。
S209,区块链系统中的任一节点,从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
此时的任一节点包括第一节点,也包括第二节点。任一节点都可以从区块链系统中获取已经被共识通过的包含更新指令的交易,从而可以获取得到更新指令,如前所述,当新智能合约中的期望更新条件被满足时,在每一各节点中根据所述更新指令部署所述新智能合约。
在一种实施方式中,任一节点还可以确定部署所述新智能合约的部署结果,即部署结果是否成功,从而生成包含所述部署结果的交易,并广播所述交易至所述区块链系统中。从而,在该交易被共识通过并存储之后,任一其它节点都可以获取所述交易中所包含的部署结果,并且对全量的其它节点的部署结果进行统计。
在联盟链中这种方式更为常用,由于联盟链通常是有限个的机构节点所组成,通常每个节点都是全节点(即存储有全量交易),每个节点也都有共识功能,那么联盟链中的每个节点对于交易的共识往往是需要更高的一致性,即可能需要所有节点的共识结果一致才能认为交易共识通过存储。
因此,如果有某一两个节点因为更新智能合约失败而导致后续的共识失败,其它节点有必要了解是哪几个节点上可能发生了这样的错误,而通过将部署结果写入交易并广播,就有利于其它节点知晓区块链系统中整体的更新情形,从而可以即时的调整整个区块链的业务逻辑。
前述方式从区块链的整体上对于智能合约的更新方式进行了描述,相应的,在另一方面,本说明书实施例还提供一种智能合约的更新方法,如图3所示,图3为本说明书实施例所提供的另一种智能合约的更新方法的流程示意图,应用于区块链系统的第一节点中,如一方面所述,在这种更新方式下,第一节点可以是区块链系统中的一个普通节点,也可以是预先指定的专门协调各节点之间关系的协调节点,所述方法包括:
S301,获取包含期望更新条件的新智能合约;
S303,生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
S305,获取各第二节点的所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易;
S307,广播所述交易至所述区块链系统中,以便区块链系统中的任一节点从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,部署所述新智能合约。
再一方面,本说明书实施例还提供一种一种智能合约的更新方法,应用于区块链系统的第二节点中,如图4所示,图4为本说明书实施例所提供的再一种智能合约的更新方法的流程示意图,如一方面所述,在这种更新方式下,第二节点可以是区块链系统中的任一节点,所述方法包括:
S401,从所述区块链系统中获取交易中的包含期望更新条件的新智能合约,其中,所述交易为第一节点生成的包含所述新智能合约的交易;
S403,反馈自身的准备状态至所述第一节点;具体而言,可以直接向第一节点反馈,也可以生成包含准备状态的交易,通过交易上链,向第一节点间接的反馈。
S404,从所述区块链系统中获取交易包含的更新指令;
S405,在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
通过本说明书实施例所提供的方案,在区块链系统中的智能合约需要更新时,通过在各节点间约定期望更新条件,并且各节点在更新之前确定自己的准备状态,从而确保了新智能合约在各节点上的同步更新,确保了智能合约更新的成功率和一致性,新智能合约可以在区块链网络中的各节点上同时生效,避免了因为智能合约不同而导致的账本分叉。
与一方面对应的,本说明书实施例还提供一种智能合约的更新系统,应用于包含多个节点的区块链系统中,在所述系统中,
第一节点获取包含期望更新条件的新智能合约;
所述第一节点生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的第二节点,从所述区块链系统中获取所述交易中的包含期望更新条件的新智能合约,并反馈自身的准备状态至所述第一节点;
所述第一节点统计各第二节点所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
区块链系统中的任一节点,从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
与另一方面对应的,本说明书是实施例还提供一种智能合约的更新装置,应用于区块链的第一节点中,如图5所示,图5是本说明书实施例提供的一种智能合约的更新装置的结构示意图,所述装置包括:
获取模块501,获取包含期望更新条件的新智能合约;
生成模块503,生成包含所述新智能合约的交易,并广播所述交易至所述区块链系统中,以便在所述区块链系统对该交易进行共识,并在共识通过后写入所述区块链系统;
所述获取模块501还用于,获取各第二节点的所反馈的准备状态,生成统计结果,当所述统计结果符合预设条件时,生成包含更新指令的交易;
广播模块505,广播所述交易至所述区块链系统中,以便区块链系统中的任一节点从所述区块链系统中获取所述包含更新指令的交易,并在所述期望更新条件到达时,部署所述新智能合约。
与再一方面对应的,本说明书是实施例还提供一种智能合约的更新装置,如图6所示,图6是本说明书实施例提供的一种智能合约的更新装置,应用于区块链系统的第二节点中,所述装置包括:
获取模块601,从所述区块链系统中获取交易中的包含期望更新条件的新智能合约,其中,所述交易为第一节点生成的包含所述新智能合约的交易;
反馈模块603,,反馈自身的准备状态至所述第一节点;
所述获取模块601还用于,从所述区块链系统中获取交易包含的更新指令;
更新模块605,在所述期望更新条件到达时,根据所述更新指令部署所述新智能合约。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图3所示的智能合约的更新方法。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图4所示的智能合约的更新方法。
图7示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图3所示的智能合约的更新方法。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图4所示的智能合约的更新方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。