基于区块链的资产发布方法及装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于区块链的资产发布方法及装置、电子设备。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。
发明内容
本说明书提出一种基于区块链的资产发布方法,应用于所述区块链中的节点设备,包括:
接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
如果是,将所述承诺值发布至所述区块链进行存证。
本说明书还提出一种基于区块链的资产发布装置,应用于所述区块链中的节点设备,包括:
接收模块,接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
验证模块,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
存证模块,如果是,将所述承诺值发布至所述区块链进行存证。
本说明书还提出一种电子设备,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与基于区块链的基于区块链的资产发布的控制逻辑对应的机器可执行指令,所述处理器被促使:
接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
如果是,将所述承诺值发布至所述区块链进行存证。
通过以上实施例,一方面,由于上述资产发布交易中仅携带至少将发布的目标资产对象的资产类型作为输入数据输入承诺函数计算得到的承诺值,并不会将上述目标资产对象的资产类型以明文的形式携带在资产发布交易中,使得区块链可以隐藏资产发布者所发布的目标资产对象的资产类型,保护资产发布者的隐私;
另一方面,由于上述资产发布交易中还携带了用于对上述承诺值进行零知识证明的零知识证据,使得区块链中的节点设备可以在隐藏资产发布者发布的资产类型的前提下,对上述零知识证据进行零知识证明,来验证上述资产发布者发布的目标资产对象的资产类型,是否为允许该资产发布者发布的合法资产类型。
附图说明
图1是一示例性实施例提供的一种基于区块链的资产发布方法的流程图。
图2是一示例性实施例提供的一种电子设备的结构示意图。
图3是一示例性实施例提供的一种基于区块链的资产发布装置的框图。
具体实施方式
零知识证明(Zero Knowledge Proof),是一种密码学技术。利用该技术,一个证明者能够在不向验证者提供任何敏感的信息的情况下,使验证者(有一个或多个)相信某个论断是正确的。
而本说明书中旨在公开一种,通过将零知识证明(Zero Knowledge Proof)算法与区块链的资产发布机制进行有机结合,使得区块链中的节点设备,可以在隐藏资产发布者所发布的资产类型的前提下,能够正常验证该资产发布者所发布的资产类型是否为允许该资产对象发布的合法资产类型的技术方案。
在实现时,资产发布者需要在区块链上发布已经创建完成的资产对象时,可以将资产发布者本次希望发布的目标资产对象的资产类型作为输入数据(输入数据中也可以包含其它类型的需要隐藏的信息;比如,资产接收方的公钥),输入至承诺函数进行计算,得到承诺值;以及,还可以基于区块链搭载的零知识证明算法,生成用于对上述承诺值进行零知识证明的零知识证据(proof)。然后,资产发布者可以基于上述承诺值和上述零知识证据,来构建资产发布交易,并通过将上述资产发布交易在区块链中进行发送,来发布上述目标资产对象。
而区块链中的节点设备在收到上述资产发布交易时,可以获取上述资产发布交易中携带的上述承诺值,以及上述零知识证据,然后可以通过上述零知识证明算法,基于上述零知识证据发起对上述承诺值的零知识证明,来验证上述目标资产对象的资产类型,是否为允许该资产发布者发布的合法资产类型。
如果经过验证确认上述目标资产对象的资产类型,为允许该资产发布者发布的合法资产类型,则可以将上述承诺值发布至上述区块链进行存证,来完成上述目标资产对象的发布流程。
在以上技术方案中,一方面,由于上述资产发布交易中仅携带至少将发布的目标资产对象的资产类型作为输入数据输入承诺函数计算得到的承诺值,并不会将上述目标资产对象的资产类型以明文的形式携带在资产发布交易中,使得区块链可以隐藏资产发布者所发布的目标资产对象的资产类型,保护资产发布者的隐私;
另一方面,由于上述资产发布交易中还携带了用于对上述承诺值进行零知识证明的零知识证据,使得区块链中的节点设备可以在隐藏资产发布者发布的资产类型的前提下,对上述零知识证据进行零知识证明,来验证上述资产发布者发布的目标资产对象的资产类型,是否为允许该资产发布者发布的合法资产类型。
下面通过具体实施例并结合具体的应用场景对本说明书进行描述。
请参考图1,图1是本说明书一实施例提供的一种基于区块链的资产发布方法,应用于区块链中的节点设备,执行以下步骤:
步骤102,接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
步骤104,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
步骤106,如果是,将所述承诺值发布至所述区块链进行存证。
在本说明书描述的区块链,具体可以包括所支持的对象中能够涵盖资产对象的任意类型的区块链网络。
例如,在传统的区块链中,所支持的对象通常仅包括账户对象和合约对象,而在本说明书中,可以对区块链所支持的对象进行扩展,在区块链现有支持的诸如账户对象和合约对象的基础上,进一步扩展出一种资产对象。
其中,需要说明的是,本说明书描述的区块链的类型,不进行特别限定,可以是联盟链,也可以联盟链以外的其它类型的区块链(比如私有链、公有链等)。
上述合约对象,具体可以包括由区块链中的目标成员发布在区块链,并在区块链的分布式数据库(即区块链账本)中收录,用于对区块链支持的资产对象进行管理的智能合约程序。接入区块链的用户可以通过调用上述合约对象的方式,在区块链上创建一笔资产对象,以及在区块链上完成持有的资产对象的在线管理。
例如,在一个例子中,上述区块链具体可以是一个由若干作为联盟成员的金融机构构成的联盟链,这种情况下,区块链中的目标成员则可以是该联盟链中,具有资产对象创建权限的作为联盟成员的金融机构。通过该联盟链可以搭建一个分布式的智能合约平台,该智能合约平台的运营方,可以对该智能合约平台所支持的对象类型进行扩展,在现有支持的诸如账户对象和合约对象的基础上,进一步扩展出一种资产对象,使得作为联盟成员的金融机构,可以通过在区块链上发布智能合约(合约对象)的形式,在平台中创建一种新增的资产类型,进而接入区块链的用户,可以通过调用该智能合约来创建一笔资产对象以及完成持有的资产对象的在线管理。
上述资产对象,可以包括智能资产对象;智能资产对象用于维护智能资产,该智能资产对应于用户在现实世界中的任意类型的真实资产,且通过智能资产对象使得该智能资产能够适用于在区块链中进行处理,譬如特别适用于通过区块链中的智能合约等方式对该智能资产对象进行处理。其中,智能资产对应于用户在现实世界中的真实资产的类型,在本说明书中不进行特别限定;
例如,以上述区块链为由若干金融机构构成的联盟链为例,在实际应用中,用户任意形式的线下资产;比如,资金、房产、股票、贷款合同、票据、应收账款等均可以由管理该联盟链上的节点设备的金融机构,包装成数字资产的形式,创建并发布在该联盟链的分布式数据库中。
在本说明书中所描述的交易,是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。
其中,区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,虚拟资产业务、租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
需要说明的是,上述区块链搭载的共识算法,在本说明书中不进行特别限定;在实际应用中,具体可以采用拜占庭容错(Byzantine Fault Tolerance)系列算法作为共识算法,也可以采用非拜占庭容错系列算法作为共识算法。
其中,所谓拜占庭容错算法,是指在由若干个节点设备组成的分布式网络中,需要考虑拜占庭节点(即作恶节点)的分布式容错算法;例如,pbft算法;如果采用拜占庭容错算法在区块链网络中进行共识处理时,会认为区块链中同时存在作恶节点和故障节点。而相应的,所谓非拜占庭容错算法,是指在由若干个节点设备组成的分布式网络中,不考虑拜占庭节点的分布式容错算法;例如,raft算法等等;如果采用非拜占庭容错算法在区块链网络中进行共识处理时,会认为区块链中不存在作恶节点,而只存在故障节点。
在示出的一种实施方式中,上述区块链具体可以是一个由若干可信的金融机构作为联盟成员构成的联盟链。而该联盟链中具有资产对象发布权限的金融机构,可以通过在联盟链上发布智能合约(合约对象)的形式,在平台中创建一种新增的资产类型,并可以在联盟链中对该新增的资产类型进行公开发布。
其中,金融机构在联盟链里发布智能合约的具体过程,在本说明书中不再进行详述,本领域技术人员可以参考相关技术中的记载;
例如,在实际应用中,金融机构可以基于持有的私钥,向联盟链发布一笔交易的形式,向联盟链发布创建完成的智能合约。而联盟链中各联盟成员在通过管理的节点设备收到其它金融机构发布的交易时,可以基于联盟链的共识算法,对最近一段时间内联盟链中发布的交易进行共识处理,并在共识处理完成后,将该交易发布的智能合约收录至联盟链的分布式数据库中。
金融机构发布在联盟链中的与新增的资产类型对应的智能合约中,可以预先声明用于创建资产对象的执行程序。金融机构可以作为资产发布者可以通过调用上述智能合约中声明的执行程序,来在线创建一笔或者多笔待发布的目标资产对象,然后将创建的目标资产对象的原始信息在本地进行保存;
例如,在实际应用中,资产发布者可以将创建的目标资产对象的原始信息(比如资产类型信息、资产数量等)以凭证的形式,在本地进行保存。
资产发布者在完成上述目标资产对象的创建后,可以基于本地保存的上述目标资产对象的原始信息,进一步构建资产发布交易,然后将该资产发布交易向区块链进行发送,来发布该目标资产对象。
其中,需要说明的是,在实际应用中,在一些基于区块链搭建的数字资产系统中,通常仅会允许一些可信的资产发布方,发布特定的一种或者多种类型的资产对象;
例如,在基于区块链的外汇兑换系统中,能够在区块链上发布的数字资产可能包括多种类型的外汇资产;而一些信誉高的金融机构可作为资产发布方,可能仅允许在区块链上发布特定的一种或者多种外汇资产,以提供流动性。比如,某银行的香港分行作为资产发布方,可能只允许在外汇兑换系统中发布香港在岸的港币资产、香港在岸的美元资产。
而且,出于隐私保护的目的,可能还需要对所发布的目标资产对象的资产类型、以及与目标资产对象相关的其它形式的隐私数据进行隐藏;
例如,除了可能需要对所发布的目标资产对象的资产类型进行隐藏以外,还可能需要对发布的目标资产对象的资产数量、以及资产发布方的身份进行隐藏。
基于此,在本说明书中,资产发布者在区块链上发布已经创建完成的上述目标资产对象时,可以不再将该目标资产对象的资产类型等隐私数据直接携带在构建的资产发布交易中,上述资产发布者可以作为零知识证明的证明方,至少将需要发布的该目标资产对象的资产类型作为输入数据,输入至承诺函数进行计算得到承诺值,并采用区块链搭载的零知识证明算法,生成用于对上述承诺值进行零知识证明的零知识证据,然后将生成的上述承诺值以及上述零知识证据,携带在构建出的资产发布交易中在区块链进行发送,来发布该目标资产对象。
1)承诺值的生成
上述承诺函数,是一种在密码学、安全、隐私保护领域经常使用的,用于在不泄露原始数据情况下对原始数据进行承诺的单向函数。承诺函数的输出值称为承诺值(或者简称承诺)。基于单向函数的特性,将原始数据输入承诺函数计算得到承诺值后,从承诺值无法通过反向计算还原出原始数据。同时,无法找到两个不同的原始数据,使得它们的承诺值相等。
例如,在示出的一种实现方式中,上述承诺函数通常可以采用哈希函数;在这种情况下,上述承诺值则可以是至少将需要发布的该目标资产对象的资产类型作为输入数据,输入至哈希函数进行计算得到的哈希值。
需要说明的是,在本说明书中,在基于承诺函数计算上述承诺值时所采用的输入数据的具体内容,通常取决于在发布目标资产对象时需要隐藏的内容。
在实际应用中,承诺函数的输入数据除了可以包含需要隐藏的上述目标资产对象的资产类型以外,还可以包含诸如上述目标资产对象的资产数量、上述目标资产对象的接收方公钥(接收方可以是资产发布者,也可以是第三方)、以及还可以包含生成的随机数,等等,在本说明书中不再进行一一列举。
2)零知识证据的生成
在本说明书中,区块链搭载的零知识证据算法的算法类型,在本说明书中不进行特别限定;
例如,在示出的一种实施方式中,区块链可以搭载诸如zksnark算法、zkstark算法等通用的零知识证明算法;比如,在实现时,可以将zksnark算法、zkstark算法等零知识证明算法的算法逻辑相关的执行代码,植入智能合约发布到区块链中;进而,后续可以通过调用智能合约,执行智能合约中植入的零知识证明算法的算法逻辑相关的执行代码,来完成proof的生成,以及proof的零知识验证等零知识证明过程。
其中,区块链搭载的零知识算法,通常可以包括密钥生成算法、proof生成算法、以及proof验证算法。密钥生成算法负责计算生成证明密钥(可以作为生成proof的输入数据)和验证密钥(可以作为验证proof的输入数据);proof生成算法负责生成proof;而proof验证算法则负责验证proof,得到true或者false的验证结果。
例如,以zksnark算法为例,zksnark算法由G、P、V三种算法组成。G算法为一个密钥生成器,负责生成证明密钥和验证密钥;P算法负责生成proof,V算法负责对P算法生成的proof进行验证,得到true或者false的验证结果。
其中,需要说明的是,资产发布者在基于区块链搭载的零知识证据生成算法计算proof时,所采用的输入数据的具体内容,通常取决于最终需要进行零知识证明的论断。
在本说明书中,最终需要进行零知识证明的论断具体可以包括,上述目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型。
当然,最终需要进行零知识证明的论断的具体内容,通常取决于用户的具体需求,在实际应用中,最终需要进行零知识证明的论断也可以包括除了以上描述的论断以外的其它论断,在本说明书中不再进行一一列举。
(1)proof的生成方式一
在示出的一种实施方式中,基于以上需要零知识证明的论断,资产发布者在基于零知识证据生成算法计算proof时所采用的输入数据的具体内容,则至少可以包括通过承诺函数计算得到的承诺值,和允许该资产发布者发布的合法资产类型。
也即,资产发布者至少需要将上述承诺值,和允许该资产发布者发布的合法资产类型作为输入数据,输入至零知识证据生成算法进行计算,来生成用于对上述承诺值进行零知识证明的proof。
(1)proof的生成方式二
在示出的另一种实施方式中,上述节点设备还可以在本地维护用于验证上述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型的验证规则;
而在这种情况下,基于以上需要零知识证明的论断,资产发布者在基于零知识证据生成算法计算proof时所采用的输入数据的具体内容,则还需要包括与上述验证规则相关的验证数据。
也即,资产发布者至少需要将与上述验证规则相关的验证数据,输入至零知识证据生成算法进行计算,来生成用于对上述承诺值进行零知识证明的proof。
其中,需要说明的是,上述资产发布者在区块链发布上述目标资产对象时,除了可以在交易中对所发布的目标资产对象的资产类型进行隐藏以外,在实际应用中,上述区块链也可以对交易发布者的身份信息进行有选择的隐藏。
在示出的一种实施方式中,如果上述区块链不支持隐藏交易发布者的身份信息,此时发布上述目标资产对象的资产发布者的身份是完全公开的。
区块链中的节点设备在接收到上述资产发布者发送的资产发布交易时,仅需要通过零知识证明的方式,来验证目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型即可,并不需要对该资产发布者的身份也一并进行零知识证明(即验证该资产发布者为所有合法的资产发布者中的其中一个)。
在这种情况下,在计算上述零知识证据时的输入数据,并不需要额外的加入上述资产发布者的私钥。
在示出的一种实施方式中,如果上述区块链支持隐藏交易发布者的身份信息,此时发布上述目标资产对象的资产发布者的身份并不是完全公开的;区块链中的节点设备在接收到上述资产发布者发送的资产发布交易时,除了需要通过零知识证明的方式,来验证目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型以外,还需要进一步验证上述资产发布者是否持有与合法资产发布者的公钥对应的私钥。
也即,除了需要零知识证明该资产发布者发布的资产对象的资产类型为允许该资产发布者发布的合法资产类型以外,还要验证该资产发布者是否为所有合法资产发布者中的其中一个。
在这种情况下,在计算上述零知识证据时的输入数据,则需要额外的加入上述资产发布者的私钥。
3)针对承诺值的零知识验证
当区块链中的节点设备(比如参与共识的节点设备)接收到上述资产发布者发送的资产发布交易时,可以获取上述资产发布交易中携带的proof和承诺值等信息,基于上述proof发起对上述承诺值的零知识证明,以确认上述目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型。
具体地,上述节点设备作为零知识证明的验证方,至少将上述proof和上述承诺值,作为零知识验证算法的输入数据,输入至零知识证据验证算法中进行计算,然后基于零知识证据验证算法的输出结果,来确定上述目标资产对象的资产类型是否为允许上述资产发布者发布的合法资产类型;
例如,以zksnark算法为例,在对proof进行零知识验证时,可以将上述proof和上述承诺值作为输入数据,输入zksnark算法中的V算法进行计算;如果V算法输出结果为true,表示需要零知识证明的以上论断为真,此时上述目标资产对象的资产类型为允许上述资产发布者发布的合法资产类型;反之,V算法输出结果为false,表示需要零知识证明的以上论断为假,此时上述目标资产对象的资产类型则为不允许上述资产发布者发布的非法资产类型。
其中,需要指出的是,在本说明书中,区块链中的节点设备作为零知识证明的验证方,还可以在本地配置对以上论断进行零知识证明的验证规则。
以下对按照以上描述的proof的生成方式一和生成方式二来生成proof时,对以上论断进行零知识证明的具体过程进行详细描述。
在本说明书中,如果节点设备按照以上描述的proof的生成方式一来生成proof,作为零知识证明的验证方的节点设备,在采用零知识证据验证算法对上述承诺值进行零知识证明时所采用的输入数据的具体内容,除了需要包含上述承诺值和上述proof以外,还可以包括与上述节点设备在本地配置对以上论断进行零知识证明的验证规则相关的验证数据作为零知识证明的辅助数据。
当然,在一些场景下,如果将上述承诺值和上述proof作为输入数据,足以完成对以上论断的零知识证明,那么在采用上述零知识证据验证算法对上述承诺值进行零知识证明时所采用的输入数据中,与上述验证规则相关的验证数据也可以为空值。
其中,需要说明的是,以上描述的用于对以上论断进行零知识证明的验证规则的具体内容,在本说明书中不进行特别限定,以下结合具体的场景进行说明。
针对以上示出的proof的生成方式一,作为零知识证明的验证方的节点设备,可以通过零知识证明的方式,来验证上述目标资产对象的资产类型,是否匹配允许该资产发布者发布的合法资产类型,来确认上述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型。
在示出的一种实施方式中,作为零知识证明的验证方的节点设备,可以基于允许上述资产发布者发布的合法资产类型,构建一张资产类型列表,并将该资产类型列表在本地进行维护。
而上述验证规则具体可以包括:
验证上述目标资产对象的资产类型是否包含在上述资产类型列表中;如果是,确认上述目标资产对象的资产类型为允许上述资产发布者发布的合法资产类型。
在这种场景下,与上述验证规则相关的验证数据,则可以是上述资产类型列表。也即,上述节点设备可以将上述承诺值、proof以及上述资产类型列表作为输入数据,输入至零知识证据验证算法进行计算,来完成对上述承诺值的零知识证明。
在示出的另一种实施方式中,作为零知识证明的验证方的节点设备,也可以基于允许上述资产发布者发布的合法资产类型的哈希值,来构建一颗哈希树,并将该哈希树在本地进行维护。
而上述验证规则具体可以包括:
验证上述目标资产对象的资产类型的哈希值,是否包含在上述哈希树中;如果是,确认上述目标资产对象的资产类型为允许上述资产发布者发布的合法资产类型。
在这种场景下,与上述验证规则相关的验证数据,则可以是上述哈希树。上述节点设备可以将上述承诺值、proof以及上述哈希树,输入至零知识证据验证算法进行计算,来完成对上述承诺值的零知识证明。
其中,需要说明的是,在上述区块链支持隐藏交易发布者的身份信息,和不支持隐藏交易发布者的身份信息这两种情况下,上述节点设备本地维护的上述资产类型列表、上述哈希树的内容格式会存在一定的差异。
一方面,如果区块链支持隐藏交易发布者的身份信息,一个资产发布者允许发布的合法资产类型,可以以<资产发布者公钥,合法资产类型列表>对的形式表示。
在这种情况下,上述节点设备首先可以基于所有合法资产发布者允许发布的<资产发布者公钥,合法资产类型列表>对,生成上述资产类型列表;其次,还可以基于所有合法资产发布者允许发布的<资产发布者公钥,合法资产类型列表>对的哈希值,创建上述哈希树。
相应的,在这种情形下,上述节点设备需要零知识证明的,上述目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型的这一论断,则可以具体表示成:
上述资产发布者持有该合法资产发布者的公钥对应的私钥、上述目标资产对象的资产类型包含在与该资产发布者的公钥对应的<资产发布者公钥,合法资产类型列表>对中、并且,上述资产发布者的公钥对应的<资产发布者公钥,合法资产类型列表>对包含在上述哈希树中。
也即,在这种情形下,上述节点设备在零知识证明上述目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型的这一论断时,需要分别证明上述资产发布者持有与合法资产发布者的公钥对应的私钥、上述目标资产对象的资产类型包含在与该资产发布者的公钥对应的<资产发布者公钥,合法资产类型列表>对中、以及,上述资产发布者的公钥对应的<资产发布者公钥,合法资产类型列表>对包含在上述哈希树中。
另外,需要说明的是,在这种场景下,由于上述哈希树,是基于所有合法资产发布者允许发布的<资产发布者公钥,合法资产类型列表>对的哈希值创建的,因此在计算proof时的输入数据中,可以不再需要将基于资产发布者允许发布的合法资产类型列表输入零知识证据生成算法来计算proof,而是将该资产发布者允许发布的合法资产类型列表的哈希值,在上述哈希树中的路径作为输入数据输入至零知识证据生成算法进行计算。
通过这种方式,与将上述合法资产类型列表,或者基于该资产发布者允许发布的合法资产类型的哈希值创建的哈希树作为输入数据直接输入至零知识证据生成算法进行计算相比,可以降低输入数据的数据量,提高计算效率。
另一方面,如果区块链不支持隐藏交易发布者的身份信息,上述节点设备可以直接基于允许该资产发布者发布的合法资产类型生成上述资产类型列表;或者,基于基于允许该资产发布者发布的合法资产类型的哈希值创建上述哈希树即可。
在这种情形下,上述节点设备需要零知识证明的,上述目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型的这一论断,则不需要进行特殊表示,可以通过零知识证明,验证上述目标资产对象的资产类型,是否包含在上述资产类型列表;或者,验证上述目标资产对象的资产类型的哈希值,包含在上述哈希树中即可,不再赘述。
在本说明书中,如果节点设备按照以上描述的proof的生成方式二来生成proof,作为零知识证明的验证方的节点设备,在采用零知识证据验证算法对上述承诺值进行零知识证明时所采用的输入数据的具体内容,可以将包含与上述验证规则相关的验证数据。
其中,采用以上示出的proof的生成方式一和生成方式二时,上述验证规则的具体内容将存在一定的差异。
针对以上示出的proof的生成方式二,除了通过验证上述目标资产对象的资产类型,是否匹配允许该资产发布者发布的合法资产类型的方式,来确认上述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型以外,作为零知识证明的验证方的节点设备,也可以通过验证上述目标资产对象的资产类型,与上述目标资产发布者的公钥之间,是否满足特定的适配规则,来确认上述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型。
例如,对于每一个资产发布者而言,可以为能够允许该资产发布者的资产类型的ID,设置一个与合法资产发布者的公钥,或者与合法资产发布者的公钥的前缀或后缀,或者与上述合法资产发布者的公钥的哈希值,或者与上述合法资产发布者的公钥的哈希值的前缀或者后缀,完全相同的前缀或者后缀;从而一旦验证出上述目标资产对象的资产类型的前缀或者后缀,与合法资产发布者的公钥,或者与合法资产发布者的公钥的前缀或后缀,或者与所述合法资产发布者的公钥的哈希值,或者与所述合法资产发布者的公钥的哈希值的前缀或者后缀完全匹配,则可以确认该目标资产对象为允许上述资产发布者发布的合法资产类型。
在示出的一种实施方式中,作为零知识证明的验证方的节点设备,可以基于所有合法资产发布者的公钥,构建一张资产类型列表,并将该资产类型列表在本地进行维护。
而上述验证规则可以包括:
验证所述目标资产对象的资产类型的前缀(或者后缀),与合法资产发布者的公钥,或者与合法资产发布者的公钥的前缀(或者后缀),或者与所述合法资产发布者的公钥的哈希值,或者与所述合法资产发布者的公钥的哈希值的前缀(或者后缀)是否匹配;如果是,确认所述目标资产对象的资产类型为允许所述资产发布者发布的合法资产类型。
在这种场景下,与上述验证规则相关的验证数据,则可以是上述公钥列表,或者上述哈希树。上述节点设备可以将上述公钥列表或者上述哈希树作为输入数据,输入至零知识证据验证算法进行计算,来完成对上述承诺值的零知识证明。
其中,需要补充说明的是,如果上述区块链不支持对交易发布者的身份信息进行隐藏,由于交易发布者的身份信息是完全公开的,因此上述节点设备仅需要通过零知识证明的方式,来验证目标资产对象的资产类型是否为允许该资产发布者发布的合法资产类型即可,并不需要验证上述资产发布者是否持有与合法资产发布者的公钥对应的私钥;
因此,在这种场景下,可以将上述验证规则的算法逻辑植入到上述零知识证据证明算法中,然后基于交易发布者公开的身份信息,足以完成对以上论断的零知识证明,此时上述节点设备在对上述承诺值进行零知识证明时所采用的输入数据中,与上述验证规则相关的验证数据则可以为空值。
4)承诺值发布存证
在本说明书中,当上述节点设备通过零知识证明,确定上述目标资产对象的资产类型为允许上述资产发布者发布的合法资产类型,此时该节点设备可以将该承诺值发布至区块链进行存证。例如,该节点设备可以将该承诺值记录到区块链的分布式数据库中。
当然,如果上述节点设备通过零知识证明,确定上述目标资产对象的资产类型并不是允许上述资产发布者发布的合法资产类型,此时该节点设备可以直接对上述资产发布交易进行丢弃处理,同时可以向上述资产发布方返回一个发布失败的提示消息;例如,该提示消息具体可以是一条“您不具有发布该类型资产的权限”的文本提示。
在以上技术方案中,一方面,由于上述资产发布交易中仅携带至少将发布的目标资产对象的资产类型作为输入数据输入承诺函数计算得到的承诺值,并不会将上述目标资产对象的资产类型以明文的形式携带在资产发布交易中,使得区块链可以隐藏资产发布者所发布的目标资产对象的资产类型,保护资产发布者的隐私;
另一方面,由于上述资产发布交易中还携带了用于对上述承诺值进行零知识证明的零知识证据,使得区块链中的节点设备可以在隐藏资产发布者发布的资产类型的前提下,对上述零知识证据进行零知识证明,来验证上述资产发布者发布的目标资产对象的资产类型,是否为允许该资产发布者发布的合法资产类型。
与上述方法实施例相对应,本说明书还提供了一种基于区块链的资产发布装置的实施例。本说明书的基于区块链的资产发布装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图2所示,为本说明书的基于区块链的资产发布装置所在电子设备的一种硬件结构图,除了图2所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
图3是本说明书一示例性实施例示出的一种基于区块链的资产发布装置的框图。
请参考图3,所述基于区块链的资产发布装置30可以应用在前述图3所示的电子设备中,包括有:接收模块301、验证模块302和存证模块303。
其中,接收模块301,接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
验证模块302,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
存证模块303,如果是,将所述承诺值发布至所述区块链进行存证。
在本实施例中,所述零知识证据,由所述资产发布者至少将所述承诺值和允许所述资产发布者发布的合法资产类型作为输入数据,输入至所述区块链搭载的零知识证据生成算法进行计算生成。
在本实施例中,所述节点设备维护了验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型的验证规则;
所述零知识证据,由所述资产发布者至少将与所述验证规则相关的验证数据作为输入数据,输入至所述区块链搭载的零知识证据生成算法进行计算生成。
在本实施例中,如果所述区块链支持隐藏交易发布者的身份信息,所述零知识证据生成算法的输入数据还包括所述资产发布者的私钥。
在本实施例中,所述验证模块302:
如果所述区块链不支持隐藏交易发布者的身份信息,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
如果所述区块链支持隐藏交易发布者的身份信息,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述资产发布者是否持有与合法资产发布者的公钥对应的私钥;以及,验证所述目标资产对象的资产类型是否为允许所述合法资产发布者发布的合法资产类型。
在本实施例中,所述验证模块302:
至少将所述零知识证据,以及所述承诺值,作为零知识证据验证算法的输入数据,输入至零知识证据验证算法进行计算;
基于所述零知识证据验证算法的输出结果,确认所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型。
在本实施例中,所述节点设备配置了验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型的验证规则;所述输入数据还包括与所述验证规则相关的验证数据。
在本实施例中,所述节点设备维护了由允许所述资产发布者发布的合法资产类型构建的资产类型列表;
所述验证规则包括:验证所述目标资产对象的资产类型是否包含在所述资产类型列表中;如果是,确认所述目标资产对象的资产类型为允许所述资产发布者发布的合法资产类型;
所述验证数据包括:所述资产类型列表。
在本实施例中,所述节点设备维护了由允许所述资产发布者发布的合法资产类型的哈希值构建的哈希树;
所述验证规则包括:验证所述目标资产对象的资产类型的哈希值是否包含在所述哈希树中;如果是,确认所述目标资产对象的资产类型为允许所述资产发布者发布的合法资产类型;
所述验证数据包括:所述哈希树。
在本实施例中,所述节点设备维护了由所有合法资产发布者的公钥构建的公钥列表;或者,由所有合法资产发布者的公钥的哈希值构建的哈希树;
所述验证规则包括:
验证所述目标资产对象的资产类型的前缀或者后缀,与合法资产发布者的公钥,或者与合法资产发布者的公钥的前缀或后缀,或者与所述合法资产发布者的公钥的哈希值,或者与所述合法资产发布者的公钥的哈希值的前缀或者后缀是否匹配;如果是,确认所述目标资产对象的资产类型为允许所述资产发布者发布的合法资产类型;
所述验证数据包括所述公钥列表,或者所述哈希树。
在本实施例中,所述承诺函数为哈希函数;所述区块链搭建的零知识证明算法为zksnark算法,或者zkstark算法。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与上述方法实施例相对应,本说明书还提供了一种电子设备的实施例。该电子设备包括:处理器以及用于存储机器可执行指令的存储器;其中,处理器和存储器通常通过内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的资产发布的控制逻辑对应的机器可执行指令,所述处理器被促使:
接收资产发布者发送的资产发布交易;其中,所述资产发布交易包括:至少将所述资产发布者发布的目标资产对象的资产类型作为输入数据输入至承诺函数进行计算生成的承诺值;以及,用于对所述承诺值进行零知识证明的零知识证据;
基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
如果是,将所述承诺值发布至所述区块链进行存证。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的资产发布的控制逻辑对应的机器可执行指令,所述处理器还被促使:
如果所述区块链不支持隐藏交易发布者的身份信息,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型;
如果所述区块链支持隐藏交易发布者的身份信息,基于所述零知识证据发起对所述承诺值的零知识证明,验证所述资产发布者是否持有与合法资产发布者的公钥对应的私钥;以及,验证所述目标资产对象的资产类型是否为允许所述合法资产发布者发布的合法资产类型。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的资产发布的控制逻辑对应的机器可执行指令,所述处理器还被促使:
至少将所述零知识证据,以及所述承诺值,作为零知识证据验证算法的输入数据,输入至零知识证据验证算法进行计算;
基于所述零知识证据验证算法的输出结果,确认所述目标资产对象的资产类型是否为允许所述资产发布者发布的合法资产类型。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。