一种部署智能合约的方法、区块链节点和存储介质技术

技术编号:28632703 阅读:19 留言:0更新日期:2021-05-28 16:30
本说明书一个或多个实施例提供一种部署智能合约的方法、区块链节点和存储介质。一种部署智能合约的方法实施例包括:客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码;区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码;所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。

【技术实现步骤摘要】
一种部署智能合约的方法、区块链节点和存储介质
本说明书实施例属于区块链
,尤其涉及一种部署智能合约的方法、区块链节点和存储介质。
技术介绍
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链2.0时代中出现了智能合约,将区块链的应用范围提升到了一个新高度。有了智能合约,区块链能做的不再是单一的转账交易,而是还可以调用一段代码,而这段代码可以由用户自定义。
技术实现思路
本说明书在于提供一种部署智能合约的方法、区块链节点和存储介质。本说明书实施例提供的一种部署智能合约的方法、区块链节点和存储介质,通过以下方式实现:一种部署智能合约的方法,包括:客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码;区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码;所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。一种部署智能合约的方法,包括:区块链节点接收创建智能合约的交易,所述交易中包括所述智能合约的机器码,所述机器码由第一可信执行环境TEE对所述智能合约的字节码进行AoT编译得到;所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。一种部署智能合约的区块链节点,执行上述的方法。一种部署智能合约的区块链节点,包括:处理器,存储器,存储有程序,其中在所述处理器执行所述程序时,执行上述的方法。一种存储介质,用于存储程序,其中所述程序在被执行时进行上述方法的操作。通过上述本说明书的实施例,客户端在将智能合约部署至区块链之前,预先将该智能合约的字节码发送至第一TEE进行AoT编译为相应的机器码,使得区块链上直接部署智能合约的机器码,从而在调用智能合约时可以基于所部署的机器码实现高效运行。由于机器码自身的特性,使得机器码可执行的操作远多于字节码,随之也会带来更多的风险,比如造成区块链节点处存储的隐私数据的泄露、影响区块链节点的稳定运行等。因而,对于创建智能合约的交易,可以通过限制用于编译生成机器码的TEE,由可信TEE对机器码的安全性背书,而避免非可信TEE编译生成的机器码部署至链上,从而降低或消除前述的风险。附图说明图1是一实施例中的编译执行和解释执行的原理示意图;图2是一实施例中的解释执行和JIT的原理示意图;图3是一实施例中的创建智能合约的图示过程;图4是一实施例中的调用智能合约的图示过程;图5是一实施例中的创建智能合约和调用智能合约的示意图;图6是一实施例中的部署智能合约的流程图;图7是一实施例中的区块链节点的模块结构图;图8是另一实施例中的创建智能合约和调用智能合约的示意图;图9是一实施例中的创建智能合约和调用智能合约过程中包含虚拟机执行过程的示意图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。区块链1.0时代通常是指在2009年到2014年之间,以比特币为代表的区块链应用发展阶段,它们主要致力于解决货币和支付手段的去中心化问题。从2014年开始,开发者们越来越注重于解决比特币在技术和扩展性方面的不足。2013年底,VitalikButerin发布了以太坊白皮书《以太坊:下一代智能合约和去中心化应用平台》,将智能合约引入区块链,打开了区块链在货币领域以外的应用,从而开启了区块链2.0时代。智能合约是一种基于规定触发规则的,可自动执行的计算机合约,也可以看作是传统合约的数字版本。智能合约这一概念最早由跨领域法律学者、密码学研究工作者尼克·萨博(NickSzabo)在1994年提出。这项技术曾一度因为缺乏可编程数字系统和相关技术而没有被用于实际产业中,直到区块链技术和以太坊的出现为其提供了可靠的执行环境。由于区块链技术采用的块链式账本,产生的数据不可篡改或者删除,且整个账本将不断新增账本数据,从而保证了历史数据的可追溯;同时,去中心化的运行机制避免了中心化因素的影响。基于区块链技术的智能合约不仅可以发挥智能合约在成本、效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。智能合约本质上是一段可由计算机执行的程序。智能合约与现在广泛使用的计算机程序一样,可以通过高级语言(例如C语言、C++语言等)编写而成。由高级语言编写好的智能合约的程序代码,一般可以通过“编译器”转换为计算机的CPU可以识别和运行的“机器码”,进而可以由CPU执行这样的机器码(或者称为“微处理器指令”)。这种方式一般称为“编译执行”。编译执行一般不具有跨平台的可扩展性。由于存在不同厂商、不同品牌和不同代的CPU,而这些不同的CPU支持的指令集很多情况下是不同的,如x86指令集,ARM指令集等,且同一厂商同一品牌但不同代的CPU(如不同代的IntelCPU)支持的指令集也不完全相同,因此,用同样的高级语言编写的同样的程序代码,在不同CPU上被编译器转换出来的机器码可能不同。具体的,编译器在转换高级语言编写的程序代码到机器码的过程中,会结合具体的CPU指令集的特点(如向量指令集等)进行优化以提升程序执行的速度,而此类优化往往与具体的CPU硬件相关。这样,同样的机器码,一个在x86上可以运行,但另一个在ARM上就可能无法运行;甚至同样是x86平台,随着时间的推移,指令集也不断丰富和扩展,这就导致不同代的x86平台运行的机器码也有不同。而且,由于执行机器码需要由操作系统内核对CPU进行调度,因此即使是同样的硬件,在不同操作系统下支持运行的机器码也可能不同。不同于编译执行,还存在一种“解释执行”的程序运行方式。比如Java语言,将Java源代码通过Java的编译器编译成标准的字节码(bytecode),这里编译器不针对任何实际的硬件处理器的指令集,而是定义了一套抽象的标准指令集。编译成的标准字节码一般无法在硬件CPU上直接运行,因此引入了一个虚拟机,即JVM,JVM运行本文档来自技高网...

