基于区块链的智能合约管理方法及装置、电子设备转让专利

申请号 : CN201910464790.1

文献号 : CN110245506B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 魏长征闫莺

申请人 : 阿里巴巴集团控股有限公司

摘要 :

一种基于区块链的智能合约管理方法,包括:响应于客户端发起的针对目标智能合约的调用交易,将加密后的目标智能合约的合约代码发送至区块链节点设备搭载的可信执行环境;获取智能合约管理规则,在可信执行环境中基于智能合约管理规则确定目标智能合约是否为被管理智能合约;如果不是,提取可信执行环境中存储的与目标智能合约的合约代码对应的解密密钥,并基于提取到的解密密钥对目标智能合约的合约代码进行解密;在可信执行环境中执行解密后的目标智能合约的合约代码,并将执行结果加密后发送至区块链的分布式账本进行存储。

权利要求 :

1.一种基于区块链的智能合约管理方法,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述方法包括:响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;

从管理区块链的分布式账本中获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;其中,所述智能合约管理规则包括,由管理方调用部署在所述管理区块链上的智能合约生成的智能合约管理规则;

如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;

在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。

2.如权利要求1所述的方法,所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;

其中,所述可信执行环境中存储的与被管理智能合约对应的解密密钥被设置为禁止提取;或者,所述可信执行环境中存储的解密密钥不包括与被管理智能合约对应的解密密钥。

3.如权利要求2所述的方法,所述方法还包括:

如果所述目标智能合约是被管理智能合约,向所述客户端返回所述目标智能合约调用失败的提示消息。

4.如权利要求1所述的方法,所述方法还包括:

接收客户端发起的针对目标智能合约的创建交易;其中,所述创建交易包括加密后的所述目标智能合约的合约代码;

响应于所述创建交易,在所述可信执行环境中执行智能合约创建代码,在所述区块链中创建与所述目标智能合约对应的合约账户,并将加密后的所述目标智能合约的合约代码发送至所述区块链的分布式账本进行存储。

5.如权利要求1所述的方法,所述智能合约管理规则包括:由被管理智能合约的合约地址构成的智能合约黑名单;

所述基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约,包括:获取所述调用交易中的所述目标智能合约的合约地址;

将所述目标智能合约的合约地址与所述智能合约黑名单中的合约地址进行匹配;

如果所述目标智能合约的合约地址与所述智能合约黑名单中的任一合约地址匹配,确定所述目标智能合约为被管理智能合约;反之,确定所述目标智能合约不是被管理智能合约。

6.如权利要求1所述的方法,对所述目标智能合约的合约代码采用的加密方式,包括以下示出的加密方式中的任意一种:对称加密方式、非对称加密方式、对称加密结合非对称加密的方式;

对所述目标智能合约的合约代码的执行结果采用的加密方式,包括:对称加密方式;或者,非对称加密方式。

7.如权利要求6所述的方法,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。

8.如权利要求1所述的方法,其中,所述可信执行环境包括IntelSGX。

9.一种基于区块链的智能合约管理装置,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述装置包括:第一获取模块,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;

第一确定模块,从管理区块链的分布式账本中获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;其中,所述智能合约管理规则包括,由管理方调用部署在所述管理区块链上的智能合约生成的智能合约管理规则;

第一解密模块,如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;

第一执行模块,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。

10.如权利要求9所述的装置,所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;

其中,所述可信执行环境中存储的与被管理智能合约对应的解密密钥被设置为禁止提取;或者,所述可信执行环境中存储的解密密钥不包括与被管理智能合约对应的解密密钥。

11.如权利要求10所述的装置,所述装置还包括:

第一返回模块,如果所述目标智能合约是被管理智能合约,向所述客户端返回所述目标智能合约调用失败的提示消息。

12.如权利要求9所述的装置,所述装置还包括:

接收模块,接收客户端发起的针对目标智能合约的创建交易;其中,所述创建交易包括加密后的所述目标智能合约的合约代码;

创建模块,响应于所述创建交易,在所述可信执行环境中执行智能合约创建代码,在所述区块链中创建与所述目标智能合约对应的合约账户,并将加密后的所述目标智能合约的合约代码发送至所述区块链的分布式账本进行存储。

13.如权利要求9所述的装置,所述智能合约管理规则包括:由被管理智能合约的合约地址构成的智能合约黑名单;

所述第一确定模块:

获取所述调用交易中的所述目标智能合约的合约地址;

将所述目标智能合约的合约地址与所述智能合约黑名单中的合约地址进行匹配;

如果所述目标智能合约的合约地址与所述智能合约黑名单中的任一合约地址匹配,确定所述目标智能合约为被管理智能合约;反之,确定所述目标智能合约不是被管理智能合约。

14.如权利要求9所述的装置,对所述目标智能合约的合约代码采用的加密方式,包括以下示出的加密方式中的任意一种:对称加密方式、非对称加密方式、对称加密结合非对称加密的方式;

对所述目标智能合约的合约代码的执行结果采用的加密方式,包括:对称加密方式;或者,非对称加密方式。

15.如权利要求14所述的装置,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。

16.如权利要求9所述的装置,其中,所述可信执行环境包括IntelSGX。

17.一种基于区块链的智能合约管理方法,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;所述方法包括:响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;

提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密,并在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;

从管理区块链的分布式账本中获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;其中,所述智能合约管理规则包括,由管理方调用部署在所述管理区块链上的智能合约生成的智能合约管理规则;

如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储。

18.如权利要求17所述的方法,所述方法还包括:

如果所述目标智能合约是被管理智能合约,删除所述目标智能合约的合约代码的执行结果,并向所述客户端返回所述目标智能合约调用失败的提示消息;或者,如果所述目标智能合约是被管理智能合约,在所述可信执行环境中存储所述目标智能合约的合约代码的执行结果,并将所述可信执行环境中存储的所述执行结果设置为禁止提取;以及,向所述客户端返回所述目标智能合约调用失败的提示消息。

19.一种基于区块链的智能合约管理装置,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;所述装置包括:第二获取模块,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;

第二解密模块,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;

第二执行模块,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;

第二确定模块,从管理区块链的分布式账本中获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储;其中,所述智能合约管理规则包括,由管理方调用部署在所述管理区块链上的智能合约生成的智能合约管理规则。

20.如权利要求19所述的装置,所述装置还包括:

第二返回模块,如果所述目标智能合约是被管理智能合约,删除所述目标智能合约的合约代码的执行结果,并向所述客户端返回所述目标智能合约调用失败的提示消息;或者,如果所述目标智能合约是被管理智能合约,在所述可信执行环境中存储所述目标智能合约的合约代码的执行结果,并将所述可信执行环境中存储的所述执行结果设置为禁止提取;以及,向所述客户端返回所述目标智能合约调用失败的提示消息。

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

处理器;

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

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

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

处理器;

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

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

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

24.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求17-18中任一项所述方法的步骤。

说明书 :

基于区块链的智能合约管理方法及装置、电子设备

技术领域

[0001] 本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于区块链的智能合约管理方法及装置、电子设备。

背景技术

[0002] 区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。

发明内容

[0003] 本说明书提出一种基于区块链的智能合约管理方法,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述方法包括:
[0004] 响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0005] 获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0006] 如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0007] 在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。
[0008] 可选的,所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;
[0009] 其中,所述可信执行环境中存储的与被管理智能合约对应的解密密钥被设置为禁止提取;或者,所述可信执行环境中存储的解密密钥不包括与被管理智能合约对应的解密密钥。
[0010] 可选的,所述方法还包括:
[0011] 如果所述目标智能合约是被管理智能合约,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0012] 可选的,所述方法还包括:
[0013] 接收客户端发起的针对目标智能合约的创建交易;其中,所述创建交易包括加密后的所述目标智能合约的合约代码;
[0014] 响应于所述创建交易,在所述可信执行环境中执行智能合约创建代码,在所述区块链中创建与所述目标智能合约对应的合约账户,并将加密后的所述目标智能合约的合约代码发送至所述区块链的分布式账本进行存储。
[0015] 可选的,所述获取智能合约管理规则,包括:
[0016] 从管理区块链的分布式账本中获取智能合约管理规则;其中,所述智能合约管理规则由管理方调用部署在所述管理区块链上的智能合约,生成的智能合约管理规则。
[0017] 可选的,所述智能合约管理规则包括:由被管理智能合约的合约地址构成的智能合约黑名单;
[0018] 所述基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约,包括:
[0019] 获取所述调用交易中的所述目标智能合约的合约地址;
[0020] 将所述目标智能合约的合约地址与所述智能合约黑名单中的合约地址进行匹配;
[0021] 如果所述目标智能合约的合约地址与所述智能合约黑名单中的任一合约地址匹配,确定所述目标智能合约为被管理智能合约;反之,确定所述目标智能合约不是被管理智能合约。
[0022] 可选的,对所述目标智能合约的合约代码采用的加密方式,包括以下示出的加密方式中的任意一种:对称加密方式、非对称加密方式、对称加密结合非对称加密的方式;
[0023] 对所述目标智能合约的合约代码的执行结果采用的加密方式,包括:对称加密方式;或者,非对称加密方式。
[0024] 可选的,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[0025] 可选的,其中,所述可信执行环境包括Intel SGX。
[0026] 本说明书还提出一种基于区块链的智能合约管理装置,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述装置包括:
[0027] 获取模块,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0028] 确定模块,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0029] 解密模块,如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0030] 执行模块,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。
[0031] 可选的,所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;
[0032] 其中,所述可信执行环境中存储的与被管理智能合约对应的解密密钥被设置为禁止提取;或者,所述可信执行环境中存储的解密密钥不包括与被管理智能合约对应的解密密钥。
[0033] 可选的,所述装置还包括:
[0034] 返回模块,如果所述目标智能合约是被管理智能合约,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0035] 可选的,所述装置还包括:
[0036] 接收模块,接收客户端发起的针对目标智能合约的创建交易;其中,所述创建交易包括加密后的所述目标智能合约的合约代码;
[0037] 创建模块,响应于所述创建交易,在所述可信执行环境中执行智能合约创建代码,在所述区块链中创建与所述目标智能合约对应的合约账户,并将加密后的所述目标智能合约的合约代码发送至所述区块链的分布式账本进行存储。
[0038] 可选的,所述获取模块:
[0039] 从管理区块链的分布式账本中获取智能合约管理规则;其中,所述智能合约管理规则由管理方调用部署在所述管理区块链上的智能合约,生成的智能合约管理规则。
[0040] 可选的,所述智能合约管理规则包括:由被管理智能合约的合约地址构成的智能合约黑名单;
[0041] 所述确定模块:
[0042] 获取所述调用交易中的所述目标智能合约的合约地址;
[0043] 将所述目标智能合约的合约地址与所述智能合约黑名单中的合约地址进行匹配;
[0044] 如果所述目标智能合约的合约地址与所述智能合约黑名单中的任一合约地址匹配,确定所述目标智能合约为被管理智能合约;反之,确定所述目标智能合约不是被管理智能合约。
[0045] 可选的,对所述目标智能合约的合约代码采用的加密方式,包括以下示出的加密方式中的任意一种:对称加密方式、非对称加密方式、对称加密结合非对称加密的方式;
[0046] 对所述目标智能合约的合约代码的执行结果采用的加密方式,包括:对称加密方式;或者,非对称加密方式。
[0047] 可选的,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[0048] 可选的,其中,所述可信执行环境包括Intel SGX。
[0049] 本说明书还提出一种基于区块链的智能合约管理方法,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;所述方法包括:
[0050] 响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0051] 提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密,并在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;
[0052] 获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0053] 如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储。
[0054] 可选的,所述方法还包括:
[0055] 如果所述目标智能合约是被管理智能合约,删除所述目标智能合约的合约代码的执行结果,并向所述客户端返回所述目标智能合约调用失败的提示消息;或者,[0056] 如果所述目标智能合约是被管理智能合约,在所述可信执行环境中存储所述目标智能合约的合约代码的执行结果,并将所述可信执行环境中存储的所述执行结果设置为禁止提取;以及,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0057] 本说明书还提出一种基于区块链的智能合约管理装置,应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;所述装置包括:
[0058] 第二获取模块,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0059] 第一解密模块,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0060] 第二执行模块,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;
[0061] 第二确定模块,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储。
[0062] 可选的,所述装置还包括:
[0063] 第二返回模块,如果所述目标智能合约是被管理智能合约,删除所述目标智能合约的合约代码的执行结果,并向所述客户端返回所述目标智能合约调用失败的提示消息;或者,
[0064] 如果所述目标智能合约是被管理智能合约,在所述可信执行环境中存储所述目标智能合约的合约代码的执行结果,并将所述可信执行环境中存储的所述执行结果设置为禁止提取;以及,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0065] 通过以上技术方案,由于区块链中的节点设备在搭载的可信执行环境中执行加密后的智能合约的合约代码时,只有不受管理的智能合约的合约代码可以进行解密和执行;因此,可以在对智能合约进行充分的隐私保护的基础上,通过技术手段对一些被管理智能合约进行内容屏蔽,来实现对智能合约的监管。

