CN115758332A - 一种交易分组方法和区块链节点 - Google Patents
一种交易分组方法和区块链节点 Download PDFInfo
- Publication number
- CN115758332A CN115758332A CN202211521344.8A CN202211521344A CN115758332A CN 115758332 A CN115758332 A CN 115758332A CN 202211521344 A CN202211521344 A CN 202211521344A CN 115758332 A CN115758332 A CN 115758332A
- Authority
- CN
- China
- Prior art keywords
- transaction
- tee
- transactions
- privacy
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种交易分组方法和区块链节点,所述方法由区块链系统中的节点执行,节点中包括可信执行环境TEE,所述方法包括:接收多个交易,多个交易中包括非隐私交易和隐私交易;在TEE的外部生成所述非隐私交易的读写集;TEE对隐私交易对应的密文解密,基于解密得到的明文生成隐私交易的读写集;在TEE的外部基于隐私交易的读写集和非隐私交易的读写集对多个交易进行分组。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种交易分组方法和区块链节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
区块链中可引入可信执行环境(Trusted Execution Environment,TEE),以用于保护隐私数据。TEE可保证放入其中的代码和数据的安全性、机密性和完整性,同时,在TEE中基于明文数据进行运算,从而计算效率较高。
发明内容
本发明的目的在于提供一种交易分组方案,以实现并行执行包括隐私交易的多个交易。
本说明书第一方面提供一种交易分组方法,由区块链系统中的节点执行,所述节点中包括可信执行环境TEE,所述方法包括:
接收多个交易,所述多个交易中包括非隐私交易和隐私交易;
在所述TEE的外部生成所述非隐私交易的读写集;
所述TEE对所述隐私交易对应的密文解密,基于所述解密得到的明文生成所述隐私交易的读写集;
在所述TEE的外部基于所述隐私交易的读写集和所述非隐私交易的读写集对所述多个交易进行分组。
本说明书第二方面提供一种区块链节点,所述区块链节点中包括可信执行环境TEE,所述区块链节点还包括:
接收单元,用于接收多个交易,所述多个交易中包括非隐私交易和隐私交易;
第一生成单元,用于在所述TEE的外部生成所述非隐私交易的读写集;
第二生成单元,用于在所述TEE内对所述隐私交易对应的密文解密,基于所述解密得到的明文生成所述隐私交易的读写集;
分组单元,用于在所述TEE的外部基于所述隐私交易的读写集和所述非隐私交易的读写集对所述多个交易进行分组。
本说明书第三方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面所述的方法。
本说明书第四方面提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面所述的方法。
本说明书实施例中,通过在TEE中对隐私交易进行读写集分析,在TEE外对非隐私交易进行读写集分析,从而,在保护隐私交易的隐私数据的同时,可以基于全部交易的读写集对该多个交易进行分组,从而可以并行执行该多个交易,从而提高了区块链系统中的交易执行效率。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了一实施例中的区块链架构图;
图2为本说明书实施例中的在区块链中执行交易的过程示意图;
图3为本说明书实施例中的交易处理过程的示意图;
图4为本说明书实施例中的交易分组方法的流程图;
图5为本说明书实施例中判断交易是否为隐私交易的方法流程图;
图6为本说明书实施例中的一种区块链节点的架构图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
图1示出了一实施例中的区块链架构图。在图1所示的区块链架构图中,区块链100中包括N个节点,图1中示意示出节点1-节点8。节点之间的连线示意性的表示P2P(Peer toPeer,点对点)连接,所述连接例如可以为TCP连接等,用于在节点之间传输数据。这些节点上可存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点可通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点可存储相同的状态数据库。
区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(From)、接收字段(To)和数据字段(Data)。其中,在交易为转账交易的情况中,From字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,To字段表示接收该交易(即接收转账)的账户地址,Data字段中包括转账金额。
区块链中可提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链中每个节点分布式地运行智能合约代码。
在部署合约的场景中,例如,Bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93…”,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并存储合约代码,将合约代码的哈希值保存在该合约的状态存储中,从而合约创建成功。
在调用合约的场景中,例如,Bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即Bob)的账户的地址,to字段为上述“0x6f8ae93…”,即被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
区块链中可引入TEE,以用于保护隐私数据。TEE是基于CPU硬件的安全扩展、且与外部完全隔离的可信执行环境。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,比如软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARMTrustzone(信任区)和AMD PSP(Platform Security Processor,平台安全处理器)等。TEE可以起到黑箱作用,在TEE中执行的代码和数据即便是操作系统层都无法偷窥,只有通过代码中预先定义的接口才能对其进行操作。在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中复杂的密码学运算,计算过程效率几乎没有损失。因此,采用TEE技术可以在性能损失相对较小的前提下很大程度上满足区块链场景下的可信计算需求。
TEE技术中,以Intel SGX(Intel Software Guard Extension,以下简称SGX)技术为例加以说明。区块链节点可以基于SGX技术创建enclave(围圈或飞地),以作为用于执行区块链交易的TEE。其中,区块链节点利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),以用于驻留上述的Enclave。上述EPC对应的内存区域被CPU内部的内存加密引擎MEE(Memory EncryptionEngine)加密,该内存区域中的内容(enclave中的代码和数据)只有在CPU内核中才能够被解密,且用于加解密的密钥只有在EPC启动时生成并存储在CPU中。可见,Enclave的安全边界只包含其自身和CPU,无论是特权软件或非特权软件都无法访问Enclave,即便是操作系统管理员和VMM(Virtual Machine Monitor,虚拟机监视器;或称为Hypervisor)也无法影响Enclave中的代码和数据,因而具有极高的安全性。在上述安全性保障的前提下,CPU能够在Enclave中对数据进行处理,具有极高的运算效率,从而兼顾了数据安全性和计算效率。此外,对于进、出TEE的数据,可以是加密的,从而保障数据的隐私。
区块链节点(例如图1中的节点1)中在创建TEE之后,可将指定的程序代码加载到TEE中。该指定的程序代码如包括用于执行转账交易的程序代码、用于执行合约交易的虚拟机(EVM)的程序代码等。密钥管理服务器(KMS)可对TEE发起远程认证过程,TEE可在远程认证过程中获取用于加密的公私钥对。该过程具体如下文所述。
支持SGX的CPU在出厂前,会由厂商将部署秘钥(Provisioning Key)和信封秘钥(Sealing Key)烧录在CPU中的熔丝(fuse)寄存器内。熔丝寄存器是一种一次性编程的寄存器,一经烧入数据后即熔断熔丝,使得后续该寄存器中的内容仅可读而不再可写。Intel承诺烧录至熔丝寄存器内的秘钥是随机生成的;此外,还承诺一经烧录后关于烧入的秘钥的所有备份都会被销毁,即连Intel自身都不知道烧入的秘钥。Provisioning Key可以代表CPU中的部分信息,例如CPU的代号(例如第六代酷睿、第七代酷睿等)、型号(如桌面型、移动型等)之类。出于安全考虑,关于加密、签名等操作,并不直接使用Provisioning Key,而是采用由Provisioning Key衍生出的一个证明秘钥(attestation key)来进行,因此Provisioning Key起部署作用。
在KMS对区块链节点中的TEE发起远程认证之前,区块链节点中CPU可以检测是否存在attestation key。如果没有,则发起初始化。在初始化的过程中,可以基于秘钥生成协议,通过与Intel服务器的交互,并根据Provisioning Key的生成规则生成EPID(EnhancedPrivacy IDentification),该EPID可用作为attestation key,一般用作非对称加密秘钥中的私钥sk1。生成的该EPID可以存放于TEE中用于后续的签名操作。从而,Intel服务器可以通过交互过程得到该EPID对应的公钥pk1。特别的是,该EPID对应的公钥pk1并不会公开,仅由Intel服务器保管。这样的特性适于后续远程证明过程中由Intel的服务器(也称为IAS,即Intel Attestation Server)进行认证。
TEE在准备好用于签名的私钥sk1和公钥pk1之后,可通过如下步骤获取用于进行非对称加密的私钥sk2和公钥pk2:
步骤1:KMS对节点1中的TEE发起挑战,以要求其出示报告,以证明其中包括的程序代码是正确的代码,具体是,该报告用于证明该TEE中的EVM代码是正确的EVM代码;
步骤2:节点1中的TEE收到挑战之后,计算本地代码的hash1,生成报告quote,该quote中包括hash1,并使用上述密钥sk1对quote签名,得到签名sig1,将quote及其签名sig1发送给KMS;
节点1中的TEE与KMS还可以在步骤1和步骤2中通过迪菲-赫尔曼秘钥交换(Diffie–Hellman key Exchange,DH)算法或者椭圆曲线迪菲-赫尔曼秘钥交换(EllipticCurve Diffie–Hellman key Exchange,ECDH)算法协商得到的公钥pk2,在该情况下,在quote中还可以包括公钥pk2的哈希值hash2;
步骤3:由于KMS没有与sk1对应的公钥pk1,因此,KMS在接收到quote及其签名sig1之后,将quote及其签名sig1发送给IAS;
步骤4:IAS使用公钥pk1验证quote的签名sig1,将验证结果返回给KMS,其中,为了防止验证结果被中间截获或修改,IAS可使用自己的私钥对验证结果签名,得到签名sig2,并将验证结果及其签名sig2一起发送给KMS;
步骤5:KMS收到验证结果之后,如果验证结果指示sig1正确,则根据预先获取的EVM代码的正确哈希值对quote中的hash1验证,如果一致,则通过远程证明的验证,即KMS确认节点1的TEE中运行了正确的EVM,其中,KMS例如可从EVM的官方开发者下载到正确的EVM代码,并基于正确的EVM代码计算得到EVM代码的正确哈希值;
步骤6:KMS生成与公钥pk2对应的私钥sk2,使用公钥pk2对私钥sk2进行对称加密,并将密文私钥发送给节点1的TEE;
步骤7:节点1的TEE在接收到密文私钥之后,可使用公钥pk2对密文私钥进行解密,从而得到私钥sk2,并将私钥sk2与公钥pk2一起存储到TEE内。
在KMS将私钥sk2发送给节点1的TEE之后,用于向区块链发送交易的客户端可从KMS获取公钥pk2,例如KMS可将公钥pk2及KMS对公钥pk2的签名一起发送给客户端,从而客户端可基于KMS的签名对公钥pk2进行验证,以保证接收到正确的公钥pk2。客户端在接收到公钥pk2之后,可基于公钥pk2对将要发送到节点1的TEE的数据(例如交易)进行加密,将得到的密文发送给节点1的TEE,从而节点1的TEE可基于私钥对密文进行对密文解密,得到对应的明文。
区块链中的其他节点(例如节点2)的TEE可以同样地通过上述步骤1和步骤2,向KMS发送quote报告,并与KMS协商对称加密密钥k1,KMS在对节点2的TEE远程认证通过之后,可使用密钥k1对上述公钥pk2和私钥sk2进行对称加密,并将公钥pk2和私钥sk2的密文发送给节点2的TEE,从而节点2的TEE可获取与节点1中的TEE相同的公钥pk2和私钥sk2。这样,节点1可将从客户端接收的密文交易广播给区块链中的各个节点(包括节点2),区块链中的其他节点中的TEE通过与节点2相同的方法都可以安全地获取到公钥pk2和私钥sk2,因此,区块链中的其他节点的TEE也可以对该密文交易进行解密,并可以使用公钥pk2对输出TEE的数据进行加密。可以理解,区块链节点中的TEE不限于通过上述方式获取到用于进行非对称加密的公私钥对,而是可以通过已知的任何安全的方式获取到用于进行非对称加密的公私钥对。
图2为本说明书实施例中的在区块链中执行交易的过程示意图。如图2所示,在图2所示的区块链中,代表区块链节点的圆形中的灰色扇形指示区块链节点中包括的TEE,该TEE中运行有虚拟机(EVM),从而可用于执行合约交易。另外,如上文所述,区块链中各个节点中的TEE中预设了相同的用于加解密的公钥pk2和私钥sk2。
客户端发送至区块链中的交易可包括隐私交易,如交易Tx1(图中以浅灰色矩形块示出)和交易Tx2((图中以深灰色矩形块示出)),或者可以包括非隐私交易Tx3(图中以白色矩形块示出)。
其中,隐私交易是指用于保护用户隐私的交易。隐私交易例如可包括如下几种类型的隐私交易:
第1种隐私交易(例如图2中的交易Tx1),包括明文类型字段和密文内容。该种类型的隐私交易可以为普通转账交易、或者可以调用明文合约、或者可以调用隐私合约。该种隐私交易中的类型字段用于指示交易类型为密文类型,所述密文内容为对该交易的其他明文内容(包括from、to和data字段值)一起加密得到的密文。
所述隐私合约的合约状态以密文的形式存储(图2中在“存储”的“状态”中以灰色方块示出隐私合约的合约状态)。具体是,隐私合约的合约状态中的各个变量的状态分别以密文的形式存储,其中包括隐私合约的密文合约代码。该隐私合约的密文状态是TEE通过使用TEE的公钥pk2对合约变量的明文状态进行非对称加密得到的密文,或者可以是TEE通过基于TEE的公钥pk2对明文状态进行信封加密得到的数字信封。可以理解,隐私合约的密文状态不限于通过基于公钥pk2进行加密而获得。例如,在TEE中可基于公钥pk2和私钥sk2生成多对子公私钥对,隐私合约的密文状态可基于公钥pk2的子公钥进行加密而获得,其中,与该子公钥对应的子私钥也存储在TEE内。
在该种隐私交易包括对隐私合约的调用的情况中,由于该交易中对隐私合约的调用信息也被一起加密为密文,如此,该隐私交易不会泄露交易中对隐私合约中的函数的调用及对该函数传入的参数值,进一步保护了用户隐私。
其中,在该种隐私交易直接调用隐私合约的情况中,该交易中还包括用于指示所调用的合约为隐私合约的合约类型字段。在该种隐私交易调用明文合约且该明文合约调用隐私合约的情况中,该明文合约中还包括用于指示所调用的合约为隐私合约的合约类型字段。
第2种隐私交易(图2中未示出),该种隐私交易包括与from、to和data字段分别对应的明文类型字段,用于指示from、to和data字段中各个字段值是否为密文,即,该交易中的from、to和data字段中至少一个字段值为密文。该种隐私交易可以为普通转账交易、或者该可调用明文合约、或者可调用隐私合约。
第3种隐私交易(例如图2中的交易Tx2),该种隐私交易为明文交易,该交易中调用隐私合约。该种隐私交易中可包括类型字段,该类型字段用于指示交易类型为明文类型。其中,该种隐私交易中可直接调用隐私合约,在该情况中,该交易中包括用于指示所调用的合约为隐私合约的合约类型字段。或者该种隐私交易可调用明文合约,并在该明文合约中调用隐私合约,在该情况中,该明文合约中包括用于指示其调用的合约为隐私合约的合约类型字段。
其中,对于上述第1种和第2种隐私交易,隐私交易中的密文可以是客户端通过使用TEE的公钥pk2对明文进行非对称加密得到的密文,或者可以是客户端通过基于TEE的公钥pk2对明文数据进行信封加密得到的数字信封。所述信封加密是指,客户端自身生成对称加密密钥k2,用对称加密密钥k2对明文数据加密,得到密文数据,并使用公钥pk2对密钥k2进行非对称加密,得到密钥k2的密文,所述数字信封包括密文数据和密钥k2的密文。TEE在接收到数字信封之后,可首先使用私钥sk2对密钥k2的密文解密,得到密钥k2,然后使用密钥k2对密文数据解密,得到明文数据。通过信封加密,当明文数据较长的情况下,相对于通过非对称加密得到的密文,TEE可以以更短的时间基于数字信封得到明文数据,提高了TEE的处理效率。
可以理解,客户端发送的密文数据不限于通过基于公钥pk2进行加密而获得。例如,在TEE中可基于公钥pk2和私钥sk2生成多对子公私钥对,TEE可将子公钥安全地发送给客户端,从而客户端可基于公钥pk2的子公钥对数据进行加密得到密文数据,其中,与该子公钥对应的子私钥也存储在TEE内。
无论上述第1种隐私交易、第2种隐私交易和第3种隐私交易,都涉及与TEE内存储的私钥相关的密文,因此,每种隐私交易都需要在各个区块链节点中进行处理。
如图2中下部所示,区块链中的各个节点进行如下操作。首先,对接收到的交易进行交易共识,具体是,可由区块链中的某个节点(例如主节点)发出共识提议,该共识提议用于指示例如待执行的区块B中包括的顺序排列的多个交易。如图2中所示,在“交易共识”方框中,通过箭头连接的多个交易表示共识提议中顺序排列的多个交易,该多个交易中可包括非隐私交易和隐私交易。区块链中的多个节点可通过预设共识算法对共识提议进行共识。当前主流的共识机制包括:工作量证明(Proof of Work,POW)、股权证明(Proof ofStake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法等。其中,在各种共识算法中,通常在预设数目的节点对待共识的数据(即共识提议)达成一致之后,从而确定对该共识提议的共识成功。具体是,在PBFT算法中,对于N≥3f+1个共识节点,可容忍f个恶意节点,也就是说,当N个共识节点中2f+1个节点达成一致时,可确定共识成功。
在共识成功之后,各个节点可开始进行交易处理。具体是,以节点5为例,节点5可首先对交易进行分发。当多个交易中的隐私交易为上述第1种或第2种隐私交易的情况中,该隐私交易中的类型字段指示该交易中包括密文内容,从而,节点5将该交易发送给TEE,以在TEE中执行交易。当多个交易中的隐私交易为上述第3种隐私交易的情况中,在该隐私交易中包括的合约类型字段指示该交易中调用隐私合约的情况中,节点5将该交易发送给TEE,或者在该交易调用明文合约、且该明文合约的代码中包括用于指示该明文合约调用隐私合约的合约类型字段的情况中,节点5将该交易发送给TEE。节点5在确定交易不涉及密文内容和密文合约代码的情况中,在TEE外执行该交易。
具体是,在节点5的TEE内,如果隐私交易为上述第1种或第2种隐私交易,且隐私交易中不访问隐私参数(即在区块链中以密文形式存储状态的参数,例如隐私合约中定义的参数),TEE首先使用私钥sk2对密文内容解密。TEE中在对密文内容解密的同时,可使用预先获取的客户端的公钥对交易的签名进行验证,所述签名为客户端对包括密文的交易数据进行的数字签名。在交易验证通过之后,如果该交易为普通转账交易,则直接执行该交易,如果该交易为调用合约的交易,则在EVM中执行该合约交易。TEE中在执行交易的过程中,可根据交易中包括的读取操作从TEE外部的缓存中读取参数的明文状态,如果TEE外部的缓存中未存储该参数的明文状态,则通过数据交互操作从存储中读取状态。在完成对交易的执行之后,可基于该交易的写集更新TEE外部的缓存状态。在节点执行完区块的全部交易之后,可基于缓存的状态更新存储中的状态,即图2中“存储”中的“状态”。
如果该隐私交易为上述第3种隐私交易,TEE在对交易验证通过之后,与节点中的存储进行数据交互,即从存储读取隐私合约的密文代码,使用私钥sk2对密文代码解密,得到明文代码,然后在EVM中执行该明文合约代码。TEE中在执行该明文合约代码的过程中,可根据明文合约代码中包括的读取操作,读取隐私参数的密文状态。在完成对交易的执行之后,得到该交易的明文写集,并可将写集中的参数状态存储到TEE内的缓存中。在节点执行完区块的全部交易之后,可基于TEE内中缓存中存储的参数状态更新存储中的状态。
在节点5的TEE外部,在对非隐私交易的签名验证通过之后,如果该交易为普通转账交易,则直接执行该普通交易,如果该交易为合约交易,则在EVM中执行该合约交易,在执行交易的过程中,可从缓存中读取状态,或者如果缓存中没有该状态,则通过数据交互从“存储”中读取状态。
在交易处理完成之后,例如在完成对区块的全部交易的处理之后,区块链节点可如上文所述在存储中更新状态,并生成和存储区块,该区块中包括多个交易的交易体。所述存储例如包括磁盘、硬盘等非易失性存储介质。所述存储中的交易例如包括隐私交易(以浅灰色或深灰色矩形示意示出),所述状态中包括隐私合约的合约状态(以灰色方块示意示出)。
在图2所示的交易处理过程中,区块链节点可串行执行区块中的多个交易,对于该多个交易,按照共识提议中的交易排列顺序,顺序对交易进行分发,从而顺序执行该多个交易。
在一种实施方式中,为了提高交易执行的效率,区块链节点可分析各个交易的读写集,其中,交易的读集中包括交易中请求读取的参数的key,交易的写集中包括交易中请求写入的参数的key。对于普通转账交易,区块链节点可直接对该交易进行静态分析,从而获取该交易的读写集。对于合约交易,区块链节点可对该交易以及该交易调用的合约代码进行静态分析,从而获取该交易的读写集。区块链节点也可以通过其他方式得到交易的读写集,例如,可通过预执行各个交易,得到各个交易的读写集。
区块链节点在得到各个交易的读写集之后,可根据多个交易各自的读写集对多个交易进行分组,使得每两组中的交易不会访问相同的参数,即每两组中的交易不存在依赖关系,从而可根据多个交易的分组结果并行执行交易。
当区块链中同时处理非隐私交易和隐私交易的情况下,为了可以并行执行区块中的多个交易,当对区块中的多个交易进行读写集分析以用于对该多个交易分组时,在区块链节点中的TEE外部无法对隐私交易进行读写集分析,但是隐私交易和非隐私交易可能存在依赖关系,例如,隐私交易与非隐私交易有可能调用相同的明文合约,因此,需要针对该情况设计区块链节点中的交易分组方案。
图3为本说明书实施例中的交易处理过程的示意图。如图3所示,区块链节点在开始处理区块中的多个交易之后,可并行地对该多个交易进行分发,即,与上文类似地,将交易分发至TEE内或TEE外部。这里的交易分发不需要考虑共识提议中的多个交易的排列顺序。从而由TEE对各个隐私交易进行读写集分析,得到各个隐私交易的读写集,并将各个隐私交易的读写集发送到TEE外部。这里,由于隐私交易的读写集中包括交易请求读取或写入的参数的key,因此,各个隐私交易的读写集包括明文数据。同时,区块链节点中,在TEE外部对各个非隐私交易进行读写集分析,得到各个非隐私交易的读写集。然后,在TEE内和TEE外部完成对全部多个交易的读写集分析之后,在TEE外部可基于该多个交易各自的读写集对该多个交易进行分组。
可以理解,该说明书实施例中虽然描述在对多个交易共识达成之后再分别对非隐私交易和隐私交易进行读写集分析,但是本说明书实施例并不限于此。例如,区块链节点可以在接收到交易之后,就在TEE外或TEE内生成该交易的读写集。在区块链节点的共识达成之后,可在TEE外部根据共识提议中的交易,获取预先生成的该多个交易的读写集,以根据该多个交易的读写集对该多个交易进行分组。
在完成分组之后,区块链节点中可并行执行各个交易组,对于每个交易组,可串行执行该交易组中的多个交易。在执行交易组时,区块链节点中可对于该交易组中的多个交易串行地进行交易分发,即与图2中所示类似的,将非隐私交易分发至TEE外部执行,将隐私交易分发至TEE内执行。
通过本说明书实施例中的交易分组方案,可在区块链中对包括隐私交易的多个交易进行分组,从而可根据分组结果并行执行多个交易,提高了区块链中的交易执行效率。
图4为本说明书实施例中的交易分组方法的流程图。该方法可由区块链中的任一节点执行,如图2所示,各个区块链节点中包括TEE,且各个节点的TEE中存储有相同的公钥pk2和私钥sk2。从而,各个节点的TEE可执行一致的处理过程。下文中以节点1为例描述图4所示流程。
如图4所示,首先,在步骤S401,节点1接收多个交易。
如图2中所示,各个节点可分别从客户端接收交易,例如,节点8从客户端接收隐私交易Tx1、隐私交易Tx2,节点7从客户端接收到非隐私交易Tx3。各个节点在从客户端接收到交易之后,将该交易广播到区块链中,从而使得区块链中的多个节点都可以接收到该多个交易。例如,节点1中从区块链其它节点或者客户端接收到多个交易,该多个交易例如为对区块B的共识提议中的多个交易,该多个交易中包括隐私交易Tx1、隐私交易Tx2和非隐私交易Tx3,可以理解,该多个交易中还可以包括其他隐私交易和非隐私交易。
在一种实施方式中,节点1可从区块链中的主节点接收共识提议,该共识提议中可包括所述多个交易。也就是说,节点1通过接收共识提议而接收到所述多个交易。共识提议中包括顺序排列的多个交易。
在步骤S403,节点1在TEE外部生成非隐私交易的读写集。
参考图3,节点1在对多个交易的共识达成之后、或者接收到共识提议之后、或者在每接收到一个交易之后,为了对交易进行读写集分析,首先可根据交易的类型(隐私交易或非隐私交易)对该交易进行分发。
具体是,以区块链中包括上述第1种隐私交易和第3种隐私交易为例,图5为本说明书实施例中判断交易是否为隐私交易的方法流程图。如图5所示,节点1首先在步骤S51读取交易中的明文类型字段,确定该交易是否为密文类型。如果是,则确定该交易为隐私交易。如果否,节点1在步骤S52确定该交易是否调用合约,如果该交易未调用合约,即为转账交易,则可确定该交易为非隐私交易。如果该交易调用合约C1,节点1在步骤S53根据交易中的合约类型字段确定该该合约C1是否为隐私合约,如果是,这该交易为隐私交易。如果否,节点1在步骤S54确定合约C1中是否调用了隐私合约,也即根据合约C1中包括的合约类型字段判断合约C1调用的合约是否为隐私合约,如果是,则确定该交易为隐私交易。如果否,存在两种情况,第一种情况,合约C1中未调用其他合约,则可以确定该交易为非隐私交易;第二种情况,合约C1中调用了明文合约C2,则需要确定明文合约C2中是否调用了隐私合约,以确定交易是否为隐私交易(该情况在图5中未示出)。
节点1在确定接收的交易(例如交易Tx3)为非隐私交易的情况中,将交易Tx3分发至TEE外部进行处理。该交易Tx3可以为明文转账交易或明文的调用非隐私合约(即不调用隐私合约)的交易。具体是,参考图3,节点1中在TEE外部对交易Tx3的签名进行验证(图3中未示出),在验证通过之后对交易Tx3进行读写集分析,生成交易Tx3的读写集,并可在缓存中存储交易Tx3的读写集。如上文所述,在交易Tx3的读写集中,交易的读集中包括交易中请求读取的参数的key,交易的写集中包括交易中请求写入的参数的key。
在步骤S405,TEE对隐私交易对应的密文解密,生成隐私交易的读写集。
仍然参考图3,节点1在判断例如交易Tx1为隐私交易的情况中,将交易Tx1提供到TEE中。交易Tx1例如为上述第1种隐私交易,包括密文内容,TEE在对交易Tx1的签名进行验证(图3中未示出)的同时,可基于私钥sk2对密文内容解密,得到交易Tx1的明文内容,然后根据该明文内容对交易Tx1进行读写集分析。TEE中在生成交易Tx1的读写集之后,将交易Tx1的读写集提供到TEE外部,以在缓存中存储交易Tx1的读写集。
在一种实施方式中,在交易Tx1的读写集中,交易的读集中包括交易中请求读取的参数的key,交易的写集中包括交易中请求写入的参数的key。
在另一种实施方式中,由于隐私交易的读写集在传输到TEE外部可能会导致部分隐私泄露,为了进一步保护隐私数据,可在交易Tx1的读集和写集中增加与交易Tx1无关的虚假key,例如,可随机生成与交易Tx1无关的多个key分别添加到交易Tx1的读集和写集中,以混淆读写集中的真实的key。这样,区块链中的各个节点可能生成不同的虚假key,但是由于这些虚假key只在读写集分析过程中使用,基于该读写集分组有可能将本来可以并行执行的两个交易由于虚假k的关联性分组到一个组中,但是不会影响基于该分组结果执行交易得到的交易结果正确性,因此不会出现节点计算结果不一致的问题。
节点1在判断例如交易Tx2为第3种隐私交易的情况中,将交易Tx2提供到TEE中。该交易Tx2为明文类型的交易且调用隐私合约。TEE在对交易Tx2的签名进行验证的同时,可从存储中读取该隐私合约的密文合约代码,基于私钥sk2对该密文合约代码解密,得到明文合约代码,然后根据该明文合约代码对交易Tx2进行读写集分析。TEE中在生成交易Tx2的读写集之后,将交易Tx2的读写集提供到TEE外部,以在缓存中存储交易Tx2的读写集。
在步骤S407,节点1在TEE外部基于隐私交易的读写集和非隐私交易的读写集对多个交易分组。
节点1中在通过TEE以及TEE外部对区块B中的全部交易都进行读写集分析之后,在TEE外部的缓存中存储了区块B中全部交易各自的读写集。从而,节点1中可在TEE外部基于多个交易各自的读写集对该多个交易进行分组。例如,可基于该多个交易的读写集对该多个交易进行有向无环图(Directed Acyclic Graph,DAG)分析,从而根据DAG分析结果对该多个交易进行分组。具体是,可将该多个交易划分为多个交易组,每两个交易组不访问相同的参数,即,交易组之间不存在访问冲突,从而使得该多个交易组可并行执行。
在完成对多个交易组的分组之后,节点1中可开始并行执行多个交易组。其中,对于其中的一个交易组(例如交易组G1),节点1在TEE外部将交易组G1中的n个交易顺序分发到TEE外部或者TEE内执行。
具体是,假设交易组G1中包括顺序排列的交易Tx1、交易Tx3和交易Tx2。对于交易组G1中包括的交易Tx1,在节点1中,在TEE外部,可与上一次交易分发类似地,根据交易中的交易类型标识以及调用的合约的情况,确定交易Tx1为隐私交易,或者节点1在上一次交易分发时确定交易Tx1为隐私交易的情况中,可记录交易Tx1为隐私交易,从而,节点1在该第二次交易分发时,可根据已经记录的信息确定交易Tx1为隐私交易,并直接将交易Tx1提供至TEE内。
TEE中可存储有之前对交易Tx1的密文内容进行解密得到的明文交易内容,TEE根据该明文内容确定交易Tx1为普通的转账交易还是合约交易。如果是普通交易,则在TEE中直接执行,如果为合约交易,则在TEE中的虚拟机中执行。
TEE在执行交易Tx1的过程中,当需要读取参数值时,假设交易Tx1中未调用隐私合约,即交易Tx1仅可能对外部账户或者明文合约的参数进行读写,因此,交易Tx1有可能与非隐私交易存在访问冲突。在该情况下,例如交易Tx1中请求读取参数a的值(即状态),TEE首先从TEE外部的缓存中确定是否存储有参数a的值。其中,该外部的缓存可包括读缓存RB1和写缓存WB1(图3中未示出),读缓存RB1用于存储在执行交易过程中从存储读取的非隐私参数的状态,写缓存WB1用于存储根据交易更新的非隐私参数的状态,即该缓存中存储的参数状态为参数的最新状态。其中,所述非隐私参数指在区块链中以明文存储参数值的参数。
TEE可首先确定写缓存WB1中是否有参数a的值,在写缓存WB1中没有的情况下,再确定读缓存RB1中是否有参数a的值。如果确定读缓存RB1或写缓存WB1中存储有参数a的值,则直接从读缓存RB1或写缓存WB1中读取参数a的值,并根据读取的参数a的值执行交易Tx1。如果TEE外部的缓存中未存储有参数a的值,则TEE可通过存储接口从存储读取参数a的值,TEE在从存储读取参数a的值之后,可在读缓存RB1中存储参数a的值。
TEE中在执行完成交易Tx1之后,假设交易Tx1的写集中包括更新的参数b的值,TEE将参数b的键值对写入到TEE外部的写缓存WB1中,以使得缓存中维护的状态为参数最新状态。
节点1中在交易Tx1执行完成之后,再执行交易Tx3。当节点1确定交易Tx3为非隐私交易之后,节点1中在TEE外部执行交易Tx3。节点1在执行交易Tx3的过程中,如果需要读取参数,与上文执行交易Tx1类似地,首先在TEE外部的缓存中确定是否存储了该参数的值,如果有的话,则直接从缓存中读取该参数的值,如果没有的话,则从存储中读取该参数的值。当节点1在执行完成交易Tx3之后,可根据交易Tx3的写集更新缓存(即写缓存WB1)中的参数状态。
节点1在交易Tx3执行完成之后,执行交易Tx2。节点1在TEE外部确定交易Tx2为隐私交易之后,将交易Tx2提供至TEE内进行处理。
在一种情况中,假设交易Tx2中仅调用隐私合约,且交易Tx2在执行中读取和写入的参数都是隐私合约中定义的参数(下文称为隐私参数),在该情况下,交易Tx2读取和写入的隐私参数的值都是密文参数值,因此,非隐私交易不可能与交易Tx2存在访问冲突。在该情况下,可在TEE内维护读缓存RB2和写缓存WB2,读缓存RB2用于存储从存储读取的隐私参数的明文值,写缓存WB2中用于存储在执行完成交易之后根据交易写集更新的隐私参数的明文值。
TEE中在执行交易Tx2中需要读取隐私参数的值时,首先确定TEE内的缓存(包括读缓存RB2和写缓存WB2)中是否存储有该隐私参数的明文值,如果有的话,则可直接从缓存读取该明文值,并根据该明文值执行交易Tx2;如果没有的话,TEE可从存储读取隐私参数的密文值,在TEE内对该密文值解密,得到该隐私参数的明文值,同时,TEE可将读取的隐私参数的明文值存储到读缓存RB2中。
TEE在执行完成交易Tx2之后根据写集更新隐私参数的值,即在TEE内的写缓存WB2中存储写集中的隐私参数的明文值。
在另一种情况中,假设交易Tx2中既调用隐私合约,也调用非隐私合约,从而,交易Tx2访问的参数可能包括非隐私参数和隐私参数。对此,TEE可将非隐私参数的值更新到TEE外部的缓存中,将隐私参数的值更新到TEE内的缓存中。
在节点1中完成对区块B中的全部交易的执行之后,节点1可根据TEE外部写缓存中的非隐私参数的状态更新存储中的非隐私参数的状态,可根据TEE内写缓存中的隐私参数的状态更新存储中的隐私参数的状态。其中在该更新中,TEE首先对TEE内写缓存中的隐私参数的状态加密,得到各个隐私参数的密文状态,然后将各个隐私参数的密文状态更新到状态数据库中。
在一种实施方式中,节点1中在开始执行交易之前,对于分组得到的每个交易组,可在TEE外部可获取该交易组包括的全部交易的读写集中的读集中的多个参数的key,并从存储中读取该多个参数的值,将读取的多个参数的值存储到TEE外的读缓存RB1中。在该情况中,该多个参数中可包括多个非隐私参数和多个隐私参数,所读取到的多个参数值包括非隐私参数的明文值和隐私参数的密文值。这样,后续在TEE外部或TEE内执行该交易组包括的交易中首次读取参数的值时,可以从读缓存RB1中直接读取,而不用在执行过程中多次访问存储,尤其在节点1中分别通过两个分离的计算设备进行交易处理和数据存储的情况中,可大大提高交易处理速度。
具体是,TEE外部在执行例如交易Tx3时,当需要读取参数值时,首先从写缓存WB1中确定是否有该参数的值,如果有的话,则直接从写缓存WB1中读取该参数的值,如果没有的话,再从读缓存RB1中读取该参数的值,在执行完成交易Tx3之后,根据交易Tx3的写入的参数的值,更新写缓存WB1中的参数状态。
TEE内在执行例如交易Tx1时,当需要读取参数值时,首先从写缓存WB1中确定是否有该参数的值,如果有的话,则直接从写缓存WB1中读取该参数的值,如果没有的话,再从读缓存RB1中读取该参数的值,在执行完成交易Tx1之后,根据交易Tx1的写入的参数的值,更新写缓存WB1中的参数状态。
TEE内在执行例如交易Tx2时,当需要读取参数值时,首先从TEE内的写缓存WB2中确定是否有该参数的值,如果有的话,则直接从写缓存WB2中读取该参数的值,如果没有的话,再从读缓存RB1中读取该参数的值,在执行完成交易Tx2之后,根据交易Tx2的写入的参数的值,更新TEE内的写缓存WB2中的参数状态。
本说明书实施例中,通过在TEE中对隐私交易进行读写集分析,在TEE外对非隐私交易进行读写集分析,从而,在保护隐私交易的隐私数据的同时,可以基于全部交易的读写集对该多个交易进行分组,从而可以并行执行该多个交易,从而提高了区块链系统中的交易执行效率。
图6为本说明书实施例中的一种区块链节点的架构图,所述区块链节点用于执行如图4或图5所示的方法,所述区块链节点中包括可信执行环境TEE,所述区块链节点还包括:
接收单元61,用于接收多个交易,所述多个交易中包括非隐私交易和隐私交易;
第一生成单元62,用于在所述TEE的外部生成所述非隐私交易的读写集;
第二生成单元63,用于在所述TEE内对所述隐私交易对应的密文解密,基于所述解密得到的明文生成所述隐私交易的读写集;
分组单元64,用于在所述TEE的外部基于所述隐私交易的读写集和所述非隐私交易的读写集对所述多个交易进行分组。
在一种实施方式中,各个交易的读写集中包括该交易中请求读取的参数的名称和该交易中请求写入的参数的名称。
在一种实施方式中,所述隐私交易的读写集中还包括与所述隐私交易无关的参数的名称。
在一种实施方式中,所述隐私交易对应的密文包括所述隐私交易中包括的密文内容和/或所述隐私交易调用的隐私合约的密文代码。
在一种实施方式中,所述TEE中存储有对应的公钥和私钥,所述密文内容和所述密文代码通过基于所述TEE中存储的公钥加密而生成,
所述第二生成单元63具体用于:在所述TEE内基于所述私钥对所述密文内容和/或所述密文代码解密。
在一种实施方式中,所述区块链节点还包括:执行单元,用于并行执行通过分组得到的多个交易组,其中,在执行各个交易组时,在TEE外部执行所述非隐私交易,在所述TEE内执行所述隐私交易。
在一种实施方式中,所述执行单元具体用于:基于所述多个交易的读写集中的读集包括的多个非隐私参数的key,读取多个非隐私参数的值,将所述多个非隐私参数的值存储到所述TEE外部的缓存中,以用于执行所述多个交易。
在一种实施方式中,所述隐私交易中包括第一隐私交易,所述第一隐私交易中包括密文内容,且所述第一隐私交易访问的参数为非隐私参数,所述执行单元具体用于:对所述第一隐私交易中的密文内容解密,得到明文交易,读取所述明文交易请求读取的第一参数的值,基于所述第一参数的值执行所述明文交易,得到所述明文交易请求写入的第二参数的值,将所述第二参数的值提供到所述TEE外部,以存储到所述TEE外部的缓存中。
在一种实施方式中,所述执行单元具体用于:基于所述多个交易的读写集中的读集包括的多个隐私参数的key,读取多个隐私参数的值,将所述多个隐私参数的值存储到所述TEE内的缓存中,以用于执行所述隐私交易。
在一种实施方式中,所述隐私交易中包括第二隐私交易,所述第二隐私交易中调用隐私合约,所述执行单元具体用于:读取所述隐私合约的密文代码,对所述密文代码解密,得到所述明文代码,读取所述明文代码请求读取的第三参数的值,基于所述第三参数的值执行所述明文代码,得到所述明文代码请求写入的第四参数的值,在所述TEE内的缓存中存储所述第四参数的明文值。
在一种实施方式中,所述区块链节点还包括:提供单元,用于在接收多个交易之后,将所述多个交易中的隐私交易提供给TEE,所述TEE在生成所述隐私交易的读写集之后,将所述隐私交易的读写集提供到所述TEE外部。
在一种实施方式中,所述多个交易的第一交易中或所述第一交易调用的明文合约中包括明文的类型信息,所述提供单元具体用于:根据所述第一交易包括的类型信息确定所述第一交易为隐私交易,将所述第一交易提供给所述TEE。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行如图4或图5所示的方法。
本说明书实施例还提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现如图4或图5所示的方法。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本申请不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (16)
1.一种交易分组方法,由区块链系统中的节点执行,所述节点中包括可信执行环境TEE,所述方法包括:
接收多个交易,所述多个交易中包括非隐私交易和隐私交易;
在所述TEE的外部生成所述非隐私交易的读写集;
所述TEE对所述隐私交易对应的密文解密,基于所述解密得到的明文生成所述隐私交易的读写集;
在所述TEE的外部基于所述隐私交易的读写集和所述非隐私交易的读写集对所述多个交易进行分组。
2.根据权利要求1所述的方法,各个交易的读写集中包括该交易中请求读取的参数的名称和该交易中请求写入的参数的名称。
3.根据权利要求2所述的方法,所述隐私交易的读写集中还包括与所述隐私交易无关的参数的名称。
4.根据权利要求1或2所述的方法,所述隐私交易对应的密文包括所述隐私交易中包括的密文内容和/或所述隐私交易调用的隐私合约的密文代码。
5.根据权利要求4所述的方法,所述TEE中存储有对应的公钥和私钥,所述密文内容和所述密文代码通过基于所述公钥加密而生成,
所述TEE对所述隐私交易对应的密文解密包括:所述TEE基于所述私钥对所述密文内容和/或所述密文代码解密。
6.根据权利要求1或2所述的方法,还包括:并行执行通过分组得到的多个交易组,其中,在执行各个交易组时,在TEE外部执行所述非隐私交易,在所述TEE内执行所述隐私交易。
7.根据权利要求6所述的方法,所述并行执行通过分组得到的多个交易组包括:在TEE外部,基于第一交易组中包括的多个交易的读写集中的读集包括的多个参数的key,读取所述多个参数的值,将所述多个参数的值存储到所述TEE外部的缓存中,以用于执行所述第一交易组中的多个交易。
8.根据权利要求6或7所述的方法,所述隐私交易中包括第一隐私交易,所述第一隐私交易中包括密文内容,所述在所述TEE内执行所述隐私交易包括:所述TEE对所述第一隐私交易中的密文内容解密,得到明文交易,从所述TEE的外部读取所述明文交易请求读取的第一参数的值,基于所述第一参数的值执行所述明文交易,得到所述明文交易请求写入的第二参数的值,将所述第二参数的值提供到所述TEE外部,以存储到所述TEE外部的缓存中。
9.根据权利要求6或7所述的方法,所述隐私交易中包括第二隐私交易,所述第二隐私交易中调用隐私合约,所述在所述TEE内执行所述隐私交易包括:所述TEE从所述TEE的外部读取所述隐私合约的密文代码,对所述密文代码解密,得到明文代码,读取所述明文代码请求读取的第三参数的值,基于所述第三参数的值执行所述明文代码,得到所述明文代码请求写入的第四参数的值,在所述TEE内的缓存中存储所述第四参数的明文值。
10.根据权利要求9所述的方法,还包括:所述TEE在对所述多个交易中的全部隐私交易执行完成之后,获取所述TEE内的缓存中存储的多个参数的明文值,分别对所述多个参数的明文值加密,得到所述多个参数的密文值,将所述多个参数的密文值存储到所述TEE的外部。
11.根据权利要求1所述的方法,还包括:在接收多个交易之后,将所述多个交易中的隐私交易提供给TEE,所述TEE在生成所述隐私交易的读写集之后,将所述隐私交易的读写集提供到所述TEE外部。
12.根据权利要求1所述的方法,所述多个交易中的第一交易包括明文的类型信息,所述方法还包括:根据所述第一交易包括的类型信息确定所述第一交易是否为隐私交易。
13.根据权利要求12所述的方法,所述多个交易中的第二交易包括明文的类型信息,所述第二交易调用的明文第一智能合约中包括调用的第二智能合约的类型信息,所述方法还包括:根据所述第二交易包括的类型信息和所述第一智能合约中包括的类型信息,确定所述第二交易是否为隐私交易。
14.一种区块链节点,所述区块链节点中包括可信执行环境TEE,所述区块链节点还包括:
接收单元,用于接收多个交易,所述多个交易中包括非隐私交易和隐私交易;
第一生成单元,用于在所述TEE的外部生成所述非隐私交易的读写集;
第二生成单元,用于在所述TEE内对所述隐私交易对应的密文解密,基于所述解密得到的明文生成所述隐私交易的读写集;
分组单元,用于在所述TEE的外部基于所述隐私交易的读写集和所述非隐私交易的读写集对所述多个交易进行分组。
15.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-13中任一项的所述的方法。
16.一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-13中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211521344.8A CN115758332A (zh) | 2022-11-30 | 2022-11-30 | 一种交易分组方法和区块链节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211521344.8A CN115758332A (zh) | 2022-11-30 | 2022-11-30 | 一种交易分组方法和区块链节点 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115758332A true CN115758332A (zh) | 2023-03-07 |
Family
ID=85341342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211521344.8A Pending CN115758332A (zh) | 2022-11-30 | 2022-11-30 | 一种交易分组方法和区块链节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115758332A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116382815A (zh) * | 2023-06-05 | 2023-07-04 | 安徽中科晶格技术有限公司 | 基于dag模型的合约并行化方法 |
-
2022
- 2022-11-30 CN CN202211521344.8A patent/CN115758332A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116382815A (zh) * | 2023-06-05 | 2023-07-04 | 安徽中科晶格技术有限公司 | 基于dag模型的合约并行化方法 |
CN116382815B (zh) * | 2023-06-05 | 2023-10-10 | 安徽中科晶格技术有限公司 | 基于dag模型的合约并行化方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110245506B (zh) | 基于区块链的智能合约管理方法及装置、电子设备 | |
CN109831298B (zh) | 区块链中安全更新密钥的方法及节点、存储介质 | |
CN110032883B (zh) | 区块链中实现隐私保护的方法、系统和节点 | |
CN110020855B (zh) | 区块链中实现隐私保护的方法、节点、存储介质 | |
CN109936626B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 | |
CN109886682B (zh) | 区块链中实现合约调用的方法及节点、存储介质 | |
CN110033267B (zh) | 区块链中实现隐私保护的方法、节点、系统和存储介质 | |
CN110008735B (zh) | 区块链中实现合约调用的方法及节点、存储介质 | |
CN110032885B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 | |
CN110266467B (zh) | 基于区块高度实现动态加密的方法及装置 | |
CN110060054B (zh) | 区块链中实现隐私保护的方法、节点、系统和存储介质 | |
CN110020549B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 | |
CN110263544B (zh) | 结合交易类型和判断条件的收据存储方法和节点 | |
CN110266644B (zh) | 结合代码标注与交易类型的收据存储方法和节点 | |
CN110245947B (zh) | 结合交易与用户类型的条件限制的收据存储方法和节点 | |
CN110020856B (zh) | 区块链中实现混合交易的方法、节点和存储介质 | |
CN110245944B (zh) | 基于用户类型的收据存储方法和节点 | |
CN110245942B (zh) | 结合用户类型和判断条件的收据存储方法和节点 | |
CN110033266B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 | |
CN110750329B (zh) | 基于fpga实现虚拟机运算的方法及装置 | |
CN110716728B (zh) | Fpga逻辑的可信更新方法及装置 | |
CN110276610B (zh) | 基于交易偏移量实现动态加密的方法及装置 | |
CN110245943B (zh) | 基于判断条件的收据存储方法和节点 | |
CN110033265B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 | |
CN110008737B (zh) | 区块链中实现隐私保护的方法、节点和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |