基于可信执行环境中执行的智能合约操作处理区块链数据的制作方法

文档序号:20167682发布日期:2020-03-24 22:01阅读:204来源:国知局
基于可信执行环境中执行的智能合约操作处理区块链数据的制作方法

本文涉及在可信执行环境下处理区块链数据。



背景技术:

分布式账本(dls),也可称为共识网络和/或区块链网络,使参与的实体能够安全地且不可篡改地存储数据。在不引用任何特定用例的情况下,dls通常被称为区块链网络。区块链网络的示例类型可以包括公有区块链网络、私有区块链网络和联盟区块链网络。联盟区块链网络针对选择的实体组群提供,该实体组群控制共识处理,并且该联盟区块链网络包括访问控制层。

智能合约是在区块链上执行的程序。智能合约包含预定义规则集,根据该规则集,所述智能合约的各方同意彼此交互。智能合约可以由诸如以太坊的分布式计算平台执行。例如,以太坊虚拟机(evm)可以为以太坊中的智能合约提供运行时环境。以太坊区块链可以被视为基于交易的状态机。以太坊可以拥有被称为世界状态的全局共享状态。世界状态包括以太坊账户地址和账户状态之间的映射。所述映射被存储在称为默克尔帕特里夏树(merklepatriciatree,mpt)的数据结构中。

尽管以太坊账户状态经常被加密以保护账户隐私,但所使用的加密密钥对于所有账户都是相同的。这样,可以保留mpt的数据结构,使得所有区块链节点可以以相同的方式计算默克尔(merkle)根,以用于默克尔证明或状态更新。然而,通过在所有账户中使用相同的密钥,不能隐藏世界状态的数据结构,并且攻击者可以分析与账户关系和行为相关联的隐私信息。

因此,期望在可信执行环境中检索和更新区块链的账户值,并将相应的mpt存储在密文中以隐藏其数据结构。



技术实现要素:

本文描述了用于基于在可信执行环境(tee)中执行的智能合约操作处理区块链数据的技术。这些技术通常涉及接收用于在tee中执行一个或多个软件指令的请求,所述tee在所述区块链节点上执行;确定与一个或多个区块链账户相关联的数据,以基于所述请求执行一个或多个软件指令;遍历存储在所述tee中的区块链的全局状态以定位数据;以及基于所述数据执行一个或多个软件指令。

本文还提供了耦接到一个或多个处理器并且其上存储有指令的一个或多个非暂态计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。

本文还提供了用于实施本文提供的所述方法的系统。所述系统包括一个或多个处理器以及耦接到所述一个或多个处理器并且其上存储有指令的计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。

应了解,依据本文的方法可以包括本文描述的方面和特征的任意组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任意组合。

以下在附图和描述中阐述了本文的一个或多个实施例的细节。根据说明书和附图以及权利要求,本文的其他特征和优点将显现。

附图说明

图1是示出了可用于执行本文的实施例的环境的示例的图。

图2是示出根据本文的实施例的架构的示例的图。

图3是示出根据本文的实施例的与tee的外部的数据库通信的tee的结构的示例的图。

图4是根据本文的实施例的处理的示例的流程图。

图5描绘了根据本文的实施例的装置的模块的示例。

各附图中相同的附图标记和名称表示相同的元件。

具体实施方式

本文描述了用于基于在可信执行环境(tee)中执行的智能合约操作处理区块链数据的技术。这些技术通常涉及接收用于在tee中执行一个或多个软件指令的请求,所述tee在所述区块链节点上执行;确定与一个或多个区块链账户相关联的数据,以基于所述请求执行一个或多个软件指令;遍历存储在所述tee中的区块链的全局状态以定位数据;以及基于所述数据执行一个或多个软件指令。

为本文实施例提供进一步的背景,并且如上所述,分布式账本系统(dls),又可称为共识网络(例如,由点对点节点组成)和区块链网络,使参与的实体能够安全地、不可篡改地进行交易和存储数据。尽管术语区块链通常与特定网络和/或用例相关联,但在不参考任何特定用例的情况下,本文使用“区块链”来一般地指代dls。