附图说明

[0066] 图1是一示例性实施例提供的一种创建智能合约的示意图;
[0067] 图2是一示例性实施例提供的调用智能合约的示意图;
[0068] 图3是一示例性实施例提供的创建智能合约和调用智能合约的示意图;
[0069] 图4是一示例性实施例提供的一种基于区块链的智能合约管理方法的流程图;
[0070] 图5是一示例性实施例提供的另一种基于区块链的智能合约管理方法的流程图;
[0071] 图6是一示例性实施例提供的一种电子设备的结构示意图;
[0072] 图7是一示例性实施例提供的一种基于区块链的智能合约管理装置的框图;
[0073] 图8是一示例性实施例提供的一种基于区块链的智能合约管理装置的框图。

具体实施方式

[0074] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
[0075] 需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
[0076] 区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。
[0077] 联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
[0078] 不论是公有链、私有链还是联盟链,都可能提供智能合约(Smart contract)的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
[0079] 以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM),每个以太坊节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
[0080] 如图1所示,Bob将一个包含创建智能合约信息的交易(Transaction)发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中1中的“0x68e12cf284…”代表了这个合约的地址,交易的data字段保存的可以是字节码,交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
[0081] 合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储(Storage)则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。
[0082] 前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。例如,采用诸如Solidity、Serpent、LLL语言等高级语言。对于采用高级语言编写的智能合约代码,可以经过编译器编译,生成可以部署到区块链上的字节码。
[0083] 以Solidity语言为例,用其编写的合约与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在智能合约的账户存储中的值,用于保存合约的状态。
[0084] 一般的,当一个智能合约部署在区块链后,智能合约的合约代码中的状态变量对应的存储状态是明文,任何人都可以看到其状态,无隐私保护的设置和能力。
[0085] 如图2所示,仍以以太坊为例,Bob将一个包含调用智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中2中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x692a70d2…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点(例如图2中的节点6)查看balance的当前值。
[0086] 智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
[0087] 创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。
[0088] 目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
[0089] 在解决隐私方面,可信执行环境(Trusted Execution Environment,TEE)是另一种解决方式。TEE可以起到硬件中的黑箱作用,在TEE中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。
[0090] 在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与TEE相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,包括软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARM Trustzone(信任区)和AMD PSP(Platform Security Processor,平台安全处理器)。
[0091] 在传统的区块链与TEE相结合的解决方案中,为了实现隐私保护,智能合约整体被当作需要隐私保护的数据在TEE中进行调用执行,并将全部合约状态加密存储在区块链上。通过这种方式,虽然在某种程度上可以提升隐私保护的安全等级,但也对数据的管理造成困难。
[0092] 例如,在示出的一种管理场景下,作为智能合约的监管一方,可能具有对智能合约的合约代码的执行过程以及对应的执行结果,进行内容监管的需求;但在传统的区块链与TEE相结合的解决方案中,智能合约执行的安全等级较高,智能合约的执行过程以及执行结果均处于一种不可见的隐私状态;因此,这就对智能合约的内容监管造成困难。
[0093] 而在本说明书旨在提出一种在区块链与TEE相结合的应用场景中,在对智能合约进行充分的隐私保护的基础上,进一步实现对智能合约的有效管理的技术方案。
[0094] 在实现时,在区块链上部署的智能合约的合约代码,可以加密后在区块链的分布式账本中进行持久化存储。而在区块链中的节点设备搭载的可信执行环境中,可以预先存储与区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥。
[0095] 例如,以智能合约的内容监管的场景为例,在一种实施方式中,上可信执行环境中的存储的解密密钥,可以只包含那些受监管的智能合约对应的解密钥;也即,在可信执行环境中可以仅存储不受监管的智能合约对应的解密密钥,而并不存储那些受监管的智能合约的解密密钥。
[0096] 在另一种实施方式中,上述可信执行环境中,可以默认存储所有的智能合约对应的解密密钥;而对于上述可信执行环境中存储的受监管的智能合约对应的解密密钥,可以被设置为禁止提取;也即,不是被管理智能合约的合约代码对应的解密密钥,可以被正常提取。
[0097] 当节点设备收到客户端发起的针对目标智能合约的调用交易时,可以获取区块链的分布式账本中存储的加密后的该目标智能合约的合约代码,并将获取到的加密后的该目标智能合约的合约代码发送至该节点设备所搭载的可信执行环境。
[0098] 在将加密的该目标智能合约的合约代码发送至该节点设备所搭载的可信执行环境之后,节点设备可以获取智能合约管理规则,并在搭载的可信执行环境中,基于获取到的智能合约管理规则,来确定该目标智能合约是否为被管理智能合约;
[0099] 如果经过确认,认定该目标智能合约不是被管理智能合约,此时节点设备可以提取可信执行环境中存储的与该目标智能合约的合约代码对应的解密密钥,对该目标智能合约的合约代码进行解密。
[0100] 当完成解密得到上述目标智能合约的明文合约代码后,节点设备可以在上述可信执行环境中,执行解密得到的明文合约代码,然后将执行结果加密后发送至区块链的分布式账本进行存储。
[0101] 在以上技术方案中,由于区块链中的节点设备在搭载的可信执行环境中执行加密后的智能合约的合约代码时,只有不受管理的智能合约的合约代码可以进行解密和执行;因此,可以在对智能合约进行充分的隐私保护的基础上,通过技术手段对一些被管理智能合约进行内容屏蔽,来实现对智能合约的监管。
[0102] 请参见图4,图4是一示例性实施例提供的一种基于区块链的智能合约管理方法的流程图。如图4所示,该方法应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述方法包括以下步骤:
[0103] 步骤402,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0104] 步骤404,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0105] 步骤406,如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0106] 步骤408,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。
[0107] 在本说明书中,对智能合约进行管理,具体可以是指智能合约的管理方,对智能合约的合约代码的执行过程以及对应的执行结果进行管理。
[0108] 例如,在示出的一种管理场景下,对智能合约进行管理,具体是指对智能合约的合约代码的执行过程以及对应的执行结果进行内容监管;而在这种管理场景下,上述管理方相应的也可以是指智能合约的监管方。
[0109] 以下将结合针对智能合约进行监管的管理场景,对本说明书的技术方案进行详细描述。在这种场景下,上述被管理智能合约即为被监管智能合约;上述智能合约管理规则即为智能合约监管规则。在本说明书中,用户在编写完成了智能合约的合约代码后,可以基于该智能合约的合约代码,在客户端上构建一笔用于创建智能合约的创建交易,并将交易发送给与该客户端对接的区块链节点设备。
[0110] 例如,在实现时,如果用户采用高级语言编写智能合约的合约代码,则客户端可以进一步经过编译器对合约代码进行编译,生成可以部署到区块链上的字节码,然后基于编译生成的智能合约的字节码,来“打包”生成一笔用于创建智能合约的创建交易,并将交易发送给与该客户端对接的区块链节点设备。
[0111] 需要说明的是,为保证用户编写完成的合约代码的隐私性,客户端可以采用密钥对编写完成的合约代码进行加密。
[0112] 例如,在实现时,客户端可以直接对构建出的上述创建交易整体进行加密;或者,也可以仅对构建出的上述创建交易中携带的智能合约的字节码本身进行加密;具体的加密方式,本领域技术人员在将本说明书公开的技术方案付诸实现时,可以灵活的选择。
[0113] 其中,对合约代码进行加密时所采用的加密方式,可以采用对称加密,也可以采用非对称加密。
[0114] 例如,对称加密采用的加密算法,可以是DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。非对称加密采用的算法,可以是RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
[0115] 除此之外,对合约代码进行加密时所采用的加密方式,还可以采用对称加密和非对称加密相结合的方式。这种加密方式一般称之为数字信封(Digital Envelope)加密方式。
[0116] 例如,客户端采用对称加密算法加密合约代码,即采用对称加密算法的私钥加密合约代码,然后再用非对称加密算法的公钥加密上述对称加密算法中所采用的私钥。也即,先用对称加密算法的密钥,加密合约代码;再使用非对称加密算法的密钥,对加密上述合约代码时所使用的密钥进行进一步的加密。
[0117] 区块链中的节点设备在收到客户端发送的上述创建交易后,可以检查该交易是否有效、格式是否正确,验证该交易的签名是否合法等,并在所有的检查和验证均通过后,可以在可信执行环境中执行该创建交易,完成智能合约的创建。
[0118] 具体的,在可信执行环境中执行该创建交易之前,首先可以确认该笔交易的功能类型;
[0119] 例如,以以太坊为例,通常是基于交易中携带的交易内容来确定交易的功能类型;比如,如果交易中的to字段为一个空的账户,并且交易的data字段携带需要部署的字节码,则可以认定该笔交易为用于创建智能合约的交易;如果交易中的to字段指向一个已经存在的智能合约的合约地址,并且交易的data字段携带调用智能合约所需的参数,则可以认定该笔交易为用于调用智能合约的交易。
[0120] 当确认该笔交易为用于创建智能合约的创建交易,可以进一步在上述可信安全环境中执行智能合约创建代码,在区块链上创建一个与智能合约对应的合约账户,并将该创建交易中的加密后的智能合约的合约代码发送至区块链的分布式账本进行存储。
[0121] 例如,以以太坊为例,创建的合约账户中通常会包括Balance、Nonce、codehash和storaghash等属性字段,节点设备在完成合约账户的创建后,会将创建交易中的合约代码的hash值填充至上述codehash字段,将上述创建交易打包进区块发送给区块链中的其它各节点设备,在区块链的分布式账本中进行存储。也即,智能合约的合约代码的原始内容,仍然存放在原始的创建交易保存在区块链的区块中,与该智能合约对应的合约账户中,仅需要维护智能合约的合约代码的hash指针。
[0122] 一般的,区块链中支持的共识算法,通常分为节点设备需要争夺每一轮的记账周期的记账权的共识算法,和预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法。
[0123] 例如,前者以工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法为代表;后者以实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法为代表。
[0124] 对于采用工作量证明(Proof of Work,POW)以及股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法的支持智能合约的区块链网络中,争夺记账权的节点都可以在接收到创建交易后执行该笔交易。争夺记账权的节点中可能其中一个在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以收到的该创建交易与其它交易一起打包并生成新的区块,并将生成的新的区块发送至其它节点进行共识。
[0125] 对于采用实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法的支持智能合约的区块链网络中,具有记账权的节点在本轮记账前已经商定好。因此,节点设备在接收到上述创建交易后,如果自身不是本轮的记账节点,则可以将该创建交易发送至记账节点。对于本轮的记账节点,在将该创建交易与其它交易一起打包并生成新区块的过程中或者之前,可以执行该创建交易。记账节点在将该创建交易与其它交易一起打包生成新区块后,可以将生成的新的区块或者该新的区块的区块头发送至其它节点进行共识。
[0126] 如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将该创建交易打包并生成新的区块,并将生成的新的区块或者区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到新的区块或者区块头后,经验证没有问题,可以将该新的区块追加到原有的区块链末尾,从而完成记账过程,达成共识。当达成共识后,也就完成了智能合约在区块链上的部署。其中,其它节点设备在验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的上述创建交易。
[0127] 在本说明书中,在可信执行环境中执行上述创建交易的具体过程,具体可以是通过在上述可信执行环境中部署的虚拟机来完成;也即,可信执行环境中部署的虚拟机才是上述创建交易的执行主体;例如,以以太坊为例,节点设备通常是通过搭载的以太坊虚拟机(Ethereum Virtual Machine,EVM)来执行交易。
[0128] 在本说明书中,当在区块链上完成了智能合约的部署之后,用户可以在客户端上构建一笔用于调用目标智能合约的调用交易,并将交易发送给与该客户端对接的区块链节点设备,来发起对已经部署完成的目标智能合约的调用执行。
[0129] 区块链中的节点设备在收到客户端发送的上述调用交易后,仍然可以检查该交易是否有效、格式是否正确,验证该交易的签名是否合法等,并在所有的检查和验证均通过后,在可信执行环境中执行该调用交易。
[0130] 具体的,在可信执行环境中执行该调用交易之前,首先也可以确认该笔交易的功能类型;当确认该笔交易为用于调用智能合约的调用交易,可以进一步获取区块链的分布式账本中存储的加密后的该目标智能合约的合约代码,并将获取到的加密后的该目标智能合约的合约代码发送至上述可信执行环境,在上述可信执行环境中进行执行。
[0131] 在本说明书中,在上述可信执行环境中,可以存储和维护与区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥。例如,在实际应用中,在上述可信执行环境中可以搭载密钥生成算法,当用户在区块链成功创建了一个与智能合约对应的合约账户时,节点设备可以在可信执行环境中,调用搭载的密钥生成算法,为该合约账户创建根密钥。
[0132] 其中,如果采用非对称加密方式,该根密钥包括公私钥对;公钥用于对合约代码进行加密,由用户持有;私钥存储在可信执行环境中,用于对加密的合约代码进行解密;如果采用对称加密方式,该根密钥则仅包括一个用于对合约代码进行加密和解密的密钥。
[0133] 其中,上述密钥生成算法的具体类型,以及基于上述密钥生成算法创建根密钥的具体实施过程,本说明书中不再进行详述。
[0134] 在示出的一种实施方式中,为了实现对智能合约的监管,在上述可信执行环境中,可以默认存储区块链的分布式账本中收录的所有智能合约的合约代码对应的解密密钥;其中,为了实现监管的目的,对于上述可信执行环境中存储的受监管的智能合约对应的解密密钥,,可以将其设置为禁止提取的状态。
[0135] 其中,关于如何将在上述可信执行环境中存储和维护的与被监管智能合约的合约代码对应的解密密钥设置为不可提取的状态的实施手段,在本说明书中不进行特别的限定;
[0136] 例如,在示出的一种实现方式中,可以在可信执行环境中部署用于对解密密钥的提取权限进行控制的程序代码,该程序代码具体可以由承载该可信执行环境的硬件(比如,作为可信执行环境的芯片)来独立的进行调用执行;进而可信执行环境可以通过执行上述程序代码,对存储和维护的解密密钥的提取权限进行控制,以保障该可信执行环境中存储和维护的与被监管智能合约的合约代码对应的解密密钥,处于一种无法被提取和导出的状态。当然,除了以上示出的实现方式以外,在实际应用中,也可以通过其它的实现方式进行实施,在本说明书中不再进行一一列举。
[0137] 在将获取到的加密后的上述目标智能合约的合约代码,发送至上述可信执行环境之后,承载该可信执行环境的硬件,可以进一步获取智能合约监管规则,并在该可信执行环境中基于获取到的智能合约监管规则确定该目标智能合约是否为被监管智能合约。
[0138] 其中,上述智能合约监管规则,具体可以是由监管方自主生成,并且能够由监管方来进行实时的更新和修改的监管规则。
[0139] 在示出的一种实施方式中,在以上描述的区块链的基础上,可以再部署一个独立的监管区块链,并在该监管区块链上部署用于生成智能合约监管规则的智能合约,并在该智能合约中声明用于生成智能合约监管规则的生成逻辑。进而,监管方可以基于实际的监管需求构建调用交易,来调用该智能合约,动态的生成智能合约监管规则,并将生成的智能合约监管规则在该监管区块链的分布式账本中进行存储。
[0140] 其中,所述动态的生成智能合约监管规则,是指对智能合约进行监管时实际所使用的智能合约监管规则,总是以最新生成的智能合约监管规则为准。如果监管方的监管需求发生变化,监管方可以基于新的监管需求,来调用该智能合约重新生成新的智能合约监管规则。
[0141] 通过这种方式,监管方可以基于实际的监管需求,来灵活的对智能合约监管规则进行动态更新。
[0142] 例如,上述智能合约监管规则具体可以是由被监管智能合约的合约地址组成的智能合约黑名单,当监管方需要更新该智能合约黑名单中的被监管智能合约的合约地址时,可以通过以上描述的方式,通过调用上述智能合约,来重新生成一个智能合约黑名单,灵活的对智能合约黑名单中的被监管智能合约的合约地址进行删除或者增加。
[0143] 相应的,承载上述可信执行环境的硬件,在获取智能合约监管规则时,可以访问该监管区块链的分布式账本,从该监管区块链的分布式账本中来获取最新的智能合约监管规则;
[0144] 例如,在实现时,调用部署在上述监管区块链中的上述智能合约后生成的智能合约监管规则,可以存储在上述监管区块链的状态数据库中;比如,以以太坊为例,智能合约的调用结果,通常会作为本次调用的调用交易的交易收据的一部分内容,存储至区块链的状态数据库中的收据树中。而上述节点设备可以实时的监听上述监管区块链的状态数据库中存储的,与上述智能合约相关的数据。当监听到调用该智能合约生成的最新的智能合约监管规则后,可以将该智能合约监管规则在本地进行存储。而承载上述可信执行环境的硬件,则可以直接从该节点设备本地读取最新的智能合约监管规则。
[0145] 其中,上述智能合约监管规则的具体形式,在本说明书中不仅进行特别限定;例如,具体可以是由被监管智能合约的合约地址构成的智能合约黑名单,也可以黑名单以外的其他形式。
[0146] 在示出的一种实施方式中,以上述智能合约监管规则是由被监管智能合约的合约地址构成的智能合约黑名单为例,在这种情况下,承载上述可信执行环境的硬件在基于获取到的最新的智能合约监管规则确定上述目标智能合约是否为被监管智能合约时,首先可以获取上述调用交易中携带的上述目标智能合约的合约地址,再将该目标智能合约的合约地址,与上述黑名单中的被监管智能合约的合约地址进行匹配;
[0147] 其中,在本说明书中,上述合约地址就是为智能合约创建的合约账户的账户地址;例如,以以太坊为例,智能合约账户的地址是由发送者的地址(如图1中的0xf5e…或)和交易随机数(nonce)作为输入,通过加密算法生成的。
[0148] 如果该目标智能合约的合约地址,与上述黑名单中的任一被监管智能合约的合约地址匹配;此时,可以确定该目标智能合约为被监管智能合约;反之,如果该目标智能合约的合约地址,与上述黑名单中的合约地址均不匹配;此时,可以确定该目标智能合约不是被监管智能合约。
[0149] 需要说明的是,当上述智能合约监管规则为上述智能合约黑名单以外的其它形式的监管规则时,在基于获取到的最新的智能合约监管规则确定上述目标智能合约是否为被监管智能合约时的具体确认方式,也会随之发生变化,在本说明书中不再进行一一列举;
[0150] 例如,在一种情况下,上述智能合约监管规则,具体也可以是被监管智能合约的合约地址的编码方式。也即,可以通过该智能合约监管规则,对合约地址满足特定的编码方式的一类智能合约进行监管。在这种情况下,在基于获取到的最新的智能合约监管规则确定上述目标智能合约是否为被监管智能合约时,即为确定上述目标智能合约的合约地址的编码方式,是否匹配上述智能合约监管规则中,所约定的编码方式的过程。
[0151] 在示出的一种实施方式中,为了实现对智能合约的监管,上述可信执行环境中存储的解密密钥,也可以不包含受监管的智能合约对应的解密密钥;也即,在上述可信执行环境中可以存储与不受监管的智能合约的合约代码对应的解密密钥,而并不存储和维护与被监管的智能合约的合约代码对应的解密密钥。
[0152] 例如,在实现时,当用户在区块链成功创建了一个与智能合约对应的合约账户时,可以调用可信执行环境中搭载的密钥生成算法,为该合约账户创建根密钥;当根密钥创建完成后,可以进一步获取智能合约监管规则,并在该可信执行环境中基于获取到的智能合约监管规则来确定该智能合约是否为被监管智能合约;其中,确定该智能合约是否为被监管智能合约的实施过程不再赘述。
[0153] 如果确定该目标智能合约不是被监管智能合约,则可以进一步在可信执行环境中存储和维护生成的根密钥。反之,如果确定该目标智能合约是被监管智能合约,则可信执行环境可以不再存储和维护生成的根密钥,此时可以选择将生成的根密钥丢弃;例如,如果采用非对称加密方式,可以将根密钥中的公钥发送给用户持有,而将根密钥中的私钥丢弃;如果采用对称加密方式,则可以将生成的密钥复制一份发送给用户,再将生成的该密钥丢弃。
[0154] 在本说明书中,如果在该可信执行环境中基于获取到的智能合约监管规则确定上述目标智能合约是被监管智能合约,由于可信执行环境中存储的与被监管智能合约的合约代码对应的解密密钥是被禁止提取的;或者,可信执行环境中并没有存储被监管智能合约的合约代码对应的解密密钥;此时,无法提取到解密密钥对该目标智能合约的合约代码进行解密;也即,无法执行该目标智能合约的合约代码;因此,在这种情况下,可以直接终止针对该目标智能合约的调用过程,向上述客户端返回该目标智能合约调用失败的提示消息。
[0155] 如果在该可信执行环境中基于获取到的智能合约监管规则确定该目标智能合约不是被监管智能合约,此时还进一步从该可信执行环境中,提取出与该目标智能合约的合约代码对应的解密密钥,并基于该解密密钥对该目标智能合约的合约代码进行解密。其中,基于提取出的解密密钥,对该目标智能合约的合约代码进行解密的方式,与在部署该智能合约时所采用的加密方式相对应。
[0156] 如前所述,如果在部署该目标智能合约时,该目标智能合约的合约代码采用了对称加密的方式进行加密;比如,采用对称加密算法的私钥进行加密,此时直接使用对称加密的私钥进行解密即可。
[0157] 如果在部署该目标智能合约时,该目标智能合约的合约代码采用了非对称加密的方式进行加密;比如,采用了非对称加密的私钥进行了加密;此时直接使用非对称加密的公钥进行解密即可。
[0158] 进一步的,如果在部署该目标智能合约时,该目标智能合约的合约代码采用了对称加密和非对称加密相结合的方式;比如,采用用对称加密算法的私钥加密合约代码,然后再用非对称加密算法的公钥加密上述对称加密算法中所采用的私钥。此时先使用非对称加密算法的私钥解密上述对称加密算法中所采用的私钥;再使用解密出的上述对称加密算法中所采用的私钥,对加密的合约代码进行解密。
[0159] 在本说明书中,上述节点设备搭载的可信执行环境,具体可以是一个基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。
[0160] 可信执行环境最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。
[0161] 伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。因此现在的TEE技术都引入了远程证明机制,由硬件厂商(主要是CPU厂商)背书并通过数字签名技术确保用户对TEE状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括Intel SGX,AMD SEV在内的商用TEE也都提供了内存加密技术,将可信硬件限定在CPU内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(SGX)等TEE技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在TEE中运行的应用程序受到安全保护,几乎不可能被第三方访问。
[0162] 在示出的一种实施方式中,以上述可信执行环境为Intel SGX为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以上述节点设备采用支持SGX的CPU为例,该CPU可以利用新增的处理器指令,在内存中分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。
[0163] EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(Basic Input Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的秘钥也传入围圈。然后,在CPU的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
[0164] 在这种情况下,节点设备可以将部署的虚拟机,加载进SGX技术提供的围圈中。当在基于提取出的解密密钥对上述目标智能合约的合约代码进行解密,获得该目标智能合约的明文合约代码以后,该节点设备可以利用CPU中新增的处理器指令,在内存中可以分配一部分区域EPC,通过CPU内的加密引擎MEE对上述解密得到的明文合约代码进行加密存入所述EPC中。EPC中加密的内容进入CPU后被解密成明文。在CPU中,对所述明文的代码进行运算,完成代码的执行过程。
[0165] 当节点设备在上述可执行环境中,执行上述目标智能合约的明文合约代码后,还可以对该明文合约代码的执行结果进行加密,然后将加密后的执行结果发送至上述区块链的分布式账本进行存储。
[0166] 例如,由于上述目标智能合约的明文合约代码的执行结果,通常会导致该智能合约的状态发生变化;因此,上述明文合约代码的执行结果通常会存储至上述区块链的状态数据库中;比如,以以太坊为例,上述明文合约代码的执行结果,通常会作为本次调用的调用交易的交易收据的一部分内容,存储至区块链的状态数据库中的收据树中。
[0167] 其中,在本说明书中,对上述目标智能合约的合约代码的执行结果进行加密时所采用的加密方式,具体可以是对称加密方式,也可以是非对称加密方式,
[0168] 例如,仍以上述可信执行环境为Intel SGX为例,在区块链的分布式账本中写入合约代码的执行结果时使用的加密密钥,通常称之为secret_key。该secret_key可以是对称加密的密钥,也可以是非对称加密密钥;其中,如果该secret_key是对称加密的密钥,通常称之为seal(Simple Encrypted Arithmetic Library)密钥。基于Intel SGX技术,该seal密钥,可以是通过远程证明后由密钥管理服务器发送给区块链节点的密钥。
[0169] 在以上技术方案中,由于区块链中的节点设备在搭载的可信执行环境中执行加密后的智能合约的合约代码时,只有不受管理的智能合约的合约代码可以进行解密和执行;因此,可以在对智能合约进行充分的隐私保护的基础上,通过技术手段对一些被管理智能合约进行内容屏蔽,来实现对智能合约的监管。
[0170] 请参见图5,图5是一示例性实施例提供的另一种基于区块链的智能合约管理方法的流程图。如图5所示,该方法应用于区块链中的节点设备;其中,所述节点设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;所述方法包括以下步骤:
[0171] 步骤502,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0172] 步骤504,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密,并在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;
[0173] 在本说明书中,在上述可信执行环境中,可以默认存储区块链的分布式账本中收录的所有智能合约的合约代码对应的解密密钥。
[0174] 而在将加密的该目标智能合约的合约代码发送至该节点设备所搭载的可信执行环境之后,可以提取可信执行环境中存储的与该目标智能合约对应的解密密钥,基于该解密密钥对该目标智能合约的合约代码进行解密,并在可信执行环境中执行解密后的合约代码。
[0175] 步骤506,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0176] 步骤508,如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储。
[0177] 在本说明书中,当目标智能合约的合约代码执行完毕后,可以在上述可信执行环境中缓存上述合约代码的执行结果,并通过进一步确定该目标智能合约是否为受监管的智能合约,来决策是否需要将上述合约代码的执行结果加密后发送至区块链的分布式账本进行存储。
[0178] 具体的,承载该可信执行环境的硬件,可以进一步获取智能合约监管规则,并在该可信执行环境中基于获取到的智能合约监管规则来确定该目标智能合约是否为被监管智能合约。其中,具体的实施过程不再赘述,可以参考之前实施例的记载。
[0179] 在示出的一种实施方式中,如果该目标智能合约是被监管智能合约,此时可以删除缓存的该目标智能合约的合约代码的执行结果,并向上述客户端返回该目标智能合约调用失败的提示消息。
[0180] 在示出的另一种实施方式中,如果该目标智能合约是被管理智能合约,也可以将该目标智能合约的合约代码的执行结果,由缓存模式切换为在可信执行环境中进行持久化存储,并将该可信执行环境中持久化存储的上述执行结果设置为禁止提取状态;同时,还可以向上述客户端返回该目标智能合约调用失败的提示消息。
[0181] 当然,如果该目标智能合约不是被监管智能合约,此时可以针对上述可信执行环境中缓存的该目标智能合约的合约代码的执行结果进行加密,然后将加密后的执行结果发送至上述区块链的分布式账本进行存储。其中,具体的实施过程也不再赘述,可以参考之前实施例的记载。
[0182] 在以上技术方案中,由于区块链中的节点设备在搭载的可信执行环境中执行解密的智能合约的合约代码之后,只有不受管理的智能合约的合约代码的执行结果进一步加密后发送至区块链的分布式账本进行存储;因此,可以在对智能合约进行充分的隐私保护的基础上,通过技术手段对一些被管理智能合约进行内容屏蔽,来实现对智能合约的监管。与上述方法实施例相对应,本申请还提供了装置的实施例。
[0183] 与上述方法实施例相对应,本说明书还提供了一种基于区块链的智能合约管理装置的实施例。本说明书的基于区块链的智能合约管理装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本说明书的基于区块链的智能合约管理装置所在电子设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0184] 图7是本说明书一示例性实施例示出的一种基于区块链的智能合约管理装置的框图。
[0185] 请参考图7,所述基于区块链的智能合约管理装置70可以应用在前述图6所示的电子设备中,所述电子设备搭载了可信执行环境;包括:
[0186] 第一获取模块701,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0187] 第一确定模块702,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;
[0188] 第一解密模块703,如果所述目标智能合约不是被管理智能合约,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,并基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0189] 第一执行模块704,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码,并将执行结果加密后发送至所述区块链的分布式账本进行存储。
[0190] 在本实施例中,所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;
[0191] 其中,所述可信执行环境中存储的与被管理智能合约对应的解密密钥被设置为禁止提取;或者,所述可信执行环境中存储的解密密钥不包括与被管理智能合约对应的解密密钥。
[0192] 在本实施例中,所述装置70还包括:
[0193] 第一返回模块705(图7中未示出),如果所述目标智能合约是被管理智能合约,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0194] 在本实施例中,所述装置70还包括:
[0195] 接收模块706,接收客户端发起的针对目标智能合约的创建交易;其中,所述创建交易包括加密后的所述目标智能合约的合约代码;
[0196] 创建模块707,响应于所述创建交易,在所述可信执行环境中执行智能合约创建代码,在所述区块链中创建与所述目标智能合约对应的合约账户,并将加密后的所述目标智能合约的合约代码发送至所述区块链的分布式账本进行存储。
[0197] 在本实施例中,所述第一获取模块701:
[0198] 从管理区块链的分布式账本中获取智能合约管理规则;其中,所述智能合约管理规则由管理方调用部署在所述管理区块链上的智能合约,生成的智能合约管理规则。
[0199] 在本实施例中,所述智能合约管理规则包括:由被管理智能合约的合约地址构成的智能合约黑名单;
[0200] 所述第一确定模块702:
[0201] 获取所述调用交易中的所述目标智能合约的合约地址;
[0202] 将所述目标智能合约的合约地址与所述智能合约黑名单中的合约地址进行匹配;
[0203] 如果所述目标智能合约的合约地址与所述智能合约黑名单中的任一合约地址匹配,确定所述目标智能合约为被管理智能合约;反之,确定所述目标智能合约不是被管理智能合约。
[0204] 在本实施例中,对所述目标智能合约的合约代码采用的加密方式,包括以下示出的加密方式中的任意一种:对称加密方式、非对称加密方式、对称加密结合非对称加密的方式;
[0205] 对所述目标智能合约的合约代码的执行结果采用的加密方式,包括:对称加密方式;或者,非对称加密方式。
[0206] 在本实施例中,其中,所述对称加密结合非对称加密的方式,包括数字信封加密方式。
[0207] 在本实施例中,其中,所述可信执行环境包括Intel SGX。
[0208] 图8是本说明书一示例性实施例示出的一种基于区块链的智能合约管理装置的框图。
[0209] 请参考图8,所述基于区块链的智能合约管理装置80可以应用在前述图6所示的电子设备中,所述电子设备搭载了可信执行环境;所述可信执行环境中存储了与所述区块链的分布式账本中存储的加密后的智能合约的合约代码对应的解密密钥;包括:
[0210] 第二获取模块801,响应于客户端发起的针对目标智能合约的调用交易,获取所述区块链的分布式账本中存储的加密后的所述目标智能合约的合约代码,并将加密后的所述目标智能合约的合约代码发送至所述可信执行环境;
[0211] 第一解密模块802,提取所述可信执行环境中存储的与所述目标智能合约的合约代码对应的解密密钥,基于提取到的所述解密密钥对所述目标智能合约的合约代码进行解密;
[0212] 第二执行模块803,在所述可信执行环境中执行解密后的所述目标智能合约的合约代码;
[0213] 第二确定模块804,获取智能合约管理规则,并在可信执行环境中基于所述智能合约管理规则确定所述目标智能合约是否为被管理智能合约;如果所述目标智能合约不是被管理智能合约,则将所述目标智能合约的合约代码的执行结果加密后发送至所述区块链的分布式账本进行存储。
[0214] 在本实施例中,所述装置80还包括:
[0215] 第二返回模块805(图8中未示出),如果所述目标智能合约是被管理智能合约,删除所述目标智能合约的合约代码的执行结果,并向所述客户端返回所述目标智能合约调用失败的提示消息;或者,
[0216] 如果所述目标智能合约是被管理智能合约,在所述可信执行环境中存储所述目标智能合约的合约代码的执行结果,并将所述可信执行环境中存储的所述执行结果设置为禁止提取;以及,向所述客户端返回所述目标智能合约调用失败的提示消息。
[0217] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0218] 在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0219] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0220] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0221] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0222] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0223] 在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0224] 应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0225] 以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。