交易调度方法及装置
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种交易调度方法及装置。
背景技术
区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。
目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
可信执行环境(Trusted Execution Environment,TEE)是另一种解决隐私问题的方式。TEE可以起到硬件中的黑箱作用,在TEE中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与TEE相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,包括软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARM Trustzone(信任区)和AMDPSP(Platform Security Processor,平台安全处理器)。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种交易调度方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种交易调度方法,包括:
区块链节点确定收到的隐私交易的数据量;
所述区块链节点通过单次函数调用将数据量之和不大于预设阈值的多笔隐私交易打包传入可信执行环境;
其中,在传入数据量不大于所述预设阈值的情况下,所述单次函数调用产生的第一开销量与传入数据量无关,在传入数据量大于所述预设阈值的情况下,所述单次函数调用产生的第二开销量大于所述第一开销量且正相关于传入数据量。
根据本说明书一个或多个实施例的第二方面,提出了一种交易调度装置,包括:
确定单元,使区块链节点确定收到的隐私交易的数据量;
传输单元,使所述区块链节点通过单次函数调用将数据量之和不大于预设阈值的多笔隐私交易打包传入可信执行环境;
其中,在传入数据量不大于所述预设阈值的情况下,所述单次函数调用产生的第一开销量与传入数据量无关,在传入数据量大于所述预设阈值的情况下,所述单次函数调用产生的第二开销量大于所述第一开销量且正相关于传入数据量。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种区块链节点对交易进行处理的示意图。
图2是一示例性实施例提供的一种交易调度方法的流程图。
图3是一示例性实施例提供的一种创建智能合约的示意图。
图4是一示例性实施例提供的一种调用智能合约的示意图。
图5是一示例性实施例提供的一种传入数据量与开销量之间的变化关系示意图。
图6是一示例性实施例提供的一种设备的结构示意图。
图7是一示例性实施例提供的一种交易调度装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,区块链网络中的节点出于隐私保护的目的,均可能通过区块链与TEE(Trusted Execution Environment,可信执行环境)相结合的解决方案,在TEE内执行收到的交易。例如图1所示,区块链节点包括左侧的常规执行环境和右侧的可信执行环境(以下简称TEE),客户端(或其他来源)提交的交易首先进入常规执行环境中的“交易调度”接口进行类型识别,将识别出的明文交易留在常规执行环境中进行处理(对应于左侧的“交易执行”环节),而将识别出的隐私交易传递至TEE中进行处理(对应于右侧的“交易执行”环节)。
TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。因此现在的TEE技术都引入了远程证明机制,由硬件厂商(主要是CPU厂商)背书并通过数字签名技术确保用户对TEE状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括Intel SGX,AMD SEV在内的商用TEE也都提供了内存加密技术,将可信硬件限定在CPU内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(SGX)等TEE技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在TEE中运行的应用程序受到安全保护,几乎不可能被第三方访问。
以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(BasicInput Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的秘钥也传入围圈。然后,在CPU的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
在相关技术中,区块链节点可以通过ECall操作对enclave内部实现函数调用,从而将隐私交易从常规执行环境传递至TEE中。那么,当区块链节点频繁收到交易时,每一交易均需单独通过ECall操作传递至TEE中,可能形成相对较大的开销,影响区块链节点的交易处理效率。
以下结合实施例说明本说明书提供的一种交易调度方法,可以相对减小对隐私交易进行传递时产生的开销。
图2是一示例性实施例提供的一种交易调度方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤202,区块链节点确定收到的隐私交易的数据量。
隐私交易可以理解为存在隐私需求的交易;除了隐私交易之外,区块链节点可能接收到明文交易,明文交易为不存在隐私需求的交易。隐私需求可以通过多种方式予以表达,本说明书并不对此进行限制。例如,每笔交易可以包含类型字段,该类型字段用于标注相应的交易属于隐私交易还是明文交易。如前所述,区块链节点可以在如图1所示的常规执行环境中的“交易调度”接口识别交易类型。在相关技术中,例如在以太坊网络中,交易通常包含to、value、data等字段;而本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型:例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。再例如,用户可以在创建交易的过程中在交易内添加加密标识,以表达上述的隐私需求。那么,当检查到交易中包含加密标识时,区块链节点可以判定该交易为隐私交易,否则判定该交易为明文交易。又例如,区块链节点可以识别交易所需调用的智能合约的类型,当被调用的智能合约属于隐私类型(比如智能合约包含隐私标识,或者智能合约的代码中包括隐私标识标注的合约状态等)时,可以判定该交易属于隐私交易,否则判定该交易为明文交易。
区块链节点收到的交易可以来自于客户端;例如,用户可以在客户端生成该交易后,通过客户端将该交易提交至上述区块链节点。或者,交易可由其他区块链节点转发至上述区块链节点;例如,用户可以在客户端上生成该交易后,通过客户端将该交易提交至其他区块链节点,以由其他区块链节点将该交易转发至上述区块链节点。或者,用户可以直接在区块链节点处生成上述交易。
譬如在采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的区块链网络中,每一区块链节点在收到客户端提交的该交易后,立即扩散(如广播)至以太坊网络中的其余区块链节点。因此,上述区块链节点收到的交易可以包括其他区块链节点在区块链网络中扩散的交易。
譬如在采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的区块链网络中,记账节点在本轮记账前已经商定好。假定上述区块链节点被确定为记账节点,使得其他区块链节点在收到客户端提交的该交易后,由于自身并非记账节点,因而需要将该交易发送至已确定的记账节点,使得该记账节点在进一步的共识阶段将交易(包括该交易)打包发送至各个验证节点。而当上述区块链节点之外的另一区块链节点为已确定的记账节点时,其余区块链节点收到客户端提交的交易后,可以将交易转发至该另一区块链节点;然后,该另一区块链节点可以在共识阶段将上述交易(或还包括其他交易)打包发送至各个验证节点,而当上述区块链节点为验证节点时,即可收到该另一区块链节点所转发的交易。
隐私交易的数据量可以理解为该隐私交易的大小,即该隐私交易所需占用的内存大小,比如5字节(byte)或其他任意大小,这取决于隐私交易自身所含内容的多少。类似地,明文交易同样存在相应的数据量,但由于明文交易可以直接在区块链节点的常规执行环境内被处理、无需通过函数调用传递至TEE,因而在本实施例中尚未关注于明文交易的数据量。
步骤204,所述区块链节点通过单次函数调用将数据量之和不大于预设阈值的多笔隐私交易打包传入可信执行环境。
区块链节点通过函数调用将隐私交易传入TEE中,比如通过前述的ECall操作实现该函数调用。在相关技术中,区块链节点每次执行函数调用仅将一笔隐私交易传入TEE中;而在本实施例中,区块链节点仅执行一次函数调用,即上述的单次函数调用,即可将多笔隐私交易打包传入TEE中,减少了函数调用的执行次数。
通过试验测试区块链节点采用函数调用将隐私交易传入TEE的过程,本说明书中发现了传入数据量与开销的关系:在传入数据量不大于预设阈值的情况下,单次函数调用产生的第一开销量与传入数据量无关,在传入数据量大于预设阈值的情况下,单次函数调用产生的第二开销量大于第一开销量且正相关于传入数据量。因此,本说明书中通过单次函数调用将多笔隐私交易打包传入TEE中,并确保传入数据量(即多笔隐私交易的数据量之和)不大于预设阈值,可使该单次函数调用的开销仅为第一开销量;假定隐私交易的数量为N,上述单次函数调用的开销仅为第一开销量S,而分别通过N次函数调用将N笔隐私交易传入TEE时,所产生的开销为S×N,即本说明书的技术方案节省了S×(N-1)的开销量。至少在一部分实施例中,上述预设阈值可以不大于区块链节点上的EPC的预分配空间大小,因而可以根据EPC的预分配空间大小来确定出上述预设阈值的取值;当然,可以通过实际测试确定出预设阈值的取值,该取值可能与EPC的预分配空间大小有关或无关,本说明书并不对此进行限制。
其中,在传入数据量满足不大于预设阈值的情况下,在传入数据量发生变化时,第一开销量的取值不变或基本不变(变化较小,比如小于或远小于第二开销量的变化情况;其中,第一开销量的变化属于非规律性的偶然变化)。
区块链节点可以采用缓冲机制对收到的隐私交易进行管理,以形成由隐私交易构成的缓冲队列,这些隐私交易可以按照接收时刻从早到晚的顺序依次排列于缓冲队列中,等待区块链节点通过函数调用将这些隐私交易传入TEE中。其中,区块链节点在收到任一隐私交易后,可以将该任一隐私交易的数据量与缓冲队列中的所有隐私交易的数据量相加,并将得到的相加值与上述的预设阈值进行比较:在相加值不大于预设阈值的情况下,表明单次函数调用能够承载的传入数据量还可以更大,因而区块链节点可以将任一隐私交易添加至缓冲队列中,等待与后续收到的隐私交易一并打包传入TEE中;在相加值大于预设阈值的情况下,表明单次函数调用无法将区块链节点已收到且尚未传入TEE的所有隐私交易(即缓冲队列中的所有隐私交易和最近收到的上述任一隐私交易)均传入TEE中,但由上文所述可以确定单次函数调用必然能够承载缓冲队列中的所有隐私交易,因而区块链节点可以将缓冲队列中的所有隐私交易打包传入可信执行环境、使得缓冲队列被清空,然后将上述的任一隐私交易添加至已清空的缓冲队列中,该任一隐私交易被作为缓冲队列的首个隐私交易,并等待与后续收到的隐私交易一并打包传入TEE中。
通过上述方式,区块链节点可以在每次实施单次函数调用时,都尽可能地向TEE内传入更多的隐私交易,从而最大程度上降低区块链节点由此产生的开销。但在一些较为特殊的情况下,区块链节点的开销可能无法总是达成上述的最优情况。例如,当区块链节点收到的任一隐私交易的数据量超出上述的预设阈值时,区块链节点需要通过单次函数调用而单独将该任一隐私交易传入TEE中,此时产生的开销而上述的第二开销量而无法维持于第一开销量;如果收到该任一隐私交易时,缓冲队列中还包含其他隐私交易,那么如前所述:区块链节点需要执行单次函数调用以将缓冲队列中的所有隐私交易传入TEE中,而无论缓冲队列中的隐私交易的数量为一个或多个、数据量之和与预设阈值相差多少。再例如,区块链节点可以记录缓冲队列内的首条隐私交易的等待时长(可以从该首条隐私交易的接收时刻或添加至缓冲队列的时刻开始计算),并在该等待时长达到预设时长的情况下,将缓冲队列中的所有隐私交易打包传入可信执行环境,可以避免隐私交易的数据量普遍较小或隐私交易的产生频率较低等原因而导致等待时长过长,反而耽搁了针对首条隐私交易的及时处理。又例如,区块链节点可能穿插接收到隐私交易和明文交易,那么在收到明文交易时,区块链节点可以随即将缓冲队列中的所有隐私交易打包传入可信执行环境,而区块链节点可以在TEE之外执行收到的上述明文交易,使得所有交易可以被依次执行、避免发生混乱。
交易发起方在创建隐私交易时,可以对隐私交易的交易内容进行加密,使得即便该隐私交易被包含于所属的区块、该区块被添加至可被公开查询的区块链上,无关者也仅能够获得加密后的交易内容、无法获知明文的交易内容。而区块链节点可以在可信执行环境中对隐私交易进行解密,得到明文的交易内容,并进而在可信执行环境中执行该明文的交易内容。
交易发起方可以持有对称加密的密钥,并基于该密钥、采用对称加密的方式对交易内容进行加密,隐私交易包含加密得到的密文的交易内容;相应地,区块链节点在TEE中保存有该对称加密的密钥,并基于该密钥、采用对称加密的方式实施解密,从而得到明文的交易内容。
或者,交易发起方可以持有非对称加密的公钥,并基于该公钥、采用非对称加密的方式对交易内容进行加密,隐私交易包含加密得到的密文的交易内容;相应地,区块链节点在TEE中保存有该非对称加密的私钥,并基于该私钥、采用非对称加密的方式实施解密,从而得到明文的交易内容。
或者,交易发起方可以持有对称加密的密钥和非对称加密的公钥,交易发起方可以基于对称加密的密钥、采用对称加密的方式对交易内容进行加密,并进而基于非对称加密的公钥、采用非对称加密的方式加密上述对称加密的密钥,隐私交易包含加密得到的密文的交易内容和加密后的密钥;相应地,区块链节点在TEE中保存有该非对称加密的私钥,并基于该私钥、采用非对称加密的方式对加密后的密钥实施解密得到对称加密的密钥,进而基于对称加密的密钥、采用对称加密的方式对密文的交易内容进行解密,得到明文的交易内容。上述过程采用的加密方式即数字信封加密。
对应于采用加密处理的隐私交易,区块链节点在TEE中解密得到交易内容并执行后,可以在TEE中对交易执行结果进行加密,并进而将加密后的交易执行结果提供至交易发起方,且交易发起方具备对加密后的交易执行结果的解密能力。例如,区块链节点可以在TEE中采用上述对称加密的密钥对交易执行结果进行加密,而交易发起方的客户端可以相应解密。再例如,区块链节点可以在TEE中采用非对称加密的公钥对交易执行结果进行加密,而交易发起方的客户端可以通过相应非对称加密的私钥进行解密。又例如,区块链节点可以在TEE中采用对称加密的密钥对交易执行结果进行加密、采用非对称加密的公钥对该对称加密的密钥进行加密,而交易发起方的客户端可以通过相应非对称加密的私钥解密得到对称加密的密钥,进而基于该密钥对交易执行结果进行解密。
上述加解密过程中采用的对称加密的密钥、非对称加密的公私钥等,可以由交易发起方的客户端与区块链节点之间协商确定,或者可以由KMS(Key Management Service,密钥管理服务)服务器在区块链节点上的TEE通过远程证明后分别发放至交易发起方的客户端与区块链节点。其中,对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等;非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
本说明书中的交易可以用于实现相对简单的处理逻辑,比如类似于相关技术中的转账逻辑。此时无论是上述的明文交易或隐私交易,均可与智能合约无关。
本说明书中的交易还可以用于实现相对复杂的处理逻辑,这里可以借助于上述的智能合约来实现。以以太坊为例,支持用户在以太坊网络中创建和/或调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。如图1所示,通过在常规执行环境中部署EVM,可以通过该EVM执行明文交易发布或调用的智能合约,以实现常规执行环境中的“交易执行”环节;以及,通过在TEE中部署EVM,可以通过该EVM执行隐私交易发布或调用的智能合约,以实现TEE中的“交易执行”环节。
例如图3所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。交易的data字段保存的可以是智能合约的代码(如字节码),交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
进一步地,如图4所示,仍以以太坊为例,Bob将一个调用智能合约的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中4中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x692a70d2…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点查看balance的当前值。智能合约可以通过规定的方式在区块链网络中的每个节点独立地执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
对于上述的隐私交易而言,区块链节点在TEE中解密得到上述明文的交易内容后,如果该明文的交易内容与智能合约相关,比如该明文的交易内容用于发布或调用智能合约,那么该智能合约可以称为该明文的交易内容对应的关联智能合约。如果该明文的交易内容用于发布上述的关联智能合约,那么该关联智能合约的代码包含于该明文的交易内容中,比如位于该明文的交易内容的data字段。如果该明文的交易内容用于调用上述的关联智能合约,那么该关联智能合约的代码位于区块链节点维护的数据库中。相应地,区块链节点可以在TEE中执行明文的交易内容对应的关联智能合约,即在TEE中部署的EVM内执行上述关联智能合约的代码,以实现对关联智能合约的发布或调用。其中,智能合约之间可以实现多重嵌套结构;例如智能合约1中的代码调用了智能合约2,而智能合约2中的代码指向了经创建智能合约代码生成的合约地址3,从而当隐私交易调用智能合约1中的代码时,直接调用在智能合约2的代码并且间接调用了所述合约地址3中的智能合约代码,那么智能合约1、智能合约2和智能合约3的代码均会在TEE内部署的EVM中予以执行。
与图4所示实施例中的合约状态balance相类似的,关联智能合约被EVM执行后,可能使得一个或多个合约状态发生取值变化。相应地,区块链节点可以将关联智能合约对应的至少一个合约状态在TEE中加密,并将得到的加密后合约状态写入数据库。上述的写入数据库,一般指存储于存储介质之中,更多见的是持久性存储介质,该持久性存储介质可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
区块链节点可以采用对称加密的密钥对合约状态进行加密,以得到上述的加密后合约状态。例如,上述的KMS服务器在区块链节点上的TEE通过远程证明后,可以将上述对称加密的密钥发放至区块链节点;或者,KMS服务器发放的密钥可以被作为根密钥,而区块链节点可以基于该根密钥衍生出上述对称加密的密钥。再例如,上述对称加密的密钥可由区块链网络中的各个区块链节点之间协商得到。当然,除了对称加密的密钥之外,还可以采用非对称加密的公钥对合约状态进行加密,而区块链节点持有非对称加密的私钥、以用于对加密后合约状态进行解密。用于对合约状态进行加密的密钥可以被存储于区块链节点的TEE内的围圈中,以确保该密钥的安全性。
图5是一示例性实施例提供的一种传入数据量与开销量之间的变化关系示意图。假定开销量随传入数据量的变化符合函数y=f(x),其中y为开销量、x为区块链节点通过单次ECall调用将隐私交易传入TEE内的传入数据量;如图5所示,函数f(x)属于分段函数:当传入数据量属于[0,64KB]时,开销量y的取值基本维持于约10μs,当传入数据量大于64KB时,开销量y的取值基本呈现出线性增大的变化规律。
因此,基于上述函数f(x)的取值变化规律,区块链节点在需要将隐私交易传入TEE时,可以通过单次ECall调用将尽可能多的隐私交易打包传入TEE,相比于每次仅传入一笔或较少隐私交易而言,能够减少ECall调用次数,从而降低区块链节点在传入隐私交易时所产生的开销。
基于图5所示的函数f(x),区块链节点在收到一条交易后将存在多种处理方式,下面对其中可能出现的几种情形进行列举:
区块链节点可能接收到一条隐私交易。区块链节点可以计算该隐私交易与缓冲队列中已有隐私交易的数据量之和:如果数据量之和未超出64KB,那么区块链节点将该隐私交易添加至缓冲队列中,并继续等待后续收到的其他隐私交易,使得批量传入TEE的隐私交易的数据量之和尽可能地接近64KB的极限,从而在单次ECall向TEE内传入尽可能多的隐私交易(在64KB的传入数据量以内);如果数据量之和超出64KB,那么区块链节点可以将缓冲队列中原本已有的所有隐私交易通过单次ECall调用传入TEE、清空缓冲队列,而将最近收到的上述隐私交易添加至清空后的缓冲队列中。
区块链节点可能接收到一条明文交易。区块链节点为了确保所有交易依次执行,无需关注于缓冲队列中已有隐私交易的数据量之和是否接近64KB的极限,立即将缓冲队列中已有的所有隐私交易通过单次ECall调用传入TEE,以及区块链节点将最近收到的上述明文交易在常规执行环境中予以处理。
此外,当区块链网络上的交易频率较低时,区块链节点在缓冲队列中添加的隐私交易可能需要等待较长时间后,才会组成接近64KB传入数据量的隐私交易。因此,区块链节点可以记录缓冲队列中的首条隐私交易的接收时刻或添加时刻(添加至缓冲队列的时刻)等,从而在确定该首条隐私交易的等待时长达到预设时长后,不论缓冲队列中已有隐私交易的数据量之和是否接近64KB的极限,均应立即将缓冲队列中已有的所有隐私交易通过单次ECall调用传入TEE,以确保交易执行的及时性。
图6是一示例性实施例提供的一种设备的示意结构图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他业务所需要的硬件。处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行,在逻辑层面上形成交易调度装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图7,在软件实施方式中,该交易调度装置可以包括:
确定单元701,使区块链节点确定收到的隐私交易的数据量;
第一传输单元702,使所述区块链节点通过单次函数调用将数据量之和不大于预设阈值的多笔隐私交易打包传入可信执行环境;
其中,在传入数据量不大于所述预设阈值的情况下,所述单次函数调用产生的第一开销量与传入数据量无关,在传入数据量大于所述预设阈值的情况下,所述单次函数调用产生的第二开销量大于所述第一开销量且正相关于传入数据量。
可选的,所述第一传输单元702具体用于:
使所述区块链节点在收到任一隐私交易后,将该任一隐私交易的数据量与缓冲队列中的所有隐私交易的数据量相加;
使所述区块链节点在相加值不大于所述预设阈值的情况下,将所述任一隐私交易添加至所述缓冲队列中;
使所述区块链节点在相加值大于所述预设阈值的情况下,将所述缓冲队列中的所有隐私交易打包传入可信执行环境,并将所述任一隐私交易添加至已清空的缓冲队列中。
可选的,还包括:
记录单元703,使所述区块链节点记录缓冲队列内的首条隐私交易的等待时长;
第二传输单元704,在所述等待时长达到预设时长的情况下,使所述区块链节点将缓冲队列中的所有隐私交易打包传入可信执行环境。
可选的,还包括:
第三传输单元705,使所述区块链节点在收到明文交易时,将缓冲队列中的所有隐私交易打包传入可信执行环境;
第一执行单元706,使所述区块链节点在可信执行环境之外执行所述明文交易。
可选的,还包括:
识别单元707,使所述区块链节点根据交易所含的类型字段,识别收到的交易属于隐私交易或明文交易。
可选的,在传入数据量发生变化时,所述第一开销量的取值不变或基本不变。
可选的,所述预设阈值不大于所述区块链节点上的飞地页面缓存的预分配空间大小。
可选的,所述隐私交易的交易内容被交易发起方加密;所述装置还包括:
解密单元708,使所述区块链节点在可信执行环境中对所述隐私交易进行解密,得到明文的交易内容;
第二执行单元709,使所述区块链节点在可信执行环境中执行所述明文的交易内容。
可选的,还包括:
加密单元710,使所述区块链节点在可信执行环境中对交易执行结果进行加密;
提供单元711,使所述区块链节点将加密后的交易执行结果提供至所述交易发起方,所述交易发起方具备对所述加密后的交易执行结果的解密能力。
可选的,
所述明文的交易内容与智能合约相关;所述第二执行单元709具体用于:使所述区块链节点在可信执行环境中执行所述明文的交易内容对应的关联智能合约;
所述装置还包括:加密存储单元712,使所述区块链节点将所述关联智能合约对应的至少一个合约状态在可信执行环境中加密,并将得到的加密后合约状态写入数据库。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。