基于区块链的事件处理方法及装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于区块链的事件处理方法及装置、电子设备。
背景技术
在相关技术中,同一事件的完成可由单一参与方实施,也可由多个参与方共同协作实施。在多个参与方共同协作实施的场景下,涉及到对于多个参与方之间的合理协调,否则可能影响事件的正常实施。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种基于区块链的事件处理方法及装置、电子设备。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种基于区块链的事件处理方法,应用于任一参与方,所述方法包括:
根据所述任一参与方所参与的事件,生成所述事件的描述信息;
将所述描述信息通过链外通道发送至所述事件的其他参与方,以使所述其他参与方在确认所述描述信息后,针对所述事件向区块链提交触发信息;
针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
根据本说明书一个或多个实施例的第二方面,提出了一种基于区块链的事件处理方法,应用于参与方,所述方法包括:
获取事件的描述信息,所述描述信息由所述事件的任一参与方通过链外通道进行发送;
在确认所述描述信息后,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
根据本说明书一个或多个实施例的第三方面,提出了一种基于区块链的事件处理方法,应用于区块链节点,所述方法包括:
在收到事件的参与方提交的触发信息时,对所述触发信息进行验证;其中,所述触发信息由所述参与方在确认所述事件的描述信息后提交至区块链;
当所述事件的所有参与方分别对应的触发信息均通过验证时,基于所述描述信息执行所述事件。
根据本说明书一个或多个实施例的第四方面,提出了一种基于区块链的事件处理装置,应用于任一参与方,所述装置包括:
生成单元,根据所述任一参与方所参与的事件,生成所述事件的描述信息;
发送单元,将所述描述信息通过链外通道发送至所述事件的其他参与方,以使所述其他参与方在确认所述描述信息后,针对所述事件向区块链提交触发信息;
提交单元,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
根据本说明书一个或多个实施例的第五方面,提出了一种基于区块链的事件处理装置,应用于参与方,所述装置包括:
获取单元,获取事件的描述信息,所述描述信息由所述事件的任一参与方通过链外通道进行发送;
提交单元,在确认所述描述信息后,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
根据本说明书一个或多个实施例的第六方面,提出了一种基于区块链的事件处理装置,应用于区块链节点,所述装置包括:
验证单元,在收到事件的参与方提交的触发信息时,对所述触发信息进行验证;其中,所述触发信息由所述参与方在确认所述事件的描述信息后提交至区块链;
执行单元,当所述事件的所有参与方分别对应的触发信息均通过验证时,基于所述描述信息执行所述事件。
根据本说明书一个或多个实施例的第七方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第一方面所述的方法。
根据本说明书一个或多个实施例的第八方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第二方面所述的方法。
根据本说明书一个或多个实施例的第九方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第三方面所述的方法。
附图说明
图1是一示例性实施例提供的一种基于区块链的事件处理方法的流程图。
图2是一示例性实施例提供的另一种基于区块链的事件处理方法的流程图。
图3是一示例性实施例提供的又一种基于区块链的事件处理方法的流程图。
图4是一示例性实施例提供的一种跨境汇款的场景示意图。
图5是一示例性实施例的一种跨境汇款过程中的交互示意图。
图6是一示例性实施例提供的一种统计触发情况的示意图。
图7是一示例性实施例提供的一种设备的结构示意图。
图8是一示例性实施例提供的一种基于区块链的事件处理装置的框图。
图9是一示例性实施例提供的另一种设备的结构示意图。
图10是一示例性实施例提供的另一种基于区块链的事件处理装置的框图。
图11是一示例性实施例提供的又一种设备的结构示意图。
图12是一示例性实施例提供的又一种基于区块链的事件处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种基于区块链的事件处理方法的流程图。如图1所示,该方法应用于任一参与方,可以包括以下步骤:
步骤102,根据所述任一参与方所参与的事件,生成所述事件的描述信息。
在一实施例中,事件存在多个参与方,每一参与方对应于参与对象,该参与对象可以为个人、企业、组织等,本说明书并不对此进行限制。参与对象存在对应的数字身份,使得承载该数字身份的电子设备相当于被配置为该参与对象所对应的参与方。
在一实施例中,本说明书的事件可以包括任意类型、覆盖任意场景,比如投票、签订协议、流量分配、转账、跨境汇款等,本说明书并不对此进行限制。以投票为例,描述信息可以包括投票事由和投票选项等信息,而各个参与方向区块链中提交的触发信息可以包括对投票选项的选择结果,从而触发完成投票操作。
在一实施例中,事件的描述信息可以包括变化量,而所述事件可以用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化,比如增大取值、减小取值等。其中,根据事件的类型或场景差异,相应的状态参数也可能不同,比如转账或跨境汇款场景下的状态参数可以为参与方的账户余额,再比如流量分配场景下的状态参数可以为参与方持有的剩余流量的数额,本说明书并不对此进行限制。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量可以为明文数值。区块链中的区块链节点分别维护有区块链账本,该区块链账本中记录有全量交易数据,使得区块链节点可以获知各个参与方对应的状态参数的取值;进一步地,所述任一参与方可以向区块链提交一笔交易,该交易包含上述的触发信息,使得该交易经过共识后可以被基于所述任一参与方对应的状态参数的取值、上述的变化量而执行,使得该任一参与方对应的状态参数可以基于该变化量而实现取值变化。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。对于同态加密算法而言,可以采用任意类型的同态加密算法,只要确保该同态加密算法能够满足加法同态,使得即便处于密文状态下,仍然能够使得状态参数的取值增加或减少该变化量;对于该同态加密算法为加法同态加密算法或全同态加密算法,本说明书并不对此进行限制。对于同态承诺算法而言,当采用相关技术中的Pedersen承诺机制时,可以为未加密数据确定一随机数,并基于该随机数与未加密数据进行计算得到相应的承诺数据,该承诺数据可以被作为上述的密文数值。
在一实施例中,当状态参数的取值、变化量为密文数值时,参与方需要提供相关的证明信息,以使得区块链节点在执行相关交易时,能够确定交易的合法有效性。例如,该任一参与方需要给出对变化量的证明,以表明该变化量处于正确数值区间,譬如[0,264)。再例如,当事件用于使得所述任一参与方对应的状态参数按照该变化量发生取值减小时,即交易目的是使得状态参数的取值减小该变化量,该任一参与方需要给出对状态参数的取值与变化量的证明,以表明状态参数的取值不小于取值减小量(与上述的变化量等值)。
在一实施例中,可以采用相关技术中的区间证明(Range Proof)技术,譬如Bulletproofs方案或Borromean环签名方案等,生成上述的证明信息,本说明书并不对此进行限制。
步骤104,将所述描述信息通过链外通道发送至所述事件的其他参与方,以使所述其他参与方在确认所述描述信息后,针对所述事件向区块链提交触发信息。
在一实施例中,通过链外通道将描述信息发送至事件的其他参与方,可以实现对描述信息的高效传输。其中,链外通道可以为事件的各个参与方之间建立的加密通道或其他形式的安全通道,以避免发生信息泄露。
在一实施例中,描述信息由所述任一参与方生成,以用于描述相关事件的情况;而通过将描述信息发送至事件的其他参与方,可由该其他参与方进行查看和确认,从而确定是否允许该事件被执行。描述信息可以表征相关事件的执行逻辑、所涉及的参与方、对参与方的状态参数的改变方式(如增大或减小状态参数的取值)、变化量等,本说明书并不对此进行限制。实际上,事件的相关内容可由各个参与方之间预先通过任意方式进行沟通,然后由所述任一参与方进行起草该事件的描述信息,使得事件的其他参与方可以根据预先的沟通结果对该描述信息的内容进行查看和确认;当然,所述任一参与方也可以在并未预先沟通的情况下,自行确定事件的其他参与方以及描述信息中的其他内容,本说明书并不对此进行限制。
在一实施例中,任一参与方在生成描述信息时,该描述信息中的变化量可以为密文数值。比如当变化量的明文数值为t1时,若采用Pedersen承诺机制,可以根据该明文数值t1与随机数r1生成相应的密文承诺T1,而描述信息中可以包含该T1、t1和r1,使得事件的其他参与方可以验证密文承诺T1与明文数值t1、随机数r1之间的对应关系。其中,描述信息中可以对明文数值t1和随机数r1进行加密保护,比如当描述信息需要被发送至参与方X时,可以采用该参与方X的数字身份对应的身份公钥进行加密,分别得到加密后的Enc_X(t1)、Enc_X(r1)并添加至描述信息中,因而只有参与方X能够通过自身的身份私钥对Enc_X(t1)、Enc_X(r1)进行解密得到上述的明文数值t1和随机数r1,显著提升了数据安全性。当然,除了采用公钥加密方式之外,还可以采用相关技术中的其他任意加密方式,比如数字信封等,本说明书并不对此进行限制。
在一实施例中,当存在多个其他参与方时,描述信息可以分别包含对应于各个其他参与方的加密后数据。例如,当其他参数方包括参与方X和参与方Y时,可以根据参与方X的身份公钥对明文数值t1、随机数r1分别加密得到Enc_X(t1)、Enc_X(r1),以及根据参与方Y的身份公钥对明文数值t1、随机数r1分别加密得到Enc_Y(t1)、Enc_Y(r1),并将Enc_X(t1)、Enc_X(r1)、Enc_Y(t1)和Enc_Y(r1)均添加至描述信息中,使得所述任一参与方只需要准备一份描述信息并分别发送至各个其他参与方,而无需针对每一其他参与方准备不同的描述信息。当然,所述任一参与方可以针对每一其他参与方准备不同的描述信息,比如在发送至参与方X的描述信息中包含Enc_X(t1)和Enc_X(r1),而在发送至参与方Y的描述信息中包含Enc_Y(t1)和Enc_Y(r1),本说明书并不对此进行限制。
在一实施例中,针对描述信息中包含的密文状态的变化量,所述任一参与方可以生成第一证明信息,该第一证明信息用于证明所述变化量处于正确数值区间,并将该第一证明信息添加至描述信息中。那么,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么由于该参与方的取值增大量等于该变化量,因而该第一证明信息可以用于证明其取值增大量处于正确数值区间,使得该参与方在生成相应的触发信息时,无需生成其他的证明信息。当然,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小,那么该参与方生成的触发信息中需要包含第二证明信息,该第二证明信息用于证明该参与方对应的状态参数的取值不小于取值减小量,而上述的第一证明信息已经可以证明该取值减小量(等于上述的变化量)处于正确数值区间。
在一实施例中,不论描述信息中是否存在上述的第一证明信息,尤其是当不存在该第一证明信息时,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么该参与方应当向触发信息中添加第三证明信息,该第三证明信息用于证明取值增大量处于正确数值区间。而如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小时,那么该参与方生成的触发信息需要包括第四证明信息,该第四证明信息用于证明取值减小量处于所述正确数值区间,且该参与方对应的状态参数的取值不小于所述取值减小量。
在一实施例中,当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;换言之,相当于从汇款方向收款方实施转账操作,使得汇款方的账户余额减少相应的转账额、收款方的账户余额增加相应的转账额。例如,描述信息中可以包含汇款方的账户地址、收款方的账户地址、转账额(承诺值)、转账额明文(加密状态)、随机数(加密状态)等,以表明从汇款方的账户地址向收款方的账户地址转移该转账额。
在一实施例中,当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;换言之,相当于在汇款方与中继方之间转移第一类型的资产(如港币)、资产额为第一转账额,并且在中继方与收款方之间转移第二类型的资产(如美元)、资产额为第二转账额,且根据第一类型与第二类型的资产之间的汇率,使得第一转账额与第二转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第二转账额(第二类型的资产),而中继方的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化。
在一实施例中,当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额;其中,1<i≤n。当n=1时,本实施例的第二汇款事件相当于上述实施例的第一汇款事件,此处不再赘述。当n>1时,由于存在多个中继方,因而相比于上述实施例的第一汇款事件而言,还包含多个中继方之间的资产转移过程;以n=2为例,事件的参与方包括汇款方、中继方1、中继方2、收款方,其中:在汇款方与中继方1之间转移第一类型的资产(如港币)、资产额为第一转账额,在中继方1与中继方2之间转移第二类型的资产(如欧元)、资产额为第二转账额,在中继方2与收款方之间转移第三类型的资产(如美元)、资产额为第三转账额,且根据第一类型与第二类型的资产之间的汇率1、第二类型与第三类型的资产之间的汇率2,使得第一转账额、第二转账额与第三转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第三转账额(第三类型的资产),而中继方1的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化,中继方2的账户余额增加了第二转账额(第二类型的资产)且减少了第三转账额(第三类型的资产)、在资产价值上相当于未发生变化。
在一实施例中,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。其中,在针对描述信息予以确认时,相当于对相应的事件予以确认;而区块链节点可以将描述信息作为事件对应的唯一标识,以确定触发信息或其包含的确认信息所对应的事件。例如,确认信息可以包括:提交触发信息的参与方通过自身的身份私钥对描述信息生成的签名信息;或者,还可以采用其他形式的确认信息,本说明书并不对此进行限制。
步骤106,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
在一实施例中,通过由任一参与方将描述信息发送至事件的其他参与方,使得各个参与方可以获知并确认该描述信息的内容,并进一步由各个参与方分别向区块链提交针对该事件的触发信息,从而由各个参与方分别、异步实施触发操作(即提交触发信息),而非由所述任一参与方或其他的某一参与方集中实施触发操作,不仅可以对处理压力进行分担、防止单个参与方的处理压力过大,还可使各个参与方根据自身的实际情况(如处理压力、优先级管理等)对所参与的各个事件进行选择性地处理甚至批量处理。
在一实施例中,所述任一参与方可以将所述触发信息添加为等待队列中的待提交交易,并按照预设规则从所述等待队列中选取若干待提交交易,以聚合为合并交易;然后,向区块链提交所述合并交易,使所述合并交易中的各个待提交交易在区块链中被分别处理。可见,通过由事件的各个参与方分别实施触发操作,使得每个参与方可以分别对自身所参与的事件进行批量处理,减少向区块链提交的交易数量。其中,预设规则可以包括预先定义的任意规则,本说明书并不对此进行限制;例如,可以按照预设周期进行选取,每一周期的选取时刻到达后,选取等待队列中的所有待提交交易;再例如,可以按照预设数量进行选择,每当等待队列中的待提交交易达到该预设数量时,选取等待队列中的该预设数量的待提交交易。当然,如果基于预设规则仅选取了一条待提交交易,那么合并交易就相当于该待提交交易(此时可以略去聚合操作)。与所述任一参与方相类似的,事件的每一参与方均可以按照上述方式维护等待队列以及生成、提交合并交易,此处不再一一赘述。
在一实施例中,所述任一参与方可以按照生成顺序为各个合并交易添加编号,使各个合并交易在区块链中被按照对应编号的大小进行依次处理。由于每条交易被执行后都可能导致该任一参与方的状态参数发生变化,而在后交易的执行需要依赖于先前交易执行后的状态参数的取值,因而需要确保各个合并交易被按照对应编号的大小进行依次处理,以使得各个合并交易均能够正确执行。与所述任一参与方相类似的,事件的每一参与方均可以按照上述方式对自身生成的合并交易进行编号,此处不再一一赘述。
在一实施例中,所述任一参与方根据自身参与的其他事件,对自身对应的状态参数进行取值更新,以根据取值更新后的状态参数生成所述触发信息。例如,当状态参数的取值、变化量为密文数值,且所述事件用于使得所述任一参与方对应的状态参数按照该变化量发生取值减小时,需要给出相关证明以确保状态参数的取值不小于取值减小量(与上述的变化量等值),使得该任一参与方需要根据先前已处理的交易,确定自身对应的状态参数的取值,从而生成正确的证明信息,以确保相关事件能够被顺利执行。与所述任一参与方相类似的,事件的每一参与方均可以按照上述方式对自身的状态参数进行取值更新,以确保生成的触发信息的有效性,此处不再一一赘述。
例如,区块链节点在收到各个参与方提交的合并交易后,提取合并交易中包含的待提交交易,并针对待提交交易包含的触发信息进行确认和验证。当某一事件的所有参与方均已提交了相应的触发信息、且触发信息均已通过验证时,可以将该事件标记为成功状态;类似地,可以将未通过验证的事件标记为失败状态,将未在有效时间段内收到所有参与方提交的触发信息的事件标记为超时状态等,然后将各个事件的状态提交至区块链中。以事件的任一参与方为例,该任一参与方在提交合并交易之前,可以通过查询区块链账本上的交易记录,确定自身参与的各个事件的状态,比如对于失败状态或超时状态的交易,需要对状态参数的取值进行相应的恢复(比如该任一参与方为汇款方时,需要对相应的账户余额进行回滚),对于成功状态的交易需要更新状态参数(比如该任一参与方为收款方时,需要对相应的转账金额进行收款、增加至账户余额中),然后根据状态参数的更新后取值,生成相关事件的证明信息(确保证明信息是基于状态参数的最新取值而生成),然后生成并提交上述合并交易。
与图1所示实施例相对应地,图2是一示例性实施例提供的另一种基于区块链的事件处理方法的流程图。如图2所示,该方法应用于参与方(即在事件的所有参与方中,除图1所示的任一参与方之外的其他参与方),可以包括以下步骤:
步骤202,获取事件的描述信息,所述描述信息由所述事件的任一参与方通过链外通道进行发送。
在一实施例中,事件存在多个参与方,每一参与方对应于参与对象,该参与对象可以为个人、企业、组织等,本说明书并不对此进行限制。参与对象存在对应的数字身份,使得承载该数字身份的电子设备相当于被配置为该参与对象所对应的参与方。
在一实施例中,本说明书的事件可以包括任意类型、覆盖任意场景,比如投票、签订协议、流量分配、转账、跨境汇款等,本说明书并不对此进行限制。以投票为例,描述信息可以包括投票事由和投票选项等信息,而各个参与方向区块链中提交的触发信息可以包括对投票选项的选择结果,从而触发完成投票操作。
在一实施例中,事件的描述信息可以包括变化量,而所述事件可以用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化,比如增大取值、减小取值等。其中,根据事件的类型或场景差异,相应的状态参数也可能不同,比如转账或跨境汇款场景下的状态参数可以为参与方的账户余额,再比如流量分配场景下的状态参数可以为参与方持有的剩余流量的数额,本说明书并不对此进行限制。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量可以为明文数值。区块链中的区块链节点分别维护有区块链账本,该区块链账本中记录有全量交易数据,使得区块链节点可以获知各个参与方对应的状态参数的取值;进一步地,所述参与方可以向区块链提交一笔交易,该交易包含上述的触发信息,使得该交易经过共识后可以被基于所述参与方对应的状态参数的取值、上述的变化量而执行,使得该参与方对应的状态参数可以基于该变化量而实现取值变化。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。对于同态加密算法而言,可以采用任意类型的同态加密算法,只要确保该同态加密算法能够满足加法同态,使得即便处于密文状态下,仍然能够使得状态参数的取值增加或减少该变化量;对于该同态加密算法为加法同态加密算法或全同态加密算法,本说明书并不对此进行限制。对于同态承诺算法而言,当采用相关技术中的Pedersen承诺机制时,可以为未加密数据确定一随机数,并基于该随机数与未加密数据进行计算得到相应的承诺数据,该承诺数据可以被作为上述的密文数值。
在一实施例中,当状态参数的取值、变化量为密文数值时,参与方需要提供相关的证明信息,以使得区块链节点在执行相关交易时,能够确定交易的合法有效性。例如,该参与方需要给出对变化量的证明,以表明该变化量处于正确数值区间,譬如[0,264)。再例如,当事件用于使得所述参与方对应的状态参数按照该变化量发生取值减小时,即交易目的是使得状态参数的取值减小该变化量,该参与方需要给出对状态参数的取值与变化量的证明,以表明状态参数的取值不小于取值减小量(与上述的变化量等值)。
在一实施例中,可以采用相关技术中的区间证明(Range Proof)技术,譬如Bulletproofs方案或Borromean环签名方案等,生成上述的证明信息,本说明书并不对此进行限制。
在一实施例中,通过链外通道接收所述任一参与方发送的描述信息,可以实现对描述信息的高效传输。其中,链外通道可以为事件的各个参与方之间建立的加密通道或其他形式的安全通道,以避免发生信息泄露。
在一实施例中,描述信息由所述任一参与方生成,以用于描述相关事件的情况;而参与方通过接收该描述信息,可通过查看和确认该描述信息,从而确定是否允许该事件被执行。描述信息可以表征相关事件的执行逻辑、所涉及的参与方、对参与方的状态参数的改变方式(如增大或减小状态参数的取值)、变化量等,本说明书并不对此进行限制。实际上,事件的相关内容可由各个参与方之间预先通过任意方式进行沟通,然后由所述任一参与方进行起草该事件的描述信息,使得事件的其他参与方可以根据预先的沟通结果对该描述信息的内容进行查看和确认;当然,所述任一参与方也可以在并未预先沟通的情况下,自行确定事件的其他参与方以及描述信息中的其他内容,本说明书并不对此进行限制。
在一实施例中,任一参与方在生成描述信息时,该描述信息中的变化量可以为密文数值。比如当变化量的明文数值为t1时,若采用Pedersen承诺机制,可以根据该明文数值t1与随机数r1生成相应的密文承诺T1,而描述信息中可以包含该T1、t1和r1,使得事件其他的参与方可以验证密文承诺T1与明文数值t1、随机数r1之间的对应关系。其中,描述信息中可以对明文数值t1和随机数r1进行加密保护,比如当描述信息需要被发送至参与方X时,可以采用该参与方X的数字身份对应的身份公钥进行加密,分别得到加密后的Enc_X(t1)、Enc_X(r1)并添加至描述信息中,因而只有参与方X能够通过自身的身份私钥对Enc_X(t1)、Enc_X(r1)进行解密得到上述的明文数值t1和随机数r1,显著提升了数据安全性。当然,除了采用公钥加密方式之外,还可以采用相关技术中的其他任意加密方式,比如数字信封等,本说明书并不对此进行限制。
在一实施例中,当存在多个其他参与方时,描述信息可以分别包含对应于各个其他参与方的加密后数据。例如,当其他参数方包括参与方X和参与方Y时,可以根据参与方X的身份公钥对明文数值t1、随机数r1分别加密得到Enc_X(t1)、Enc_X(r1),以及根据参与方Y的身份公钥对明文数值t1、随机数r1分别加密得到Enc_Y(t1)、Enc_Y(r1),并将Enc_X(t1)、Enc_X(r1)、Enc_Y(t1)和Enc_Y(r1)均添加至描述信息中,使得所述任一参与方只需要准备一份描述信息并分别发送至各个其他参与方,而无需针对每一其他参与方准备不同的描述信息。当然,所述任一参与方可以针对每一其他参与方准备不同的描述信息,比如在发送至参与方X的描述信息中包含Enc_X(t1)和Enc_X(r1),而在发送至参与方Y的描述信息中包含Enc_Y(t1)和Enc_Y(r1),本说明书并不对此进行限制。
在一实施例中,针对描述信息中包含的密文状态的变化量,所述任一参与方可以生成第一证明信息,该第一证明信息用于证明所述变化量处于正确数值区间,并将该第一证明信息添加至描述信息中。那么,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么由于该参与方的取值增大量等于该变化量,因而该第一证明信息可以用于证明其取值增大量处于正确数值区间,使得该参与方在生成相应的触发信息时,无需生成其他的证明信息。当然,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小,那么该参与方生成的触发信息中需要包含第二证明信息,该第二证明信息用于证明该参与方对应的状态参数的取值不小于取值减小量,而上述的第一证明信息已经可以证明该取值减小量(等于上述的变化量)处于正确数值区间。
在一实施例中,不论描述信息中是否存在上述的第一证明信息,尤其是当不存在该第一证明信息时,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么该参与方应当向触发信息中添加第三证明信息,该第三证明信息用于证明取值增大量处于正确数值区间。而如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小时,那么该参与方生成的触发信息需要包括第四证明信息,该第四证明信息用于证明取值减小量处于所述正确数值区间,且该参与方对应的状态参数的取值不小于所述取值减小量。
在一实施例中,当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;换言之,相当于从汇款方向收款方实施转账操作,使得汇款方的账户余额减少相应的转账额、收款方的账户余额增加相应的转账额。例如,描述信息中可以包含汇款方的账户地址、收款方的账户地址、转账额(承诺值)、转账额明文(加密状态)、随机数(加密状态)等,以表明从汇款方的账户地址向收款方的账户地址转移该转账额。
在一实施例中,当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;换言之,相当于在汇款方与中继方之间转移第一类型的资产(如港币)、资产额为第一转账额,并且在中继方与收款方之间转移第二类型的资产(如美元)、资产额为第二转账额,且根据第一类型与第二类型的资产之间的汇率,使得第一转账额与第二转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第二转账额(第二类型的资产),而中继方的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化。
在一实施例中,当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额;其中,1<i≤n。当n=1时,本实施例的第二汇款事件相当于上述实施例的第一汇款事件,此处不再赘述。当n>1时,由于存在多个中继方,因而相比于上述实施例的第一汇款事件而言,还包含多个中继方之间的资产转移过程;以n=2为例,事件的参与方包括汇款方、中继方1、中继方2、收款方,其中:在汇款方与中继方1之间转移第一类型的资产(如港币)、资产额为第一转账额,在中继方1与中继方2之间转移第二类型的资产(如欧元)、资产额为第二转账额,在中继方2与收款方之间转移第三类型的资产(如美元)、资产额为第三转账额,且根据第一类型与第二类型的资产之间的汇率1、第二类型与第三类型的资产之间的汇率2,使得第一转账额、第二转账额与第三转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第三转账额(第三类型的资产),而中继方1的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化,中继方2的账户余额增加了第二转账额(第二类型的资产)且减少了第三转账额(第三类型的资产)、在资产价值上相当于未发生变化。
步骤204,在确认所述描述信息后,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
在一实施例中,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。其中,在针对描述信息予以确认时,相当于对相应的事件予以确认;而区块链节点可以将描述信息作为事件对应的唯一标识,以确定触发信息或其包含的确认信息所对应的事件。例如,确认信息可以包括:提交触发信息的参与方通过自身的身份私钥对描述信息生成的签名信息;或者,还可以采用其他形式的确认信息,本说明书并不对此进行限制。
在一实施例中,通过由任一参与方将描述信息发送至事件的其他参与方,使得各个参与方可以获知并确认该描述信息的内容,并进一步由各个参与方分别向区块链提交针对该事件的触发信息,从而由各个参与方分别、异步实施触发操作(即提交触发信息),而非由所述任一参与方或其他的某一参与方集中实施触发操作,不仅可以对处理压力进行分担、防止单个参与方的处理压力过大,还可使各个参与方根据自身的实际情况(如处理压力、优先级管理等)对所参与的各个事件进行选择性地处理甚至批量处理。
在一实施例中,所述参与方可以将所述触发信息添加为等待队列中的待提交交易,并按照预设规则从所述等待队列中选取若干待提交交易,以聚合为合并交易;然后,向区块链提交所述合并交易,使所述合并交易中的各个待提交交易在区块链中被分别处理。可见,通过由事件的各个参与方分别实施触发操作,使得每个参与方可以分别对自身所参与的事件进行批量处理,减少向区块链提交的交易数量。其中,预设规则可以包括预先定义的任意规则,本说明书并不对此进行限制;例如,可以按照预设周期进行选取,每一周期的选取时刻到达后,选取等待队列中的所有待提交交易;再例如,可以按照预设数量进行选择,每当等待队列中的待提交交易达到该预设数量时,选取等待队列中的该预设数量的待提交交易。当然,如果基于预设规则仅选取了一条待提交交易,那么合并交易就相当于该待提交交易(此时可以略去聚合操作)。与所述参与方相类似的,事件的每一参与方均可以按照上述方式维护等待队列以及生成、提交合并交易,此处不再一一赘述。
在一实施例中,所述参与方可以按照生成顺序为各个合并交易添加编号,使各个合并交易在区块链中被按照对应编号的大小进行依次处理。由于每条交易被执行后都可能导致该参与方的状态参数发生变化,而在后交易的执行需要依赖于先前交易执行后的状态参数的取值,因而需要确保各个合并交易被按照对应编号的大小进行依次处理,以使得各个合并交易均能够正确执行。与所述参与方相类似的,事件的每一参与方均可以按照上述方式对自身生成的合并交易进行编号,此处不再一一赘述。
在一实施例中,所述参与方根据自身参与的其他事件,对自身对应的状态参数进行取值更新,以根据取值更新后的状态参数生成所述触发信息。例如,当状态参数的取值、变化量为密文数值,且所述事件用于使得所述参与方对应的状态参数按照该变化量发生取值减小时,需要给出相关证明以确保状态参数的取值不小于取值减小量(与上述的变化量等值),使得该参与方需要根据先前已处理的交易,确定自身对应的状态参数的取值,从而生成正确的证明信息,以确保相关事件能够被顺利执行。与所述参与方相类似的,事件的每一参与方均可以按照上述方式对自身的状态参数进行取值更新,以确保生成的触发信息的有效性,此处不再一一赘述。
例如,区块链节点在收到各个参与方提交的合并交易后,提取合并交易中包含的待提交交易,并针对待提交交易包含的触发信息进行确认和验证。当某一事件的所有参与方均已提交了相应的触发信息、且触发信息均已通过验证时,可以将该事件标记为成功状态;类似地,可以将未通过验证的事件标记为失败状态,将未在有效时间段内收到所有参与方提交的触发信息的事件标记为超时状态等,然后将各个事件的状态提交至区块链中。以事件的某一参与方为例,该参与方在提交合并交易之前,可以通过查询区块链账本上的交易记录,确定自身参与的各个事件的状态,比如对于失败状态或超时状态的交易,需要对状态参数的取值进行相应的恢复(比如该参与方为汇款方时,需要对相应的账户余额进行回滚),对于成功状态的交易需要更新状态参数(比如该参与方为收款方时,需要对相应的转账金额进行收款、增加至账户余额中),然后根据状态参数的更新后取值,生成相关事件的证明信息(确保证明信息是基于状态参数的最新取值而生成),然后生成并提交上述合并交易。
与图1-2所示实施例相对应地,图3是一示例性实施例提供的又一种基于区块链的事件处理方法的流程图。如图3所示,该方法应用于区块链节点,可以包括以下步骤:
步骤302,在收到事件的参与方提交的触发信息时,对所述触发信息进行验证;其中,所述触发信息由所述参与方在确认所述事件的描述信息后提交至区块链。
在一实施例中,事件存在多个参与方,每一参与方对应于参与对象,该参与对象可以为个人、企业、组织等,本说明书并不对此进行限制。参与对象存在对应的数字身份,使得承载该数字身份的电子设备相当于被配置为该参与对象所对应的参与方。
在一实施例中,本说明书的事件可以包括任意类型、覆盖任意场景,比如投票、签订协议、流量分配、转账、跨境汇款等,本说明书并不对此进行限制。以投票为例,描述信息可以包括投票事由和投票选项等信息,而各个参与方向区块链中提交的触发信息可以包括对投票选项的选择结果,从而触发完成投票操作。
在一实施例中,事件的描述信息可以包括变化量,而所述事件可以用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化,比如增大取值、减小取值等。其中,根据事件的类型或场景差异,相应的状态参数也可能不同,比如转账或跨境汇款场景下的状态参数可以为参与方的账户余额,再比如流量分配场景下的状态参数可以为参与方持有的剩余流量的数额,本说明书并不对此进行限制。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量可以为明文数值。区块链中的区块链节点分别维护有区块链账本,该区块链账本中记录有全量交易数据,使得区块链节点可以获知各个参与方对应的状态参数的取值;进一步地,所述参与方可以向区块链提交一笔交易,该交易包含上述的触发信息,使得该交易经过共识后可以被基于所述参与方对应的状态参数的取值、上述的变化量而执行,使得该参与方对应的状态参数可以基于该变化量而实现取值变化。
在一实施例中,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。对于同态加密算法而言,可以采用任意类型的同态加密算法,只要确保该同态加密算法能够满足加法同态,使得即便处于密文状态下,仍然能够使得状态参数的取值增加或减少该变化量;对于该同态加密算法为加法同态加密算法或全同态加密算法,本说明书并不对此进行限制。对于同态承诺算法而言,当采用相关技术中的Pedersen承诺机制时,可以为未加密数据确定一随机数,并基于该随机数与未加密数据进行计算得到相应的承诺数据,该承诺数据可以被作为上述的密文数值。
在一实施例中,当状态参数的取值、变化量为密文数值时,参与方需要提供相关的证明信息,以使得区块链节点在执行相关交易时,能够确定交易的合法有效性。例如,该参与方需要给出对变化量的证明,以表明该变化量处于正确数值区间,譬如[0,264)。再例如,当事件用于使得所述参与方对应的状态参数按照该变化量发生取值减小时,即交易目的是使得状态参数的取值减小该变化量,该参与方需要给出对状态参数的取值与变化量的证明,以表明状态参数的取值不小于取值减小量(与上述的变化量等值)。
在一实施例中,可以采用相关技术中的区间证明(Range Proof)技术,譬如Bulletproofs方案或Borromean环签名方案等,生成上述的证明信息,本说明书并不对此进行限制。
在一实施例中,描述信息由事件的任一参与方生成后,通过链外通道发送至其他参与方,可以实现对描述信息的高效传输。其中,链外通道可以为事件的各个参与方之间建立的加密通道或其他形式的安全通道,以避免发生信息泄露。
在一实施例中,描述信息由事件的任一参与方生成,以用于描述相关事件的情况;而其他参与方通过接收该描述信息,可通过查看和确认该描述信息,从而确定是否允许该事件被执行。描述信息可以表征相关事件的执行逻辑、所涉及的参与方、对参与方的状态参数的改变方式(如增大或减小状态参数的取值)、变化量等,本说明书并不对此进行限制。实际上,事件的相关内容可由各个参与方之间预先通过任意方式进行沟通,然后由所述任一参与方进行起草该事件的描述信息,使得事件的其他参与方可以根据预先的沟通结果对该描述信息的内容进行查看和确认;当然,所述任一参与方也可以在并未预先沟通的情况下,自行确定事件的其他参与方以及描述信息中的其他内容,本说明书并不对此进行限制。
在一实施例中,任一参与方在生成描述信息时,该描述信息中的变化量可以为密文数值。比如当变化量的明文数值为t1时,若采用Pedersen承诺机制,可以根据该明文数值t1与随机数r1生成相应的密文承诺T1,而描述信息中可以包含该T1、t1和r1,使得事件其他的参与方可以验证密文承诺T1与明文数值t1、随机数r1之间的对应关系。其中,描述信息中可以对明文数值t1和随机数r1进行加密保护,比如当描述信息需要被发送至参与方X时,可以采用该参与方X的数字身份对应的身份公钥进行加密,分别得到加密后的Enc_X(t1)、Enc_X(r1)并添加至描述信息中,因而只有参与方X能够通过自身的身份私钥对Enc_X(t1)、Enc_X(r1)进行解密得到上述的明文数值t1和随机数r1,显著提升了数据安全性。当然,除了采用公钥加密方式之外,还可以采用相关技术中的其他任意加密方式,比如数字信封等,本说明书并不对此进行限制。
在一实施例中,当存在多个其他参与方时,描述信息可以分别包含对应于各个其他参与方的加密后数据。例如,当其他参数方包括参与方X和参与方Y时,可以根据参与方X的身份公钥对明文数值t1、随机数r1分别加密得到Enc_X(t1)、Enc_X(r1),以及根据参与方Y的身份公钥对明文数值t1、随机数r1分别加密得到Enc_Y(t1)、Enc_Y(r1),并将Enc_X(t1)、Enc_X(r1)、Enc_Y(t1)和Enc_Y(r1)均添加至描述信息中,使得所述任一参与方只需要准备一份描述信息并分别发送至各个其他参与方,而无需针对每一其他参与方准备不同的描述信息。当然,所述任一参与方可以针对每一其他参与方准备不同的描述信息,比如在发送至参与方X的描述信息中包含Enc_X(t1)和Enc_X(r1),而在发送至参与方Y的描述信息中包含Enc_Y(t1)和Enc_Y(r1),本说明书并不对此进行限制。
在一实施例中,针对描述信息中包含的密文状态的变化量,所述任一参与方可以生成第一证明信息,该第一证明信息用于证明所述变化量处于正确数值区间,并将该第一证明信息添加至描述信息中。那么,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么由于该参与方的取值增大量等于该变化量,因而该第一证明信息可以用于证明其取值增大量处于正确数值区间,使得该参与方在生成相应的触发信息时,无需生成其他的证明信息。当然,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小,那么该参与方生成的触发信息中需要包含第二证明信息,该第二证明信息用于证明该参与方对应的状态参数的取值不小于取值减小量,而上述的第一证明信息已经可以证明该取值减小量(等于上述的变化量)处于正确数值区间。
在一实施例中,不论描述信息中是否存在上述的第一证明信息,尤其是当不存在该第一证明信息时,对于任意一个参与方(包括上述的任一参与方或其他参与方)而言,如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值增大,那么该参与方应当向触发信息中添加第三证明信息,该第三证明信息用于证明取值增大量处于正确数值区间。而如果所述事件用于使该参与方对应的状态参数按照所述变化量发生取值减小时,那么该参与方生成的触发信息需要包括第四证明信息,该第四证明信息用于证明取值减小量处于所述正确数值区间,且该参与方对应的状态参数的取值不小于所述取值减小量。
在一实施例中,当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;换言之,相当于从汇款方向收款方实施转账操作,使得汇款方的账户余额减少相应的转账额、收款方的账户余额增加相应的转账额。例如,描述信息中可以包含汇款方的账户地址、收款方的账户地址、转账额(承诺值)、转账额明文(加密状态)、随机数(加密状态)等,以表明从汇款方的账户地址向收款方的账户地址转移该转账额。
在一实施例中,当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;换言之,相当于在汇款方与中继方之间转移第一类型的资产(如港币)、资产额为第一转账额,并且在中继方与收款方之间转移第二类型的资产(如美元)、资产额为第二转账额,且根据第一类型与第二类型的资产之间的汇率,使得第一转账额与第二转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第二转账额(第二类型的资产),而中继方的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化。
在一实施例中,当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额;其中,1<i≤n。当n=1时,本实施例的第二汇款事件相当于上述实施例的第一汇款事件,此处不再赘述。当n>1时,由于存在多个中继方,因而相比于上述实施例的第一汇款事件而言,还包含多个中继方之间的资产转移过程;以n=2为例,事件的参与方包括汇款方、中继方1、中继方2、收款方,其中:在汇款方与中继方1之间转移第一类型的资产(如港币)、资产额为第一转账额,在中继方1与中继方2之间转移第二类型的资产(如欧元)、资产额为第二转账额,在中继方2与收款方之间转移第三类型的资产(如美元)、资产额为第三转账额,且根据第一类型与第二类型的资产之间的汇率1、第二类型与第三类型的资产之间的汇率2,使得第一转账额、第二转账额与第三转账额对应的资产价值基本一致,那么最终相当于汇款方的账户余额减少了第一转账额(第一类型的资产)、收款方的账户余额增加了第三转账额(第三类型的资产),而中继方1的账户余额增加了第一转账额(第一类型的资产)且减少了第二转账额(第二类型的资产)、在资产价值上相当于未发生变化,中继方2的账户余额增加了第二转账额(第二类型的资产)且减少了第三转账额(第三类型的资产)、在资产价值上相当于未发生变化。
在一实施例中,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。其中,在针对描述信息予以确认时,相当于对相应的事件予以确认;而区块链节点可以将描述信息作为事件对应的唯一标识,以确定触发信息或其包含的确认信息所对应的事件。例如,确认信息可以包括:提交触发信息的参与方通过自身的身份私钥对描述信息生成的签名信息;或者,还可以采用其他形式的确认信息,本说明书并不对此进行限制。
在一实施例中,区块链节点可以接收所述参与方提交的合并交易,所述合并交易中包含所述参与方从本地的等待队列中选取的若干待提交交易;其中,所述触发信息在所述参与方确认所述描述信息后被添加为所述等待队列中的待提交交易;提取所述合并交易中包含的各个待提交交易,以分别进行处理。换言之,每一参与方可以将所述触发信息添加为等待队列中的待提交交易,并按照预设规则从所述等待队列中选取若干待提交交易,以聚合为合并交易;然后,向区块链提交所述合并交易,使所述合并交易中的各个待提交交易被区块链节点分别处理。可见,通过由事件的各个参与方分别实施触发操作,使得每个参与方可以分别对自身所参与的事件进行批量处理,减少向区块链提交的交易数量。其中,预设规则可以包括预先定义的任意规则,本说明书并不对此进行限制;例如,可以按照预设周期进行选取,每一周期的选取时刻到达后,选取等待队列中的所有待提交交易;再例如,可以按照预设数量进行选择,每当等待队列中的待提交交易达到该预设数量时,选取等待队列中的该预设数量的待提交交易。当然,如果基于预设规则仅选取了一条待提交交易,那么合并交易就相当于该待提交交易(此时可以略去聚合操作)。与所述参与方相类似的,事件的每一参与方均可以按照上述方式维护等待队列以及生成、提交合并交易,此处不再一一赘述。
在一实施例中,区块链节点可以提取所述合并交易中添加的编号,所述编号由所述参与方根据所述合并交易的生成顺序而添加;然后,按照对应编号的大小,对收到的合并交易进行依次处理。换言之,所述参与方可以按照生成顺序为各个合并交易添加编号,使各个合并交易被区块链节点按照对应编号的大小进行依次处理。由于每条交易被执行后都可能导致该参与方的状态参数发生变化,而在后交易的执行需要依赖于先前交易执行后的状态参数的取值,因而需要确保各个合并交易被按照对应编号的大小进行依次处理,以使得各个合并交易均能够正确执行。与所述参与方相类似的,事件的每一参与方均可以按照上述方式对自身生成的合并交易进行编号,此处不再一一赘述。
在一实施例中,所述参与方根据自身参与的其他事件,对自身对应的状态参数进行取值更新,以根据取值更新后的状态参数生成所述触发信息。例如,当状态参数的取值、变化量为密文数值,且所述事件用于使得所述参与方对应的状态参数按照该变化量发生取值减小时,需要给出相关证明以确保状态参数的取值不小于取值减小量(与上述的变化量等值),使得该参与方需要根据先前已处理的交易,确定自身对应的状态参数的取值,从而生成正确的证明信息,以确保相关事件能够被顺利执行。与所述参与方相类似的,事件的每一参与方均可以按照上述方式对自身的状态参数进行取值更新,以确保生成的触发信息的有效性,此处不再一一赘述。
例如,区块链节点在收到各个参与方提交的合并交易后,提取合并交易中包含的待提交交易,并针对待提交交易包含的触发信息进行确认和验证。当某一事件的所有参与方均已提交了相应的触发信息、且触发信息均已通过验证时,可以将该事件标记为成功状态;类似地,可以将未通过验证的事件标记为失败状态,将未在有效时间段内收到所有参与方提交的触发信息的事件标记为超时状态等,然后将各个事件的状态提交至区块链中。以事件的某一参与方为例,该参与方在提交合并交易之前,可以通过查询区块链账本上的交易记录,确定自身参与的各个事件的状态,比如对于失败状态或超时状态的交易,需要对状态参数的取值进行相应的恢复(比如该参与方为汇款方时,需要对相应的账户余额进行回滚),对于成功状态的交易需要更新状态参数(比如该参与方为收款方时,需要对相应的转账金额进行收款、增加至账户余额中),然后根据状态参数的更新后取值,生成相关事件的证明信息(确保证明信息是基于状态参数的最新取值而生成),然后生成并提交上述合并交易。
步骤304,当所述事件的所有参与方分别对应的触发信息均通过验证时,基于所述描述信息执行所述事件。
在一实施例中,通过由任一参与方将描述信息发送至事件的其他参与方,使得各个参与方可以获知并确认该描述信息的内容,并进一步由各个参与方分别向区块链提交针对该事件的触发信息,从而由各个参与方分别、异步实施触发操作(即提交触发信息),而非由所述任一参与方或其他的某一参与方集中实施触发操作,不仅可以对处理压力进行分担、防止单个参与方的处理压力过大,还可使各个参与方根据自身的实际情况(如处理压力、优先级管理等)对所参与的各个事件进行选择性地处理甚至批量处理。
需要指出的是:在本说明书中所描述的交易(transfer),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。其中,区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
为了便于理解,下面以跨境汇款场景为例,对本说明书一个或多个实施例的技术方案进行说明。图4是一示例性实施例提供的一种跨境汇款的场景示意图。如图4所示,假定由用户1向用户2进行区块链汇款;其中,本说明书中的“用户”可以表现为所登录的用户账号,而该用户账号实际可以归属于个人或组织,本说明书并不对此进行限制。假定用户1在国家A的机构1处开设有客户资金账户1、用户2在国家B的机构4处开设有客户资金账户2,本说明书可以在机构1与机构4之间无法直接实施跨境汇款的情况下,通过机构2与机构3的协助而在区块链上实现该跨境汇款的操作。
机构1、机构2、机构3和机构4分别存在对应的设备1、设备2、设备3和设备4,并通过在设备1~4上运行区块链的客户端程序,使得设备1~4被配置为相应的区块链节点;相应地,机构1~4可以通过设备1~4实现与区块链相关的操作。例如,机构1~4可以分别通过设备1~4向区块链提交相应的区块链交易;再例如,设备1~4分别维护有区块链上的全量交易数据,即区块链账本,使得机构1~4可以分别据此查询和维护各个区块链账户的余额数据,比如机构1对应的区块链账户Y1持有1000港币,机构2对应的区块链账户Y2持有2500港币和4200欧元,机构3对应的区块链账户Y3持有3000欧元和2000美元,机构4对应的区块链账户Y4持有1500美元等。
出于隐私保护等方面的考虑,区块链账户Y1~Y4的余额数据往往并非以明文形式进行维护,而是采用对应的密文数据。以区块链账户Y1为例,在区块链账本中可以被记录为(currency_1,PC(a,r_a),Enc_A(a),Enc_A(r_a)),其中:currency_1表示货币类型为港币,a表示港币数额为1000,r_a为a对应的随机数,PC(a,r_a)是通过Pedersen承诺机制对a和r_a进行计算得到的密文形式的承诺值,Enc_A(a)、Enc_A(r_a)分别为a和r_a的密文取值(比如可以采用机构1的身份公钥进行加密,或者可以采用其他任意形式的加密算法)。区块链账户Y2可以被记录为(currency_1,PC(b1,r_b1),Enc_B(b1),Enc_B(r_b1))、(currency_2,PC(b2,r_b2),Enc_B(b2),Enc_B(r_b2)),其中:b1表示港币数额为2500、r_b1为b1对应的随机数,currency_2表示货币类型为欧元,b2表示欧元数额为4200、r_b2为b2对应的随机数。区块链账户Y3可以被记录为(currency_2,PC(c1,r_c1),Enc_C(c1),Enc_C(r_c1))、(currency_3,PC(c2,r_c2),Enc_C(c2),Enc_C(r_c2)),其中:c1表示港币欧元为3000、r_c1为c1对应的随机数,currency_3表示货币类型为美元,c2表示美元数额为2000、r_c2为c2对应的随机数。区块链账户Y4可以被记录为(currency_3,PC(d,r_d),Enc_D(d),Enc_D(r_d)),其中d表示美元数额为1500、r_d为d对应的随机数。
基于图4所示的汇款场景,图5是一示例性实施例的一种跨境汇款过程中的交互示意图。如图5所示,跨境汇款的交互过程可以包括以下步骤:
步骤501,设备1起草汇款交易tx_i。
在一实施例中,假定用户1希望向用户2汇款500港币,该用户1可以通过在机构1处的客户资金账户1提供该500港币,而用户2可以通过在机构4处的客户资金账户2收取按一定汇率计算后的美元。
在一实施例中,机构1可以从用户1对应的客户资金账户1中扣取500港币;以及,机构1需要在自身与机构4之间确定出汇款路由,比如图4中的汇款路由为“机构1→机构2→机构3→机构4”,使得机构1可以向机构2转入500港币、机构2可以向机构3转入56欧元(相当于500港币)、机构3可以向机构4转入64美元(相当于56欧元、500港币),并最终由机构4向用户2对应的客户资金账户2转入64美元,从而完成汇款操作。其中,机构1从客户资金账户1扣取500港币、机构4向客户资金账户2转入64美元属于链外操作,而机构1~机构4之间则通过区块链实现链上资金转移。
在一实施例中,在上述的汇款路由“机构1→机构2→机构3→机构4”中,机构1与机构4之间存在2个中继方为机构3和机构4;而在其他实施例中,中继方的数量可以为1个、3个或3个以上,本说明书并不对此进行限制。
针对已经确定的上述汇款路由,以及各个机构之间的汇款金额,设备1起草的汇款交易tx_i可以包括以下汇款交易详情:交易id为tx_i,区块链账户Y1的地址Z1、区块链账户Y2的地址Z2、区块链账户Y3的地址Z3、区块链账户Y4的地址Z4,与交易金额相关的密文信息{(currency_1,PC(t1,r_t1),Enc_B(t1),Enc_B(r_t1),Enc_C(t1),Enc_C(r_t1),Enc_D(t1),Enc_D(r_t1)),(currency_2,PC(t2,r_t2),Enc_B(t2),Enc_B(r_t2),Enc_C(t2),Enc_C(r_t2),Enc_D(t2),Enc_D(r_t2)),(currency_3,PC(t3,r_t3),Enc_B(t3),Enc_B(r_t3),Enc_C(t3),Enc_C(r_t3),Enc_D(t3),Enc_D(r_t3)),rate1,rate2,time,…},针对交易金额t1、t2、t3的区间证明RP_t1、RP_t2、RP_t3等。
其中,地址Z1~Z4用于表明本次汇款事件的参与方,以使得后续从该地址Z1~Z4对应的区块链账户Y1~Y4实施转账汇款。
在(currency_1,PC(t1,r_t1),Enc_B(t1),Enc_B(r_t1),Enc_C(t1),Enc_C(r_t1),Enc_D(t1),Enc_D(r_t1))中,t1表示从地址Z1向地址Z2的转账金额(如上述的500港币),r_t1为该金额t1对应的随机数,PC(t1,r_t1)为基于金额t1和随机数r_t1计算得到的承诺值,Enc_B(t1)表示用机构2的身份公钥对金额t1进行加密后的密文数值、Enc_C(t1)表示用机构3的身份公钥对金额t1进行加密后的密文数值、Enc_D(t1)表示用机构4的身份公钥对金额t1进行加密后的密文数值;类似地,Enc_B(r_t1)、Enc_C(r_t1)、Enc_D(r_t1)分别为通过机构2、机构3、机构4的身份公钥对金额t1进行加密后的密文数值。(currency_2,PC(t2,r_t2),Enc_B(t2),Enc_B(r_t2),Enc_C(t2),Enc_C(r_t2),Enc_D(t2),Enc_D(r_t2))和(currency_3,PC(t3,r_t3),Enc_B(t3),Enc_B(r_t3),Enc_C(t3),Enc_C(r_t3),Enc_D(t3),Enc_D(r_t3))的情况类似,此处不再赘述。rate1、rate2分别为currency_1与currency_2的汇率、currency_2与currency_3的汇率。time为交易时刻。以及,还可能存在一些其他的交易所需数据,这可以参考相关技术中的方案,此处不再一一列举。
RP_t1、RP_t2、RP_t3分别为对应于交易金额t1、t2、t3的区间证明,以分别用于证明交易金额t1、t2、t3处于正确数值区间,比如1≤t1<264、1≤t2<264、1≤t3<264。其中,设备1可以通过相关技术中的零知识证明技术生成上述的区间证明,本说明书并不对此进行限制。
需要说明的是:除了由设备1为各个交易金额t1、t2、t3生成上述的区间证明RP_t1、RP_t2、RP_t3之外,还可以由各个设备分别为自身(也可以理解为设备对应的机构)所需支付的交易金额生成区间证明。例如,在本实施例中由机构1向机构2汇入交易金额t1、机构2向机构3汇入交易金额t2、机构3向机构4汇入交易金额t3,那么可由机构1对应的设备1为交易金额t1生成区间证明RP_t1并添加至上述的汇款交易tx_i的汇款交易详情中,而对于交易金额t2、t3分别对应的区间证明RP_t2、RP_t3,则分别由机构2、机构3对应的设备2、设备3生成;譬如,设备2在收到设备1发送的汇款交易tx_i的汇款交易详情后,针对交易金额t2生成区间证明RP_t2,并将该区间证明RP_t2添加至汇款交易tx_i后,将该汇款交易tx_i添加至本地队列2,而设备3在收到设备1发送的汇款交易tx_i的汇款交易详情后,针对交易金额t3生成区间证明RP_t3,并将该区间证明RP_t3添加至汇款交易tx_i后,将该汇款交易tx_i添加至本地队列3。
步骤502a-502c,设备1通过机构1的身份私钥对汇款交易详情进行签名后,通过链外(或称为,链下)通道分别发送至设备2~4,并将汇款交易tx_i添加至设备1自身维护的本地队列1。
在一实施例中,设备1可以同时或非同时执行上述的步骤502a~502c,本说明书并不限制这三个步骤之间的执行顺序。其中,设备1与设备2~4之间的链外通道为诸如加密类型的安全通道,可以避免汇款交易详情发生泄露;当然,由于汇款交易详情中的转账金额、随机数等均采用密文形式,因而即便被窃取也不会造成实质上的信息泄露,具有极高的安全性和私密性。
步骤503a,设备2对收到的汇款交易详情进行验证后,将其添加至自身的本地队列2,并向设备1返回确认响应。
在一实施例中,设备2在收到设备1发送的汇款交易详情后,需要实时验证操作,包括:设备2可以利用设备1的身份公钥对汇款交易详情进行签名验证,以确定该汇款交易详情的发送方为设备1;设备2通过自身的身份私钥对汇款交易详情包含的Enc_B(t1)、Enc_B(r_t1)、Enc_B(t2)、Enc_B(r_t2)、Enc_B(t3)、Enc_B(r_t3)进行解密,得到相应的金额t1与随机数r_t1、金额t2与随机数r_t2、金额t3与随机数r_t3,并分别验证PC(t1,r_t1)=r_t1G+t1H、PC(t2,r_t2)=r_t2G+t2H、PC(t3,r_t3)=r_t3G+t3H是否成立(其中,G、H为公共参数);设备2验证currency_1与currency_2之间的汇率是否为rate1、currency_2与currency_3之间的汇率是否为rate2;设备2验证区间证明RP_t1、RP_t2、RP_t3是否正确(也可能仅包含区间证明RP_t1,而区间证明RP_t2需要由设备2自己生成,区间证明RP_t3需要由设备3生成)等。在确定汇款交易详情通过验证后,设备2可以向自身维护的本地队列2添加相应的汇款交易tx_i,并且向设备1返回确认响应、以表明接受相应的汇款交易。
步骤503b-503c,设备3-4分别对收到的汇款交易详情进行验证后,将其添加至自身的本地队列3-4,并向设备1返回确认响应。
在一实施例中,设备3、设备4所实施的操作与设备2相类似,此处不再一一赘述。
步骤504a,设备1根据本地队列1中的汇款交易,聚合生成交易TX_a,并在签名后提交至区块链。
与上述的汇款交易tx_i相类似的,机构1还可以参与其他的汇款交易,比如当某一用户需要通过机构1向另一用户进行汇款时,设备1可以通过类似于上述步骤的方式,起草相应的汇款交易、将汇款交易详情发送至其他各个机构进行验证、向本地队列1中添加相应的汇款交易tx_i。同时,机构1还可以作为一些汇款交易的中继方(类似于机构2-3在上述实施例中的角色)或收款方(类似于机构4在上述实施例中的角色),使得该机构1可以通过设备1接收这些汇款交易的汇款方(类似于机构1在上述实施例中的角色)发送的汇款交易详情,并在验证通过后向本地队列1中添加相应的汇款交易。
因此,设备1维护的本地队列1中包含机构1所参与的诸多汇款交易。而设备1可以按照预定义的交易选择规则,每次从本地队列1中选取一个或多个汇款交易,并对被选取的汇款交易进行聚合,生成一笔区块链交易。
假定设备1在某一次选取的汇款交易中包含上述的汇款交易tx_i,并据此生成了相应的区块链交易TX_a。该区块链交易TX_a中包含顺序编号seq和与被选取的每一汇款交易相关的信息;比如,对于上述的汇款交易tx_i而言,与该汇款交易tx_i相关的信息可以包括:上述的汇款交易详情、机构1先前提交的区块链交易所包含的汇款交易所产生的金额累加详情、机构1余额充足的区间证明RP_a。
以设备1生成的某一区块链交易为例。当机构1在该区块链交易中包含的若干汇款交易中作为汇款方或中继方时,机构1会将自身对应的区块链账户Y1的账户余额减去对应的转账金额(汇款方仅转出资金;中继方既可接收转入资金又需要转出资金,这里是针对转出资金的操作而描述),并基于更新后的汇款金额继续参与后续的汇款交易。当该区块链交易被提交至区块链后,如果机构1作为汇款方或中继方的某一汇款交易成功执行,机构1无需调整区块链账户Y1;如果机构1作为汇款方或中继方的某一汇款交易未成功执行,机构1需要对区块链账户Y1的账户余额进行回滚调节。而当上述的区块链交易中包含机构1作为收款方或中继方(收款方仅转入资金;中继方既可接收转入资金又需要转出资金,这里是针对转入资金的操作而描述)的汇款交易时,如果该汇款交易成功执行,机构1需要向区块链账户Y1中增加相应资金、实现收款,如果汇款交易未成功执行,机构1无需调整区块链账户Y1。
因此,区块链节点在收到并处理设备1提交的区块链交易时,可以针对区块链交易所包含的汇款交易是否能够成功执行,对各个汇款交易进行状态标记,比如交易为成功状态、失败状态、超时状态等;相应地,设备1在聚合生成上述的区块链交易TX_a时,通过查询先前提交的区块链交易中的汇款交易被标记的状态,即可相应地确定出上述的“机构1先前提交的区块链交易所包含的汇款交易所产生的金额累加详情”,该金额累加详情包括:机构1作为中继方或收款方的汇款交易被标记为成功状态时产生的金额增加(收款)、机构1作为汇款方或中继方的汇款交易被标记为失败状态或超时状态时产生的金额增加(对已扣除的转账金额进行回滚)等。以及,设备1进一步根据机构1的区块链账户Y1的账户余额(已扣除先前提交的汇款交易的转账金额、尚未收款)与金额累加详情,生成该机构1余额充足的区间证明RP_a,以证明机构1所持有的区块链资金(区块链账户Y1的账户余额与金额累加详情对应的资金之和)不少于该机构1在汇款交易tx_i中所需转出的资金。
步骤504b-c,设备2-3根据本地队列2-3中的汇款交易,分别聚合生成交易TX_b、TX_c,并在签名后分别提交至区块链。
在一实施例中,与设备1相类似的,设备2可以从本地队列2中选取一个或多个汇款交易,以聚合生成相应的区块链交易。假定设备2在某一次选取的汇款交易中包含上述的汇款交易tx_i,并据此生成了相应的区块链交易TX_b。该区块链交易TX_b中包含顺序编号seq和与被选取的每一汇款交易相关的信息;比如,对于上述的汇款交易tx_i而言,与该汇款交易tx_i相关的信息可以包括:上述的汇款交易详情、机构2先前提交的区块链交易所包含的汇款交易所产生的金额累加详情、机构2余额充足的区间证明RP_b。
在一实施例中,与设备1相类似的,设备3可以从本地队列3中选取一个或多个汇款交易,以聚合生成相应的区块链交易。假定设备3在某一次选取的汇款交易中包含上述的汇款交易tx_i,并据此生成了相应的区块链交易TX_c。该区块链交易TX_c中包含顺序编号seq和与被选取的每一汇款交易相关的信息;比如,对于上述的汇款交易tx_i而言,与该汇款交易tx_i相关的信息可以包括:上述的汇款交易详情、机构3先前提交的区块链交易所包含的汇款交易所产生的金额累加详情、机构3余额充足的区间证明RP_c。
步骤504d,设备4根据本地队列4中的汇款交易,分别聚合生成交易TX_d,并在签名后提交至区块链。
在一实施例中,与设备1相类似的,设备4可以从本地队列4中选取一个或多个汇款交易,以聚合生成相应的区块链交易。假定设备4在某一次选取的汇款交易中包含上述的汇款交易tx_i,并据此生成了相应的区块链交易TX_d。该区块链交易TX_d中包含顺序编号seq和与被选取的每一汇款交易相关的信息;比如,对于上述的汇款交易tx_i而言,与该汇款交易tx_i相关的信息可以包括:上述的汇款交易详情、机构4先前提交的区块链交易所包含的汇款交易所产生的金额累加详情;由于机构4在汇款交易tx_i中为收款方,因而并不需要提供余额充足的区间证明。当然,机构4在其他汇款交易中也可能作为汇款方或中继方,仍然需要针对相应的汇款交易生成余额充足的区间证明。
需要指出的是:设备1~设备4可以根据实际情况选择生成相应的区块链交易,而并不一定立即对汇款交易tx_i进行处理;换言之,设备1~设备4实际上是异步地向区块链提交汇款交易tx_i(被包含于相应的区块链交易中),使得该汇款交易tx_i的执行被分配至由设备1~设备4分别进行触发,促使设备1~设备4在参与大量汇款交易的情况下,可以对所参与的汇款交易进行批量生成区块链交易,从而减少区块链交易的生成和提交数量,有助于降低处理负担、提升处理效率。
步骤505,区块链节点对收到的区块链交易进行处理,以验证区块链交易中包含的各笔汇款交易。
步骤506,标记汇款交易tx_i。
在一实施例中,由于每一机构会不断向区块链提交区块链交易,而在先提交的区块链交易所包含的汇款交易,会影响在后提交的区块链交易所包含的汇款交易,因而区块链节点在接收每一机构提交的区块链交易后,需要读取所接收到的区块链交易中包含的顺序编号seq,并按照顺序编号seq的大小,依次处理来自相应机构的区块链交易。例如,当区块链节点接收到机构1提交的区块链交易TX_a时,读取其中包含的顺序编号seq为100;而如果区块链节点已处理的最近一笔区块链交易的顺序编号seq为98,那么区块链节点需要等待机构1提交的顺序编号seq为99的区块链交易,并在该顺序编号为99的区块链交易被处理后,才对上述顺序编号为100的区块链交易进行处理。
在一实施例中,区块链节点在收到设备1~4分别提交的区块链交易后,针对每一区块链交易,可以提取区块链交易中包含的汇款交易,并分别针对每一汇款交易实施验证。验证操作可以包括:验证签名是否正确;验证汇款交易对应的金额累加详情是否正确、余额充足的区间证明是否正确;交易金额的区间证明是否正确;资金转移的转出额与转入额是否一致等,此处不再一一赘述。
在一实施例中,除了对每一区块链交易中包含的汇款交易单独实施验证之外,由于汇款交易的执行由汇款方、中继方、收款方等参与方同时参与触发,因而区块链节点还需要验证汇款交易的各个参与方是否都实施了触发(即提交了包含该汇款交易的区块链交易)。例如,图6是一示例性实施例提供的一种统计触发情况的示意图。如图6所示,基于区块链的原生功能或智能合约所提供的扩展功能,区块链节点可以分别记录机构1~机构4所提交的区块链交易,比如机构1提交的区块链交易TX_a、TX_*,机构2提交的区块链交易TX_*、TX_b、TX_#,机构3提交的区块链交易TX_*、TX_c,机构4提交的区块链交易TX_d等;以及,区块链节点可以提取出各个区块链交易中包含的汇款交易,并分别针对各个汇款交易的参与方(汇款交易详情中包含汇款方、中继方、收款方的信息)进行统计:当收到相应参与方提交的区块链交易中包含该汇款交易,且该汇款交易通过了上述的单独验证时,可以将该参与方标记为“OK”。
比如,由于设备1提交的区块链交易TX_a中包含汇款交易tx_i,如果区块链交易TX_a中对应于汇款交易tx_i的内容通过验证,那么区块链节点可以标记为如图6所示的“Y1:OK”;类似地,如果区块链节点还分别针对机构2~机构4标记为“Y2:OK”、“Y3:OK”、“Y4:OK”等,那么区块链节点可以确定该汇款交易tx_i已经得到所有参与方的确认,可以将该汇款交易tx_i标记为成功状态。
再比如,由于仅设备1、设备2和设备3提交的区块链交易中包含汇款交易tx_*的相关信息,因而即便这些信息都已经通过单独验证,区块链节点仍然仅能够为该汇款交易tx_*添加标记“Y1:OK”、“Y2:OK”、“Y3:OK”,而需要继续等待设备4提交的区块链交易。
又比如,由于仅设备2提交的区块链交易中包含汇款交易tx_#的相关信息,因而即便相关信息已经通过单独验证,区块链节点仍然仅能够为该汇款交易tx_#添加标记“Y2:OK”,而需要继续等待设备1、设备3和设备4提交的区块链交易。
仍以汇款交易tx_i为例,如果机构1~机构4中的任一参与方未能够在交易时刻到达之前提交包含该汇款交易tx_i的区块链交易,那么区块链节点会将该汇款交易tx_i标记为超时状态,使其无法被成功执行。如果机构1~机构4中的任一参与方虽然提及了包含该汇款交易tx_i的区块链交易,但由于金额累加详情出错或区间证明出错等原因而未通过单独验证,那么区块链节点会将该汇款交易tx_i标记为失败状态,使其无法被成功执行。
当汇款交易tx_i或其他汇款交易被区块链节点添加了成功状态、失败状态或超时状态等标记时,机构1~机构4在后续生成区块链交易时,可以参考这些状态生成相应的金额累加详情、生成余额充足的区间证明等,这与上文中在步骤504a~504d中描述的过程相类似,此处不再赘述。
在确认汇款交易tx_i被成功执行后,机构1在链外收取用户1的500港币、向机构2转出500港币,机构2收取机构1转入的500港币、向机构3转出56欧元,机构3收取机构2转入的56欧元、向机构4转出64美元,机构4收取机构3转入的64美元、在链外向用户1转入64美元,相当于机构1~4收支平衡、由用户1向用户2完成了500港币的汇款操作。
而表现在区块链账本上的数据变化为:机构1对应的区块链账户Y1更新为(currency_1,PC(a-t1,r_a-r_t1),Enc_A(a-t1),Enc_A(r_a-r_t1))、减少了500港币;机构2对应的区块链账户Y2更新为:(currency_1,PC(b1+t1,r_b1+r_t1),Enc_B(b1+t1),Enc_B(r_b1+r_t1))、(currency_2,PC(b2-t2,r_b2-r_t2),Enc_B(b2-t2),Enc_B(r_b2-r_t2)),增加了500港币、减少了56欧元;机构3对应的区块链账户Y3更新为:(currency_2,PC(c1+t2,r_c1+r_t2),Enc_C(c1+t2),Enc_C(r_c1+r_t2))、(currency_3,PC(c2-t3,r_c2-r_t3),Enc_C(c2-t3),Enc_C(r_c2-r_t3)),增加了56欧元、减少了64美元;机构4对应的区块链账户Y4更新为:(currency_3,PC(d+t3,r_d+r_t3),Enc_D(d+t3),Enc_D(r_d+r_t3))、增加了64美元。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行,在逻辑层面上形成基于区块链的事件处理装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,在软件实施方式中,该基于区块链的事件处理装置应用于任一参与方,可以包括:
生成单元801,根据所述任一参与方所参与的事件,生成所述事件的描述信息;
发送单元802,将所述描述信息通过链外通道发送至所述事件的其他参与方,以使所述其他参与方在确认所述描述信息后,针对所述事件向区块链提交触发信息;
提交单元803,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
可选的,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。
可选的,所述描述信息包括变化量,所述事件用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化。
可选的,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。
可选的,
所述描述信息还包括:第一证明信息,所述第一证明信息用于证明所述变化量处于正确数值区间;
当所述事件用于使所述任一参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第二证明信息,所述第二证明信息用于证明所述任一参与方对应的状态参数的取值不小于取值减小量。
可选的,
当所述事件用于使所述任一参与方对应的状态参数按照所述变化量发生取值增大时,所述触发信息包括:第三证明信息,所述第三证明信息用于证明取值增大量处于正确数值区间;
当所述事件用于使所述任一参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第四证明信息,所述第四证明信息用于证明取值减小量处于所述正确数值区间,且所述任一参与方对应的状态参数的取值不小于所述取值减小量。
可选的,还包括:
更新单元804,根据所述任一参与方参与的其他事件,对所述任一参与方对应的状态参数进行取值更新,以根据取值更新后的状态参数生成所述触发信息。
可选的,
当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;
当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;
当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额,其中1<i≤n。
可选的,所述提交单元803具体用于:
将所述触发信息添加为等待队列中的待提交交易;
按照预设规则从所述等待队列中选取若干待提交交易,以聚合为合并交易;
向区块链提交所述合并交易,使所述合并交易中的各个待提交交易在区块链中被分别处理。
可选的,还包括:
添加单元805,按照生成顺序为各个合并交易添加编号,使各个合并交易在区块链中被按照对应编号的大小进行依次处理。
图9是一示例性实施例提供的一种设备的示意结构图。请参考图9,在硬件层面,该设备包括处理器902、内部总线904、网络接口906、内存908以及非易失性存储器910,当然还可能包括其他业务所需要的硬件。处理器902从非易失性存储器910中读取对应的计算机程序到内存908中然后运行,在逻辑层面上形成基于区块链的事件处理装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图10,在软件实施方式中,该基于区块链的事件处理装置应用于参与方,可以包括:
获取单元1001,获取事件的描述信息,所述描述信息由所述事件的任一参与方通过链外通道进行发送;
提交单元1002,在确认所述描述信息后,针对所述事件向区块链提交触发信息;其中,当所述事件的所有参与方分别针对所述事件提交的触发信息均通过验证时,所述事件在区块链中被基于所述描述信息而执行。
可选的,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。
可选的,所述描述信息包括变化量,所述事件用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化。
可选的,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。
可选的,
所述描述信息还包括:第一证明信息,所述第一证明信息用于证明所述变化量处于正确数值区间;
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第二证明信息,所述第二证明信息用于证明所述参与方对应的状态参数的取值不小于取值减小量。
可选的,
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值增大时,所述触发信息包括:第三证明信息,所述第三证明信息用于证明取值增大量处于正确数值区间;
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第四证明信息,所述第四证明信息用于证明取值减小量处于所述正确数值区间,且所述参与方对应的状态参数的取值不小于所述取值减小量。
可选的,还包括:
更新单元1003,根据所述参与方参与的其他事件,对所述参与方对应的状态参数进行取值更新,以根据取值更新后的状态参数生成所述触发信息。
可选的,
当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;
当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;
当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额,其中1<i≤n。
可选的,所述提交单元1002具体用于:
将所述触发信息添加为等待队列中的待提交交易;
按照预设规则从所述等待队列中选取若干待提交交易,以聚合为合并交易;
向区块链提交所述合并交易,使所述合并交易中的各个待提交交易在区块链中被分别处理。
可选的,还包括:
添加单元1004,按照生成顺序为各个合并交易添加编号,使各个合并交易在区块链中被按照对应编号的大小进行依次处理。
图11是一示例性实施例提供的一种设备的示意结构图。请参考图11,在硬件层面,该设备包括处理器1102、内部总线1104、网络接口1106、内存1108以及非易失性存储器1110,当然还可能包括其他业务所需要的硬件。处理器1102从非易失性存储器1110中读取对应的计算机程序到内存1108中然后运行,在逻辑层面上形成基于区块链的事件处理装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图12,在软件实施方式中,该基于区块链的事件处理装置应用于区块链节点,可以包括:
验证单元1201,在收到事件的参与方提交的触发信息时,对所述触发信息进行验证;其中,所述触发信息由所述参与方在确认所述事件的描述信息后提交至区块链;
执行单元1202,当所述事件的所有参与方分别对应的触发信息均通过验证时,基于所述描述信息执行所述事件。
可选的,所述描述信息由所述事件的任一参与方生成后,通过链外通道发送至其他参与方进行确认。
可选的,所述触发信息包括:所述描述信息和提交所述触发信息的参与方生成的确认信息,以表明提交所述触发信息的参与方对所述描述信息予以确认。
可选的,所述描述信息包括变化量,所述事件用于使各个参与方在区块链上对应记录的状态参数按照所述变化量发生取值变化。
可选的,各个参与方对应的状态参数的取值、所述变化量分别为基于同态加密算法或同态承诺算法计算得到的密文数值。
可选的,
所述描述信息还包括:第一证明信息,所述第一证明信息用于证明所述变化量处于正确数值区间;
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第二证明信息,所述第二证明信息用于证明所述参与方对应的状态参数的取值不小于取值减小量。
可选的,
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值增大时,所述触发信息包括:第三证明信息,所述第三证明信息用于证明取值增大量处于正确数值区间;
当所述事件用于使所述参与方对应的状态参数按照所述变化量发生取值减小时,所述触发信息包括:第四证明信息,所述第四证明信息用于证明取值减小量处于所述正确数值区间,且所述参与方对应的状态参数的取值不小于所述取值减小量。
可选的,还包括:
更新单元1203,根据所述任一参与方参与的其他事件,对所述任一参与方对应的状态参数进行取值更新,以使所述任一参与方根据取值更新后的状态参数生成所述触发信息。
可选的,
当所述事件包括转账事件时,所述事件的参与方包括:汇款方和收款方,所述变化量包括:转账额,所述状态参数包括:账户余额;
当所述事件包括第一汇款事件时,所述事件的参与方包括:汇款方、中继方、收款方,所述变化量包括:所述汇款方与所述中继方之间基于第一类型资产的第一转账额、所述中继方与所述收款方之间基于第二类型资产的第二转账额,所述状态参数包括:账户余额;
当所述事件包括第二汇款事件时,所述事件的参与方包括:汇款方、n个中继方、收款方,所述变化量包括:所述汇款方与第1个中继方之间基于第一类型资产的转账额、第i-1个中继方与第i个中继方之间基于第i类型资产的转账额、第n个中继方与所述收款方之间基于第n+1类型资产的转账额,所述状态参数包括:账户余额,其中1<i≤n。
可选的,还包括:
接收单元1204,接收所述参与方提交的合并交易,所述合并交易中包含所述参与方从本地的等待队列中选取的若干待提交交易;其中,所述触发信息在所述参与方确认所述描述信息后被添加为所述等待队列中的待提交交易;
第一提取单元1205,提取所述合并交易中包含的各个待提交交易,以分别进行处理。
可选的,还包括:
第二提取单元1206,提取所述合并交易中添加的编号,所述编号由所述参与方根据所述合并交易的生成顺序而添加;
处理单元1207,按照对应编号的大小,对收到的合并交易进行依次处理。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书提出了一种计算机可读介质,其上存储有计算机指令,该指令被处理器执行时实现本说明书的技术方案,比如上述任一实施例的基于区块链的事件处理方法,此处不再一一赘述。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。