区块链是以交易不可篡改的方式存储交易的数据结构。因此,区块链上记录的交易是可靠且可信的。区块链包括一个或多个区块。链中的每个区块通过包含在链中紧邻其之前的前一区块的加密哈希值(cryptographichash)链接到该前一区块。每个区块还包括时间戳、自身的加密哈希值以及一个或多个交易。已经被区块链网络中的节点验证的交易经哈希处理并编入默克尔(merkle)树中。默克尔树是一种数据结构,在该树的叶节点处的数据是经哈希处理的,并且在该树的每个分支中的所有哈希值在该分支的根处连接。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。可通过确定哈希值是否与树的结构一致而可快速验证该哈希值是否为存储在该树中的交易的哈希值。

区块链是用于存储交易的去中心化或至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上所述,区块链网络可作为公有区块链网络、私有区块链网络或联盟区块链网络被提供。本文中参考联盟区块链网络进一步详细描述了本文的实施例。然而,可以预期,本文实施例可以在任何适当类型的区块链网络中实现。

通常,联盟区块链网络在参与实体之间是私有的。在联盟区块链网络中,共识处理由经授权的一组节点控制,所述节点可以被称为共识节点,一个或多个共识节点由各自的实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体可以操作联盟区块链网络中的至少一个节点。

在一些示例中,在联盟区块链网络内,全局区块链作为跨所有节点复制的区块链被提供。也就是说,所有共识节点相对于全局区块链处于完全共识状态。为了达成共识(例如,同意向区块链添加区块),在联盟区块链网络内实施共识协议。例如,联盟区块链网络可以实现实用拜占庭容错(pbft)共识,下面将进一步详细描述。

图1是示出了可用于执行本文的实施例的环境100的示例的图。在一些示例中,环境100使得实体能够参与联盟区块链网络102。环境100包括计算设备106、108以及网络110。在一些示例中,网络110包括局域网(lan)、广域网(wan)、因特网或其组合,并且连接网络站点、用户设备(例如,计算设备)和后端系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络110。在一些示例中,网络110使得与联盟区块链网络102通信或在联盟区块链网络102内通信成为可能。通常,网络110表示一个或多个通信网络。在一些情况下,计算系统106、108可以是云计算系统(未示出)的节点,或者每个计算系统106、108可以是单独的云计算系统,其包括通过网络互连的并且用作分布式处理系统的多个计算机。

在所描绘的示例中,计算系统106、108可以各自包括能够作为节点参与至联盟区块链网络102中的任何适当的计算设备。计算设备的示例包括但不限于服务器、台式计算机、膝上型计算机、平板计算设备以及智能电话。在一些示例中,计算系统106、108承载一个或多个由计算机实现的服务,用于与联盟区块链网络102进行交互。例如,计算系统106可以承载第一实体(例如,用户a)的由计算机实现的、例如交易管理系统的服务,第一实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。计算系统108可以承载第二实体(例如,用户b)的由计算机实现的、例如交易管理系统的服务,例如,第二实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络(peer-to-peernetwork),且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。

图2描绘了根据本文的实施例的架构200的示例。所述架构200包括实体层202、承载服务层204和区块链网络层206。在所描绘的示例中,实体层202包括三个参与者,参与者a、参与者b和参与者c,每个参与者具有各自的交易管理系统208。

在所描绘的示例中,承载服务层204包括用于每个交易管理系统210的接口210。在一些示例中,各自的交易管理系统208通过网络(例如,图1的网络110)使用协议(例如,超文本传输安全协议(https))与各自的接口210通信。在一些示例中,每个接口210提供各自的交易管理系统208与区块链网络层206之间的通信连接。更具体地,接口210与区块链网络层206的区块链网络212通信。在一些示例中,使用远程过程调用(rpc)进行接口210与区块链网络层206之间的通信。在一些示例中,接口210“承载”用于各自的交易管理系统208的区块链网络节点。例如,接口210提供用于访问区块链网络212的应用编程接口(api)。

如本文所述,提供作为对等网络的区块链网络212,所述区块链网络212包括在区块链216中不变地记录信息的多个节点214。尽管示意性地描述了单个区块链216,但在区块链网络212上提供并维护了区块链216的多个副本。例如,每个节点214存储区块链的副本。在一些实施例中,区块链216存储与在参与联盟区块链网络的两个或更多个实体之间执行的交易相关联的信息。

