CN111898156A - 区块链中实现合约调用的方法及节点、存储介质 - Google Patents

区块链中实现合约调用的方法及节点、存储介质 Download PDF

Info

Publication number
CN111898156A
CN111898156A CN202010645619.3A CN202010645619A CN111898156A CN 111898156 A CN111898156 A CN 111898156A CN 202010645619 A CN202010645619 A CN 202010645619A CN 111898156 A CN111898156 A CN 111898156A
Authority
CN
China
Prior art keywords
plaintext
execution environment
transaction
type
intelligent contract
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.)
Granted
Application number
CN202010645619.3A
Other languages
English (en)
Other versions
CN111898156B (zh
Inventor
闫莺
魏长征
宋旭阳
赵博然
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Original Assignee
Advanced New Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced New Technologies Co Ltd filed Critical Advanced New Technologies Co Ltd
Priority to CN202010645619.3A priority Critical patent/CN111898156B/zh
Publication of CN111898156A publication Critical patent/CN111898156A/zh
Application granted granted Critical
Publication of CN111898156B publication Critical patent/CN111898156B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6245Protecting personal data, e.g. for financial or medical purposes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Abstract

本说明书一个或多个实施例提供一种区块链中实现合约调用的方法及节点、存储介质,该方法可以包括:第一区块链节点在可信执行环境中执行明文类型的智能合约,以确定所述明文类型的智能合约调用的智能合约;当被调用的智能合约为隐私类型时,第一区块链节点对所述被调用的智能合约进行解密,以在所述可信执行环境中执行。

Description

区块链中实现合约调用的方法及节点、存储介质
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链中实现合约调用的方法及节点、存储介质。
背景技术
区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。这些区块链网络中的节点有时需要增加。
目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(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(信任区)和AMD PSP(Platform Security Processor,平台安全处理器)。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链中实现合约调用的方法及节点、存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链中实现合约调用的方法,包括:
第一区块链节点在可信执行环境中执行明文类型的智能合约,以确定所述明文类型的智能合约调用的智能合约;
当被调用的智能合约为隐私类型时,第一区块链节点对所述被调用的智能合约进行解密,以在所述可信执行环境中执行。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链中实现合约调用的方法,包括:
第一区块链节点对隐私类型的智能合约进行解密后,在可信执行环境中执行,以确定所述隐私类型的智能合约调用的智能合约;
当被调用的智能合约为隐私类型时,第一区块链节点对所述被调用的智能合约进行解密,以在所述可信执行环境中执行。
根据本说明书一个或多个实施例的第三方面,提出了一种区块链中实现合约调用的方法,包括:
第一区块链节点对隐私类型的智能合约进行解密后,在可信执行环境中执行,以确定所述隐私类型的智能合约调用的智能合约;
当被调用的智能合约为明文类型时,第一区块链节点在所述可信执行环境中执行所述被调用的智能合约。
根据本说明书一个或多个实施例的第四方面,提出了一种区块链中实现合约调用的节点,包括:
第一执行单元,用于在可信执行环境中执行明文类型的智能合约,以确定所述明文类型的智能合约调用的智能合约;
解密单元,用于在被调用的智能合约为隐私类型时,对所述被调用的智能合约进行解密;
第二执行单元,用于在所述可信执行环境中执行解密后的所述被调用的智能合约。
根据本说明书一个或多个实施例的第五方面,提出了一种区块链中实现合约调用的节点,包括:
第一解密单元,用于对隐私类型的智能合约进行解密;
第一执行单元,用于在可信执行环境中执行解密后的所述隐私类型的智能合约,以确定所述隐私类型的智能合约调用的智能合约;
第二解密单元,用于在被调用的智能合约为隐私类型时,对所述被调用的智能合约进行解密;
第二执行单元,用于在所述可信执行环境中执行解密后的所述被调用的智能合约。
根据本说明书一个或多个实施例的第六方面,提出了一种区块链中实现合约调用的节点,包括:
解密单元,用于对隐私类型的智能合约进行解密;
第一执行单元,用于在可信执行环境中执行解密后的所述隐私类型的智能合约,以确定所述隐私类型的智能合约调用的智能合约;
第二执行单元,用于在被调用的智能合约为明文类型时,在所述可信执行环境中执行所述被调用的智能合约。
根据本说明书一个或多个实施例的第七方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面、第二方面或第三方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种创建智能合约的示意图。
图2是一示例性实施例提供的一种调用智能合约的示意图。
图3是一示例性实施例提供的一种创建和调用智能合约的示意图。
图4是一示例性实施例提供的一种区块链中实现合约调用的方法的流程图。
图5是一示例性实施例提供的一种处理区块链交易的示意图。
图6是一示例性实施例提供的一种明文合约调用隐私合约的示意图。
图7是一示例性实施例提供的另一种区块链中实现合约调用的方法的流程图。
图8是一示例性实施例提供的一种隐私合约调用隐私合约的示意图。
图9是一示例性实施例提供的另一种隐私合约调用隐私合约的示意图。
图10是一示例性实施例提供的又一种区块链中实现合约调用的方法的流程图。
图11是一示例性实施例提供的一种隐私合约调用明文合约的示意图。
图12是一示例性实施例提供的一种隐私合约调用明文合约的示意图。
图13是一示例性实施例提供的一种区块链中实现合约调用的节点的组成图。
图14是一示例性实施例提供的另一种区块链中实现合约调用的节点的组成图。
图15是一示例性实施例提供的又一种区块链中实现合约调用的节点的组成图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
例如图1所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。交易的data字段保存的可以是字节码,交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
此外,如图2所示,仍以以太坊为例,Bob将一个包含调用智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中2中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x692a70d2…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点查看balance的当前值。
智能合约可以通过规定的方式在区块链网络中的每个节点独立地执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式地运行在以太坊网络中每个节点的虚拟机中。
以下结合图4所示说明本说明书一区块链中实现合约调用的方法实施例的实现过程:
步骤402,第一区块链节点在可信执行环境中执行明文类型的智能合约,以确定所述明文类型的智能合约调用的智能合约。
在一实施例中,第一区块链节点可以接收用于调用智能合约的交易,比如该交易的to字段可以包含希望调用的智能合约的合约地址,使得第一区块链节点可以基于该合约地址读取相应的智能合约,譬如读取到上述的明文类型的智能合约。
在一实施例中,交易可以由客户端提交至第一区块链节点。例如,用户在客户端生成该交易后,通过该客户端将交易提交至第一区块链节点。以图2为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对接,使得客户端可以向第一区块链节点提交交易。
所述交易也可由第二区块链节点转发至第一区块链节点。例如,用户在客户端生成该交易后,通过该客户端将该交易提交至第二区块链节点;然后,第二区块链节点进一步将该交易转发至第一区块链节点。以图5为例,上述接口可与其他区块链节点对接,比如该其他区块链节点可以包含上述的第二区块链节点,使得第二区块链节点可以向第一区块链节点转发交易。类似地,第二区块链节点也可通过自身的交易/查询接口与客户端对接,以接收客户端提交的交易。
比如在采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的区块链网络中,第二区块链节点在收到客户端提交的该交易后,立即扩散(如广播)至以太坊网络中的其他区块链节点。
再比如在采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的区块链网络中,记账节点在本轮记账前已经商定好,使得第二区块链节点在收到客户端提交的该交易后,若自身并非记账节点,则将该交易发送至已确定的记账节点,使得该记账节点在进一步的共识阶段将交易(包括该交易)打包发送至各个验证节点。而当第二区块链节点自身为已确定的记账节点时,其他区块链节点收到客户端提交的交易后,可以将交易转发至该第二区块链节点;然后,第二区块链节点可以在共识阶段将上述交易(或还包括其他交易)打包发送至各个验证节点,包括第一区块链节点。
在如图5所示的实施例中,第一区块链节点包括常规执行环境和可信执行环境,常规执行环境仅能够执行明文类型的智能合约,而可信执行环境既可以执行明文类型的智能合约,也可以对隐私类型的智能合约进行解密和执行。
如果步骤402中明文类型的智能合约被传递至常规执行环境中执行,那么当该明文类型的智能合约对隐私类型的智能合约进行调用时,被调用的智能合约将无法在常规执行环境中被解密和执行,进而导致交易失败。因此,本说明书在将明文类型的智能合约传递至可信执行环境中予以执行,使得被调用的智能合约为隐私类型时,可以在可信执行环境中顺利实现解密和执行,从而实现了由明文类型的智能合约对隐私类型的智能合约进行调用。
在一实施例中,可以通过交易级别的标注,以确保明文类型的智能合约被传递至可信执行环境而非常规执行环境。
例如,可以在交易中添加类型字段,使得第一区块链可以据此识别交易类型为明文交易或隐私交易。在相关技术中,例如在以太坊网络中,交易通常包含to、value、data等字段。而本实施例在相关技术的基础上,在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。相应的,第一区块链节点收到的交易首先进入如图5所示的常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。
因此,当交易调用明文类型的智能合约、该明文类型的智能合约调用隐私类型的智能合约时,可以将该交易的类型字段标注为隐私类型。相应地,第一区块链节点接收交易后,可以根据交易包含的类型字段确定所述交易为经加密的隐私交易,进而对所述隐私交易进行解密后,在可信执行环境中执行所述隐私交易调用的所述明文类型的智能合约,并进而在可信执行环境中执行该明文类型的智能合约调用的隐私类型的智能合约。
在一实施例中,可以通过合约级别的标注,以确保明文类型的智能合约被传递至可信执行环境而非常规执行环境。
例如,交易中可以存在对所需调用的智能合约标注的处理类型,使得第一区块链节点可以针对该交易中标注的处理类型,对该交易调用的的智能合约采用对应的处理操作。比如,智能合约的代码中可以包括一类型字段,第一区块链节点可以基于每一智能合约的代码中所含类型字段的取值,确定该智能合约为隐私处理类型或是明文处理类型;再比如,隐私处理类型的智能合约中可以包含隐私标识符、明文处理类型的智能合约可以不包含该隐私标识符;又比如,明文处理类型的智能合约可以包含明文标识符、隐私处理类型的智能合约可以不包含该明文标识符;相应地,第一区块链节点可以基于上述差异,区分不同处理类型的智能合约。
因此,当交易调用明文类型的智能合约、该明文类型的智能合约调用隐私类型的智能合约时,可以在该交易中将该明文类型的智能合约标注为隐私处理类型。相应地,第一区块链节点接收交易后,可以读取所述交易中针对所述明文类型的智能合约标注的处理类型,并在标注为隐私处理类型时,在可信执行环境中执行所述交易调用的所述明文类型的智能合约,并进而在可信执行环境中执行该明文类型的智能合约调用的隐私类型的智能合约。
在一实施例中,所述明文类型的智能合约可以直接调用所述被调用的智能合约。例如图6所示,假定交易调用了明文类型的智能合约A1,第一区块链节点可以从外部存储空间将智能合约A1的明文代码读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A1调用了另一隐私类型的智能合约B1,使得第一区块链节点可以从外部存储空间将该智能合约B1的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。
除了直接调用之外,所述明文类型的智能合约可以间接调用所述被调用的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
例如,上述交易调用了明文类型的智能合约A1,第一区块链节点可以从外部存储空间将智能合约A1的明文代码读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A1调用了另一明文或隐私类型的智能合约B1-1,使得第一区块链节点可以从外部存储空间将该智能合约B1-1的代码读入可信存储空间的虚拟机中予以执行(若智能合约B1-1为隐私类型,还需解密),确定该智能合约B1-1进一步调用了隐私类型的智能合约B1,使得第一区块链节点可以从外部存储空间将该智能合约B1的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。再例如,上述交易调用了明文类型的智能合约A1,该智能合约A1可以调用智能合约B1-1、该智能合约B1-1调用智能合约B1-2……智能合约B1-n调用智能合约B1,那么第一区块链节点可以将智能合约A1、智能合约B1-1~B1-n、智能合约B1均读入可信执行环境中予以执行(隐私类型的智能合约需解密)。
如上文所述,第一区块链节点收到的交易可以为隐私交易,那么该隐私交易被传入第一区块链节点时处于加密状态。第一区块链节点可以在可信执行环境(TrustedExecution Environment,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的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
假定上述的隐私交易由用户在某一客户端处生成,该客户端可以首先生成明文交易内容,然后将该明文交易内容用密钥加密。所述加密,可以采用对称加密,也可以采用非对称加密。相应地,第一区块链节点可以用对应的密钥解密所述隐私交易,以获得明文交易内容。如果客户端用对称加密方式,即用对称加密算法的私钥对明文交易内容加密,则相应地,第一区块链节点可以用所述对称加密算法的私钥解密所述隐私交易。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。对称加密算法的密钥,例如可以是由客户端和第一区块链节点协商确定。
如果用非对称加密方式,即用非对称加密算法的公钥对明文交易内容加密,则相应地,第一区块链节点可以用所述非对称加密算法的私钥解密所述隐私交易。非对称加密算法,例如是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。非对称加密算法的密钥,例如可以是由第一区块链节点生成一对公钥和私钥,并将公钥在步骤402之前发送至所述客户端,使得所述客户端可以将明文交易内容用密钥加密。
非对称加密算法的密钥,也可以由一个密钥管理服务器生成。通过远程证明的方式,密钥管理服务器将私钥发送至第一区块链节点,具体的,可以是传入第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE(Quoting Enclave)围圈,而非AE(Application Enclave)围圈。对于非对称加密的公钥,可以由密钥管理服务器发送至所述客户端。因而客户端可以用该公钥加密明文交易内容,相应地,第一区块链节点可以用所述私钥解密所述隐私交易,以得到该隐私交易包含的明文交易内容。
客户端也可以采用对称加密结合非对称加密相结合的方式。例如,客户端采用对称加密算法加密明文交易内容,即采用对称加密算法的私钥加密明文交易内容,并用非对称加密算法加密对称加密算法中采用的私钥。一般的,采用非对称加密算法的公钥加密对称加密算法中采用的私钥。这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,得到对称加密算法的私钥,进而用对称加密算法的私钥解密得到明文交易内容。
例如,密钥管理服务器通过远程证明可以将非对称加密算法的私钥发送至第一区块链节点的围圈,并将非对称加密算法的公钥发送至所述客户端。因而,所述客户端可以采用对称加密方式加密明文交易内容,即采用对称加密算法的私钥加密明文交易内容,并用非对称加密算法的公钥加密对称加密算法中采用的私钥。进而,所述客户端可以将所述隐私交易和加密私钥(由非对称加密算法的公钥对所述对称加密算法中采用的私钥进行加密后得到)发送至第一区块链节点。第一区块链节点接收到所述隐私交易和加密私钥后,可以先用非对称加密算法的私钥对该加密私钥进行解密得到对称加密算法的私钥,进而用该对称加密算法的私钥解密所述隐私交易,得到明文交易内容。这里的加密方式一般称为数字信封加密。
对智能合约的随意调用,可能导致一定的安全问题,比如增加了合约状态的泄露风险。尤其是,当智能合约为隐私类型时,原本可能就不希望被随意调用。因此,在编写智能合约的代码的过程中,可以添加针对该智能合约的调用条件,可以控制针对该智能合约的调用操作,限制随意调用的情况发生。
那么,当上述明文类型的智能合约对隐私类型的智能合约进行调用时,第一区块链节点可以将被调用的智能合约的代码读入可信执行环境中,以读取代码中包含的调用条件,并在确定所述调用条件被满足时,才允许在所述可信执行环境中执行被调用的智能合约的代码,否则应当阻止该调用操作。
在一实施例中,所述调用条件可以包括:调用方处于调用白名单中,该调用白名单包含允许对上述被调用的智能合约进行调用的对象。在另一实施例中,所述调用条件可以包括:调用方未处于调用黑名单中,该调用黑名单包含不允许对上述被调用的智能合约进行调用的对象。相对而言,调用白名单具有更高的安全性,可以避免通过更换调用方的方式来绕开调用黑名单的限制。
其中,所述调用方包括以下至少之一:发起调用的用户(例如该用户发起了对上述明文类型的智能合约进行调用的交易,而该明文类型的智能合约进一步调用了所述被调用的智能合约)、所述智能合约的合约地址、发起调用的函数。以调用白名单为例,该调用白名单中的对象可以为预先约定、不可更改的对象;或者,可以根据实际情况对调用白名单中的对象进行增减,比如在创建了上述交易后,可以通过诸如线下协商或其他方式的协商,临时将该交易对应的智能合约的合约地址添加至调用白名单中,使得该交易对应的智能合约可以对上述被调用的智能合约进行调用。
在一实施例中,所述调用白名单或所述调用黑名单可以位于所述被调用的智能合约的代码中,那么除非对该被调用的智能合约进行版本更新,否则通常无法对调用白名单或所述调用黑名单进行调整。在另一实施例中,所述调用白名单或所述调用黑名单可以位于所述被调用的智能合约所调用的另一智能合约中,那么可以通过创建新的智能合约,并使其被该被调用的智能合约所调用,即可对所述调用白名单或所述调用黑名单进行更新。
步骤404,当被调用的智能合约为隐私类型时,第一区块链节点对所述被调用的智能合约进行解密,以在所述可信执行环境中执行。
在执行智能合约的明文代码(调用时即为明文,或者调用时为密文、然后解密为明文)时,第一区块链节点可以利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC,通过CPU内的加密引擎MEE对上述的明文代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文的代码进行运算,完成执行过程。
SGX技术中,执行智能合约的明文代码时,可以将EVM加载进所述围圈中。在远程证明过程中,所述密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执行智能合约的明文代码。
一般的,CPU执行所述明文代码后,智能合约所涉及的合约状态会发生变化。对执行结果进行存储,即为将合约状态存入区块链,从区块链节点的角度,是将该合约状态写入数据库,例如本地的数据库。所述数据库,一般存储于存储介质之中,更多见的是持久性存储介质。所述持久性存储介质,可以是磁盘、软盘,也可以是通电后可恢复数据从而可以持久存储的内存之类。
写入数据库的操作,用代码表示的话,如setstorage(key,ENC(value,secret_key))。setstorage(key,ENC(value,secret_key))中,键(key)可以与传统的键写入方式相同。至于value的写入,可以采用Intel SGX技术,ENC表示enclave,secret_key表示采用SGX技术中写入数据库时采用的密钥。所述密钥可以是对称加密的密钥,例如是seal(SimpleEncrypted Arithmetic Library)密钥。所述seal密钥,例如可以是通过远程证明后由密钥管理服务器发送给第一区块链节点,再例如可以是区块链中的各个节点(如第一区块链节点与其他区块链节点)之间协商得到。所述密钥也可以是非对称加密的密钥。所述密钥可以被存储于第一区块链节点的围圈中。第一区块链节点可以包含多个围圈,而上述私钥可以被传入这些围圈中的安全围圈;例如,该安全围圈可以为QE围圈,而非AE围圈。
第一区块链节点可以将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
第一区块链节点通过运行用于实现某一功能的代码,以实现该功能。因此,对于需要在可信执行环境中实现的功能,同样需要执行相关代码。而对于在可信执行环境中执行的代码,需要符合可信执行环境的相关规范和要求;相应地,对于相关技术中用于实现某一功能的代码,需要结合可信执行环境的规范和要求重新进行代码编写,不仅存在相对更大的开发量,而且容易在重新编写过程中产生漏洞(bug),影响功能实现的可靠性和稳定性。
因此,第一区块链节点通过将明文执行结果通过密钥加密为密文执行结果,且该密文执行结果只有通过可信执行环境进行解密,可以确保该密文执行结果本身足够安全。在此基础上,第一区块链节点通过在所述可信执行环境之外执行存储功能代码,将所述密文执行结果存储至所述可信执行环境之外的外部存储空间,使得该存储功能代码可以为相关技术中用于实现存储功能的代码、不需要结合可信执行环境的规范和要求重新进行代码编写,即可针对该密文执行结果实现安全可靠的存储,不仅可以在不影响安全、可靠程度的基础上,减少相关代码的开发量,而且可以通过减少可信执行环境的相关代码而降低TCB(Trusted Computing Base,可信计算基),使得TEE技术与区块链技术进行结合的过程中,额外造成的安全风险处于可控范围。
在一实施例中,第一区块链节点可以在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中,比如该写缓存可以对应于如图5所示的“缓存”。进一步的,第一区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。其中,所述写缓存功能代码可以以明文形式存储于所述可信执行环境中,可以直接在可信执行环境中执行该明文形式的缓存功能代码;或,所述写缓存功能代码可以以密文形式存储于所述可信执行环境之外,比如存储于上述的外部存储空间(比如图5所示的“存储空间”),可以将该密文形式的写缓存功能代码读入可信执行环境、在可信执行环境中进行解密为明文代码,并执行该明文代码。
写缓存是指在将数据写入外部存储空间时,为了避免造成对外部存储空间的“冲击”而提供的“缓冲”机制。例如,可以采用buffer实现上述的写缓存;当然,写缓存也可以采用cache来实现,本说明书并不对此进行限制。实际上,由于可信执行环境为隔离的安全环境,而外部存储空间位于可信执行环境之外,使得通过采用写缓存机制,可以对缓存内的数据进行批量写入外部存储空间,从而减少可信执行环境与外部存储空间之间的交互次数,提升数据存储效率。同时,可信执行环境在不断执行各条明文交易内容的过程中,可能需要调取已生成的数据(如合约状态的取值),如果需调用的数据恰好位于写缓存中,可以直接从写缓存中读取该数据,这样一方面可以减少与外部存储空间之间的交互,另一方面免去了对从外部存储空间所读取数据的解密过程,从而提升在可信执行环境中的数据处理效率。
当然,也可以将写缓存建立于可信执行环境之外,比如第一区块链节点可以在可信执行环境之外执行写缓存功能代码,从而将所述密文执行结果存入所述可信执行环境外的写缓存中,并进一步将所述写缓存中的数据存储至所述外部存储空间。
在一实施例中,第一区块链节点可以根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。
例如,第一区块链节点可以从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境,然后对所述明文执行结果加密后从可信执行环境输出,比如通过图5所示的交易/查询接口向客户端返回加密后的明文执行结果。
再例如,第一区块链节点可以从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由第一区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。换言之,第一区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,可以通过在可信执行环境内执行读缓存功能代码,将该明文执行结果存入可信执行环境内的读缓存中,比如该读缓存可以对应于图5所示的“缓存”;进一步地,针对客户端发起的查询请求,或者对于可信执行环境在执行明文交易内容时所需的数据,可以优先从该读缓存中进行数据读取,若能读取相关数据则无需从外部存储空间中读取,从而减少与外部存储空间的交互次数、免除数据解密过程。
读缓存是指在将数据从外部存储空间读入可信执行环境后,为了减少与外部存储空间的交互次数,可以将已读取的数据以明文形式存储于可信执行环境中的读缓存空间内。例如,可以采用cache实现上述的读缓存;当然,读缓存也可以采用buffer来实现,本说明书并不对此进行限制。
第一区块链节点可以同时支持上述的读缓存机制和写缓存机制。而随着缓存技术的不断发展,同一缓存可以不仅用于实现数据读取或数据写入,甚至可以同时支持数据的读写操作,使得读缓存与写缓存之间的界线有时并不十分清晰,因而图5中仅以“缓存”进行示意,而并未具体区分其具体类型,可以根据实际需求进行配置和调整。
当然,上述可信执行环境中的缓存机制,同样可以应用于常规执行环境中,例如通过图5所示的常规执行环境中的“缓存”来实现,不过此时的数据读写仅涉及到明文读写,不需要实施数据加解密操作,此处不再赘述。
以下结合图7所示说明本说明书另一区块链中实现合约调用的方法实施例的实现过程:
步骤702,第一区块链节点对隐私类型的智能合约进行解密后,在可信执行环境中执行,以确定所述隐私类型的智能合约调用的智能合约。
在一实施例中,第一区块链节点可以接收与智能合约相关的交易。比如当该交易用于调用智能合约时,该交易的to字段可以包含希望调用的智能合约的合约地址,使得第一区块链节点可以基于该合约地址读取相应的智能合约,譬如读取到上述的隐私类型的智能合约。再比如当该交易用于创建智能合约时,该交易的data字段可以包含希望创建的智能合约的代码,使得第一区块链节点可以从交易的data字段读取到诸如上述的隐私类型的智能合约。
与图4所示实施例类似的,上述交易可以由客户端或第二区块链节点发送至第一区块链节点,此处不再赘述。
如果所述隐私类型的智能合约被传递至如图5所示的常规执行环境中执行,那么当该隐私类型的智能合约将无法在常规执行环境中被解密和执行,进而导致交易失败。因此,本说明书需要将所述隐私类型的智能合约传递至可信执行环境中予以执行,可以在可信执行环境中顺利实现解密和执行,并进而针对下述隐私类型的被调用的智能合约进行解密和执行,从而实现了由隐私类型的智能合约对隐私类型的智能合约进行调用。
在一实施例中,可以通过交易级别的标注,以确保所述隐私类型的智能合约在可信执行环境而非常规执行环境中执行。与图4所示实施例相类似的,可以在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。相应的,第一区块链节点收到的交易首先进入如图5所示的常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。
因此,当交易用于创建或调用所述隐私类型的智能合约时,可以将该交易的类型字段标注为隐私类型。相应地,第一区块链节点接收交易后,可以根据交易包含的类型字段确定所述交易为经加密的隐私交易,进而对所述隐私交易进行解密后,读入可信执行环境中执行。
例如图8所示,假定隐私交易包含智能合约A2的代码,用于创建隐私类型的智能合约A2;如果智能合约A2调用了隐私类型的智能合约B2,第一区块链节点可以从外部存储空间将该智能合约B2的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。
在一实施例中,可以通过合约级别的标注,以确保所述隐私类型的智能合约在可信执行环境而非常规执行环境中执行。
例如,交易中可以存在对所需创建或调用的智能合约标注的处理类型,使得第一区块链节点可以针对该交易中标注的处理类型,对该交易调用的的智能合约采用对应的处理操作。比如,智能合约的代码中可以包括一类型字段,第一区块链节点可以基于每一智能合约的代码中所含类型字段的取值,确定该智能合约为隐私处理类型或是明文处理类型;再比如,隐私处理类型的智能合约中可以包含隐私标识符、明文处理类型的智能合约可以不包含该隐私标识符;又比如,明文处理类型的智能合约可以包含明文标识符、隐私处理类型的智能合约可以不包含该明文标识符;相应地,第一区块链节点可以基于上述差异,区分不同处理类型的智能合约。
因此,当交易需创建或调用隐私类型的智能合约时,可以在该交易中将该隐私类型的智能合约标注为隐私处理类型。相应地,第一区块链节点接收交易后,可以读取所述交易中针对所述隐私类型的智能合约标注的处理类型,并在标注为隐私处理类型时,在可信执行环境中执行所述隐私类型的智能合约,并进而在可信执行环境中执行该隐私类型的智能合约调用的隐私类型的智能合约。
针对上述交易级别或合约级别的标注,当所述交易用于创建智能合约时,第一区块链节点对该交易进行解密后,可以得到所述隐私类型的智能合约的明文代码,并将该明文代码在可信执行环境中予以执行。当所述交易用于调用智能合约时,第一区块链节点对该交易进行解密后,可以获得需要调用的合约地址,并从该合约地址获取所述隐私类型的智能合约的密文代码,而第一区块链节点根据可信执行环境提供的密钥对该密文代码进行解密,并进而将解密得到的明文代码读入可信执行环境中予以执行。
例如图9所示,假定交易调用了隐私类型的智能合约A3,第一区块链节点可以从外部存储空间读取智能合约A3的密文代码,通过可信存储空间中保存的密钥进行解密为明文代码后读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A3调用了另一隐私类型的智能合约B3,使得第一区块链节点可以从外部存储空间将该智能合约B3的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。
在一实施例中,所述隐私类型的智能合约可以直接调用所述被调用的智能合约,这可以参考图8或图9所示的实施例。
除了直接调用之外,所述隐私类型的智能合约可以间接调用所述被调用的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
例如,上述交易用于创建隐私类型的智能合约A2,第一区块链节点可以对交易解密得到智能合约A2的明文代码并读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A2调用了另一明文或隐私类型的智能合约B2-1,使得第一区块链节点可以从外部存储空间将该智能合约B2-1的代码读入可信存储空间的虚拟机中予以执行(若智能合约B2-1为隐私类型,还需解密),确定该智能合约B2-1进一步调用了隐私类型的智能合约B2,使得第一区块链节点可以从外部存储空间将该智能合约B2的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。再例如,上述交易用于创建该隐私类型的智能合约A2,该智能合约A2可以调用智能合约B2-1、该智能合约B2-1调用智能合约B2-2……智能合约B2-n调用智能合约B2,那么第一区块链节点可以将智能合约A2、智能合约B2-1~B2-n、智能合约B2均读入可信执行环境中予以执行(隐私类型的智能合约需解密)。
再例如,上述交易用于调用隐私类型的智能合约A3,第一区块链节点可以从外部存储空间读取智能合约A3的密文代码,解密并读入可信执行环境中、由可信执行环境中的虚拟机执行,以确定该智能合约A3调用了另一明文或隐私类型的智能合约B3-1,使得第一区块链节点可以从外部存储空间将该智能合约B3-1的代码读入可信存储空间的虚拟机中予以执行(若智能合约B3-1为隐私类型,还需解密),确定该智能合约B3-1进一步调用了隐私类型的智能合约B3,使得第一区块链节点可以从外部存储空间将该智能合约B3的密文代码读出,通过可信存储空间中保存的密钥进行解密为明文代码,将该明文代码在可信存储空间的虚拟机中执行。再例如,上述交易调用了隐私类型的智能合约A3,该智能合约A3可以调用智能合约B3-1、该智能合约B3-1调用智能合约B3-2……智能合约B3-n调用智能合约B3,那么第一区块链节点可以将智能合约A3、智能合约B3-1~B3-n、智能合约B3均读入可信执行环境中予以执行(隐私类型的智能合约需解密)。
如果上述的交易为隐私类型,可以通过对称加密方式对交易加密,或者可以通过非对称加密方式对交易加密,或者可以通过对称加密与非对称加密相结合的方式对交易加密,而第一区块链节点可以相应解密。具体可以参考图4所示实施例的相关描述,此处不再赘述。
步骤704,当被调用的智能合约为隐私类型时,第一区块链节点对所述被调用的智能合约进行解密,以在所述可信执行环境中执行。
为了避免对智能合约的随意调用,第一区块链节点可以获取被调用的智能合约的调用条件,并在确定所述调用条件被满足时,才允许在所述可信执行环境中执行被调用的智能合约的代码,否则应当阻止该调用操作。例如可以通过调用白名单或调用黑名单予以实现,具体可以参考图4所示的实施例,此处不再赘述。
在一实施例中,当交易用于调用隐私类型的智能合约,或者所述被调用的智能合约为隐私类型时,第一区块链节点需要从外部存储空间读取相应的智能合约,并对该智能合约进行解密。而第一区块链节点在可信执行环境中执行完毕后,得到的明文执行结果需要被加密为密文执行结果后,存入外部存储空间。这里涉及到的解密、加密过程,需要应用诸如图4所示实施例中的seal密钥或其他的类似密钥,可以参考上文的相关描述,此处不再赘述。
在一实施例中,第一区块链节点可以将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。对于密文执行结果的存储操作、存储过程中的缓存机制、读取过程中的缓存机制,均可以参考图4所示实施例中的相关描述,此处不再赘述。
以下结合图10所示说明本说明书又一区块链中实现合约调用的方法实施例的实现过程:
步骤1002,第一区块链节点对隐私类型的智能合约进行解密后,在可信执行环境中执行,以确定所述隐私类型的智能合约调用的智能合约。
在一实施例中,第一区块链节点可以接收与智能合约相关的交易。比如当该交易用于调用智能合约时,该交易的to字段可以包含希望调用的智能合约的合约地址,使得第一区块链节点可以基于该合约地址读取相应的智能合约,譬如读取到上述的隐私类型的智能合约。再比如当该交易用于创建智能合约时,该交易的data字段可以包含希望创建的智能合约的代码,使得第一区块链节点可以从交易的data字段读取到诸如上述的隐私类型的智能合约。
与图4所示实施例类似的,上述交易可以由客户端或第二区块链节点发送至第一区块链节点,此处不再赘述。
如果所述隐私类型的智能合约被传递至如图5所示的常规执行环境中执行,那么当该隐私类型的智能合约将无法在常规执行环境中被解密和执行,进而导致交易失败。因此,本说明书需要将所述隐私类型的智能合约传递至可信执行环境中予以执行,可以在可信执行环境中顺利实现解密和执行,并进而针对下述隐私类型的被调用的智能合约进行解密和执行,从而实现了由隐私类型的智能合约对隐私类型的智能合约进行调用。
在一实施例中,可以通过交易级别的标注,以确保所述隐私类型的智能合约在可信执行环境而非常规执行环境中执行。与图4所示实施例相类似的,可以在交易中增加一类型字段,比如表征为type字段,并基于该类型字段的取值,表明相关交易的类型;例如,当类型字段为第一取值时,表明相关交易为明文交易,当类型字段为第二取值时,表明相关交易为隐私交易。相应的,第一区块链节点收到的交易首先进入如图5所示的常规执行环境中的“交易/查询接口”进行类型识别,将识别出的明文交易留在常规执行环境中进行处理,而将识别出的隐私交易传递至可信执行环境中进行处理。
因此,当交易用于创建或调用所述隐私类型的智能合约时,可以将该交易的类型字段标注为隐私类型。相应地,第一区块链节点接收交易后,可以根据交易包含的类型字段确定所述交易为经加密的隐私交易,进而对所述隐私交易进行解密后,读入可信执行环境中执行。
例如图11所示,假定隐私交易包含智能合约A4的代码,用于创建隐私类型的智能合约A4;如果智能合约A4调用了明文类型的智能合约B4,第一区块链节点可以从外部存储空间将该智能合约B4的明文代码读入可信存储空间中,将该明文代码在可信存储空间的虚拟机中执行。
在一实施例中,可以通过合约级别的标注,以确保所述隐私类型的智能合约在可信执行环境而非常规执行环境中执行。
例如,交易中可以存在对所需创建或调用的智能合约标注的处理类型,使得第一区块链节点可以针对该交易中标注的处理类型,对该交易调用的的智能合约采用对应的处理操作。比如,智能合约的代码中可以包括一类型字段,第一区块链节点可以基于每一智能合约的代码中所含类型字段的取值,确定该智能合约为隐私处理类型或是明文处理类型;再比如,隐私处理类型的智能合约中可以包含隐私标识符、明文处理类型的智能合约可以不包含该隐私标识符;又比如,明文处理类型的智能合约可以包含明文标识符、隐私处理类型的智能合约可以不包含该明文标识符;相应地,第一区块链节点可以基于上述差异,区分不同处理类型的智能合约。
因此,当交易需创建或调用隐私类型的智能合约时,可以在该交易中将该隐私类型的智能合约标注为隐私处理类型。相应地,第一区块链节点接收交易后,可以读取所述交易中针对所述隐私类型的智能合约标注的处理类型,并在标注为隐私处理类型时,在可信执行环境中执行所述隐私类型的智能合约,并进而在可信执行环境中执行该隐私类型的智能合约调用的隐私类型的智能合约。
针对上述交易级别或合约级别的标注,当所述交易用于创建智能合约时,第一区块链节点对该交易进行解密后,可以得到所述隐私类型的智能合约的明文代码,并将该明文代码在可信执行环境中予以执行。当所述交易用于调用智能合约时,第一区块链节点对该交易进行解密后,可以获得需要调用的合约地址,并从该合约地址获取所述明文类型的智能合约的明文代码,进而将该明文代码读入可信执行环境中予以执行。
例如图12所示,假定交易调用了隐私类型的智能合约A5,第一区块链节点可以从外部存储空间读取智能合约A5的密文代码,通过可信存储空间中保存的密钥进行解密为明文代码后读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A5调用了另一明文类型的智能合约B5,使得第一区块链节点可以从外部存储空间将该智能合约B5的明文代码读入可信存储空间中,将该明文代码在可信存储空间的虚拟机中执行。
在一实施例中,所述隐私类型的智能合约可以直接调用所述被调用的智能合约,这可以参考图11或图12所示的实施例。
除了直接调用之外,所述隐私类型的智能合约可以间接调用所述被调用的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
例如,上述交易用于创建隐私类型的智能合约A4,第一区块链节点可以对交易解密得到智能合约A4的明文代码并读入可信执行环境中,通过可信执行环境中的虚拟机执行该明文代码,以确定该智能合约A4调用了另一明文或隐私类型的智能合约B4-1,使得第一区块链节点可以从外部存储空间将该智能合约B4-1的代码读入可信存储空间的虚拟机中予以执行(若智能合约B4-1为隐私类型,还需解密),确定该智能合约B4-1进一步调用了明文类型的智能合约B4,使得第一区块链节点可以从外部存储空间将该智能合约B4的明文代码读入可信存储空间中,将该明文代码在可信存储空间的虚拟机中执行。再例如,上述交易用于创建该隐私类型的智能合约A4,该智能合约A4可以调用智能合约B4-1、该智能合约B4-1调用智能合约B4-2……智能合约B4-n调用智能合约B4,那么第一区块链节点可以将智能合约A4、智能合约B4-1~B4-n、智能合约B4均读入可信执行环境中予以执行(隐私类型的智能合约需解密)。
再例如,上述交易用于调用隐私类型的智能合约A5,第一区块链节点可以从外部存储空间读取智能合约A5的密文代码,解密并读入可信执行环境中、由可信执行环境中的虚拟机执行,以确定该智能合约A5调用了另一明文或隐私类型的智能合约B5-1,使得第一区块链节点可以从外部存储空间将该智能合约B5-1的代码读入可信存储空间的虚拟机中予以执行(若智能合约B5-1为隐私类型,还需解密),确定该智能合约B5-1进一步调用了明文类型的智能合约B5,使得第一区块链节点可以从外部存储空间将该智能合约B5的明文代码读入可信存储空间,将该明文代码在可信存储空间的虚拟机中执行。再例如,上述交易调用了隐私类型的智能合约A5,该智能合约A5可以调用智能合约B5-1、该智能合约B5-1调用智能合约B5-2……智能合约B5-n调用智能合约B5,那么第一区块链节点可以将智能合约A5、智能合约B5-1~B5-n、智能合约B5均读入可信执行环境中予以执行(隐私类型的智能合约需解密)。
如果上述的交易为隐私类型,可以通过对称加密方式对交易加密,或者可以通过非对称加密方式对交易加密,或者可以通过对称加密与非对称加密相结合的方式对交易加密,而第一区块链节点可以相应解密。具体可以参考图4所示实施例的相关描述,此处不再赘述。
步骤1004,当被调用的智能合约为明文类型时,第一区块链节点在所述可信执行环境中执行所述被调用的智能合约。
明文类型的智能合约本身以明文形式存储于外部存储空间,因而隐私性需求较之隐私类型的智能合约而言相对更低。但是,仍然可以通过调用条件限制对明文类型的智能合约进行调用。因此,第一区块链节点可以获取被调用的智能合约的调用条件,并在确定所述调用条件被满足时,才允许在所述可信执行环境中执行被调用的智能合约的代码,否则应当阻止该调用操作。例如可以通过调用白名单或调用黑名单予以实现,具体可以参考图4所示的实施例,此处不再赘述。
在一实施例中,当交易用于调用隐私类型的智能合约时,第一区块链节点需要从外部存储空间读取相应的智能合约,并对该智能合约进行解密。而第一区块链节点在可信执行环境中执行完毕后,得到的明文执行结果需要被加密为密文执行结果后,存入外部存储空间。这里涉及到的解密、加密过程,需要应用诸如图4所示实施例中的seal密钥或其他的类似密钥,可以参考上文的相关描述,此处不再赘述。
在一实施例中,第一区块链节点可以将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。对于密文执行结果的存储操作、存储过程中的缓存机制、读取过程中的缓存机制,均可以参考图4所示实施例中的相关描述,此处不再赘述。
以下结合图13介绍本说明书一种区块链中实现合约调用的节点实施例,包括:
第一执行单元1301,用于在可信执行环境中执行明文类型的智能合约,以确定所述明文类型的智能合约调用的智能合约;
解密单元1302,用于在被调用的智能合约为隐私类型时,对所述被调用的智能合约进行解密;
第二执行单元1303,用于在所述可信执行环境中执行解密后的所述被调用的智能合约。
以下结合图14介绍本说明书另一种区块链中实现合约调用的节点实施例,包括:
第一解密单元1401,用于对隐私类型的智能合约进行解密;
第一执行单元1402,用于在可信执行环境中执行解密后的所述隐私类型的智能合约,以确定所述隐私类型的智能合约调用的智能合约;
第二解密单元1403,用于在被调用的智能合约为隐私类型时,对所述被调用的智能合约进行解密;
第二执行单元1404,用于在所述可信执行环境中执行解密后的所述被调用的智能合约。
以下结合图15介绍本说明书又一种区块链中实现合约调用的节点实施例,包括:
解密单元1501,用于对隐私类型的智能合约进行解密;
第一执行单元1502,用于在可信执行环境中执行解密后的所述隐私类型的智能合约,以确定所述隐私类型的智能合约调用的智能合约;
第二执行单元1503,用于在被调用的智能合约为明文类型时,在所述可信执行环境中执行所述被调用的智能合约。
在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,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (47)

1.一种区块链中实现合约调用的方法,包括:
区块链节点接收交易,所述交易用于调用明文类型的智能合约;
所述区块链节点将所述交易传入可信执行环境,在所述可信执行环境中执行所述明文类型的智能合约,并在所述可信执行环境中解密和执行所述明文类型的智能合约进一步调用的隐私类型的智能合约;或者,
所述区块链节点将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
2.根据权利要求1所述的方法,还包括:
当所述交易为经加密的隐私交易时,或者当所述交易调用的明文类型的智能合约被标注为隐私处理类型时,所述区块链节点将所述交易传入所述可信执行环境;否则,所述区块链节点将所述交易传入所述常规执行环境。
3.根据权利要求2所述的方法,还包括:
所述区块链节点根据所述交易中类型字段的取值确定所述交易的类型;其中,类型字段的第一取值用于表明所属交易为明文交易,类型字段的第二取值用于表明所属交易为隐私交易。
4.根据权利要求1所述的方法,所述区块链节点通过所述可信执行环境内部署的虚拟机执行读入所述可信执行环境内的智能合约;以及,通过所述常规执行环境中部署的虚拟机执行读入所述常规执行环境内的智能合约。
5.根据权利要求1所述的方法,
所述明文类型的智能合约直接进一步调用所述隐私类型的智能合约;或,
所述明文类型的智能合约间接调用所述隐私类型的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
6.根据权利要求1所述的方法,还包括:
所述区块链节点确定所述明文类型的智能合约进一步调用的智能合约的调用条件;
所述区块链节点在所述调用条件被满足时,执行所述明文类型的智能合约进一步调用的智能合约。
7.根据权利要求6所述的方法,所述调用条件包括:
调用方处于调用白名单中;或,
调用方未处于调用黑名单中。
8.根据权利要求7所述的方法,所述调用方包括以下至少之一:发起调用的用户、所述智能合约的合约地址、发起调用的函数。
9.根据权利要求7所述的方法,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约中;或,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约所调用的另一智能合约中。
10.根据权利要求1所述的方法,还包括:
所述区块链节点将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
11.根据权利要求10所述的方法,还包括:
所述区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;
其中,所述区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。
12.根据权利要求11所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。
13.根据权利要求10所述的方法,还包括:
所述区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从所述可信执行环境输出,以返回至所述客户端。
14.根据权利要求13所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:
所述区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,
所述区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由所述区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。
15.一种区块链中实现合约调用的方法,包括:
区块链节点接收交易,所述交易用于调用明文类型或隐私类型的智能合约;
所述区块链节点将所述交易传入可信执行环境,在所述可信执行环境中解密和执行所述隐私类型的智能合约,并在所述可信执行环境中解密和执行所述隐私类型的智能合约进一步调用的隐私类型的智能合约;或者,
所述区块链节点将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
16.根据权利要求15所述的方法,还包括:
当所述交易为经加密的隐私交易时,或者当所述交易调用的明文类型的智能合约被标注为隐私处理类型时,所述区块链节点将所述交易传入所述可信执行环境;否则,所述区块链节点将所述交易传入所述常规执行环境。
17.根据权利要求16所述的方法,还包括:
所述区块链节点根据所述交易中类型字段的取值确定所述交易的类型;其中,类型字段的第一取值用于表明所属交易为明文交易,类型字段的第二取值用于表明所属交易为隐私交易。
18.根据权利要求15所述的方法,所述区块链节点通过所述可信执行环境内部署的虚拟机执行读入所述可信执行环境内的智能合约;以及,通过所述常规执行环境中部署的虚拟机执行读入所述常规执行环境内的智能合约。
19.根据权利要求15所述的方法,
所述隐私类型的智能合约直接进一步调用隐私类型的智能合约;或,
所述隐私类型的智能合约间接调用隐私类型的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
20.根据权利要求15所述的方法,还包括:
所述区块链节点确定所述交易调用的智能合约进一步调用的智能合约的调用条件;
所述区块链节点在所述调用条件被满足时,执行所述交易调用的智能合约进一步调用的智能合约。
21.根据权利要求20所述的方法,所述调用条件包括:
调用方处于调用白名单中;或,
调用方未处于调用黑名单中。
22.根据权利要求21所述的方法,所述调用方包括以下至少之一:发起调用的用户、所述智能合约的合约地址、发起调用的函数。
23.根据权利要求21所述的方法,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约中;或,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约所调用的另一智能合约中。
24.根据权利要求15所述的方法,还包括:
所述区块链节点将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
25.根据权利要求24所述的方法,还包括:
所述区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;
其中,所述区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。
26.根据权利要求25所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。
27.根据权利要求24所述的方法,还包括:
所述区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。
28.根据权利要求27所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:
所述区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,
所述区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由所述区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。
29.一种区块链中实现合约调用的方法,包括:
区块链节点接收交易,所述交易用于调用明文类型或隐私类型的智能合约;
所述区块链节点将所述交易传入可信执行环境,在所述可信执行环境中解密和执行所述隐私类型的智能合约,并在所述可信执行环境中执行所述隐私类型的智能合约进一步调用的明文类型的智能合约;或者,
所述区块链节点将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
30.根据权利要求29所述的方法,还包括:
当所述交易为经加密的隐私交易时,或者当所述交易调用的明文类型的智能合约被标注为隐私处理类型时,所述区块链节点将所述交易传入所述可信执行环境;否则,所述区块链节点将所述交易传入所述常规执行环境。
31.根据权利要求30所述的方法,还包括:
所述区块链节点根据所述交易中类型字段的取值确定所述交易的类型;其中,类型字段的第一取值用于表明所属交易为明文交易,类型字段的第二取值用于表明所属交易为隐私交易。
32.根据权利要求29所述的方法,所述区块链节点通过所述可信执行环境内部署的虚拟机执行读入所述可信执行环境内的智能合约;以及,通过所述常规执行环境中部署的虚拟机执行读入所述常规执行环境内的智能合约。
33.根据权利要求29所述的方法,
所述隐私类型的智能合约直接进一步调用明文类型的智能合约;或,
所述隐私类型的智能合约间接调用明文类型的智能合约,且所述间接调用涉及到的智能合约均被读入可信执行环境中执行。
34.根据权利要求29所述的方法,还包括:
所述区块链节点确定所述交易调用的智能合约进一步调用的智能合约的调用条件;
所述区块链节点在所述调用条件被满足时,执行所述交易调用的智能合约进一步调用的智能合约。
35.根据权利要求34所述的方法,所述调用条件包括:
调用方处于调用白名单中;或,
调用方未处于调用黑名单中。
36.根据权利要求35所述的方法,所述调用方包括以下至少之一:发起调用的用户、所述智能合约的合约地址、发起调用的函数。
37.根据权利要求35所述的方法,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约中;或,
所述调用白名单或所述调用黑名单位于所述被调用的智能合约所调用的另一智能合约中。
38.根据权利要求29所述的方法,还包括:
所述区块链节点将明文执行结果加密为密文执行结果后从所述可信执行环境中输出,并通过在所述可信执行环境之外执行存储功能代码,以将所述密文执行结果存储至所述可信执行环境之外的外部存储空间。
39.根据权利要求38所述的方法,还包括:
所述区块链节点在可信执行环境内执行写缓存功能代码,以将所述明文执行结果存入所述可信执行环境内的写缓存中;
其中,所述区块链节点将所述写缓存中的数据加密后从所述可信执行环境输出,以存储至所述外部存储空间。
40.根据权利要求39所述的方法,所述缓存功能代码以明文形式存储于所述可信执行环境中;或,所述写缓存功能代码以密文形式存储于所述可信执行环境之外。
41.根据权利要求38所述的方法,还包括:
所述区块链节点根据客户端发起的查询请求,对所述明文执行结果加密后从可信执行环境输出,以返回至所述客户端。
42.根据权利要求41所述的方法,所述对所述明文执行结果加密后从可信执行环境输出,包括:
所述区块链节点从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境;对所述明文执行结果加密后从可信执行环境输出;或,
所述区块链节点从可信执行环境内的读缓存中读取所述明文执行结果,并对所述明文执行结果加密后从可信执行环境输出;其中,所述明文执行结果由所述区块链节点预先在可信执行环境内执行读缓存功能代码,从所述外部存储空间中读取所述密文执行结果,将所述密文执行结果解密为所述明文执行结果后,读入所述可信执行环境并存入所述读缓存中。
43.一种区块链中实现合约调用的节点,包括:
第一执行单元,用于接收交易,所述交易用于调用明文类型的智能合约;
解密单元,用于将所述交易传入可信执行环境,在所述可信执行环境中执行所述明文类型的智能合约,并在所述可信执行环境中解密和执行所述明文类型的智能合约进一步调用的隐私类型的智能合约;
第二执行单元,用于将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
44.一种区块链中实现合约调用的节点,包括:
第一解密单元,用于接收交易,所述交易用于调用明文类型或隐私类型的智能合约;
第一执行单元,用于将所述交易传入可信执行环境,在所述可信执行环境中解密和执行所述隐私类型的智能合约,并在所述可信执行环境中解密和执行所述隐私类型的智能合约进一步调用的隐私类型的智能合约;
第二执行单元,用于将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
45.一种区块链中实现合约调用的节点,包括:
解密单元,用于接收交易,所述交易用于调用明文类型或隐私类型的智能合约;
第一执行单元,用于将所述交易传入可信执行环境,在所述可信执行环境中解密和执行所述隐私类型的智能合约,并在所述可信执行环境中执行所述隐私类型的智能合约进一步调用的明文类型的智能合约;
第二执行单元,用于将所述交易传入常规执行环境,在所述常规执行环境中执行所述明文类型的智能合约,并在所述常规执行环境中执行所述明文类型的智能合约进一步调用的另一明文类型的智能合约。
46.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-42中任一项所述的方法。
47.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-42中任一项所述方法的步骤。
CN202010645619.3A 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质 Active CN111898156B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010645619.3A CN111898156B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201910101417.XA CN110008735B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质
CN202010645619.3A CN111898156B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201910101417.XA Division CN110008735B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质

Publications (2)

Publication Number Publication Date
CN111898156A true CN111898156A (zh) 2020-11-06
CN111898156B CN111898156B (zh) 2024-04-16

Family

ID=67165688

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201910101417.XA Active CN110008735B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质
CN202010645619.3A Active CN111898156B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910101417.XA Active CN110008735B (zh) 2019-01-31 2019-01-31 区块链中实现合约调用的方法及节点、存储介质

Country Status (1)

Country Link
CN (2) CN110008735B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110766550B (zh) * 2019-09-05 2021-06-22 创新先进技术有限公司 基于区块链的资产查询方法及装置、电子设备
CN110750303B (zh) * 2019-09-25 2020-10-20 支付宝(杭州)信息技术有限公司 基于fpga的流水线式指令读取方法及装置
CN110688651A (zh) * 2019-09-25 2020-01-14 支付宝(杭州)信息技术有限公司 基于fpga实现状态更新的方法及装置
CN112927077B (zh) * 2019-09-25 2022-05-24 支付宝(杭州)信息技术有限公司 基于fpga实现合约调用的方法及装置
CN110580262B (zh) * 2019-11-08 2020-03-10 支付宝(杭州)信息技术有限公司 基于智能合约的隐私数据查询方法及装置
CN111340491B (zh) * 2020-02-25 2023-08-29 中国工商银行股份有限公司 一种松散耦合的区块链自主交易方法、装置和系统
CN111429254B (zh) * 2020-03-19 2021-09-10 腾讯科技(深圳)有限公司 一种业务数据处理方法、设备以及可读存储介质
CN111861482B (zh) * 2020-09-22 2021-07-06 支付宝(杭州)信息技术有限公司 一种区块链对账方法和系统
CN113255003B (zh) * 2021-06-15 2022-03-18 中国电子科技网络信息安全有限公司 一种区块链系统安全管控方法
CN114331442B (zh) * 2022-03-07 2022-05-06 北京溪塔科技有限公司 一种区块链中智能合约的调用方法及装置
CN115438335B (zh) * 2022-11-07 2023-02-10 上海特高信息技术有限公司 一种用于加固智能合约安全运行的安全沙箱系统

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106845160A (zh) * 2015-12-03 2017-06-13 国家新闻出版广电总局广播科学研究院 一种用于智能操作系统的数字版权管理(drm)方法和系统
CN107294709A (zh) * 2017-06-27 2017-10-24 阿里巴巴集团控股有限公司 一种区块链数据处理方法、装置及系统
CN107342858A (zh) * 2017-07-05 2017-11-10 武汉凤链科技有限公司 一种基于可信环境的智能合约保护方法和系统
CN107919954A (zh) * 2017-10-20 2018-04-17 浙江大学 一种基于sgx的区块链用户密钥保护方法和装置
WO2018131004A2 (fr) * 2017-01-16 2018-07-19 Enrico Maim Procédés et systèmes pour l'exécution de programmes dans des environnements sécurisés
CN108320160A (zh) * 2018-02-02 2018-07-24 张超 区块链系统、区块共识方法和装置
US20180239897A1 (en) * 2017-02-20 2018-08-23 AlphaPoint Performance of distributed system functions using a trusted execution environment
CN108683657A (zh) * 2018-05-11 2018-10-19 试金石信用服务有限公司 数据的安全访问方法、装置、终端设备及可读存储介质
US20180309567A1 (en) * 2017-04-25 2018-10-25 Microsoft Technology Licensing, Llc Confidentiality in a consortium blockchain network
CN108898490A (zh) * 2018-06-25 2018-11-27 北京奇虎科技有限公司 智能合约的执行方法、节点、系统、电子设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108954B2 (en) * 2016-06-24 2018-10-23 PokitDok, Inc. System and method for cryptographically verified data driven contracts
CN108074177B (zh) * 2017-12-05 2022-01-11 深圳前海微众银行股份有限公司 数据对账方法、系统和计算机可读存储介质
CN108123936B (zh) * 2017-12-13 2021-04-13 北京科技大学 一种基于区块链技术的访问控制方法及系统
CN108170740B (zh) * 2017-12-18 2022-04-26 深圳前海微众银行股份有限公司 数据迁移方法、系统和计算机可读存储介质
CN109886682B (zh) * 2019-01-31 2020-10-23 创新先进技术有限公司 区块链中实现合约调用的方法及节点、存储介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106845160A (zh) * 2015-12-03 2017-06-13 国家新闻出版广电总局广播科学研究院 一种用于智能操作系统的数字版权管理(drm)方法和系统
WO2018131004A2 (fr) * 2017-01-16 2018-07-19 Enrico Maim Procédés et systèmes pour l'exécution de programmes dans des environnements sécurisés
US20180239897A1 (en) * 2017-02-20 2018-08-23 AlphaPoint Performance of distributed system functions using a trusted execution environment
US20180309567A1 (en) * 2017-04-25 2018-10-25 Microsoft Technology Licensing, Llc Confidentiality in a consortium blockchain network
CN107294709A (zh) * 2017-06-27 2017-10-24 阿里巴巴集团控股有限公司 一种区块链数据处理方法、装置及系统
CN107342858A (zh) * 2017-07-05 2017-11-10 武汉凤链科技有限公司 一种基于可信环境的智能合约保护方法和系统
CN107919954A (zh) * 2017-10-20 2018-04-17 浙江大学 一种基于sgx的区块链用户密钥保护方法和装置
CN108320160A (zh) * 2018-02-02 2018-07-24 张超 区块链系统、区块共识方法和装置
CN108683657A (zh) * 2018-05-11 2018-10-19 试金石信用服务有限公司 数据的安全访问方法、装置、终端设备及可读存储介质
CN108898490A (zh) * 2018-06-25 2018-11-27 北京奇虎科技有限公司 智能合约的执行方法、节点、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN111898156B (zh) 2024-04-16
CN110008735B (zh) 2020-05-19
CN110008735A (zh) 2019-07-12

Similar Documents

Publication Publication Date Title
CN109886682B (zh) 区块链中实现合约调用的方法及节点、存储介质
CN110008735B (zh) 区块链中实现合约调用的方法及节点、存储介质
CN109831298B (zh) 区块链中安全更新密钥的方法及节点、存储介质
CN110033368B (zh) 区块链中实现隐私保护的方法
CN110032883B (zh) 区块链中实现隐私保护的方法、系统和节点
CN110020855B (zh) 区块链中实现隐私保护的方法、节点、存储介质
CN110245506B (zh) 基于区块链的智能合约管理方法及装置、电子设备
CN109936626B (zh) 区块链中实现隐私保护的方法、节点和存储介质
CN110033267B (zh) 区块链中实现隐私保护的方法、节点、系统和存储介质
CN110032885B (zh) 区块链中实现隐私保护的方法、节点和存储介质
CN110032884B (zh) 区块链中实现隐私保护的方法及节点、存储介质
CN110060054B (zh) 区块链中实现隐私保护的方法、节点、系统和存储介质
CN110020549B (zh) 区块链中实现隐私保护的方法、节点和存储介质
CN110020856B (zh) 区块链中实现混合交易的方法、节点和存储介质
CN110245490B (zh) 有条件的结合代码标注与类型维度的收据存储方法和节点
CN110263544B (zh) 结合交易类型和判断条件的收据存储方法和节点
CN110032876B (zh) 区块链中实现隐私保护的方法、节点和存储介质
CN110266644B (zh) 结合代码标注与交易类型的收据存储方法和节点
CN110264198B (zh) 结合代码标注与交易类型的有条件的收据存储方法和节点
CN110264196B (zh) 结合代码标注与用户类型的有条件的收据存储方法和节点
CN110245503B (zh) 结合代码标注与判断条件的收据存储方法和节点
CN110245942B (zh) 结合用户类型和判断条件的收据存储方法和节点
CN110033266B (zh) 区块链中实现隐私保护的方法、节点和存储介质
CN110245947B (zh) 结合交易与用户类型的条件限制的收据存储方法和节点
CN110008715B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40039820

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant