区块链交易方法及装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链交易方法及装置、电子设备。
背景技术
区块链可以通过在各个区块链节点之间达成共识,从而在各个区块链节点之间共同维护统一的区块链账本,以永久记载区块链网络中发生的交易信息。区块链账本是完全公开的,以便于随时查看和验证已发生交易的历史数据。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链交易方法及装置、电子设备。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链交易方法,应用于区块链节点;所述方法包括:
针对参与交易的汇出方和接收方,确定每一汇出方的汇出额、每一接收方的接收额;其中,所述汇出方包含真实汇出方、所述接收方包含真实接收方,所述汇出方包含至少一个掩护汇出方和/或所述接收方包含至少一个掩护接收方;
将每一汇出方的汇出额生成为相应的汇出额承诺、将每一接收方的接收额生成为相应的接收额承诺;
向区块链提交交易,所述交易中包含各个汇出方的区块链账户地址、各个接收方的区块链账户地址、各个汇出额承诺、各个接收额承诺,使得每一汇出方的区块链账户地址在区块链中登记的汇出方余额承诺在交易完成后扣除对应的汇出额承诺、每一接收方的区块链账户地址在区块链中登记的接收方余额承诺在交易完成后增加对应的接收额承诺。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链交易装置,应用于区块链节点;所述装置包括:
确定单元,针对参与交易的汇出方和接收方,确定每一汇出方的汇出额、每一接收方的接收额;其中,所述汇出方包含真实汇出方、所述接收方包含真实接收方,所述汇出方包含至少一个掩护汇出方和/或所述接收方包含至少一个掩护接收方;
第一生成单元,将每一汇出方的汇出额生成为相应的汇出额承诺、将每一接收方的接收额生成为相应的接收额承诺;
提交单元,向区块链提交交易,所述交易中包含各个汇出方的区块链账户地址、各个接收方的区块链账户地址、各个汇出额承诺、各个接收额承诺,使得每一汇出方的区块链账户地址在区块链中登记的汇出方余额承诺在交易完成后扣除对应的汇出额承诺、每一接收方的区块链账户地址在区块链中登记的接收方余额承诺在交易完成后增加对应的接收额承诺。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述实施例中任一所述的方法。
附图说明
图1是一示例性实施例提供的一种区块链交易方法的流程图。
图2是一示例性实施例提供的一种在区块链网络中实施汇款交易的示意图。
图3是一示例性实施例提供的一种在区块链中实现匿名汇款的示意图。
图4是一示例性实施例提供的一种在区块链网络中实施汇款交易的流程图。
图5是一示例性实施例提供的一种设备的结构示意图。
图6是一示例性实施例提供的一种区块链交易装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种区块链交易方法的流程图。如图1所示,该方法应用于区块链节点,该区块链节点被配置于电子设备上,可以包括以下步骤:
步骤102,针对参与交易的汇出方和接收方,确定每一汇出方的汇出额、每一接收方的接收额;其中,所述汇出方包含真实汇出方、所述接收方包含真实接收方,所述汇出方包含至少一个掩护汇出方和/或所述接收方包含至少一个掩护接收方。
在一实施例中,汇出方可以包括真实汇出方和掩护汇出方,本说明书的区块链交易方案可以应用于任一汇出方对应的汇出方设备,比如真实汇出方或掩护汇出方对应的汇出方设备。或者,汇出方可以仅包含真实汇出方,本说明书的区块链交易方案可以应用于该真实汇出方对应的汇出方设备。
在一实施例中,本说明书的区块链交易方案可以应用于组织方对应的组织方设备,该组织方可以为上述的任一汇出方,或者该组织方可以并非汇出方,本说明书并不对此进行限制。
在一实施例中,通过使得汇出方包含至少一个掩护汇出方,可以对真实汇出方进行掩护,即无法准确区分出每个汇出方究竟属于真实汇出方还是掩护汇出方;尤其是当掩护汇出方的数量较多时,可以对真实汇出方实现相对更好地掩护。类似地,通过使得接收方包含至少一个掩护接收方,可以对真实接收方进行掩护,即无法准确区分出每个接收方究竟属于真实接收方还是掩护接收方;尤其是当掩护接收方的数量较多时,可以对真实接收方实现相对更好地掩护。
在一实施例中,各个汇出方之间可以相互协商,以确定出汇出额、接收额;真实汇出方的汇出额、真实接收方的接收额应当能够确保符合两者之间的汇款金额,而掩护汇出方的汇出额、掩护接收方的接收额可以采用协商出的任意数值。例如,掩护汇出方的汇出额、掩护接收方的接收额可以均为0,而真实汇出方的汇出额、真实接收方的接收额可以均为汇款金额,这样可以避免对掩护汇出方、掩护接收方的区块链账户造成变化,有助于简化后续的处理复杂程度;当然,由于汇出额、接收额分别以汇出额承诺、接收额承诺被记载于区块链账本中,因而并不能够直接看出汇出额、接收额的实际数值,所以不会因此暴露出实际身份。
在一实施例中,通过从汇出方对应的汇出方区块链账户汇出对应于汇出额的资产凭证、向接收方对应的接收方区块链账户汇入对应于接收额的资产凭证,可以实现汇出方与接收方之间的汇款。其中,资产凭证可以对应于区块链内的代币(token)、数字资产等智能资产,资产凭证还可以对应于区块链外的现金、证券、优惠券、房产等链外资产,本说明书并不对此进行限制。
在一实施例中,掩护汇出方、掩护接收方可以对应于真实的个人或企业,本说明书可以对这些个人或企业所持有的区块链账户进行借用,但可以确保不会使得这些区块链账户受到损失或信息泄露。
在另一实施例中,掩护汇出方、掩护接收方可以专用于实现汇款掩护,而并不对应于真实的个人或企业,即掩护汇出方、掩护接收方可以对应于虚拟对象。其中,掩护汇出方、掩护接收方可以长期存在,并在汇款过程中被用于实现汇款掩护;或者,可以在每次实施汇款时临时创建掩护汇出方和掩护接收方,并在汇款结束后对临时创建的掩护汇出方和掩护接收方进行注销。
步骤104,将每一汇出方的汇出额生成为相应的汇出额承诺、将每一接收方的接收额生成为相应的接收额承诺。
在一实施例中,由于区块链中的各个区块链节点需要基于共识而分别维护有统一的区块链账本,因而通过在区块链内登记汇出额承诺、接收额承诺,使得区块链节点维护的区块链账本中仅会记录该汇出额承诺、接收额承诺,而不会直接记录汇出额、接收额,使得汇出额、接收额被作为私密数据而隐藏。类似地,汇出方余额可以被记录为区块链账本中的汇出方余额承诺、接收方余额可以被记录为区块链账本中的接收方余额承诺。实际上,对于与汇出方、接收方相关的任意类型的余额,均被记录为区块链账本中对应的余额承诺,以保护所有者的隐私。基于此处的描述,可以理解本说明书中涉及到的关于任一余额与对应的余额承诺、汇出额与对应的汇出额承诺、接收额与对应的接收额承诺之间的关系,下文中不再对此进行赘述。
在一实施例中,可以通过同态加密算法将某一余额生成为相应的余额承诺,比如将上述的汇出额生成为相应的汇出额承诺。本说明书中可以采用任意类型的同态加密算法,比如相关技术中的Pedersen承诺机制,当然本说明书并不对此进行限制。
步骤106,向区块链提交交易,所述交易中包含各个汇出方的区块链账户地址、各个接收方的区块链账户地址、各个汇出额承诺、各个接收额承诺,使得每一汇出方的区块链账户地址在区块链中登记的汇出方余额承诺在交易完成后扣除对应的汇出额承诺、每一接收方的区块链账户地址在区块链中登记的接收方余额承诺在交易完成后增加对应的接收额承诺。
在一实施例中,所述真实汇出方与所述真实接收方之间的交易额为预设数额;其中,所述真实汇出方的区块链账户地址对应的真实汇出方余额在交易完成后扣除所述预设数额、所述真实接收方的区块链账户地址对应的真实接收方余额在交易完成后增加所述预设数额,所述掩护汇出方的区块链账户地址对应的掩护汇出方余额、所述掩护接收方的区块链账户地址对应的掩护接收方余额在交易完成后均不变。
例如,真实汇出方的汇出额、真实接收方的接收额均为所述预设数额,而掩护汇出方的汇出额、掩护接收方的接收额均为0,使得上述交易过程中实际上仅发生了由真实汇出方向真实接收方实施的汇款操作,而掩护汇出方、掩护接收方实际上并未发生资金流转。
再例如,真实汇出方、真实接收方、掩护汇出方、掩护接收方在上述交互过程中均实际发生了资金流转,但是掩护汇出方可以同时扮演掩护接收方的角色、掩护接收方也可以同时扮演掩护汇出方的角色,比如某一区块链账户作为掩护汇出方所对应的汇出额为E1、作为掩护接收方所对应的接收额为E2和E3,且能够保证E1=E2+E3,因而最终能够确保该对象的区块链账户地址对应的余额在交易完成后不变(在汇出额E1与接收额E2、E3之间实现了收支平衡)。
在一实施例中,接收方B_j对应的接收方余额承诺SBj由同态加密算法根据接收方余额s_B_j和接收方余额随机数r_B_j计算得到、接收方B_j对应的接收额承诺T_B_j由所述同态加密算法根据接收额t_B_j和接收额随机数b_j计算得到。区块链节点可以将接收额随机数b_j通过链外通道发送至接收方B_j,以由接收方B_j根据更新后接收方余额承诺S_B_j’、更新后接收方余额随机数r_B_j’确定更新后接收方余额s_B_j’;其中,所述更新后接收方余额承诺S_B_j’由接收方余额承诺S_B_j增加接收额承诺T_B_j得到、所述更新后接收方余额随机数r_B_j’由接收方余额随机数r_B_j增加接收额随机数b_j得到、所述更新后接收方余额s_B_j’为接收方余额s_B_j与接收额t_B_j之和。其中,接收方B_j代表第j个接收方;当接收方的数量为n个时,1≤j≤m。
在一实施例中,在提交所述交易之前,区块链节点可以将接收额t_B_j、接收额承诺T_B_j通过链外通道发送至接收方B_j,以由接收方B_j验证接收额承诺T_B_j、接收额随机数b_j和自身对应的接收额t_B_j之间的关联关系。接收方B_j可以在验证通过后,允许交易实施,否则可以阻碍交易实施;譬如,接收方B_j可以在验证通过后提供下述的接收方签名,否则拒绝提供该接收方签名。
在一实施例中,区块链节点可以获取接收方B_j通过自身持有的接收方私钥生成的与接收额承诺T_B_j相关的接收方签名SIG_B_j,所述接收方签名SIG_B_j由接收方B_j在所述关联关系通过验证后生成;然后,将所述接收方签名SIG_B_j添加至所述交易中,以供所述区块链中的区块链节点进行签名验证。例如,当交易中并未包含该接收方签名SIG_B_j时,收到该交易的区块链节点可以判定为共识失败,从而拒绝执行该交易。
在一实施例中,区块链节点可以获取汇出方A_i通过自身持有的汇出方私钥生成的汇出方签名SIG_A_i,并将所述汇出方签名SIG_A_i添加至所述交易中,以供所述区块链中的区块链节点进行签名验证。在其他实施例中,汇出方签名还可以与区间证明相关。例如,当交易中并未包含该汇出方签名时,收到该交易的区块链节点可以判定为共识失败,从而拒绝执行该交易。其中,汇出方A_i代表第i个汇出方;当汇出方的数量为m个时,1≤i≤n。
在一实施例中,区块链节点可以获取汇出方区间证明Pf_A_i和接收方区间证明Pf_B_j,将汇出方区间证明Pf_A_i和接收方区间证明Pf_B_j添加至所述交易中,以供所述区块链中的区块链节点进行取值验证;其中,所述汇出方区间证明Pf_A_i被用于证明汇出方A_i对应的汇出额t_A_i不小于0且汇出方A_i对应的汇出方余额s_A_i不小于汇出额t_A_i,所述接收方区间证明Pf_B_j被用于证明接收方B_j对应的接收额t_B_j不小于0。
在一实施例中,汇出方A_1、汇出方A_2、……、汇出方A_m分别生成对应的汇出方区间证明Pf_A_1、汇出方区间证明Pf_A_2、……、汇出方区间证明Pf_A_m,接收方B_1、接收方B_2、……、接收方B_n分别生成对应的接收方区间证明Pf_B_1、接收方区间证明Pf_B_2、……、接收方区间证明Pf_B_n。然后,应用了本说明书的区块链交易方案的区块链节点可以分别接收各个汇出方、接收方分别生成的汇出方区间证明Pf_A_i、接收方区间证明Pf_B_j;其中,该区块链节点可能为某一汇出方A_x,则该汇出方A_x可以接收其他汇出方生成的汇出方区间证明以及各个接收方生成的接收方区间证明。
在一实施例中,可以由应用了本说明书的区块链交易方案的区块链节点分别生成上述的汇出方区间证明Pf_A_i和接收方区间证明Pf_B_j。
在一实施例中,汇出额承诺T_A_i由同态加密算法根据汇出方A_i对应的汇出额t_A_i和汇出额随机数a_i计算得到,其中0<i≤m、m为所述汇出方的数量;接收额承诺T_B_j由同态加密算法根据接收方B_j对应的接收额t_B_j和接收额随机数b_j计算得到,其中0<j≤n、n为所述接收方的数量。区块链节点可以生成验证随机数f=a_1+……+a_m-b_1-……-b_n,并在所述交易中添加所述验证随机数f,以供所述区块链中的区块链节点验证所述交易的输入与输出相等;其中,如果输入与输出不相等时可以解决执行该交易。
为了便于理解,下面以区块链网络中的汇款交易为例,对本说明书的技术方案进行详细说明。图2是一示例性实施例提供的一种在区块链网络中实施汇款交易的示意图。如图2所示,假定由用户A向用户B进行区块链汇款;其中,本说明书中的“用户”可以表现为所登录的用户账号,而该用户账号实际可以归属于个人或组织,本说明书并不对此进行限制。
假定用户A使用的汇出方设备为用户设备1,譬如该用户设备1上登录有对应于用户A的用户账号;类似地,用户B使用的接收方设备为用户设备2。其中,用户设备1与用户设备2之间可以通过建立链下通道实现相应的链下通讯。
用户设备1上可以运行有区块链的客户端程序,使得该用户设备1在区块链网络中存在对应的区块链节点,比如图2所示的节点1。类似地,用户设备2上可以运行有区块链的客户端程序,使得该用户设备2在区块链网络中存在对应的区块链节点,比如图2所示的节点2。区块链网络中还存在其他区块链节点,比如图2所示的节点k等,此处不再一一列举。通过上述的节点1、节点2等,使得用户A与用户B之间的汇款交易可以经由区块链网络实施,相关交易信息可以被记录至各个区块链节点分别维护的区块链账本中,可以避免发生篡改,并有助于后续查验。
图3是一示例性实施例提供的一种在区块链中实现匿名汇款的示意图。针对上述用户A向用户B的汇款交易,用户A为该汇款交易的真实汇出方、用户B为该汇款交易的真实接收方,而基于本说明书的技术方案,可以增加用户A之外的掩护汇出方、用户B之外的掩护接收方,从而形成如图3所示的汇出方A_1、汇出方A_2、……、汇出方A_m以及接收方B_1、接收方B_2、……、汇出方B_n,使得用户A被隐藏在汇出方A_1~A_m之中、用户B被隐藏在接收方B_1~B_n之中,再结合对汇出额、接收额进行同态加密隐藏,即可避免从区块链交易记录察觉出各个汇出方、接收方的实际身份,难以区分出是否由用户A向用户B实施了汇款,也无法确定具体的汇款额,从而实现了在区块链中的匿名汇款。
假定节点1运行为图3中汇出方A_1~A_m中的组织方,该组织方与接收方B_j(对接收方B_1~B_n的处理方式一致,此处以“接收方B_j”作为替代进行举例说明)、区块链节点之间通过如图4所示的交互过程,以实现用户A与用户B之间的汇款交易。其中,图4是一示例性实施例提供的一种在区块链网络中实施汇款交易的流程图。
如图4所示,组织方与接收方B_j和区块链节点之间的交互过程可以包括以下步骤:
步骤401,组织方与其他汇出方协商并起草交易。
在一实施例中,假定组织方为汇出方A_1、用户B对应于接收方B_1,而汇出方A_2~A_m为掩护汇出方、接收方B_2~B_n为掩护接收方。在确定需要由用户A向用户B进行汇款后,可由汇出方A_1按照预设方式选取上述的汇出方A_2~A_m、接收方B_2~B_n,或者通过其他任意方式确定出汇出方A_2~A_m、接收方B_2~B_n,以使得该汇出方A_2~A_m、接收方B_2~B_n可以配合于汇出方A_1和接收方B_1实现区块链中的匿名汇款。
在一实施例中,可由汇出方A_1~A_m之间进行协商,以确定出每一汇出方A_i(其中,1≤i≤m)分别对应的汇出额t_A_i,以及每一接收方B_j(其中,1≤j≤n)分别对应的接收额t_B_j。
在一实施例中,可以分别针对每一汇出额t_A_i确定出对应的汇出额随机数a_i、分别针对每一接收额t_B_j确定出对应的接收额随机数b_j,然后通过Pedersen承诺机制计算出上述的汇出额t_A_i、接收额t_B_j分别对应的汇出额承诺T_A_i、接收额承诺T_B_j。其中,汇出额承诺T_A_i=PC(a_i,t_A_i)=a_i×G+t_A_i×H,接收额承诺T_B_j=PC(b_j,t_B_j)=b_j×G+t_B_j×H,G、H为已知函数(比如用于生成椭圆曲线的生成元等)。
步骤402,组织方通过链下通道将(A_1,…,A_m;b_j,t_B_j,T_B_j)发送至接收方B_j。
在一实施例中,通过将(A_1,…,A_m;b_j,t_B_j,T_B_j)由链下通道而非区块链网络进行发送,可以避免汇款随机数b_j和汇款额t_B_j被记录至区块链账本中,确保汇款额t_B_j除汇出方A_i和接收方B_j之外不可知。
在一实施例中,组织方将(A_1,…,A_m;b_1,t_B_1,T_B_1)发送至接收方B_1、将(A_1,…,A_m;b_2,t_B_2,T_B_2)发送至接收方B_2、……、将(A_1,…,A_m;b_j,t_B_j,T_B_j)发送至接收方B_j,由每一接收方分别针对自身对应的接收额、接收额随机数和接收额承诺进行验证。
在一实施例中,(A_1,…,A_m;b_j,t_B_j,T_B_j)中的A_1~A_m代表上述的汇出方A_1~汇出方A_m。
步骤403,接收方B_j对收到的(A_1,…,A_m;b_j,t_B_j,T_B_j)进行验证。
在一实施例中,接收方B_j可以对接收额承诺T_B_j进行验证,即接收方B_j可以通过Perdersen承诺机制对随机数b_j和汇款额t_B_j进行计算,以验证汇款承诺T_B_j=PC(b_j,t_B_j)是否正确,若正确则表明验证通过,否则验证不通过。
步骤404,接收方B_j在验证通过后,生成签名并返回至组织方。
在一实施例中,在验证通过后,接收方B_j可以利用接收方私钥对(A_1,…,A_m;b_j,t_B_j,T_B_j)进行签名,生成签名SIG_B_j并返回至汇出方。该签名SIG_B_j表明接收方B_j同意由汇出方A_1~A_m参与的汇款交易,且该接收方B_j将在该汇款交易中获得接收额承诺T_B_j所对应的款项。
步骤405,在收到签名SIG_B_j后,组织方生成区间证明Pf_A_i、Pf_B_j。
在一实施例中,在收到接收方B_1返回的签名SIG_B_1、接收方B_2返回的签名SIG_B_2、……接收方B_j返回的签名SIG_B_j、……、B_n返回的签名SIG_B_n后,组织方确定接收方B_1~B_n允许实施汇款交易。
在一实施例中,为了确保汇款交易顺利完成,区块链节点需要确定汇出方A_i对应的汇出额t_A_i满足下述条件:t_A_i≥0且s_A_i≥t_A_i,其中s_A_i为汇出方A_i对应的汇出方余额,该汇出方余额s_A_i在区块链账本中被记录为相应的汇出方余额承诺S_A_i。区间证明技术可以使得区块链节点在密文状态下验证交易是否符合上述条件,譬如本说明书中可以采用相关技术中的Bulletproofs方案、Borromean环签名方案等实现,本说明书并不对此进行限制。每一汇出方A_i可以分别利用区间证明技术生成对应的区间证明Pf_A_i,并提供至组织方;其中,组织方作为汇出方A_1,可以自行生成区间证明Pf_A_1,以用于证明t_A_1≥0且s_A_1≥t_A_1,而其他汇出方A_2~A_m可以分别生成区间证明Pf_A_2~Pf_A_m,并分别发送至该组织方。
在一实施例中,为了确保汇款交易顺利完成,区块链节点需要确定接收方B_j对应的接收额t_B_j满足下述条件:t_B_j≥0。与上述区间证明Pf_A_i相类似的,可以利用区间证明技术生成各个接收额t_B_j对应的区间证明Pf_B_j。其中,如果由汇出方A_x向接收方B_y实施转账,那么可由该汇出方A_x针对该接收方B_y生成接收额t_B_y对应的区间证明Pf_B_y,并将该区间证明Pf_B_y发送至组织方;或者,也可由组织方分别生成各个接收额t_B_j对应的区间证明Pf_B_j。
步骤406,组织方计算验证随机数f。
在一实施例中,针对汇出方A_1~A_m对应的汇出方随机数a_1~a_m、接收方B_1~B_n对应的接收方随机数b_1~b_n,可以计算相应的验证随机数f=a_1+……+a_m-b_1-……-b_n;相应的,基于Pedersen承诺机制的特性,该验证随机数可以用于与汇出额承诺T_A_1~T_A_m、接收额承诺T_B_1~T_B_n相配合,以用于验证t_a_1+……+t_a_m=t_b_1-……-t_b_n,即汇出总金额与接收总金额相等,亦即该汇款交易的输入输出相等。
步骤407,组织方获得各个汇出方的签名。
在一实施例中,汇出方A_1~A_m分别针对(A_1:T_A_1,Pf_A_1;…;A_m:T_A_m,Pf_A_m;B_1:T_B_1,Pf_B_1;…;B_n:T_B_n,Pf_B_n;f)进行签名,得到相应的汇出方签名SIG_A_1~SIG_A_m,并提供至组织方。
步骤408,组织方向区块链提交交易。
在一实施例中,组织方可以通过节点1向区块链提交相应的汇款交易(A_1:T_A_1,Pf_A_1;…;A_m:T_A_m,Pf_A_m;B_1:T_B_1,Pf_B_1;…;B_n:T_B_n,Pf_B_n;f;SIG_A_1,…,SIG_A_m;SIG_B_1,…,SIG_B_n),以执行该汇款交易。该汇款交易将被传输至区块链网络中的所有区块链节点,并由各个区块链节点分别对该汇款交易进行验证,以在验证通过时执行汇款操作、在验证未通过时拒绝汇款。
步骤409,区块链节点检查交易是否执行过。
在一实施例中,此处的区块链节点可以表示区块链网络中的任意一个区块链节点,即区块链网络中的每一区块链节点均会收到上述汇款交易,并通过步骤409~412等实施验证等操作。
在一实施例中,区块链节点在收到上述汇款交易后,可以利用相关技术中的防双花或防重放机制,验证该汇款交易是否已经执行过;如果已经执行过,可以拒绝执行该汇款交易,否则转入步骤410。
步骤410,区块链节点检查签名。
在一实施例中,区块链节点可以检查上述汇款交易中包含的签名SIG_A_i、SIG_B_j是否正确;如果不正确,可以拒绝执行该汇款交易,否则转入步骤611。
步骤411,区块链节点检查区间证明Pf_A_i、Pf_B_j。
在一实施例中,区块链节点可以基于区间证明技术对上述汇款交易包含的区间证明Pf_A_i进行检查,以确定是否满足t_A_i≥0、s_A_i≥t_A_i。类似地,区块链节点可以基于区间证明技术对上述汇款交易包含的区间证明Pf_B_j进行检查,以确定是否满足t_B_j≥0。如果任一条件不满足,可以拒绝执行该汇款交易,否则转入步骤412。
步骤412,区块链节点检查汇出总金额与接收总金额是否相等。
在一实施例中,针对上述汇款交易中包含的验证随机数f,区块链节点可以验证T_A_1+…+T_A_m-T_B_1-…-T_B_n=PC(f,0)=f×G+0×H=f×G是否成立;如果成立,表明上述汇款交易满足汇出总金额与接收总金额相等,否则认为不成立。如果不成立,可以拒绝执行该汇款交易,否则转入步骤413。
步骤413,区块链节点在维护的区块链账本中更新汇出方A_1~A_m、接收方B_1~B_n分别对应的区块链账户。
在一实施例中,在通过步骤409~412的验证后,区块链节点可以分别对区块链账本中对应于汇出方A_1~A_m、接收方B_1~B_n的区块链账户进行更新:各个汇出方A_1~A_m对应的区块链账户中增加了对应的汇出方余额承诺T_A_1~T_A_m,而各个接收方B_1~B_n对应的区块链账户中增加了对应的接收方余额承诺T_B_1~T_B_n。
其中,用户A对应的区块链账户1、用户B对应的区块链账户2,亦即汇出方A_1对应的区块链账户、接收方B_1对应的区块链账户,增加的汇出方余额承诺T_A_1、接收方余额承诺T_B_1分别对应于实际的汇款金额,因而实质上确保完成了用户A向用户B的汇款操作。
而对于其他的汇出方A_2~A_m、接收方B_2~B_n,所对应的汇出额t_A_2~t_A_m、接收额t_B_2~t_B_n可以均为0,使得这些掩护汇出方、掩护接收方所对应的区块链账户不存在变化。
综上所述,由于在区块链账本中记录为汇出方余额承诺T_A_1~T_A_m、接收方余额承诺T_B_1~T_B_n,因而通过查询区块链账本中的汇款交易记录,并不能够获知对应的汇出额t_A_1~t_A_m、接收额t_B_1~t_B_n的实际取值,因此一方面能够对汇款额进行隐私保护,另一方面不会据此暴露出各个汇出方、接收方的实际身份,从而实现了区块链中的匿名汇款,极大地提升了区块链汇款的安全性和隐私性。
图5是一示例性实施例提供的一种设备的示意结构图。请参考图5,在硬件层面,该设备包括处理器502、内部总线504、网络接口506、内存508以及非易失性存储器510,当然还可能包括其他业务所需要的硬件。处理器502从非易失性存储器510中读取对应的计算机程序到内存508中然后运行,在逻辑层面上形成区块链交易装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图6,在软件实施方式中,该区块链交易装置应用于区块链节点;该装置可以包括:
确定单元601,针对参与交易的汇出方和接收方,确定每一汇出方的汇出额、每一接收方的接收额;其中,所述汇出方包含真实汇出方、所述接收方包含真实接收方,所述汇出方包含至少一个掩护汇出方和/或所述接收方包含至少一个掩护接收方;
第一生成单元602,将每一汇出方的汇出额生成为相应的汇出额承诺、将每一接收方的接收额生成为相应的接收额承诺;
提交单元603,向区块链提交交易,所述交易中包含各个汇出方的区块链账户地址、各个接收方的区块链账户地址、各个汇出额承诺、各个接收额承诺,使得每一汇出方的区块链账户地址在区块链中登记的汇出方余额承诺在交易完成后扣除对应的汇出额承诺、每一接收方的区块链账户地址在区块链中登记的接收方余额承诺在交易完成后增加对应的接收额承诺。
可选的,所述真实汇出方与所述真实接收方之间的交易额为预设数额;其中,所述真实汇出方的区块链账户地址对应的真实汇出方余额在交易完成后扣除所述预设数额、所述真实接收方的区块链账户地址对应的真实接收方余额在交易完成后增加所述预设数额,所述掩护汇出方的区块链账户地址对应的掩护汇出方余额、所述掩护接收方的区块链账户地址对应的掩护接收方余额在交易完成后均不变。
可选的,所述真实汇出方的汇出额、所述真实接收方的接收额均为所述预设数额,所述掩护汇出方的汇出额、所述掩护接收方的接收额均为0。
可选的,接收方B_j对应的接收方余额承诺SBj由同态加密算法根据接收方余额s_B_j和接收方余额随机数r_B_j计算得到、接收方B_j对应的接收额承诺T_B_j由所述同态加密算法根据接收额t_B_j和接收额随机数b_j计算得到;所述装置还包括:
第一发送单元604,将接收额随机数b_j通过链外通道发送至接收方B_j,以由接收方B_j根据更新后接收方余额承诺S_B_j’、更新后接收方余额随机数r_B_j’确定更新后接收方余额s_B_j’;
其中,所述更新后接收方余额承诺S_B_j’由接收方余额承诺S_B_j增加接收额承诺T_B_j得到、所述更新后接收方余额随机数r_B_j’由接收方余额随机数r_B_j增加接收额随机数b_j得到、所述更新后接收方余额s_B_j’为接收方余额s_B_j与接收额t_B_j之和。
可选的,还包括:
第二发送单元605,在提交所述交易之前,将接收额t_B_j、接收额承诺T_B_j通过链外通道发送至接收方B_j,以由接收方B_j验证接收额承诺T_B_j、接收额随机数b_j和自身对应的接收额t_B_j之间的关联关系。
可选的,还包括:
第一获取单元606,获取接收方B_j通过自身持有的接收方私钥生成的与接收额承诺T_B_j相关的接收方签名SIG_B_j,所述接收方签名SIG_B_j由接收方B_j在所述关联关系通过验证后生成;
第一添加单元607,将所述接收方签名SIG_B_j添加至所述交易中,以供所述区块链中的区块链节点进行签名验证。
可选的,还包括:
第二获取单元608,获取汇出方A_i通过自身持有的汇出方私钥生成的汇出方签名SIG_A_i;
第二添加单元609,将所述汇出方签名SIG_A_i添加至所述交易中,以供所述区块链中的区块链节点进行签名验证。
可选的,还包括:
第三获取单元610,获取汇出方区间证明Pf_A_i和接收方区间证明Pf_B_j;
第三添加单元611,将汇出方区间证明Pf_A_i和接收方区间证明Pf_B_j添加至所述交易中,以供所述区块链中的区块链节点进行取值验证;其中,所述汇出方区间证明Pf_A_i被用于证明汇出方A_i对应的汇出额t_A_i不小于0且汇出方A_i对应的汇出方余额s_A_i不小于汇出额t_A_i,所述接收方区间证明Pf_B_j被用于证明接收方B_j对应的接收额t_B_j不小于0。
可选的,汇出额承诺T_A_i由同态加密算法根据汇出方A_i对应的汇出额t_A_i和汇出额随机数a_i计算得到,其中0<i≤m、m为所述汇出方的数量;接收额承诺T_B_j由同态加密算法根据接收方B_j对应的接收额t_B_j和接收额随机数b_j计算得到,其中0<j≤n、n为所述接收方的数量;所述装置还包括:
第二生成单元612,生成验证随机数f=a_1+……+a_m-b_1-……-b_n;
第四添加单元613,在所述交易中添加所述验证随机数f,以供所述区块链中的区块链节点验证所述交易的输入与输出相等。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。