区块链(例如,图2的区块链216)由一系列区块组成,每个区块存储数据。所述数据的示例包括表示两个或更多个参与者之间的交易的交易数据。尽管本文通过非限制性示例使用了“交易”,但是可以预期,任何适当的数据可以存储在区块链中(例如,文档、图像、视频、音频)。所述交易的示例可以包括但不限于有价物的交换(例如,资产、产品、服务、货币)。交易数据不可篡改地存储在区块链中。也就是说,交易数据不能改变。

在将交易数据存储在区块中之前,对交易数据进行哈希处理。哈希处理是将交易数据(作为字符串数据提供)转换为固定长度哈希值(也作为字符串数据提供)的处理。不可能对哈希值进行去哈希处理(un-hash)以获取交易数据。哈希处理可确保即使交易数据轻微改变也会导致完全不同的哈希值。此外,如上所述,哈希值具有固定长度。也就是说,无论交易数据的大小如何,哈希值的长度都是固定的。哈希处理包括通过哈希函数处理交易数据以生成哈希值。哈希函数的示例包括但不限于输出256位哈希值的安全哈希算法(sha)-256。

多个交易的交易数据被哈希处理并存储在区块中。例如,提供两个交易的哈希值,并对它们本身进行哈希处理以提供另一个哈希值。重复此过程,直到针对所有要存储在区块中的交易提供单个哈希值为止。该哈希值被称为默克尔根哈希值,并存储在区块的头中。任何交易中的更改都会导致其哈希值发生变化,并最终导致默克尔根哈希值发生变化。

通过共识协议将区块添加到区块链。区块链网络中的多个节点参与共识协议,并执行将区块添加到区块链中的操作。这种节点被称为共识节点。如上介绍的pbft用作共识协议的非限制性示例。共识节点执行共识协议以将交易添加到区块链,并更新区块链网络的整体状态。

进一步详细地,共识节点生成区块头,对区块中的所有交易进行哈希处理,并将所得的哈希值成对地组合以生成进一步的哈希值,直到为区块中的所有交易提供单个哈希值(默克尔根哈希值)。将此哈希值添加到区块头中。共识节点还确定区块链中最近的区块的哈希值(即,添加到区块链中的最后一个区块)。共识节点还向区块头添加随机数(nonce)和时间戳。

通常,pbft提供容忍拜占庭故障(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的经操纵的消息)在pbft中实现。在pbft中,以包括主共识节点和备共识节点的顺序提供共识节点。主共识节点被周期性地改变,交易由区块链网络内达成关于区块链网络的世界状态的协议的所有共识节点添加到区块链中。在此过程中,在共识节点之间传输消息,并且每个共识节点证明从指定的对等节点接收消息,并验证在传输期间所述消息未被修改。

在pbft中,共识协议是在所有共识节点始于相同的状态的情况下分多个阶段提供的。首先,客户端向主共识节点发送请求以调用服务操作(例如,在区块链网络内执行交易)。响应于接收到所述请求,主共识节点将所述请求多播到备共识节点。所述备份共识节点执行所述请求,并且每个节点都向客户端发送回复。客户端等待直到收到阈值数量的回复。在一些示例中,客户端等待接收f+1个回复,其中f是区块链网络内可以容忍的故障共识节点的最大数量。最终结果是,足够数量的共识节点对于要添加到区块链的记录的顺序达成一致,并且所述记录被接受或拒绝。

在一些区块链网络中,用密码学来维护交易的隐私。例如,如果两个节点想要保持交易隐私,以使得区块链网络中的其他节点不能看出交易的细节,则这两个节点可以对交易数据进行加密处理。加密处理的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既进行加密(从明文生成密文)又进行解密(从密文生成明文)的加密过程。在对称加密中,同一密钥可用于多个节点,因此每个节点都可以对交易数据进行加密/解密。

非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,而公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且该加密的数据可以使用其他节点的私钥被解密。例如,再次参考图2,参与者a可以使用参与者b的公钥来加密数据,并将加密数据发送给参与者b。参与者b可以使用其私钥来解密该加密数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息只能使用该节点的私钥解密。

非对称加密用于提供数字签名,这使得交易中的参与者能够确认交易中的其他参与者以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与者a的该数字签名来确认该消息是由该节点发送的。数字签名也可以用于确保消息在传输过程中不被篡改。例如,再次参考图2,参与者a将向参与者b发送消息。参与者a生成该消息的哈希值,然后使用其私钥加密该哈希值以提供为加密哈希值的数字签名。参与者a将该数字签名附加到该消息上,并将该具有数字签名的消息发送给参与者b。参与者b使用参与者a的公钥解密该数字签名,并提取哈希值。参与者b对该消息进行哈希处理并比较哈希值。如果哈希值相同,参与者b可以确认该消息确实来自参与者a,且未被篡改。

在一些实施例中,区块链网络的节点和/或与区块链网络通信的节点可以使用tee进行操作。在高层级上,tee是与硬件的操作环境(例如,操作系统(os)、基本输入/输出系统(bios))隔离的硬件(一个或多个处理器、存储器)内的可信环境。更详细地,tee是处理器的单独的安全区域,其确保代码的执行以及主处理器内加载的数据的机密性和完整性。在处理器内,tee与os并行运行。至少部分所谓的可信应用(ta)在tee内执行,并且可以访问处理器和存储器。通过tee,ta免受主os中运行的其他应用的影响。此外,tee将ta在tee内加密地彼此隔离。

tee的示例包括由美国加利福尼亚州圣克拉拉的英特尔公司提供的软件保护扩展(sgx)。尽管本文通过示例讨论了sgx,但是可以预期本文的实施例可以使用任何适当的tee来实现。

sgx提供基于硬件的tee。在sgx中,可信硬件是中央处理器(cpu)的死区,并且物理存储器的一部分被隔离以保护选择的代码和数据。存储器的隔离部分称为飞地(enclave)。更具体地,飞地被提供作为存储器中的飞地页面缓存(epc),并被映射到应用地址空间。存储器(例如,dram)包括用于sgx的保存随机存储器(prm)。prm是最低bios级别的连续存储空间,并且不能被任何软件访问。每个epc是由os分配以在prm中加载应用数据和代码的存储器集(例如,4kb)。epc元数据(epcm)是各个epc的入口地址,并确保每个epc只能由一个飞地共享。也就是说,单个飞地可以使用多个epc,而一个epc专用于单个飞地。

在执行ta期间,处理器当访问存储在飞地中的数据时以所谓的飞地模式操作。在飞地模式下的操作对每个存储访问强制执行额外的硬件检查。在sgx中,ta被编译为可信部分和不可信部分。可信部分不可被例如os、bios、特权系统代码、虚拟机管理器(vmm)、系统管理模式(smm)等访问。在操作中,ta运行并在存储器的prm内创建飞地。由飞地内的可信部分执行的可信函数被不可信部分调用,并且在飞地内执行的代码将数据视为明文数据(未加密),并且外部对数据的访问被拒绝。

在一些实施例中,在tee内部运行的虚拟机可以为应用提供可信运行时环境以安全地执行智能合约。虚拟机可以从tee的外部的应用接收调用。所述调用可以调用tee接口功能来启动智能合约的执行。在智能合约执行期间,虚拟机可以基于调用的输入参数或智能合约的内容从区块链账户检索数据。区块链账户地址和相应的账户状态作为键值对存储在称为mpt的数据结构中。mpt对应于区块链的世界状态,并以明文形式存储在tee中。在智能合约执行之后,一个或多个账户状态可能会发生变化,可能会添加或删除新账户。因此,可以基于哈希编码在tee内更新区块链的世界状态,以反映账户状态的变化。在更新世界状态之后,可以从tee进行调用以将更新的mpt存储到tee的外部的数据库。可以对来自tee的更新的mpt输出进行加密以隐藏其结构和存储在其中的数据。由于mpt在tee内部被处理和更新,并被以加密形式存储在tee的外部,因此可以对未被授权访问此类信息的区块链节点(例如,没有正确的密钥来对信息进行解密)隐藏区块链账户的状态、行为和关系。

图3是示出根据本文的实施例的与tee的外部的数据库通信的tee的结构300的示例的图。在高层级上,结构300包括tee302以及与tee302通信的数据库332,其中tee302存储虚拟机和mpt的世界状态308。

如上所述,ta,诸如启用sgx的应用,可以包括可信组件(或飞地组件)和不可信组件(应用组件)。应用组件位于tee302的外部,可以通过飞地接口功能访问tee302的可信计算基(trustedcomputingbase,tcb)。在一些实施例中,这些飞地接口功能是由应用组件使用的应用编程接口(api)。应用组件可以使用api进行“ecall”306来调用tee中的虚拟机304以执行智能合约。虚拟机可以是执行以特定编程语言或者诸如比特流的二进制格式编码的程序指令的软件程序。在一些情况下,虚拟机可以提供程序指令和执行虚拟机的计算设备的底层硬件之间的抽象层。这样的配置可以允许相同的程序指令以相同的方式在具有不同硬件的不同计算设备上执行。

在一些实施方式中,虚拟机可以是在以太坊区块链的上下文下的以太坊虚拟机(evm)。应该理解,其他区块链网络可以使用其他类型的虚拟机。在接收ecall306之后,虚拟机304可以识别与执行由ecall306指定的智能合约相关的一个或多个区块链账户。所述识别可以基于ecall306的一个或多个输入参数。例如,应用组件可以进行ecall306来执行智能合约,以将两个区块链账户之间的新交易添加到区块链中。虚拟机305可以识别密钥(即,账户地址)以从相应账户状态检索账户余额。然后,虚拟机304可以基于新交易的交易金额计算账户余额,并且相应地基于哈希编码更新世界状态308。因为tee302中的数据是明文格式,所以虚拟机304不需要执行解密或加密来更新世界状态308。

世界状态308也可以称为区块链网络的全局状态。全局状态可以包括区块链的账户地址与账户状态之间的映射。映射可以存储在称为mpt的数据结构中。账户地址和账户状态可以作为键值对(kvp)存储在mpt中。

全局状态mpt是给定时间点的全局状态的哈希值。全局状态可以包括用作mpt的安全且唯一的标识符的根节点。全局状态mpt的根节点可以加密地表示代表账户状态的数据。

在图3中描绘的结构300中,在世界状态308下示出了具有各自的账户状态0310和账户状态1312的两个账户。尽管在图3中仅描绘了两个账户,在一些实施方式中,区块链可以包括大量(即,多于两个)账户。账户可以是外部拥有的账户和合约账户。外部拥有的账户可以通过私钥控制,并且不与任何代码相关联。合约账户可以通过合约代码进行控制,并具有与它们相关联的代码。

在一些实施例中,账户状态可以包括如在状态1312下所示的四个组件。四个组件是随机数314、余额316、代码哈希值318和存储根320。如果账户是外部拥有的账户,则随机数314可以表示从账户地址发送的交易的数量。余额316可以表示所述账户拥有的数字资产。代码哈希值318是空字符串的哈希值。存储根320为空。如果账户是合约账户,则随机数314可以表示账户创建的合约的数量。余额316可以表示所述账户拥有的数字资产。代码哈希值318可以是与账户相关联的虚拟机代码的哈希值。存储根320可以存储被称为存储树的mpt的根节点的哈希值。存储树可以通过对账户的存储内容的哈希值进行编码来存储合约数据。由于存储树还具有mpt的数据结构,因此它可以包括存储合约数据或变量的一个或多个分支节点和叶节点。在图3中描绘的结构300中,存储树包括分支节点322和存储值1324、值2326和值3328的三个叶节点。应该理解,存储树可以包括附加的分支节点和叶节点。

基于ecall306的内容,虚拟机304可以检索账户状态或存储根320的存储内容以执行智能合约。执行结果可用于在存储根320下更新世界状态308或存储树。在一些实施例中,世界状态308作为mpt被存储。在这种情况下,只需要用执行结果更新包含数据的mpt的叶节点和沿与叶节点相关的分支向上的节点。之后,虚拟机304可以从tee302内进行调用(称为ocall330)以将世界状态308存储在数据库332中。在一些示例中,数据库332可以是kvp的数据库,例如rocksdb或leveldb。在一些实施例中,世界状态308可以在高速缓存同步到kvp的数据库之前首先被加密并被存储在高速缓存中。在一些示例中,高速缓存可以是叠加db329。叠加db329可以被包括在tcb302中,或者可以通过直接存储器存取从tee302被访问。在一些实施例中,在退出tee302之前对世界状态308进行加密。这样,在没有获得相应的解密密钥的情况下,不能查看存储在tee302的外部的世界状态308。

