结合代码标注与用户类型的有条件的收据存储方法和节点转让专利

申请号 : CN201910419893.6

文献号 : CN110264196B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘琦闫莺魏长征

申请人 : 创新先进技术有限公司

摘要 :

本说明书一个或多个实施例提供一种结合代码标注与用户类型的有条件的收据存储方法和节点,该方法可以包括:第一区块链节点接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;第一区块链节点在可信执行环境中解密所述交易,以获得所述智能合约的代码;第一区块链节点在所述可信执行环境中执行所述智能合约的代码,得到收据数据;第一区块链节点存储所述收据数据,以在交易发起方属于预设用户类型时,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储、所述收据数据的其余收据内容以密文形式存储。

权利要求 :

1.一种结合代码标注与用户类型的有条件的收据存储方法,包括:第一区块链节点接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;

第一区块链节点在可信执行环境中解密所述交易,以获得所述智能合约的代码;

第一区块链节点在所述可信执行环境中执行所述智能合约的代码,得到收据数据;

第一区块链节点存储所述收据数据,以在交易发起方属于预设用户类型时,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储,所述收据数据的其余收据内容以密文形式存储。

2.根据权利要求1所述的方法,第一区块链节点接收的交易对应的智能合约,包括:高级语言编写的智能合约;或,字节码形式的智能合约。

3.根据权利要求2所述的方法,当第一区块链节点接收的交易对应的智能合约为高级语言编写的智能合约时,所述方法还包括:第一区块链节点通过编译器对所述高级语言编写的智能合约进行编译,生成字节码形式的智能合约,以在所述可信执行环境中执行。

4.根据权利要求2所述的方法,当第一区块链节点接收的交易对应的智能合约为字节码形式的智能合约时,所述字节码形式的智能合约由客户端通过编译器对高级语言编写的智能合约进行编译而得到,所述高级语言编写的智能合约由用户在所述客户端上编写得到。

5.根据权利要求2所述的方法,所述高级语言编写的智能合约与所述字节码形式的智能合约具有相同或对应的暴露标识符。

6.根据权利要求1所述的方法,第一区块链节点接收的交易对应的智能合约,包括:用户在第一区块链节点上生成的智能合约;或,用户在客户端上生成的智能合约;或,所述客户端通过第二区块链节点发来的交易中的智能合约。

7.根据权利要求1所述的方法,所述暴露标识符标明的对象包括:收据字段和/或状态变量。

8.根据权利要求1所述的方法,所述暴露标识符标明的对象包括:合约级对象;第一区块链节点存储所述收据数据,包括:第一区块链节点在交易发起方属于预设用户类型时,将所述收据数据中对应于所述合约级对象且满足所述预设条件的所有收据内容以明文形式存储。

9.根据权利要求1所述的方法,所述暴露标识符标明的对象包括:对应于所述智能合约中定义的至少一个事件的事件级对象;第一区块链节点存储所述收据数据,包括:第一区块链节点在交易发起方属于预设用户类型时,确定出所述收据数据中对应于所述至少一个事件的收据内容,并将确定出的收据内容中对应于所述事件级对象且满足所述预设条件的部分以明文形式存储。

10.根据权利要求1所述的方法,第一区块链节点通过下述方式确定所述交易发起方所属的用户类型:

第一区块链节点确定所述交易发起方对应的外部账户;

第一区块链节点查询区块链上记录的所述外部账户对应的用户类型,以作为所述交易发起方所属的用户类型。

11.根据权利要求10所述的方法,所述外部账户包括记录于区块链上的类型字段,所述类型字段的取值对应于所述用户类型。

12.根据权利要求10所述的方法,在创建所述外部账户时,所述用户类型被配置为关联至所述外部账户,使所述用户类型与所述外部账户之间的关联关系被记录于区块链中。

13.根据权利要求12所述的方法,还包括:第一区块链节点根据管理用户发起的更改请求,更改所述外部账户对应的用户类型。

14.根据权利要求1所述的方法,所述预设条件包括以下至少之一:相应的收据内容中包含预设内容、相应的收据内容的取值属于预设数值区间。

15.根据权利要求1所述的方法,所述预设条件包括所述收据数据中的所有收据字段对应的通用条件;或,所述预设条件包括所述收据数据中的每一收据字段分别对应的专用条件。

16.根据权利要求1所述的方法,所述预设条件位于所述交易中;或,所述预设条件位于所述交易对应的智能合约中,或所述交易对应的智能合约所调用的另一智能合约中;或,

所述预设条件位于系统合约或链代码中。

17.根据权利要求1所述的方法,第一区块链节点存储所述收据数据,包括:第一区块链节点读取系统合约的代码,所述系统合约的代码中定义了与暴露标识符、用户类型和预设条件相关的收据数据存储逻辑;

第一区块链节点执行所述系统合约的代码,以在交易发起方属于预设用户类型时,将对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储,所述收据数据的其余收据内容以密文形式存储。

18.根据权利要求17所述的方法,所述系统合约包括:记录于创世块中的预置系统合约,或所述预置系统合约对应的更新后系统合约。

19.根据权利要求1所述的方法,第一区块链节点存储所述收据数据,包括:第一区块链节点在所述可信执行环境之外执行存储功能代码,以将所述收据数据存储至所述可信执行环境之外的外部存储空间。

20.根据权利要求1所述的方法,第一区块链节点对所述收据数据进行加密的密钥包括:对称加密算法的密钥或非对称加密算法的密钥。

21.根据权利要求20所述的方法,所述对称加密算法的密钥包括发起所述交易的客户端提供的初始密钥;或,所述对称加密算法的密钥包括所述初始密钥与影响因子生成的衍生密钥。

22.根据权利要求21所述的方法,所述交易由所述初始密钥进行加密,且所述初始密钥被非对称加密算法的公钥进行加密;第一区块链节点在可信执行环境中解密所述交易,包括:

第一区块链节点用所述非对称加密算法的私钥解密得到所述初始密钥,并用所述初始密钥对所述交易进行解密,以得到所述交易的交易内容。

23.根据权利要求21所述的方法,所述初始密钥由客户端生成;或,所述初始密钥由密钥管理服务器发送至所述客户端。

24.根据权利要求21所述的方法,所述影响因子与所述交易相关。

25.根据权利要求24所述的方法,所述影响因子包括:所述交易的哈希值的指定位。

26.一种结合代码标注与用户类型的有条件的收据存储节点,包括:接收单元,接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;

解密单元,在可信执行环境中解密所述交易,以获得所述智能合约的代码;

执行单元,在所述可信执行环境中执行所述智能合约的代码,得到收据数据;

存储单元,存储所述收据数据,以在交易发起方属于预设用户类型时,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储,所述收据数据的其余收据内容以密文形式存储。

27.一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器通过运行所述可执行指令以实现如权利要求1‑25中任一项所述的方法。

28.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1‑25中任一项所述方法的步骤。

说明书 :

结合代码标注与用户类型的有条件的收据存储方法和节点

技术领域

[0001] 本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种结合代码标注与用户类型的有条件的收据存储方法和节点。

背景技术

[0002] 区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。
[0003] 目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性
能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证
明(Zero‑knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
[0004] 可信执行环境(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,平台安全处理器)。

发明内容

[0005] 有鉴于此,本说明书一个或多个实施例提供一种结合代码标注与用户类型的有条件的收据存储方法和节点。
[0006] 为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
[0007] 根据本说明书一个或多个实施例的第一方面,提出了一种结合代码标注与用户类型的有条件的收据存储方法,包括:
[0008] 第一区块链节点接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;
[0009] 第一区块链节点在可信执行环境中解密所述交易,以获得所述智能合约的代码;
[0010] 第一区块链节点在所述可信执行环境中执行所述智能合约的代码,得到收据数据;
[0011] 第一区块链节点存储所述收据数据,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储、所述收据数据的其余收据内容以密文形式存
储。
[0012] 根据本说明书一个或多个实施例的第二方面,提出了一种结合代码标注与用户类型的有条件的收据存储节点,包括:
[0013] 接收单元,接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;
[0014] 解密单元,在可信执行环境中解密所述交易,以获得所述智能合约的代码;
[0015] 执行单元,在所述可信执行环境中执行所述智能合约的代码,得到收据数据;
[0016] 存储单元,存储所述收据数据,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储、所述收据数据的其余收据内容以密文形式存储。
[0017] 根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
[0018] 处理器;
[0019] 用于存储处理器可执行指令的存储器;
[0020] 其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
[0021] 根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。

附图说明

[0022] 图1是一示例性实施例提供的一种创建智能合约的示意图。
[0023] 图2是一示例性实施例提供的一种调用智能合约的示意图。
[0024] 图3是一示例性实施例提供的一种结合代码标注与用户类型的有条件的收据存储方法的流程图。
[0025] 图4是一示例性实施例提供的一种在区块链节点上实现隐私保护的示意图。
[0026] 图5是一示例性实施例提供的一种通过系统合约和链代码实现区块链网络的功能逻辑的示意图。
[0027] 图6是一示例性实施例提供的一种结合代码标注与用户类型的有条件的收据存储节点的框图。

具体实施方式

[0028] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例
中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相
反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相
一致的装置和方法的例子。
[0029] 需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更
多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进
行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行
描述。
[0030] 区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链
+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比
特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新
区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私
有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单
来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更
适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分
去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加
入网络并组成利益相关联盟,共同维护区块链运行。
[0031] 不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
[0032] 以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚
拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以
通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实
际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上
的智能合约可以是字节码的形式。
[0033] 例如图1所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中1中的“0x6f8ae93…”代表了这个
合约的地址,交易的data字段保存的可以是字节码,交易的to字段为空。节点间通过共识机
制达成一致后,这个合约成功创建,并且可以在后续过程中被调用。合约创建后,区块链上
出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码将保存在该合
约账户中。智能合约的行为由合约代码控制。换句话说,智能合约使得区块链上产生包含合
约代码和账户存储(Storage)的虚拟账户。
[0034] 如图2所示,仍以以太坊为例,Bob将一个用于调用智能合约的交易发送到以太坊网络后,某一节点的EVM可以执行这个交易并生成对应的合约实例。图中2中交易的from字
段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合
约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方
法和参数。智能合约以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和
数据都保存在区块链上,所以当交易完成后,区块链上就保存了无法篡改、不会丢失的交易
凭证。
[0035] 区块链网络中的节点在执行Bob发起的交易后,会生成相应的收据(receipt)数据,以用于记录该交易相关的收据信息。以以太坊为例,节点执行交易所得的收据数据可以
包括如下内容:
[0036] Result字段,表示交易的执行结果;
[0037] Gas used字段,表示交易消耗的gas值;
[0038] Logs字段,表示交易产生的日志,日志可以进一步包括From字段、To字段、Topic字段和Log data字段等,其中From字段表示调用的发起方的账户地址、To字段表示被调用对
象(如智能合约)的账户地址、Topic字段表示日志的主题、Log data字段表示日志数据;
[0039] Output字段,表示交易的输出。
[0040] 一般的,交易执行后生成的收据数据以明文形式进行存储,任何人都可以看到收据数据所含的上述各个收据字段的内容,无隐私保护的设置和能力。而在一些区块链与TEE
相结合的解决方案中,为了实现隐私保护,收据数据的全部内容均被当作需要隐私保护的
数据存储在区块链上。所述区块链,是存储在节点的数据库中特定逻辑组织而成的数据集
合。所述数据库,如后所述,其物理载体可以存储介质,例如持久性存储介质。实际上,收据
数据中可能只有部分内容是敏感的,而其它内容并不敏感,只需要针对敏感的内容进行隐
私保护、其他内容可以公开,甚至在一些情况下可能需要对部分内容实施检索以驱动相关
操作的实施,那么针对这部分内容实施隐私保护将影响检索操作的实施。
[0041] 以下结合图3所示说明本申请一结合代码标注与用户类型的有条件的收据存储方法的实施例的实现过程:
[0042] 步骤302,第一区块链节点接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象。
[0043] 在一实施例中,用户在编写智能合约的代码时,可以通过在代码中添加暴露标识符来标明一个或多个对象,使得收据数据中对应于这部分对象的收据内容能够允许采用明
文存储(此处的“允许”应当理解为:实际需要进一步结合交易发起方所属的用户类型以及
上述收据内容对预设条件的满足情况,以确定是否以明文形式存储),而剩余未标注暴露标
识符的对象所对应的收据内容必然采用密文存储,以实现相应的隐私保护。
[0044] 如上文所述,在用于创建智能合约的交易中,data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读
性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代
码。高级语言编写的智能合约的代码,经过编译器编译而生成字节码,进而该字节码可以部
署到区块链上。以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等。
[0045] 以Solidity语言为例,用其编写的合约与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。如下是以
Solidity语言编写的一个简单的智能合约的代码示例1:
[0046]
[0047]
[0048] 在基于Solidity语言编写的智能合约的代码中,可以通过暴露标识符来标明一个或多个对象,使得收据数据中对应于这部分对象的收据内容允许以明文形式存储,而其余
的收据内容必然以密文形式存储。类似地,在基于Serpent、LLL语言等编写的智能合约的代
码中,同样可以通过暴露标识符来标明一个或多个对象,以实现相关收据内容的明文存储。
[0049] 暴露标识符可以为专用于标明允许明文存储的收据字段,例如可以采用关键字plain来表征该暴露标识符。那么,对于希望以明文形式存储的收据内容,可以在相应的对
象之前添加plain(或者,也可以采用其他方式与相应的对象进行关联)。
[0050] 暴露标识符标明的对象可以包括收据字段,比如上文所述的Result字段、Gas used字段、Logs字段、Output字段等,或者Logs字段中进一步包含的From字段、To字段、
Topic字段、Log data字段等。例如,可以将上述的代码示例1调整为下述的代码示例2:
[0051]
[0052] 在上述的代码示例2中,通过在智能合约的代码最前方添加暴露标识符plain,使得智能合约的代码被执行后,可以在交易发起方属于预设用户类型的情况下,将产生的收
据数据中满足预设条件的所有字段均以明文形式进行存储。
[0053] 当然,在其他实施例中,也可以具体指明需要明文存储的字段。比如,通过暴露标识符对From字段进行标注时,可使得在交易发起方属于预设用户类型的情况下,如果产生
的收据数据中的From字段对应的收据内容满足预设条件,该From字段对应的收据内容以明
文形式进行存储,而后续可以针对该From字段中的收据内容实施检索操作,比如可以统计
某一账户所发起的交易量等。
[0054] 需要指出的是:在上述的代码示例2及其相关实施例中,由暴露标识符“plain”所标明的对象(所有字段或From字段)为合约级对象,使得第一区块链节点在存储收据数据
时,收据数据中所有对应于该合约级对象“From字段”的收据内容,均被允许以明文形式存
储(前提为交易发起方属于预设用户类型且相关收据内容满足预设条件)。尤其是,当智能
合约的代码中包含多个事件时,合约级对象可以适用于智能合约中的所有事件,那么以
From字段为例:在交易发起方属于预设用户类型的情况下,对于任一事件产生的日志Logs,
如果该日志Logs所含的From字段满足预设条件,那么该From字段将以明文形式存储,而无
需针对每一事件分别添加暴露标识符。
[0055] 除了收据字段之外,暴露标识符还可以用于标明其他对象。例如,暴露标识符标明的对象可以包括状态变量,且该状态变量同样可以为合约级对象。以状态变量“price”为
例,可以将上述的代码示例1调整为下述的代码示例3:
[0056]
[0057] 在上述的代码示例3中,通过在状态变量“price”的类型int之前添加暴露标识符“plain”(或者,可以将暴露标识符plain置于类型int之后),可以将该状态变量price标记
为合约级对象。相应的,在智能合约的代码被执行后产生的收据数据的各个字段(通常包括
Topic字段、Output字段等)中,如果存在对应于状态变量price的收据内容(通常记载了状
态变量price的取值),可以在交易发起方属于预设用户类型时,将满足预设条件的收据内
容以明文形式进行存储。由于状态变量“price”在代码示例3中属于合约级对象,使得当智
能合约的代码中包含多个事件时,合约级对象可以适用于智能合约中的所有事件,那么当
多个事件分别产生各自对应的日志Logs时,每一日志Logs(如日志Logs中的Topic字段等)
都可能产生与状态变量“price”相关的收据内容(取决于相关事件是否应用了该状态变量
price),可以分别与预设条件进行比较判断,以确定各个日志Logs中的price取值是否以明
文形式存储,而无需在每一事件中分别针对状态变量“price”添加暴露标识符;类似地,
Output字段也会包含与状态变量“price”相关的收据内容。对于不同收据字段所包含的与
状态变量price相关的收据内容,可以采用相同或不同的预设条件进行判断以确定是否采
用明文形式存储,这取决于对“预设条件”的配置规则,可参见下文的相关描述。
[0058] 当智能合约的代码中定义了多个状态变量时,上述的合约级对象可以包括其中的部分或全部状态变量。例如,智能合约可以包括下述的代码示例4:
[0059]
[0060] 在上述的代码示例4中,智能合约的代码中定义了“price”、“price1”等多个状态变量,而用户可以仅针对状态变量“price”添加暴露标识符plain,使得该状态变量“price”
成为合约级对象,而状态变量“price1”则并未由暴露标识符进行标注。
[0061] 除了合约级对象之外,暴露标识符标明的对象可以包括:对应于智能合约中定义的至少一个事件的事件级对象,使得在交易发起方属于预设用户类型的情况下,如果收据
数据中对应于该至少一个事件的收据内容满足预设条件,则相应的收据内容以明文形式存
储。尤其是,当智能合约中包含多个事件时,可以针对至少一部分事件设定上述的事件级对
象,从而在交易发起方属于预设用户类型的情况下,使得这部分事件对应的收据内容在满
足预设条件时以明文形式存储、其余事件对应的收据内容以密文形式存储。以From字段为
例,可以将上述的代码示例1调整为下述的代码示例5:
[0062]
[0063] 在上述的代码示例5中,通过在事件currentPrice对应的事件函数“event currentPrice(int price)”中添加From字段对应的字符from,并且该字符from所采用的暴
露标识符区别于前述的plain,而是通过引号对该字符from进行修饰,则代码示例5中的引
号相当于前述的暴露标识符,使得From字段被标记为事件级对象,因而在交易发起方属于
预设用户类型的情况下,如果该事件对应产生的日志Logs的From字段满足预设条件,则将
From字段以明文形式进行存储。除了上述事件currentPrice之外,如果智能合约的代码还
包含另一事件,那么上述的事件级对象不会影响该另一事件、该另一事件对应的收据内容
将以密文形式进行存储,除非存在针对该另一事件添加的“from”且该另一事件产生的Logs
中的From字段满足预设条件。
[0064] 可以将上述的代码示例1调整为下述的代码示例6:
[0065]
[0066] 在上述的代码示例6中,通过在事件currentPrice对应的事件函数“event currentPrice(int price)”之前添加关键字“plain”,使得事件级对象包括该事件
currentPrice对应的日志Logs中的所有字段,譬如前述的From字段、To字段、Topic字段、
Log Data字段等,可以将这些字段分别与预设条件进行比较,从而在交易发起方属于预设
用户类型时,将满足预设条件的字段以明文形式存储。
[0067] 事件级对象还可以包括状态变量。从状态变量的维度而言,上述的代码示例6可以解释为:事件currentPrice引用了状态变量“price”,通过在事件currentPrice之前添加暴
露标识符“plain”,可以将该事件currentPrice所引用的状态变量price作为上述的事件级
对象,并确定出该事件currentPrice产生的日志Logs中与状态变量price相关的收据内容,
从而在交易发起方属于预设用户类型的情况下,使得确定出的收据内容在满足预设条件时
以明文形式存储、在不满足预设条件时以密文形式存储。由于状态变量“price”在代码示例
6中属于事件级对象,使得当智能合约的代码中还包含另一引用状态变量“price”的事件
event1时,如果并未针对该事件event1添加任何级别的暴露标识符,那么即便该事件
event1引用了状态变量“price”,该事件event1所产生的收据内容仍将以密文形式进行存
储,而并非以明文形式存储。
[0068] 当同一事件中引用了多个状态变量时,上述的事件级对象可以包括被引用的全部状态变量。例如,可以将上述的代码示例4调整为下述的代码示例7:
[0069]
[0070] 在上述的代码示例7中,事件currentPrice对应的事件函数“event currentPrice(int price,int price1)”引用了状态变量“price”和“price1”,而通过在该事件之前添加
暴露标识符plain,使得被引用的状态变量“price”和“price1”均会受到影响,对于该事件
产生的所有与状态变量“price”和“price1”相关的收据内容,在交易发起方属于预设用户
类型的情况下,满足预设条件的均以明文形式存储、未满足条件的均以密文形式存储。但
是,对于其他并未添加暴露标识符plain的事件,产生的收据内容均以密文形式进行存储。
[0071] 当事件级对象包括状态变量时,还可以具体指示为事件所引用的一个或多个状态变量。以状态变量“price”为例,可以将上述的代码示例1调整为下述的代码示例8:
[0072]
[0073]
[0074] 在上述的代码示例8中,事件currentPrice对应的事件函数“event currentPrice(int price)”引用了状态变量“price”,而通过在该状态变量“price”的类型int之前添加
暴露标识符plain,使得该状态变量“price”被配置为事件级对象,并且该事件级对象仅适
用于该事件currentPrice、不适用于智能合约包含的其他事件,即:在交易发起方属于预设
用户类型的情况下,只有事件currentPrice产生的与状态变量“price”相关的收据内容,能
够在满足预设条件时以明文形式进行存储,收据数据中的其他内容均以密文形式进行存
储。
[0075] 由于代码示例8中的事件currentPrice仅引用了状态变量“price”,使其实际效果与上述的代码示例6中针对该事件添加暴露标识符、将该事件引用的状态变量“price”配置
为事件级对象相似。而当事件同时应用多个状态变量时,可以更加清晰地体现出两者的不
同,比如可以将上述的代码示例4调整为下述的代码示例9:
[0076]
[0077] 在上述的代码示例9中,事件currentPrice对应的事件函数“event currentPrice(int price,int price1)”同时引用了状态变量“price”和“price1”,而通过在状态变量
“price”的类型int之前添加暴露标识符plain,可以将该状态变量“price”配置为事件级对
象,而未添加暴露标识符plain的状态变量“price1”则并非事件级对象,使得在交易发起方
属于预设用户类型的情况下,该事件currentPrice产生的与状态变量“price”相关的收据
内容在满足预设条件时以明文形式进行存储、与状态变量“price1”相关的收据内容则必然
以密文形式进行存储。
[0078] 在一实施例中,第一区块链节点接收的交易对应的智能合约,可以是通过高级语言编写的智能合约,或者可以是字节码形式的智能合约。其中,当智能合约为高级语言编写
的智能合约时,第一区块链节点还通过编译器对该高级语言编写的智能合约进行编译,生
成字节码形式的智能合约,以在可信执行环境中执行。而当第一区块链节点接收的交易对
应的智能合约为字节码形式的智能合约时,该字节码形式的智能合约可由客户端通过编译
器对高级语言编写的智能合约进行编译而得到,而该高级语言编写的智能合约由用户在客
户端上编写得到。
[0079] 对于第一区块链节点接收的交易对应的智能合约,可以为用户在第一区块链节点上生成的智能合约。当用户采用高级语言编写得到上述的智能合约时,第一区块链节点还
通过编译器将该高级语言编写的智能合约编译为字节码形式的智能合约;或者,用户也可
能在第一区块链节点上直接编写得到字节码形式的智能合约。
[0080] 对于第一区块链节点接收的交易对应的智能合约,可以为用户在客户端上生成的智能合约。例如,用户通过对应的账户在客户端生成该交易后,通过该客户端将交易提交至
第一区块链节点。以图4为例,第一区块链节点中包含交易/查询接口,该接口可与客户端对
接,使得客户端可以向第一区块链节点提交上述交易。比如上文所述,用户可以采用高级语
言在客户端上编写智能合约,然后由客户端通过编译器对该高级语言的智能合约进行编
译,得到相应的字节码形式的智能合约。当然,客户端可以直接将高级语言编写的智能合约
发送至第一区块链节点,使得第一区块链节点通过编译器编译为字节码形式的智能合约。
[0081] 对于第一区块链节点接收的交易对应的智能合约,可以为客户端通过第二区块链节点发来的交易中的智能合约,该智能合约通常为字节码形式;当然,该智能合约也可以为
高级语言编写的智能合约,则第一区块链节点可以通过编译器编译为字节码形式的智能合
约。
[0082] 在一实施例中,当智能合约的代码中包括暴露标识符时,高级语言编写的智能合约与字节码形式的智能合约可以具有相同的暴露标识符。而本领域技术人员应当理解的
是:字节码可以采用不同于高级语言的暴露标识符,比如高级语言编写的智能合约的代码
中包含第一标识符、字节码形式的智能合约的代码中包含第二标识符,则第一标识符与第
二标识符之间存在对应关系,确保由高级语言编译为字节码后,不会影响暴露标识符的功
能。
[0083] 步骤304,第一区块链节点在可信执行环境中解密所述交易,以获得所述智能合约的代码。
[0084] 在一实施例中,上述交易可以通过对称加密算法的方式进行加密,也可以采用非对称算法的方式进行加密。对称加密采用的加密算法,例如是DES算法,3DES算法,TDEA算
法,Blowfish算法,RC5算法,IDEA算法等。非对称加密算法,例如是RSA、Elgamal、背包算法、
Rabin、D‑H、ECC(椭圆曲线加密算法)等。
[0085] 在一实施例中,上述交易可以通过对称加密算法结合非对称加密算法的方式进行加密。以客户端将上述交易提交至第一区块链节点为例,客户端可以采用对称加密算法加
密交易内容,即采用对称加密算法的密钥加密交易内容,并用非对称加密算法加密对称加
密算法中采用的密钥,譬如采用非对称加密算法的公钥加密对称加密算法中采用的密钥。
这样,第一区块链节点接收到加密的交易后,可以先采用非对称加密算法的私钥进行解密,
得到对称加密算法的密钥,进而用对称加密算法的密钥解密得到交易内容。例如,当交易用
于创建智能合约时,交易内容可以包括所需创建的智能合约的代码;当交易用于调用智能
合约时,交易内容可以包括被调用的智能合约的账户地址、需要传入的方法和参数等。
[0086] 当交易用于调用智能合约时,可以是多重嵌套结构的调用。例如,交易直接调用智能合约1,而该智能合约1的代码调用了智能合约2,且智能合约2中的代码指向了智能合约3
的合约地址,使得交易实际上间接调用了智能合约3的代码,而智能合约3中的代码可以包
括通过暴露标识符标明的对象。这样,相当于智能合约1中包含了通过暴露标识符标明的对
象。具体实现过程与上述过程类似,在此不再赘述。
[0087] 步骤306,第一区块链节点在所述可信执行环境中执行所述智能合约的代码,得到收据数据。
[0088] 如前所述,第一区块链节点接收的交易,例如可以是创建和/或调用智能合约的交易。比如在以太坊中,第一区块链节点接收到客户端发来的创建和/或调用智能合约的交易
后,可以检查交易是否有效、格式是否正确,验证交易的签名是否合法等。
[0089] 一般来说,以太坊中的节点一般也是争夺记账权的节点,因此,第一区块链节点作为争夺记账权的节点可以在本地执行所述交易。如果争夺记账权的节点中的一个在本轮争
夺记账权的过程中胜出,则成为记账节点。第一区块链节点如果在本轮争夺记账权的过程
中胜出,就成为记账节点;当然,如果第一区块链节点如果在本轮争夺记账权的过程中没有
胜出,则不是记账节点,而其它节点可能成为记账节点。
[0090] 智能合约类似于面向对象编程中的类,执行的结果生成对应该智能合约的合约实例,类似于生成类对应的对象。执行交易中用于创建智能合约的代码的过程,会创建合约账
户,并在账户空间中部署合约。以太坊中,智能合约账户的地址是由发送者的地址(如图1‑2
中的“0xf5e…”)和交易随机数(nonce)作为输入,通过加密算法生成的,比如图1‑2中的合
约地址“0x6f8ae93…”即由发送者的地址“0xf5e…”和交易中的nonce经加密算法生成。
[0091] 一般的,采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的支持智能合约的区
块链网络中,争夺记账权的节点都可以在接收到包含创建智能合约的交易后执行所述交
易。争夺记账权的节点中可能其中一个在本轮争夺记账权的过程中胜出,成为记账节点。记
账节点可以将该包含智能合约的交易与其它交易一起打包并生成新的区块,并将生成的新
的区块发送至其它节点进行共识。
[0092] 对于采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等机制的支持智能合约的区块链网络中,具有记账权的节点在本轮记账前已经商定好。因此,第
一区块链节点接收到上述交易后,如果自身不是本轮的记账节点,则可以将该交易发送至
记账节点。对于本轮的记账节点(可以是第一区块链节点),在将该交易打包并生成新区块
的过程中或者之前,或在将该交易与其它交易一起打包并生成新区块的过程中或者之前,
可以执行该交易。所述记账节点将该交易打包(或还包括其它交易一起打包)并生成新的区
块后,将生成的新的区块或者区块头发送至其它节点进行共识。
[0093] 如上所述,采用POW机制的支持智能合约的区块链网络中,或者采用POS、DPOS、PBFT机制的支持智能合约的区块链网络中,本轮的记账节点都可以将该交易打包并生成新
的区块,并将生成的新的区块后区块头发送至其它节点进行共识。如果其它节点接收到所
述区块后经验证没有问题,可以将该新的区块追加到原有的区块链末尾,从而完成记账过
程,达成共识;若交易用于创建智能合约,则完成了智能合约在区块链网络上的部署,若交
易用于调用智能合约,则完成了智能合约的调用和执行。其它节点验证记账节点发来的新
的区块或区块头的过程中,也可以执行所述区块中的交易。
[0094] 所述执行过程,一般可以通过虚拟机执行。以以太坊为例,支持用户在以太坊网络中创建和/或调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太
坊作为一个可编程区块链的核心是以太坊虚拟机(EVM,Ethereum Virtual Machine),每个
以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种
复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。
[0095] 本实施例中,第一区块链节点可以在可信执行环境(Trusted Execution Environment,TEE)中执行解密的智能合约的代码。例如图4所示,第一区块链节点可以划分
为常规执行环境(图中位于左侧)和TEE,客户端提交的交易(如上文所述,交易可以存在其
他来源;此处以客户端提交的交易为例进行说明)首先进入常规执行环境中的“交易/查询
接口”进行识别,不存在隐私处理需求的交易可以被留在常规执行环境中进行处理(这里可
以根据交易发起方的用户类型、交易类型、交易所含的标识符等识别是否存在隐私处理需
求),而将存在隐私处理需求的交易传递至TEE中进行处理。TEE与常规执行环境相互隔离。
交易在进入TEE之前处于加密状态,在可信执行环境内则被解密为明文的交易内容,从而在
确保数据安全的前提下,使得该明文的交易内容能够在TEE中实现高效处理,并在TEE中生
成明文的收据数据。
[0096] 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中运行的应用程序受到安全保护,几乎不可能被第三方访问。
[0097] 以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,
利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页
面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中
的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户
可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(Basic 
Input Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。
实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的
秘钥也传入围圈。然后,在CPU的加密保护下利用数据进行运算,结果会以密文形式返回。这
种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
[0098] 当上述存在隐私处理需求的交易用于创建智能合约时,该交易中包含智能合约的代码,第一区块链节点可以在TEE中对该交易进行解密得到其所含智能合约的代码,并进而
在TEE中执行该代码。当上述存在隐私处理需求的交易用于调用智能合约时,第一区块链节
点可以在TEE中执行该代码(若被调用的智能合约处理加密状态,则需要先在TEE中对该智
能合约进行解密,以得到相应的代码)。具体的,第一区块链节点可以利用CPU中新增的处理
器指令,在内存中分配一部分区域EPC,通过CPU内的加密引擎MEE对上述的明文代码进行加
密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对明文的代码进行
运算,完成执行过程。例如,在SGX技术中,执行智能合约的明文代码,可以将EVM加载进围圈
中。在远程证明过程中,密钥管理服务器可以计算本地EVM代码的hash值,并与第一区块链
节点中加载的EVM代码的hash值比对,比对结果正确作为通过远程证明的一个必要条件,从
而完成对第一区块链节点SGX围圈加载的代码的度量。经过度量,正确的EVM可以在SGX中执
行上述智能合约的代码。
[0099] 步骤308,第一区块链节点存储所述收据数据,以在交易发起方属于预设用户类型时,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存
储、所述收据数据的其余收据内容以密文形式存储。
[0100] 在智能合约的代码中,暴露标识符可以标明一个或多个对象,这些对象在收据数据中存在对应的收据内容。在保护用户隐私的前提下,通过确定交易发起方所属的用户类
型,以及将暴露标识符标明的对象对应的收据内容与预设条件作比较,可以根据交易发起
方所属的用户类型以及收据内容对预设条件的满足情况,在存储过程中体现出对隐私保护
的差异化需求和处理:在交易发起方属于预设用户类型的情况下,将满足预设条件的收据
内容以明文形式存储,而其他收据内容则必然以密文形式存储。
[0101] 在一实施例中,用户在区块链上存在对应的外部账户,并基于该外部账户发起交易或实施其他操作。那么,交易发起方所属的用户类型,即该外部账户所属的用户类型。因
此,第一区块链节点可以确定所述交易发起方对应的外部账户,并通过查询区块链上记录
的所述外部账户对应的用户类型,以作为所述交易发起方所属的用户类型。
[0102] 在一实施例中,外部账户可以包括记录于区块链上的类型字段(如Type字段),该类型字段的取值对应于用户类型。比如,当类型字段的取值为00时,用户类型为普通用户,
当类型字段的取值为01时,用户类型为高级用户,当类型字段的取值为11时,用户类型为管
理用户等。因此,第一区块链节点可以通过读取上述的外部账户的类型字段,即可基于取值
确定相应的用户类型。
[0103] 在一实施例中,在创建上述的外部账户时,用户类型可以被配置为关联至该外部账户,使用户类型与外部账户之间的关联关系被记录于区块链中,比如通过用户类型与外
部账户的账户地址来建立上述的关联关系,使得外部账户的数据结构并不需要改变,即外
部账户无需包含上述的类型字段。因此,第一区块链节点可以通过读取区块链上记录的关
联关系,并基于交易发起方对应的外部账户,确定该外部账户对应的上述预设用户类型。
[0104] 在一实施例中,可以在一定条件下对外部账户的用户类型进行修改。例如,管理用户可以具备修改权项,使得第一区块链节点可以根据管理用户发起的更改请求,更改上述
外部账户对应的用户类型。管理用户可以对应于创世块中预置的、具有管理权限的外部账
户,使得管理用户可以对其他的普通用户、高级用户等进行类型更改,比如将普通用户更改
为高级用户、将高级用户更改为普通用户等。
[0105] 第一区块链节点通过识别交易发起方所属的用户类型,可以确定交易发起方的隐私保护需求的强烈程度:当属于预设用户类型时,可以确定该交易发起方的隐私保护需求
相对较弱,能够接受收据数据在一定程度上的暴露,以实现相应的功能扩展,因而可以进一
步结合预设条件暴露部分收据内容;当不属于预设用户类型时,可以确定该交易发起方的
隐私保护需求相对较强,无法接受对收据数据的暴露,那么无论收据内容是否满足预设条
件,均采用密文形式进行存储。因而,基于对交易发起方所属的用户类型的识别,可使针对
收据数据的存储方式满足交易发起方的实际需求,能够兼顾隐私保护和功能扩展。例如,普
通用户的隐私保护的需求相对更低、对基于收据数据的功能扩展需求相对更高,那么对于
普通用户发起的交易所产生的收据数据,可以在结合预设条件进行判断的基础上,允许部
分收据内容采用明文形式存储,以便针对明文存储的收据内容实施功能扩展。再例如,高级
用户和管理用户的隐私保护的需求相对更高、对基于收据数据的功能扩展需求相对更低,
那么对于高级用户和管理用户发起的交易所产生的收据数据,可以将所有收据内容均采用
密文形式存储。
[0106] 预设条件的内容可以包括以下至少之一:相应的收据内容中包含预设内容、相应的收据内容的取值属于预设数值区间等。
[0107] 预设内容可以包括:指定的一个或多个关键词,比如该关键词可以包括预定义的状态变量、预定义的事件函数、表示交易执行结果的信息等,使得当收据内容包含作为关键
词的状态变量、事件函数或交易执行结果等信息时,可以判定该收据内容满足预设条件。
[0108] 预设内容可以包括:预设值。比如该预设值可以为数值,该数值可与状态变量的取值等进行比较,以确定状态变量的取值是否符合预期;再比如该预设值可以为数值、字母、
特殊符号等构成的字符串,该字符串可与交易发起方的账户地址、交易目标方的账户地址、
日志主题等进行比较,以识别出特定的交易发起方、特定的交易目标方或特定的日志主题
等。以预设内容为字符串为例,假定该字符串为某一账户地址,在作为交易发起方的用户属
于预设用户类型的情况下,可使该用户在针对该账户地址发起交易且To字段被暴露标识符
标明时,将该日志中的To字段采用明文形式存储,而其他的From字段等则采用密文形式存
储,避免泄露隐私。
[0109] 预设数值区间可以表明相关收据字段的隐私保护需求情况,比如在转账场景中,预设数值区间可以为数值较小、隐私保护需求较低的数值区间,使得即便公开相关收据字
段也不会造成严重的用户隐私泄露,但可以用于自动触发如DAPP客户端的相关操作,从而
在隐私保护与便捷性之间取得一定平衡。
[0110] 在一实施例中,预设条件可以包括收据数据中的所有收据字段对应的通用条件,即暴露标识符标明的对象所对应的收据内容处于收据数据中的任意收据字段时,均被用于
与该预设条件进行比较。例如,当预设条件为“包含预设关键词”时,可以将暴露标识符标明
的对象所对应的收据内容与该预设条件所含的关键词进行比较,以确定出包含该关键词的
收据内容,作为满足上述预设条件的收据内容;其中,当暴露标识符标明的对象所对应的收
据内容处于某一收据字段时,该收据字段还可能包含其他收据内容,这些收据内容均以密
文形式进行存储。
[0111] 在一实施例中,预设条件可以包括收据数据中的每一收据字段分别对应的专用条件,即收据数据中的各个收据字段分别存在对应的预设条件,需要根据暴露标识符标明的
对象所对应的收据内容所处的收据字段,确定相应的预设条件并实施比较。不同收据字段
对应的预设条件之间相互独立,但可能相同,也可能不同。例如,From字段对应的预设条件
可以为“是否包含预设内容”,且该预设内容可以为预设的账户地址,表明由该账户地址发
起的交易,Topic字段对应的预设条件可以为“是否属于预设取值区间”,而Topic字段中可
以记录相关事件引用的状态变量的取值,譬如转账场景下可以包括代表“转账金额”的状态
变量,表明转账金额处于预设取值区间;那么:当暴露标识符标明的对象所对应的收据内容
同时处于From字段和Topic字段时,处于From字段中的收据内容适用于与预设条件“是否包
含预设内容”进行比较、处于Topic字段中的收据内容适用于与预设条件“是否属于预设取
值区间”进行比较。
[0112] 由于暴露标识符为智能合约的编程语言中所定义的全局性标识,因而只要在智能合约中写入暴露标识符后,就难以修改该暴露标识符所标明的对象。而用户类型则取决于
交易发起方、与编程语言无关,使得不同交易发起方即便调用同一智能合约时,对收据数据
的存储方式(密文或明文)也可能存在不同。同时,预设条件并不一定在暴露标识符所处的
智能合约中基于编程语言实现,因而通过由不同用户对智能合约进行调用,或者调整所采
用的预设条件,可以跳脱暴露标识符的限制,调整需要明文或密文存储的收据内容。例如:
[0113] 在一实施例中,预设条件可以位于交易中(不在交易所含的智能合约的代码中,可以在创建交易时对该预设条件进行设定),使得不同交易即便在调用同一智能合约的情况
下,所采用的预设条件也可以存在差异,以满足不同交易所面临的需求差异;当然,不同交
易也可以采用相同的预设条件。预设条件的不同可以表现为:预设条件的内容、预设条件适
用的收据字段、对收据内容是否满足预设条件进行判断的处理逻辑中的至少一个维度的差
异。
[0114] 在一实施例中,预设条件可以位于交易调用的智能合约中,使得交易可以通过选取所调用的智能合约,以确定是否使用预设条件;或者,预设条件可以位于交易调用的智能
合约A所调用的另一智能合约B中,使得通过配置智能合约A所调用的智能合约,比如将智能
合约B换为智能合约C,即可更换所使用的预设条件(由智能合约B中定义的预设条件更换为
智能合约C中定义的预设条件)。智能合约可由交易发起方自身或其他任意用户预先创建;
当然,如果智能合约存在相应的调用条件,那么需要在该调用条件被满足时才能够使得上
述交易调用该智能合约,比如该调用条件可以包括:交易发起方属于预设白名单、交易发起
方不属于预设黑名单或其他条件。
[0115] 在一实施例中,预设条件可以位于系统合约或链代码中,使得该预设条件为适用于区块链上的所有交易的全局条件,而区别于上述的交易或智能合约所含的预设条件,使
得即便交易或交易调用的智能合约并未包含预设条件的情况下,可以基于系统合约或链代
码中定义的预设条件,确定暴露标识符标明的对象所对应的收据内容是否以明文形式存
储。
[0116] 需要指出的是:交易或智能合约所含的预设条件,与链代码或系统合约所含的预设条件之间并不矛盾:两者可以分别包含不同维度的预设条件,比如预设条件适用的收据
字段不同;或者,当两者包含的预设条件之间存在冲突时,可以默认为优先采用交易或智能
合约所含的预设条件,或者优先采用链代码或系统合约所含的预设条件,这取决于预定义
的选择逻辑。
[0117] 通过在计算设备(物理机或虚拟机)上运行区块链的程序代码(以下简称为链代码),可以将该计算设备配置为区块链网络中的区块链节点,比如上述的第一区块链节点
等。换言之,第一区块链节点通过运行上述的链代码,以实现相应的功能逻辑。因此,可以在
创建区块链网络时,将与暴露标识符、用户类型和预设条件相关的收据数据存储逻辑写入
链代码中,使得各个区块链节点均可以实现该收据数据存储逻辑。与暴露标识符、用户类型
和预设条件相关的收据数据存储逻辑可以包括:对用户类型的识别逻辑、对预设条件的确
定逻辑、基于暴露标识符对收据内容进行存储的逻辑等。
[0118] 对用户类型的识别逻辑用于指示第一区块链节点:识别交易发起方的用户类型。比如:系统合约中可以记录有预定义的外部账户与用户类型之间的关联关系,或者系统合
约中可以记录有用户类型字段的取值与用户类型之间的对应关系。具体可以参考上文中识
别用户类型的相关描述,此处不再赘述。
[0119] 对预设条件的确定逻辑用于指示第一区块链节点:获取暴露标识符标明的对象所对应的收据内容所适用的预设条件。比如:获取适用于所有收据字段的通用条件,或者获取
适用于暴露标识符标明的对象所对应的收据内容的所处字段的专用条件等。具体可以参考
上文中预设条件的相关描述,此处不再赘述。
[0120] 基于暴露标识符对收据内容进行存储的逻辑用于指示第一区块链节点:针对暴露标识符标明的对象、暴露标识符未标明的对象等,分别采用何种方式存储相应的收据内容。
比如:在交易发起方属于预设用户类型的情况下,对于暴露标识符标明的对象所对应的收
据内容,在该收据内容符合预设条件时采用明文形式进行存储、未符合预设条件时采用密
文形式进行存储,并且收据数据中其他的收据内容均采用密文形式进行存储。
[0121] 然而,链代码的升级更新相对较为困难,使得采用链代码实现对收据数据的存储存在灵活性低、可扩展性不足的问题。为了实现对链代码的功能扩展,如图5所示,可以采用
链代码与系统合约相结合的方式:链代码用于实现区块链网络的基础功能,而运行过程中
的功能扩展可以通过系统合约的方式实现。与上述的智能合约相类似的,系统合约包括譬
如字节码形式的代码,第一区块链节点可以通过运行系统合约的代码(比如,根据唯一对应
的地址“0x53a98…”来读取该系统合约中的代码),实现对链代码的功能补充。相应地,第一
区块链节点可以读取系统合约的代码,该系统合约的代码中定义了与暴露标识符、用户类
型和预设条件相关的收据数据存储逻辑;然后,第一区块链节点可以执行系统合约的代码,
从而基于与暴露标识符、用户类型和预设条件相关的收据数据存储逻辑,以在交易发起方
属于预设用户类型的情况下,将对应于暴露标识符标明的对象的收据内容中满足预设条件
的部分以明文形式存储、收据数据的其余收据内容以密文形式存储。
[0122] 区别于上述由用户发布至区块链的智能合约,系统合约无法由用户自由发布。第一区块链节点读取的系统合约可以包括配置于区块链网络的创世块中的预置系统合约;以
及,区块链网络中的管理员(即上述的管理用户)可以具有针对系统合约的更新权限,从而
针对诸如上述的预置系统合约进行更新,则上述第一区块链节点读取的系统合约还可以包
括相应的更新后系统合约。当然,更新后系统合约可以由管理员对预置系统合约实施一次
更新后得到;或者,更新后系统合约可以由管理员对预置系统合约实施多次迭代更新后得
到,比如由预置系统合约更新得到系统合约1、对系统合约1更新得到系统合约2、对系统合
约2更新得到系统合约3,该系统合约1、系统合约2、系统合约3均可以视为更新后系统合约,
但第一区块链节点通常会以最新版本的系统合约为准,比如第一区块链节点会以系统合约
3中的代码为准,而非系统合约1或系统合约2中的代码。
[0123] 除了创世块中包含的预置系统合约之外,管理员还可以在后续区块内发布系统合约,以及针对所发布的系统合约进行更新。总之,应当通过诸如权限管理等方式,对系统合
约的发布和更新实施一定程度的限制,以确保区块链网络的功能逻辑能够正常运作,并且
避免对任何用户造成不必要的损失。
[0124] 第一区块链节点通过密钥对至少一部分收据内容进行加密。所述加密,可以采用对称加密,也可以采用非对称加密。如果第一区块链节点用对称加密方式,即用对称加密算
法的对称密钥对收据内容加密,则客户端(或其他持有密钥的对象)可以用该对称加密算法
的对称密钥对加密后的收据内容进行解密。
[0125] 在一实施例中,第一区块链节点用对称加密算法的对称密钥对收据内容进行加密时,该对称密钥可由客户端预先提供至第一区块链节点。那么,由于只有客户端(实际应当
为客户端上的已登录账户对应的用户)和第一区块链节点掌握该对称密钥,使得仅该客户
端能够解密相应的加密后的收据内容,避免无关用户甚至不法分子对加密后的收据内容进
行解密。
[0126] 例如,客户端在向第一区块链节点发起交易时,客户端可以用对称加密算法的初始密钥对交易内容进行加密,以得到该交易;相应地,第一区块链节点可以通过获得该初始
密钥,以用于直接或间接对收据内容进行加密。譬如,该初始密钥可以由客户端与第一区块
链节点预先协商得到,或者由密钥管理服务器发送至客户端和第一区块链节点,或者由客
户端发送至第一区块链节点。当初始密钥由客户端发送至第一区块链节点时,客户端可以
通过非对称加密算法的公钥对该初始密钥进行加密后,将加密后的初始密钥发送至第一区
块链节点,而第一区块链节点通过非对称加密算法的私钥对该加密后的初始密钥进行解
密,得到初始密钥,即上文所述的数字信封加密,此处不再赘述。
[0127] 在一实施例中,第一区块链节点可以采用上述的初始密钥对收据内容进行加密。不同交易采用的初始密钥可以相同,使得同一用户所提交的所有交易均采用该初始密钥进
行加密,或者不同交易采用的初始密钥可以不同,比如客户端可以针对每一交易随机生成
一初始密钥,以提升安全性。
[0128] 在一实施例中,第一区块链节点可以根据初始密钥与影响因子生成衍生密钥,并通过该衍生密钥对收据内容进行加密。相比于直接采用初始密钥进行加密,衍生密钥可以
增加随机度,从而提升被攻破的难度,有助于优化数据的安全保护。影响因子可以与交易相
关;例如,影响因子可以包括交易哈希值的指定位,比如第一区块链节点可以将初始密钥与
交易哈希值的前16位(或前32位、后16位、后32位,或者其他位)进行拼接,并对拼接后的字
符串进行哈希运算,从而生成衍生密钥。
[0129] 在一实施例中,第一区块链节点还可以采用非对称加密方式,即用非对称加密算法的公钥对收据内容加密,则相应地,客户端可以用所述非对称加密算法的私钥解密上述
加密后的收据内容。非对称加密算法的密钥,例如可以是由客户端生成一对公钥和私钥,并
将公钥预先发送至第一区块链节点,从而第一区块链节点可以将收据内容用该公钥加密。
[0130] 第一区块链节点通过运行用于实现某一功能的代码,以实现该功能。因此,对于需要在TEE中实现的功能,同样需要执行相关代码。而对于在TEE中执行的代码,需要符合TEE
的相关规范和要求;相应地,对于相关技术中用于实现某一功能的代码,需要结合TEE的规
范和要求重新进行代码编写,不仅存在相对更大的开发量,而且容易在重新编写过程中产
生漏洞(bug),影响功能实现的可靠性和稳定性。
[0131] 因此,第一区块链节点可以通过在TEE之外执行存储功能代码,将TEE中生成的收据数据(包括需要明文存储的明文形式的收据内容,以及需要密文存储的密文形式的收据
内容)存储至TEE之外的外部存储空间,使得该存储功能代码可以为相关技术中用于实现存
储功能的代码、不需要结合TEE的规范和要求重新进行代码编写,即可针对收据数据实现安
全可靠的存储,不仅可以在不影响安全、可靠程度的基础上,减少相关代码的开发量,而且
可以通过减少TEE的相关代码而降低TCB(Trusted Computing Base,可信计算基),使得TEE
技术与区块链技术进行结合的过程中,额外造成的安全风险处于可控范围。
[0132] 在一实施例中,第一区块链节点可以在TEE内执行写缓存功能代码,以将上述的收据数据存入TEE内的写缓存中,比如该写缓存可以对应于如图4所示的“缓存”。进一步的,第
一区块链节点将写缓存中的数据从可信执行环境输出,以存储至外部存储空间。其中,写缓
存功能代码可以以明文形式存储于TEE中,可以直接在TEE中执行该明文形式的缓存功能代
码;或,写缓存功能代码可以以密文形式存储于TEE之外,比如存储于上述的外部存储空间
(比如图4所示的“打包+存储”,其中“打包”表示第一区块链节点在可信执行环境之外对交
易进行打包成块),可以将该密文形式的写缓存功能代码读入TEE、在TEE中进行解密为明文
代码,并执行该明文代码。
[0133] 写缓存是指在将数据写入外部存储空间时,为了避免造成对外部存储空间的“冲击”而提供的“缓冲”机制。例如,可以采用buffer实现上述的写缓存;当然,写缓存也可以采
用cache来实现,本说明书并不对此进行限制。实际上,由于TEE为隔离的安全环境,而外部
存储空间位于TEE之外,使得通过采用写缓存机制,可以对缓存内的数据进行批量写入外部
存储空间,从而减少TEE与外部存储空间之间的交互次数,提升数据存储效率。同时,TEE在
不断执行各条交易的过程中,可能需要调取已生成的数据,如果需调用的数据恰好位于写
缓存中,可以直接从写缓存中读取该数据,这样一方面可以减少与外部存储空间之间的交
互,另一方面免去了对从外部存储空间所读取数据的解密过程,从而提升在TEE中的数据处
理效率。
[0134] 当然,也可以将写缓存建立于TEE之外,比如第一区块链节点可以在TEE之外执行写缓存功能代码,从而将上述的收据数据存入TEE外的写缓存中,并进一步将写缓存中的数
据存储至外部存储空间。
[0135] 以下结合图6介绍本说明书一种结合代码标注与用户类型的有条件的收据存储节点的实施例,包括:
[0136] 接收单元61,接收经过加密的对应于智能合约的交易,所述智能合约的代码中包括通过暴露标识符标明的对象;
[0137] 解密单元62,在可信执行环境中解密所述交易,以获得所述智能合约的代码;
[0138] 执行单元63,在所述可信执行环境中执行所述智能合约的代码,得到收据数据;
[0139] 存储单元64,存储所述收据数据,以在交易发起方属于预设用户类型时,使对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储、所述收据
数据的其余收据内容以密文形式存储。
[0140] 可选的,接收单元61接收的交易对应的智能合约,包括:
[0141] 高级语言编写的智能合约;或,
[0142] 字节码形式的智能合约。
[0143] 可选的,当接收单元61接收的交易对应的智能合约为高级语言编写的智能合约时,所述节点还包括:
[0144] 编译单元65,通过编译器对所述高级语言编写的智能合约进行编译,生成字节码形式的智能合约,以在所述可信执行环境中执行。
[0145] 可选的,当第一区块链节点接收的交易对应的智能合约为字节码形式的智能合约时,所述字节码形式的智能合约由客户端通过编译器对高级语言编写的智能合约进行编译
而得到,所述高级语言编写的智能合约由用户在所述客户端上编写得到。
[0146] 可选的,所述高级语言编写的智能合约与所述字节码形式的智能合约具有相同或对应的暴露标识符。
[0147] 可选的,接收单元61接收的交易对应的智能合约,包括:
[0148] 用户在第一区块链节点上生成的智能合约;或,
[0149] 用户在客户端上生成的智能合约;或,
[0150] 所述客户端通过第二区块链节点发来的交易中的智能合约。
[0151] 可选的,所述暴露标识符标明的对象包括:收据字段和/或状态变量。
[0152] 可选的,所述暴露标识符标明的对象包括:合约级对象;存储单元64具体用于:
[0153] 在交易发起方属于预设用户类型时,将所述收据数据中对应于所述合约级对象且满足所述预设条件的所有收据内容以明文形式存储。
[0154] 可选的,所述暴露标识符标明的对象包括:对应于所述智能合约中定义的至少一个事件的事件级对象;存储单元64具体用于:
[0155] 在交易发起方属于预设用户类型时,确定出所述收据数据中对应于所述至少一个事件的收据内容,并将确定出的收据内容中对应于所述事件级对象且满足所述预设条件的
部分以明文形式存储。
[0156] 可选的,第一区块链节点通过下述方式确定所述交易发起方所属的用户类型:
[0157] 确定所述交易发起方对应的外部账户;
[0158] 查询区块链上记录的所述外部账户对应的用户类型,以作为所述交易发起方所属的用户类型。
[0159] 可选的,所述外部账户包括记录于区块链上的类型字段,所述类型字段的取值对应于所述用户类型。
[0160] 可选的,在创建所述外部账户时,所述用户类型被配置为关联至所述外部账户,使所述用户类型与所述外部账户之间的关联关系被记录于区块链中。
[0161] 可选的,还包括:
[0162] 更改单元66,根据管理用户发起的更改请求,更改所述外部账户对应的用户类型。
[0163] 可选的,所述预设条件包括以下至少之一:相应的收据内容中包含预设内容、相应的收据内容的取值属于预设数值区间。
[0164] 可选的,
[0165] 所述预设条件包括所述收据数据中的所有收据字段对应的通用条件;或,
[0166] 所述预设条件包括所述收据数据中的每一收据字段分别对应的专用条件。
[0167] 可选的,
[0168] 所述预设条件位于所述交易中;或,
[0169] 所述预设条件位于所述交易对应的智能合约中,或所述交易对应的智能合约所调用的另一智能合约中;或,
[0170] 所述预设条件位于系统合约或链代码中。
[0171] 可选的,存储单元64具体用于:
[0172] 读取系统合约的代码,所述系统合约的代码中定义了与暴露标识符、用户类型和预设条件相关的收据数据存储逻辑;
[0173] 执行所述系统合约的代码,以在交易发起方属于预设用户类型时,将对应于所述暴露标识符标明的对象的收据内容中满足预设条件的部分以明文形式存储、所述收据数据
的其余收据内容以密文形式存储。
[0174] 可选的,所述系统合约包括:记录于创世块中的预置系统合约,或所述预置系统合约对应的更新后系统合约。
[0175] 可选的,存储单元64具体用于:
[0176] 第一区块链节点在所述可信执行环境之外执行存储功能代码,以将所述收据数据存储至所述可信执行环境之外的外部存储空间。
[0177] 可选的,第一区块链节点对所述收据数据进行加密的密钥包括:对称加密算法的密钥或非对称加密算法的密钥。
[0178] 可选的,所述对称加密算法的密钥包括所述客户端提供的初始密钥;或,所述对称加密算法的密钥包括所述初始密钥与影响因子生成的衍生密钥。
[0179] 可选的,所述交易由所述初始密钥进行加密,且所述初始密钥被非对称加密算法的公钥进行加密;解密单元62具体用于:
[0180] 用所述非对称加密算法的私钥解密得到所述初始密钥,并用所述初始密钥对所述交易进行解密,以得到所述交易内容。
[0181] 可选的,所述初始密钥由客户端生成;或,所述初始密钥由密钥管理服务器发送至所述客户端。
[0182] 可选的,所述影响因子与所述交易相关。
[0183] 可选的,所述影响因子包括:所述交易的哈希值的指定位。
[0184] 在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然
而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。
设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因
此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件
(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate 
Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员
自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作
专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻
辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,
而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言
(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL
(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description 
Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL
(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby 
Hardware Description Language)等,目前最普遍使用的是VHDL(Very‑High‑Speed 
Integrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应
该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,
就可以很容易得到实现该逻辑方法流程的硬件电路。
[0185] 控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可
读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,
ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制
器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存
储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以
纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使
得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实
现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种
功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视
为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0186] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可
以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放
器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何
设备的组合。
[0187] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0188] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机
可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产
品的形式。
[0189] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0190] 本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、
组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境
中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块
可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0191] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0192] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处
理器(CPU)、输入/输出接口、网络接口和内存。
[0193] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的
示例。
[0194] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动
态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除
可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、
数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的
存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的
信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),
如调制的数据信号和载波。
[0195] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包
括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要
素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要
素的过程、方法、商品或者设备中还存在另外的相同要素。
[0196] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
[0197] 在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书
中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表
示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出
项目的任何或所有可能组合。
[0198] 应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区
分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第
二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如
果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0199] 以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何
修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。