【技术保护点】
1.一种部署智能合约的方法,包括:/n客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码;/n区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码;/n所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。/n

【技术特征摘要】
1.一种部署智能合约的方法,包括:
客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码;
区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码;
所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。


2.如权利要求1所述的方法,将所述智能合约的字节码AoT编译为所述机器码,包括:
在对所述智能合约的字节码进行AoT编译的过程中进行优化编译。


3.如权利要求2所述的方法,在对所述智能合约的字节码进行AoT编译的过程中进行优化编译,包括:
获取所述区块链节点的硬件信息和环境信息;
在对所述智能合约的字节码进行AoT编译的过程中,基于所述硬件信息和所述环境信息进行优化编译。


4.如权利要求1所述的方法,将所述智能合约的字节码AoT编译为所述机器码,包括:
根据所述区块链节点的处理器架构和/或运行环境,对所述字节码进行AoT编译,以得到能够在所述区块链节点上执行的机器码。


5.如权利要求1所述的方法,第一TEE部署于下述任一方:所述客户端、区块链网络中的任一区块链节点、区别于所述客户端和所述区块链节点的第三方服务端。


6.如权利要求5所述的方法,在第一TEE部署于区块链网络中的任一区块链节点的情况下,客户端将智能合约的字节码发送至第一可信执行环境TEE,包括:
客户端创建用于实现AoT编译的交易,并该交易发送至部署有第一TEE的区块链节点处,以由部署有第一TEE的区块链节点调用用于实现编译功能的智能合约,对接收到的交易中包含的字节码进行AoT编译,得到机器码。


7.如权利要求1所述的方法,所述区块链节点确定所述机器码由可信TEE对所述字节码编译得到,包括:
所述区块链节点从所述交易中获取第一TEE通过私钥对所述机器码生成的签名;
所述区块链节点在所述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,确定第一TEE属于可信TEE。


8.如权利要求7所述的方法,所述私钥由密钥管理服务器在确定第一TEE通过远程证明的情况下分发至第一TEE中。


9.如权利要求7所述的方法,所述可信TEE镜像包括:基于软件扩展保护SGX的可信围圈enclave的镜像。


10.如权利要求7所述的方法,所述可信TEE镜像对应的公钥被记录于系统合约中;所述方法还包括:
所述区块链节点调用所述系统合约,并向所述系统合约传入所述签名;
所述区块链节点接收所述系统合约返回的识别结果,所述识别结果用于表明所述签名是否被所述可信TEE镜像对应的公钥验证成功。


11.如权利要求10所述的方法,所述区块链节点调用所述系统合约,包括:
所述区块链节点从所述交易中读取所述系统合约的合约地址,并基于所述合约地址调用所述系统合约;或者,
所述区块链节点在确定所述交易的类型为合约部署类型的情况下,根据链代码中定义的所述系统合约的合约地址调用所述系统合约。


12.如权利要求11所述的方法,所述系统合约被部署在创世块中...

【专利技术属性】
技术研发人员:刘琦
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1