通过将世界状态308包括在tee302中,可以在tee302内的可信环境中执行相应mpt的数据检索和内容更新。世界状态308在被更新之后以加密形式从tee302输出。这样,在没有适当的加密密钥的情况下,不能从tee302的外部检测世界状态302的数据结构、账户关系和账户行为。区块链账户的数据隐私可以被增强。

图4是根据本文的实施例的处理400的示例的流程图。为方便起见,处理400将被描述为由位于一个或多个位置的一个或多个计算机的系统执行,并根据本文被适当地编程。例如,图1的计算系统106、108,被适当地编程,可以执行处理400。

在402处,区块链节点接收用于在区块链节点的飞地中执行一个或多个软件指令的请求。飞地是在区块链节点上执行的tee。在一些示例中,通过与飞地相关联的api接收所述请求。在一些实施例中,所述飞地的外部的应用可以对飞地进行ecall(即请求)以在可信计算环境中执行智能合约。应用可以使用api来进行调入。在一些实施例中,所述请求可以包括一个或多个输入参数,并且所述请求是向所述飞地的飞地接口功能做出的。

在404处,区块链节点的飞地的tcb中的虚拟机确定与一个或多个区块链账户相关联的数据,以基于所述请求执行一个或多个软件指令。在一些示例中,在执行一个或多个软件指令期间更新存储在tcb中的区块链的全局状态,以产生更新的全局状态。在一些示例中,全局状态被称为世界状态。全局状态可以被存储在tcb中,并且可以包括区块链的多个区块链账户的地址与状态之间的映射。在一些实施例中,全局状态作为mpt被存储在tcb中。在一些实施例中,多个区块链账户包括一个或多个外部拥有的账户或合约账户。每个合约账户都包含存储根。在一些实施例中,存储根包括mpt的根节点的哈希值。与所述存储根相对应的mpt对相应合约账户的存储内容的哈希值进行编码。

在406处,虚拟机遍历存储在tee中的区块链的全局状态以定位数据。在一些实施例中,通过更新对相应合约账户的存储内容的哈希值进行编码的mpt来产生更新的全局状态。

在408处,区块链节点基于所述数据执行一个或多个软件指令。在一些实施例中,更新的全局状态在被存储到飞地的外部的数据库之前被加密。在一些实施例中,所述数据库可以是rocksdb或leveldb。

图5是根据本文的实施例的装置500的模块的示例的图。装置500可以是包括cpu和物理存储器的部分的可信硬件的实施例的示例。装置500可以对应于上述实施例,并且装置500包括以下内容:接收模块502,用于接收用于在可信执行环境(tee)中执行一个或多个软件指令的请求,所述tee在所述区块链节点上执行;确定模块504,用于确定与一个或多个区块链账户相关联的数据以基于所述请求执行所述一个或多个软件指令;遍历模块506,用于遍历存储在tee中的区块链的全局状态以定位数据;以及执行模块508,用于基于所述数据执行所述一个或多个软件指令。

可选地,所述请求包括一个或多个输入参数,并且所述请求是向所述飞地的飞地接口功能做出的。

可选地,全局状态作为mpt存储在tcb。

可选地,全局状态包括区块链的多个区块链账户的地址与状态之间的映射,并且所述多个区块链账户包括一个或多个外部拥有的账户或合约账户,其中每个所述合约账户包括存储根。

可选地,存储根包括mpt的根节点的哈希值,其中所述mpt对相应合约账户的存储内容的哈希值进行编码。

可选地,通过更新对相应合约账户的存储内容的哈希值进行编码的mpt来产生更新的全局状态。

可选地,与所述飞地分离的存储位置与高速缓存或数据库相关联。

本文中描述的技术产生一种或多种技术效果。例如,本主题的实施例允许在可信环境中运行的区块链虚拟机接收来自tee的外部的应用的调用以执行智能合约。通过将存储区块链的世界状态存储在tee内,虚拟机可以从tee内检索区块链数据,以减少可信组件和不可信组件之间的数据通信。由于在可信组件和不可信组件之间传输的数据需要被加密或解密,因此通过飞地的较少数据流通信可以导致较少的计算资源消耗和较高的数据安全性。此外,通过将世界状态包括在tee中,可以基于可信环境中的明文来执行世界状态的数据检索和内容更新。在世界状态被更新和被加密之后,世界状态被输出到飞地的外部的数据库,使得世界状态的数据结构、账户关系和账户行为不能从tee的外部被泄露。区块链账户的数据隐私可以被增强。

所描述的方法允许增强各种区块链交易和整体交易/数据安全性。发起调用以执行智能合约的区块链用户可以确信计算是在可信环境中执行的,并且计算结果不能被更改。更新的世界状态可以被批量加密以隐藏数据结构并允许底层数据和交易的更高级别的安全性,因为在只有区块链世界状态的密文被存储在tee的外部的情况下,识别区块链账户行为和关系变得极其困难或不可能。

所描述的方法可以确保计算机资源的有效使用(例如,处理周期、网络带宽和存储器使用),因为来自世界状态的区块链数据以明文形式被存储,并在tee内部被检索和更新。至少这些动作可以最小化或防止关于区块链数据加密和解密的可用计算机资源的浪费。虚拟机可以直接对飞地内的明文进行操作,而不需要虚拟机解密数据以用于智能合约处理。

在先前实施例中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实施例设备是计算机,计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或这些设备的任意组合。

对于装置中每个单元的功能和角色的实施例过程,可以参考前一方法中相应步骤的实施例过程。为简单起见,这里省略了细节。

由于装置实施例基本上对应于方法实施例,对于相关部分,可以参考方法实施例中的相关描述。先前描述的装置实施例仅是示例。被描述为单独部分的模块可以是或不是物理上分离的,并且显示为模块的部分可以是或不是物理模块,可以位于一个位置,或者可以分布在多个网络模块上。可以基于实际需求来选择一些或所有模块,以实现本文方案的目标。本领域普通技术人员无需付出创造性劳动就能理解和实现本申请的实施例。

所描述的主题的实施例可以包括单独或组合的一个或多个特征。

例如,在第一实施例中,区块链节点接收用于在可信执行环境(tee)中执行一个或多个软件指令的请求,所述tee在所述区块链节点上执行;所述tee中的虚拟机确定与一个或多个区块链账户相关联的数据,以基于所述请求执行一个或多个软件指令;所述虚拟机遍历存储在所述tee中的区块链的全局状态以定位数据;以及所述虚拟机基于所述数据执行一个或多个软件指令。

前述和其他描述的实施例可以各自可选地包括以下特征中的一个或多个:

第一特征,与以下任何特征组合,指定所述请求包括一个或多个输入参数,并且所述请求是向所述tee的接口功能做出的。

第二特征,与先前或以下特征中的任何特征组合,指定其中所述全局状态作为默克尔帕特丽夏树(mpt)存储在所述tee。

第三特征,与先前或以下特征中的任何特征组合,指定其中所述全局状态包括所述区块链的多个区块链账户的地址与状态之间的映射,并且所述多个区块链账户包括一个或多个外部拥有的账户或合约账户,并且每个所述合约账户包括存储根。

第四特征,与先前或以下特征中的任何特征组合,指定所述存储根包括mpt的根节点的哈希值,并且所述mpt对相应合同账户的存储内容的哈希值进行编码。

第五特征,与先前或以下特征中的任何特征组合,指定通过更新对相应合约账户的存储内容的哈希值进行编码的mpt,产生更新的全局状态。

第六特征,与先前或以下特征中的任何特征组合,指定与所述tee分离的存储位置与高速缓存或数据库相关联。

第七特征,与先前或以下特征中的任何特征组合,指定通过与所述tee相关联的应用编程接口接收所述请求。

第八特征,与先前或以下特征中的任何特征组合,指定在执行所述一个或多个软件指令期间更新存储在所述tee中的区块链的全局状态以产生更新的全局状态,所述计算机实现的方法进一步包括:响应于执行所述一个或多个软件指令,由所述区块链节点生成更新的全局状态的加密表示;以及由所述区块链节点将更新的全局状态的加密表示存储在与所述tee分离的存储位置中。

本文中描述的主题、动作以及操作的实施例可以在数字电子电路、有形体现的计算机软件或固件、计算机硬件中实现,包括本文中公开的结构及其结构等同物,或者它们中的一个或多个的组合。本文中描述的主题的实施例可以实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上,用于由数据处理装置执行或控制数据处理装置的操作。例如,计算机程序载体可以包括具有编码或存储在其上的指令的一个或多个计算机可读存储介质。所述载体可以是有形的非暂时性计算机可读介质,例如磁盘、磁光盘或光盘、固态驱动器、随机存取存储器(ram)、只读存储器(rom)或其他类型媒体。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电、光或电磁信号,其被生成来编码信息用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是或部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。

计算机程序也可以被称为或描述为程序、软件、软件应用、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或演绎性语言、说明或程序性语言;它可以配置为任何形式,包括作为独立程序,或者作为模块、组件、引擎、子程序或适合在计算环境中执行的其他单元,该环境可包括由通信数据网络互联的在一个或多个位置的一台或多台计算机。

计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件中;或者多个协调文件中,例如,存储一个或多个模块、子程序或代码部分的多个文件。

用于执行计算机程序的处理器包括,例如,通用和专用微型处理器,和任意种类数字计算机的任意一个或多个处理器。通常,处理器将接收用于执行的计算机程序的指令以及来自耦合到所述处理器的非暂时性计算机可读介质的数据。

术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或者多处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpu(图形处理单元)。除了硬件,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或多个的组合的代码。

本文中描述的过程和逻辑流程可由一台或多台计算机或处理器执行一个或多个计算机程序来进行,以进行通过对输入数据进行运算并生成输出的操作。过程和逻辑流程也可以由例如fpga、asic、gpu等的专用逻辑电路或专用逻辑电路与一个或多个编程计算机的组合来执行。

适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理器将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可包括用于执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。

通常,计算机还将包括或可操作地耦接至一个或多个大容量存储设备,以从一个或多个大容量存储设备接收数据或将数据传输到一个或多个存储设备。存储设备可以是例如磁盘、磁光盘或光盘,固态驱动器或任何其他类型的非暂时性计算机可读介质。但是,计算机不需要具有这样的设备。因此,计算机可以耦合到本地和/或远程的一个或多个存储设备,例如一个或多个存储器。例如,计算机可以包括作为计算机的组成部分的一个或多个本地存储器,或者计算机可以耦合到云网络中的一个或多个远程存储器。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。

组件可以通过彼此交换地例如电连接或光学连接直接地或经由一个或多个中间组件彼此“耦合”。如果组件中的一个组件集成到另一个组件中,组件也可以彼此“耦合”。例如,集成到处理器(例如,l2高速缓存组件)中的存储组件“耦合到”处理器。

为了提供与用户的交互,本文中描述的主题的实施例可以在计算机上实现或配置为与该计算机通信,该计算机具有:显示设备,例如,lcd(液晶显示器)监视器,用于向用户显示信息;以及输入设备,用户可以通过该输入设备向该计算机提供输入,例如键盘和例如鼠标、轨迹球或触摸板等的指针设备。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用(app)进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用的智能手机)轮流发送文本消息或其他形式的消息并接收来自用户的响应消息来与用户交互。

本文使用与系统、装置和计算机程序组件有关的术语“配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。

虽然本文包含许多具体实施细节,但是这些不应被解释为由权利要求本身限定的对要求保护的范围的限制,而是作为对特定实施例的具体特征的描述。在本文多个单独实施例的上下文中描述的多个特定特征也可以在单个实施例中的组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下,可以从要求保护的组合中删除来自该组合的一个或多个特征,并且可以要求保护指向子组合或子组合的变体。

类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在一些情况下,多任务并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的划分不应被理解为所有实施例中都要求如此划分,而应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品或者打包成多个软件产品。

已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务并行处理可能是有利的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1