CN111770206B - 一种部署智能合约的方法、区块链节点和存储介质 - Google Patents

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

Info

Publication number
CN111770206B
CN111770206B CN202010901437.8A CN202010901437A CN111770206B CN 111770206 B CN111770206 B CN 111770206B CN 202010901437 A CN202010901437 A CN 202010901437A CN 111770206 B CN111770206 B CN 111770206B
Authority
CN
China
Prior art keywords
contract
tee
intelligent contract
machine code
transaction
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.)
Active
Application number
CN202010901437.8A
Other languages
English (en)
Other versions
CN111770206A (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.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology 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 Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202110190299.1A priority Critical patent/CN112866412B/zh
Priority to CN202010901437.8A priority patent/CN111770206B/zh
Publication of CN111770206A publication Critical patent/CN111770206A/zh
Application granted granted Critical
Publication of CN111770206B publication Critical patent/CN111770206B/zh
Priority to US17/357,179 priority patent/US11513780B2/en
Priority to EP21182400.8A priority patent/EP3971742B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • 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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • G06F21/645Protecting data integrity, e.g. using checksums, certificates or signatures using a third party
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/06Network architectures or network communication protocols for network security for supporting key management in a packet data network
    • H04L63/062Network architectures or network communication protocols for network security for supporting key management in a packet data network for key distribution, e.g. centrally by trusted party
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/126Applying verification of the received information the source of the received data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/083Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • H04L9/0897Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage involving additional devices, e.g. trusted platform module [TPM], smartcard or USB
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Abstract

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

Description

一种部署智能合约的方法、区块链节点和存储介质
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种部署智能合约的方法、区块链节点和存储介质。
背景技术
区块链(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年底,Vitalik Buterin发布了以太坊白皮书《以太坊:下一代智能合约和去中心化应用平台》,将智能合约引入区块链,打开了区块链在货币领域以外的应用,从而开启了区块链2.0时代。
智能合约是一种基于规定触发规则的,可自动执行的计算机合约,也可以看作是传统合约的数字版本。智能合约这一概念最早由跨领域法律学者、密码学研究工作者尼克·萨博(Nick Szabo)在1994年提出。这项技术曾一度因为缺乏可编程数字系统和相关技术而没有被用于实际产业中,直到区块链技术和以太坊的出现为其提供了可靠的执行环境。由于区块链技术采用的块链式账本,产生的数据不可篡改或者删除,且整个账本将不断新增账本数据,从而保证了历史数据的可追溯;同时,去中心化的运行机制避免了中心化因素的影响。基于区块链技术的智能合约不仅可以发挥智能合约在成本、效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。
智能合约本质上是一段可由计算机执行的程序。智能合约与现在广泛使用的计算机程序一样,可以通过高级语言(例如C语言、C++语言等)编写而成。由高级语言编写好的智能合约的程序代码,一般可以通过“编译器”转换为计算机的CPU可以识别和运行的“机器码”,进而可以由CPU执行这样的机器码(或者称为“微处理器指令”)。这种方式一般称为“编译执行”。
编译执行一般不具有跨平台的可扩展性。由于存在不同厂商、不同品牌和不同代的CPU,而这些不同的CPU支持的指令集很多情况下是不同的,如x86指令集,ARM指令集等,且同一厂商同一品牌但不同代的CPU(如不同代的Intel CPU)支持的指令集也不完全相同,因此,用同样的高级语言编写的同样的程序代码,在不同CPU上被编译器转换出来的机器码可能不同。具体的,编译器在转换高级语言编写的程序代码到机器码的过程中,会结合具体的CPU指令集的特点(如向量指令集等)进行优化以提升程序执行的速度,而此类优化往往与具体的CPU硬件相关。这样,同样的机器码,一个在x86上可以运行,但另一个在ARM上就可能无法运行;甚至同样是x86平台,随着时间的推移,指令集也不断丰富和扩展,这就导致不同代的x86平台运行的机器码也有不同。而且,由于执行机器码需要由操作系统内核对CPU进行调度,因此即使是同样的硬件,在不同操作系统下支持运行的机器码也可能不同。
不同于编译执行,还存在一种“解释执行”的程序运行方式。比如Java语言,将Java源代码通过Java的编译器编译成标准的字节码(bytecode),这里编译器不针对任何实际的硬件处理器的指令集,而是定义了一套抽象的标准指令集。编译成的标准字节码一般无法在硬件CPU上直接运行,因此引入了一个虚拟机,即JVM,JVM运行在特定的硬件处理器上,用以解释和执行编译后的标准字节码。
JVM是Java Virtual Machine(Java虚拟机)的缩写,是一种虚构出来的计算机,往往通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM屏蔽了与具体的硬件平台、操作系统等相关的信息,使Java程序只需要是生成的可在Java虚拟机上运行的标准字节码,就可以在多种平台上不加修改地运行。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java能够“一次编译,到处运行”的原因。
JVM运行在特定的硬件处理器上,负责针对所运行的特定处理器而进行字节码的解释和执行,并向上屏蔽这些底层的差异,呈现给开发者以标准的开发规范。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。具体的,JVM接收到输入的字节码后,逐句解释其中的每一条指令,并翻译成适合当前机器的机器码来运行,这些过程例如由称为Interpreter的解释器进行解释和执行。这样一来,编写Java程序的开发者不需要考虑编写后的程序代码将运行在哪种硬件平台上。JVM本身的开发是由Java组织的专业开发人员完成,以将JVM适配到不同的处理器架构上。迄今为止,主流的处理器架构只有有限的几种,如X86, ARM, RISC-V,MIPS。专业的开发人员将JVM分别移植到支持这几种特定硬件的平台后,Java程序理论上就可以在所有的机器上运行了。JVM的移植工作通常由Java开发组织专业的人员提供的,这就极大减轻了Java应用开发者的负担。
解释执行带来了跨平台可移植性,但由于bytecode的执行经历了JVM中间翻译的过程,因此执行效率不如上述编译执行效率高,这种效率的差异有时甚至可达几十倍。
图1示出了编译执行和解释执行的共同点和不同点。不论是解释执行还是编译执行,也不论是物理机还是虚拟机,对于应用程序,机器都不可能如人那样阅读、理解,然后就获得了执行能力。大部分的程序代码到物理机的目标代码或虚拟机能执行的指令集之前,都需要经过图1中的各个步骤。图1中从顶部到左边的那条分支就是传统编译原理中程序代码到目标机器代码的生成过程,从顶部到右边的那条分支是解释执行的过程。如今,基于物理机、Java虚拟机,或者非Java的其他高级语言虚拟机(High-Level Language VirtualMachine, HLLVM)的语言,大多都会遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法分析和语法分析处理,把源码转化为抽象语法树(Abstract SyntaxTree,AST)。对于一门具体语言的实现来说,词法分析、语法分析以至后面的优化器和目标代码生成器都可以选择独立于执行引擎,形成一个完整意义的编译器去实现,这类代表是C或C++语言。也可以选择把其中一部分步骤(如生成抽象语法树之前的步骤)实现为一个半独立的编译器,这类代表是Java语言。又或者把这些步骤和执行引擎全部集中封装在一个封闭的黑匣子之中,如大多数的JavaScript执行器。
为了尽可能的兼顾跨平台可移植性和高性能,即时编译器(Just-In-TimeCompiler,JIT)的概念被提出。JIT的核心思想是“如何高效避免解释指令的重复工作”。计算机程序中存在大量重复执行的代码,比如某些计算“函数”在一个程序执行过程中可能被循环调用了很多次。如果是解释执行,则循环过程的每次执行都要对这个函数进行字节码到机器码的翻译。然而实际情况是,这个函数在几十次的翻译中产生的机器码都是完全一样的。很自然的,在第一次翻译后,将翻译好的函数的机器码缓存下来,后续再次执行的过程中,不需要再次翻译,而是直接使用缓存好的代码,这样可以提高执行效率。
相反的,有些函数在程序运行周期过程中只执行了一次(比如启动初始化),那么这类函数就不需要缓存,直接解释执行一次即可。因此JIT技术中一个核心的模块就是“热点分析”,即通过程序执行过程中分析出哪些代码执行了多次,从而对其翻译后的机器码进行缓存。对于执行次数较少的操作,不需要进行缓存。这样可以在执行效率和内存开销上达到最佳平衡。
此外,JIT技术中的另一个核心的模块是编译优化(或称为优化编译)。直接翻译的机器码,没有结合上下文进行优化,仅仅是将高频的机器码缓存下来,性能提升有限。如果要获得更好的性能,可以对编译器进行进一步的优化。编译优化的方式,一般需要相对更多的时间来实现。
JIT的工作原理例如图2中所示。Java源代码经过Java编译器编译后生成一段Java字节码,经过热点分析后被分发到两个执行路径上(JIT Compiler和Interpreter)。被判断为热点(高频执行)的代码经JIT compiler中进行编译得到机器码,缓存并执行,一般是由CPU在操作系统(Operating System,OS)的控制下执行。低频的进入解释器(Interpreter),翻译成机器码后由CPU在OS的控制下执行。
由于程序代码本身的前后关联性,编译过程往往存在较大的优化空间。优化后的机器码,执行效率会远高于直接翻译的机器码。如果要获得更好的性能,编译器的优化是必须的。JIT compiler编译的过程可能比较耗时。特别是JIT Compiler在第一次编译字节码的过程可能耗时很长,甚至不如解释执行。那么,对于某些java程序,如果热点不是很突出,即整体的执行频度都不是很高,而整体执行流程又很长的,JIT就很难发挥出编译执行的优势。
此外,还有一种想法被提出,就是AoT (Ahead of Time)。AoT相当于一种预编译执行的方法。在程序运行前针对目标执行环境对字节码进行一次编译,得到机器码,再将机器码部署到目标机器上执行。AoT的运行效率可以达到编译执行的效果。在AoT时需要明确知道目标系统的硬件、指令集架构和系统等,确保编译后代码可以运行。而且,一般来说同样功能的指令,用机器码表达所需的语句量会大于字节码,更大于高级语言编写的代码,这样,同样内容的程序,很可能机器码的大小>字节码的大小>高级语言代码的大小。在明确知道目标系统的硬件、指令集架构和系统等情形的前提下,可以通过AoT将字节码编译为机器码。同时,不同类别的目标系统的机器码是不同的,因此,为了各种目标系统上都可以有对应的正确执行的机器码,可能需要将不同版本的机器码都提供。这样,机器码的总大小一般会大于字节码或是高级语言代码。
例如,Android在5.0版本以前采用Dalvik虚拟机,而在5.0版本以后采用了ART虚拟机。Dalvik是采用JIT编译器去解释字节码,而ART则是AoT机制。ART方式在应用安装时就预编译字节码(Android App的安装过程实际上是安装程序的字节码)到机器码。在移除解释代码这一过程后,Android上的应用程序执行更有效率,启动更快。
区块链中作为一个去中心化的分布式系统,需要保持分布式一致性。具体的,分布式系统中的一组节点,每个节点都内置了状态机。每个状态机需要从相同的初始状态起,按相同的顺序执行相同的指令,保持每一次状态的改变都相同,从而保证最终达到一致的状态。而参与到同一区块链网络的各个节点设备很难都是同样的硬件配置和软件环境。因此,在区块链2.0中的代表以太坊中,为了保证各个节点上执行智能合约的过程和结果是相同的,采用了类似于JVM的虚拟机——以太坊虚拟机(Ethereum Virtual Machine,EVM)。通过EVM可以屏蔽各个节点硬件配置和软件环境的差异性。这样,开发者可以开发一套智能合约的代码,并将该智能合约的代码在开发者本地编译后将编译得到的字节码(bytecode)上传到区块链。各个节点以相同的初始状态通过相同的EVM解释执行相同的字节码后,能够得到相同的最终结果和相同的中间结果,并可以屏蔽不同节点底层的硬件和环境差异。这样,去中心化的区块链技术的出现,才使得早在1994年就提出的智能合约得以实现,并且,由于去中心化的实现必然面临不同执行机器的硬件和运行环境差异,进一步以解释执行的方式对智能合约处理,以保证在去中心的多种不同硬件和运行环境的机器上能够得到相同的执行结果。
EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑,这也是以太坊作为区块链2.0的代表相对于区块链1.0的最大改进之一。用户在以太坊中发布和调用智能合约可以在EVM上运行。如前所述,EVM直接运行的是字节码,部署在区块链上的智能合约可以是字节码的形式。
例如图3所示,Bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。交易的data字段保存的可以是字节码,交易的to字段可以为一个空的地址。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储可以保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。
前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以表明一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。高级语言编写的智能合约代码,经过编译器编译,生成字节码,进而该字节码可以部署到区块链上。以太坊支持的高级语言很多,如Solidity、Serpent、LLL语言等。
以Solidity语言为例,用其编写的合约与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在智能合约的账户存储中的值,用于保存合约的状态。
如下是以Solidity语言编写的一个简单的智能合约的代码示例1:
Contract Example{
int balance;
function C( ){
balance + = 1;
}
function getbalance( ) returns(int){
return balance ;
}
}
一般的,这个合约部署在区块链后,“balance”这个状态变量可以是在合约中新定义的一种资产类型。function C()这个函数可以定义balance的变化操作,functiongetbalance() returns(int) 这个函数可以定义取当前balance的值并返回的操作。
此外,如图4所示,仍以以太坊为例,Bob将一个包含调用智能合约信息的交易发送到以太坊网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图中4中交易的from字段是发起调用智能合约的账户的地址,to字段中的“0x692a70d2…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的是调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点查看balance的当前值。
智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
创建智能合约和调用智能合约的示意图如图5所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易(可以通过交易中的to字段指向智能合约的地址),智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。
创建智能合约的交易发送到区块链网络上,经过共识之后,各个区块链节点可以执行这个交易。具体的,可以是由区块链节点的EVM或WASM来执行这个交易。如前所述,这时区块链上出现一个与该智能合约对应的合约账户(包括例如帐户的标识Identity,合约的hash值Codehash,合约存储的根StorageRoot),并拥有一个特定的地址,合约代码和账户存储可以保存在该合约账户的存储(Storage)中,如图9所示。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。对于合约部署交易或者合约更新交易,将产生或变更Codehash的值。后续,区块链节点可以接收调用部署的智能合约的交易请求,该交易请求可以包括调用的合约的地址、调用的合约中的函数和输入的参数。一般的,该交易请求经过共识后,区块链各个节点可以各自独立执行指定调用的智能合约。具体的,如图9所示,节点可以根据合约的地址将合约的字节码(Bytecode)从存储载入虚拟机(EVM或WASM)中;进而,由解释器(Interpreter)解释执行,例如包括对调用的合约的字节码进行解析,得到操作码(OPcode),并将这些OPcode存储虚拟机的Memory中,同时还得到调用的函数的地址;经过对执行合约所需要消耗的Gas进行计算且Gas足够后,跳转到Memory的对应地址取得所调用函数的OPcode并开始执行,将所调用到的函数的OPcode所操作的数据进行计算(DataComputation)、推入或推出栈(Stack)等的操作,从而完成数据计算。这个过程中,还可能需要一些合约的上下文(Context)信息,例如区块号、调用合约的发起者的信息之类,这些信息可以从Context中得到(Get操作)。最后,将产生的状态通过调用存储接口以存入存储(Storage)中。需要说明的是,合约创建的过程中,也可能产生对合约中某些函数的解释执行,例如初始化操作的函数,这时也会解析代码、产生跳转指令,存入Memory,在Stack中操作数据等。上述涉及的解释执行过程中,一般来说,对重复执行的函数并不缓存,即使对于多次执行的函数,虚拟机也需要重复进行解析、执行的过程。
如同前面提到的JVM的跨平台可移植性的优点和有提升性能的需求,类似的,区块链中的EVM也可以采用JIT和AoT之类的技术来提升智能合约执行时的性能。例如,智能合约部署到区块链上之前,先进行AoT编译,将编译后得到的机器码上链,从而完成合约的部署,例如图8所示的过程。完成部署的合约,在区块链上可以具有一个特定的地址。这样,客户端发起的创建合约的交易中,可以包含合约的机器码。例如,可以由客户端在将高级语言编写的智能合约编译为字节码后,在客户端本地进行AoT编译,从而得到机器码。执行链上合约的过程(或称为调用智能合约的过程),例如可以是一个客户端(可以是不同于创建智能合约的客户端)直接调用经过AoT编译后的链上的机器码并执行。这里,调用合约的交易中,一般指向的地址(即to字段所指向的地址)可以是被调用的合约的地址。由于本例子中的AoT编译是在智能合约上链前完成的,因此可以简称为“链下AoT”。链下AoT编译过程可以进行大量代码优化,这样,链上执行合约的效率就可以大大提高。但缺点也很明显,即链下AoT时需要预先获得所部署的目标节点的处理器架构、运行环境等,否则上链的机器码后续很可能将无法在目标节点上执行。同时,为了适配各种不同的目标节点,可能需要AoT编译为多种不同的机器码。这样,经过AoT编译后的机器码大小将远大于原来的智能合约字节码的大小,增大了上链数据量,增加存储开销。
本说明书提供一种执行智能合约的方法实施例,如图6所示,包括:
S601:客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码。
S603:区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码。
用户可以用高级语言编写智能合约。编写好的智能合约可以经过适配高级语言的编译器编译,得到字节码。进而,用户可以通过第一TEE(Trusted Execution Environment)将智能合约的字节码编译为机器码,然后通过客户端将该智能合约的机器码打包到交易中,发送至区块链网络。交易的格式例如为图3~5中所示,其中,需要创建的智能合约的机器码可以存放于交易的data字段中。
第一TEE部署的主体可以存在多种情况。例如,第一TEE可以部署于客户端自身,该客户端在第一TEE内将智能合约的字节码编译为机器码后,将该智能合约的机器码打包到交易中,发送至区块链网络。再例如,第一TEE可以部署于某一区块链节点,譬如可以为上述步骤S603中接收交易的区块链节点,或者区块链网络中的其他任意的区块链节点。当第一TEE部署于区块链节点时,用户可以通过链下通道将智能合约的字节码发送至该区块链节点,由该区块链节点在第一TEE内将智能合约的字节码编译为机器码后,返回至用户;或者,用户可以在客户端上创建调用智能合约的交易,并在交易的data字段包含智能合约的字节码,该交易调用区块链上已部署的用于实现编译功能的智能合约,使得该智能合约的合约代码在第一TEE内被运行以将字节码编译为相应的机器码,而客户端可以从区块链节点上获取交易回执,交易回执中可以包含编译生成的机器码。又例如,上述编译服务方可以为区别于所述客户端和区块链节点的第三方服务端,该第三方服务端用于对外提供编译服务,那么用户可以将智能合约的字节码发送至该第三方服务端,使得该第三方服务端可以将智能合约的字节码在第一TEE内编译为机器码。第三方服务端可以为向所有或至少一部分用户提供编译服务的共享服务平台,譬如该共享服务平台可以部署在某一云端服务器处或采用其他形式,本说明书并不对此进行限制。
在将智能合约的字节码编译为机器码时,可以将智能合约的字节码通过AoT编译为机器码。AoT编译技术可以提升智能合约执行时的性能,具体的,可以结合程序代码的前后关联进行编译,并得到优化编译后的机器码。经过编译优化的机器码,执行效率一般会高于直接翻译得到的机器码。一方面,通过将区块链节点的硬件和环境信息提供至AoT引擎,使得编译得到的机器码具有硬件+环境的优化,具体可以包括机器代码生成里的优化,包括指令级的优化,寄存器分配和优化等等。另一方面,AoT引擎可以分析上下文信息,比如当前函数中执行的分支跳转语句,识别其中哪一句是跳转可能行最大的,从而将这个跳转可能性最大的调整到最前,从而可以在执行时更高概率的首先命中该分支的语句;编译器优化过程还可以通过数据流分析和/或活跃变量分析进行死代码消除,例如消除不会走到的分支,此外还可以包括对循环语句进行优化,公共字表达式替换等。
S605:所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。
相比于字节码而言,机器码可以执行的操作要多得多,因而对链的威胁也相对更大。譬如,通过对智能合约的机器码进行篡改,使得该智能合约被调用后,机器码可能被运行以读取区块链节点上存储的隐私数据,比如区块链节点上部署的可信执行环境(TEE)内的隐私数据等,甚至可能影响到区块链节点的正常运行,破坏区块链网络的安全性和稳定性。因此,当创建智能合约的交易中包含智能合约的字节码时,区块链节点可以不做限制;当创建智能合约的交易中包含智能合约的机器码时,区块链节点可以对编译生成该机器码的TEE进行限制,确保只有可信TEE内编译生成的机器码才可能部署至区块链上。
区块链节点可以基于第一TEE内产生的签名来判断该TEE是否为可信TEE。区块链节点可以获取第一TEE对机器码的签名,该签名由第一TEE将字节码编译为机器码后,通过该第一TEE中维护的私钥生成;相应的,在上述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,区块链节点可以确定第一TEE是由可信TEE镜像所创建,那么可由该可信TEE镜像的可信度对编译生成的机器码进行背书,从而确定第一TEE属于可信TEE、机器码不存在安全性问题。区块链节点可以通过运行链代码的方式,采用可信TEE镜像对应的公钥对机器码的签名进行验证,如果机器码的签名被该可信TEE镜像对应的公钥验证成功,则区块链节点可以确定第一TEE由可信TEE镜像所创建。或者,可信TEE镜像对应的公钥被记录于系统合约中,而区块链节点可以调用该系统合约,并向该系统合约传入交易所含的签名,使得系统合约的合约代码被执行以采用可信TEE镜像对应的公钥对该签名进行校验,然后区块链节点接收系统合约返回的识别结果,该识别结果用于表明签名是否被可信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(Basic Input Output System,基本输入输出系统),只需要信任 CPU 便能确保隐私数据不会泄漏。实际应用中,可以将隐私数据加密后以密文形式传递至围圈中,并通过远程证明将对应的秘钥(包括私钥)也传入围圈。然后,在 CPU 的加密保护下利用数据进行运算,结果会以密文形式返回。这种模式下,既可以利用强大的计算力,又不用担心数据泄漏。
如果第一TEE是基于可信TEE镜像而创建,第一TEE在通过远程证明后可以获取密钥管理服务器(Key Management Server,KMS)分配的私钥,该私钥被维护于第一TEE内。例如,第一TEE可以为基于SGX技术生成的enclave。那么,只有编译方在该TEE内完成了字节码向机器码的编译操作,才会基于该TEE内维护的私钥对该机器码进行签名。类似地,区块链节点可以从KMS处获取可信TEE镜像对应的公钥,以确保该公钥的可靠性。因此,通过上述验证过程,如果第一TEE针对机器码的签名被可信TEE镜像对应的公钥验证成功,则表明:第一TEE确实是基于可信TEE镜像而创建,并且由于密钥必然被维护于第一TEE内部,因而表明交易所含的机器码确实是在第一TEE内编译生成,所以可以确保对字节码进行编译以生成机器码的过程安全可靠,无法被外部因素所干扰,排除了安全性风险,实现了对机器码安全性的可靠背书。
如果区块链节点通过调用系统合约的方式来识别第一TEE是否为可信TEE,区块链节点需要对系统合约发起调用。一种情况下,上述创建智能合约的交易中可以包含该系统合约的合约地址,使得区块链节点在执行该交易的过程中,可以对该合约地址进行调用。另一种情况下,区块链节点的链代码中可以包含上述系统合约的合约地址和针对该系统合约的调用逻辑,该调用逻辑的触发条件可以包括:区块链节点确定交易的类型为合约部署类型,比如合约部署类型的交易的to字段为空。那么,区块链节点在收到合约部署类型的交易时,即可自动触发对上述系统合约的调用。而如果区块链节点仅希望限制机器码类型的智能合约的部署行为,而无需对字节码或其他类型的智能合约的部署行为进行限制,那么上述调用逻辑的触发条件还可以包括:合约部署类型的交易包含智能合约的机器码,使得区块链节点只有在收到包含机器码且合约部署类型的交易时,才会自动触发对上述系统合约的调用。
系统合约是一种特殊的智能合约。例如,系统合约可以被部署于创世块中。或者,虽然系统合约部署在非创世块中,但是该系统合约的管理权限归属于区块链管理员,即该系统合约由区块链管理员部署,并且只有区块链管理员能够针对该系统合约进行版本更新等操作,而不同的区块链账户仅能够调用该系统合约。由于涉及到对于智能合约的机器码的部署操作,通常采用系统合约来确保准确判断出第一TEE是否为可信TEE。当然,即便是普通的智能合约也可以用于实现上述系统合约所实现的相关功能,以用于判断第一TEE是否为可信TEE,本说明书并不对此进行限制。
以太坊及类似原理的公有链、联盟链或者私有链系统中,区块链节点可以针对一批交易发起共识。所述一批交易中,可以包括上述创建智能合约的交易。通过共识后,一般的,各共识节点本地都存有所述待创建的智能合约的机器码。各共识节点本地可以执行所述创建智能合约的交易,创建对应的合约账户;并按照相同的规则给所述合约账户创建一个地址,各共识节点针对同一合约创建的地址是相同的。这样,就完成了合约的部署。
优选的,所述存储为缓存,通过缓存到内存,后续可以更快速的作出响应。具体的,所述内存可以是在虚拟机中开辟的一块缓存区域。当然,即使存储到磁盘,很多情形下也可以一定程度的提升响应速度。
完成智能合约的部署后,可以提供对该合约的调用。这样,客户端(可能不同于S601中发起创建合约交易的客户端)可以发起对该合约的调用。例如,客户端发起一个交易,其中的to字段中为前述部署的智能合约的地址,data字段可以包括所调用的合约的方法和输入的参数,从而实现对所述部署的智能合约的调用。一般的,包括该调用合约的交易在内的一批交易经过共识后,各共识节点各自分别执行交易。区块链节点调用合约的过程中,在存储有智能合约的机器码的情况下,由于机器码本身即是CPU(在OS的控制下)可以直接执行的,因此,所述区块链节点可以大幅提升执行智能合约的速度。并且,所述智能合约的机器码缓存在内存中的情形,可以更进一步的提升智能合约的执行速度。当然,即使存储在磁盘中,也可以一定程度上提升执行速度。所述区块链节点执行所述机器码,具体可以是执行存储的所述合约中对应所调用函数的机器码。
本说明书中的机器码,除了适用EVM,还可以适用WASM(Web Assembly)虚拟机、JSVM(JavaScript Virtual Machine)等,在此不做限制。
需要说明的是,上述S603中的区块链节点,可能不同于S605中的区块链节点。这是因为,区块链作为分布式的系统,接收交易的节点和发起共识的节点以及执行交易的节点可以是不同的节点,当然也可以是相同的节点。
以下介绍本说明书另一部署智能合约的方法实施例,包括:
步骤A:区块链节点接收创建智能合约的交易,所述交易中包括所述智能合约的机器码,所述机器码由第一可信执行环境TEE对所述智能合约的字节码进行AoT编译得到。
用户可以用高级语言编写智能合约。编写好的智能合约可以经过适配高级语言的编译器编译,得到字节码。进而,用户可以通过第一TEE将智能合约的字节码编译为机器码,然后通过客户端将该智能合约的机器码打包到交易中,发送至区块链网络。交易的格式例如为图3~5中所示,其中,需要创建的智能合约的机器码可以存放于交易的data字段中。
第一TEE部署的主体可以存在多种情况。例如,第一TEE可以部署于客户端自身,该客户端在第一TEE内将智能合约的字节码编译为机器码后,将该智能合约的机器码打包到交易中,发送至区块链网络。再例如,第一TEE可以部署于某一区块链节点,譬如可以为上述步骤A中接收交易的区块链节点,或者区块链网络中的其他任意的区块链节点。当第一TEE部署于区块链节点时,用户可以通过链下通道将智能合约的字节码发送至该区块链节点,由该区块链节点在第一TEE内将智能合约的字节码编译为机器码后,返回至用户;或者,用户可以在客户端上创建调用智能合约的交易,并在交易的data字段包含智能合约的字节码,该交易调用区块链上已部署的用于实现编译功能的智能合约,使得该智能合约的合约代码在第一TEE内被运行以将字节码编译为相应的机器码,而客户端可以从区块链节点上获取交易回执,交易回执中可以包含编译生成的机器码。又例如,上述编译服务方可以为区别于所述客户端和区块链节点的第三方服务端,该第三方服务端用于对外提供编译服务,那么用户可以将智能合约的字节码发送至该第三方服务端,使得该第三方服务端可以将智能合约的字节码在第一TEE内编译为机器码。第三方服务端可以为向所有或至少一部分用户提供编译服务的共享服务平台,譬如该共享服务平台可以部署在某一云端服务器处或采用其他形式,本说明书并不对此进行限制。
在将智能合约的字节码编译为机器码时,可以将智能合约的字节码通过AoT编译为机器码。AoT编译技术可以提升智能合约执行时的性能,具体的,可以结合程序代码的前后关联进行编译,并得到优化编译后的机器码。经过编译优化的机器码,执行效率一般会高于直接翻译得到的机器码。一方面,通过将区块链节点的硬件和环境信息提供至AoT引擎,使得编译得到的机器码具有硬件+环境的优化,具体可以包括机器代码生成里的优化,包括指令级的优化,寄存器分配和优化等等。另一方面,AoT引擎可以分析上下文信息,比如当前函数中执行的分支跳转语句,识别其中哪一句是跳转可能行最大的,从而将这个跳转可能性最大的调整到最前,从而可以在执行时更高概率的首先命中该分支的语句;编译器优化过程还可以通过数据流分析和/或活跃变量分析进行死代码消除,例如消除不会走到的分支,此外还可以包括对循环语句进行优化,公共字表达式替换等。
步骤B:所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。
相比于字节码而言,机器码可以执行的操作要多得多,因而对链的威胁也相对更大。譬如,通过对智能合约的机器码进行篡改,使得该智能合约被调用后,机器码可能被运行以读取区块链节点上存储的隐私数据,比如区块链节点上部署的可信执行环境(TEE)内的隐私数据等,甚至可能影响到区块链节点的正常运行,破坏区块链网络的安全性和稳定性。因此,当创建智能合约的交易中包含智能合约的字节码时,区块链节点可以不做限制;当创建智能合约的交易中包含智能合约的机器码时,区块链节点可以对编译生成该机器码的TEE进行限制,确保只有可信TEE内编译生成的机器码才可能部署至区块链上。
区块链节点可以基于第一TEE内产生的签名来判断该TEE是否为可信TEE。区块链节点可以获取第一TEE对机器码的签名,该签名由第一TEE将字节码编译为机器码后,通过该第一TEE中维护的私钥生成;相应的,在上述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,区块链节点可以确定第一TEE是由可信TEE镜像所创建,那么可由该可信TEE镜像的可信度对编译生成的机器码进行背书,从而确定第一TEE属于可信TEE、机器码不存在安全性问题。区块链节点可以通过运行链代码的方式,采用可信TEE镜像对应的公钥对机器码的签名进行验证,如果机器码的签名被该可信TEE镜像对应的公钥验证成功,则区块链节点可以确定第一TEE由可信TEE镜像所创建。或者,可信TEE镜像对应的公钥被记录于系统合约中,而区块链节点可以调用该系统合约,并向该系统合约传入交易所含的签名,使得系统合约的合约代码被执行以采用可信TEE镜像对应的公钥对该签名进行校验,然后区块链节点接收系统合约返回的识别结果,该识别结果用于表明签名是否被可信TEE镜像对应的公钥验证成功。
如果第一TEE是基于可信TEE镜像而创建,第一TEE在通过远程证明后可以获取密钥管理服务器分配的私钥,该私钥被维护于第一TEE内。例如,第一TEE可以为基于SGX技术生成的enclave。那么,只有编译方在该TEE内完成了字节码向机器码的编译操作,才会基于该TEE内维护的私钥对该机器码进行签名。类似地,区块链节点可以从KMS处获取可信TEE镜像对应的公钥,以确保该公钥的可靠性。因此,通过上述验证过程,如果第一TEE针对机器码的签名被可信TEE镜像对应的公钥验证成功,则表明:第一TEE确实是基于可信TEE镜像而创建,并且由于密钥必然被维护于第一TEE内部,因而表明交易所含的机器码确实是在第一TEE内编译生成,所以可以确保对字节码进行编译以生成机器码的过程安全可靠,无法被外部因素所干扰,排除了安全性风险,实现了对机器码安全性的可靠背书。
如果区块链节点通过调用系统合约的方式来识别第一TEE是否为可信TEE,区块链节点需要对系统合约发起调用。一种情况下,上述创建智能合约的交易中可以包含该系统合约的合约地址,使得区块链节点在执行该交易的过程中,可以对该合约地址进行调用。另一种情况下,区块链节点的链代码中可以包含上述系统合约的合约地址和针对该系统合约的调用逻辑,该调用逻辑的触发条件可以包括:区块链节点确定交易的类型为合约部署类型,比如合约部署类型的交易的to字段为空。那么,区块链节点在收到合约部署类型的交易时,即可自动触发对上述系统合约的调用。而如果区块链节点仅希望限制机器码类型的智能合约的部署行为,而无需对字节码或其他类型的智能合约的部署行为进行限制,那么上述调用逻辑的触发条件还可以包括:合约部署类型的交易包含智能合约的机器码,使得区块链节点只有在收到包含机器码且合约部署类型的交易时,才会自动触发对上述系统合约的调用。
系统合约是一种特殊的智能合约。例如,系统合约可以被部署于创世块中。或者,虽然系统合约部署在非创世块中,但是该系统合约的管理权限归属于区块链管理员,即该系统合约由区块链管理员部署,并且只有区块链管理员能够针对该系统合约进行版本更新等操作,而不同的区块链账户仅能够调用该系统合约。由于涉及到对于智能合约的机器码的部署操作,通常采用系统合约来确保准确判断出第一TEE是否为可信TEE。当然,即便是普通的智能合约也可以用于实现上述系统合约所实现的相关功能,以用于判断第一TEE是否为可信TEE,本说明书并不对此进行限制。
以太坊及类似原理的公有链、联盟链或者私有链系统中,区块链节点可以针对一批交易发起共识。所述一批交易中,可以包括上述创建智能合约的交易。通过共识后,一般的,各共识节点本地都存有所述待创建的智能合约的机器码。各共识节点本地可以执行所述创建智能合约的交易,创建对应的合约账户;并按照相同的规则给所述合约账户创建一个地址,各共识节点针对同一合约创建的地址是相同的。这样,就完成了合约的部署。
优选的,所述存储为缓存,通过缓存到内存,后续可以更快速的作出响应。具体的,所述内存可以是在虚拟机中开辟的一块缓存区域。当然,即使存储到磁盘,很多情形下也可以一定程度的提升响应速度。
完成智能合约的部署后,可以提供对该合约的调用。这样,客户端(可能不同于步骤A中发起创建合约交易的客户端)可以发起对该合约的调用。例如,客户端发起一个交易,其中的to字段中为前述部署的智能合约的地址,data字段可以包括所调用的合约的方法和输入的参数,从而实现对所述部署的智能合约的调用。一般的,包括该调用合约的交易在内的一批交易经过共识后,各共识节点各自分别执行交易。区块链节点调用合约的过程中,在存储有智能合约的机器码的情况下,由于机器码本身即是CPU(在OS的控制下)可以直接执行的,因此,所述区块链节点可以大幅提升执行智能合约的速度。并且,所述智能合约的机器码缓存在内存中的情形,可以更进一步的提升智能合约的执行速度。当然,即使存储在磁盘中,也可以一定程度上提升执行速度。所述区块链节点执行所述机器码,具体可以是执行存储的所述合约中对应所调用函数的机器码。
本说明书中的机器码,除了适用EVM,还可以适用WASM虚拟机、JSVM等,在此不做限制。
需要说明的是,上述步骤A中的区块链节点,可能不同于步骤B中的区块链节点。这是因为,区块链作为分布式的系统,接收交易的节点和发起共识的节点以及执行交易的节点可以是不同的节点,当然也可以是相同的节点。
以下介绍本说明书一种部署智能合约的区块链节点实施例,如图7所示,包括:
接收单元71,用于接收创建智能合约的交易,所述交易中包括所述智能合约的机器码,所述机器码由第一可信执行环境TEE对所述智能合约的字节码进行AoT编译得到;
识别单元72,用于所述机器码是否由可信TEE对所述字节码进行编译得到;
部署单元73,用于在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署。
可选的,将所述智能合约的字节码AoT编译为所述机器码,包括:
在对所述智能合约的字节码进行AoT编译的过程中进行优化编译。
可选的,第一TEE部署于下述任一方:提交所述交易的客户端、区块链网络中的任一区块链节点、区别于所述客户端和区块链节点的第三方服务端。
可选的,识别单元72具体用于:
从所述交易中获取第一TEE通过私钥对所述机器码的签名;
在所述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,确定第一TEE属于可信TEE。
可选的,所述私钥由密钥管理服务器在确定第一TEE通过远程证明的情况下分发至第一TEE中。
可选的,所述可信TEE镜像包括:基于软件扩展保护SGX的可信围圈enclave的镜像。
可选的,所述可信TEE镜像对应的公钥被记录于系统合约中;还包括:
调用单元74,用于调用所述系统合约,并向所述系统合约传入所述签名;以及,接收所述系统合约返回的识别结果,所述识别结果用于表明所述签名是否被所述可信TEE镜像对应的公钥验证成功。
可选的,调用单元74具体用于:
从所述交易中读取所述系统合约的合约地址,并基于所述合约地址调用所述系统合约;或者,
在确定所述交易的类型为合约部署类型的情况下,根据链代码中定义的所述系统合约的合约地址调用所述系统合约。
可选的,所述系统合约被部署在创世块中;或者,所述系统合约的管理权限归属于区块链管理员。
本说明书还提供一种区块链节点实施例,包括:
处理器,
存储器,存储有程序,其中在所述处理器执行所述程序时,按照前述的方式执行智能合约。
本说明书还提供一种存储介质实施例,用于存储程序,其中所述程序在被执行时,执行前述方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (18)

1.一种部署智能合约的方法,包括:
客户端将智能合约的字节码发送至第一可信执行环境TEE,并接收第一TEE对所述字节码进行AoT编译得到的机器码;
区块链节点接收所述客户端提交的创建智能合约的交易,所述交易中包括所述智能合约的机器码;
所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署;
其中,第一TEE部署于下述任一方:所述客户端、区块链网络中区别于所述区块链节点的其他任一区块链节点、区别于所述客户端和所述区块链节点的第三方服务端。
2.如权利要求1所述的方法,将所述智能合约的字节码AoT编译为所述机器码,包括:
在对所述智能合约的字节码进行AoT编译的过程中进行优化编译。
3.如权利要求1所述的方法,所述区块链节点确定所述机器码由可信TEE对所述字节码编译得到,包括:
所述区块链节点从所述交易中获取第一TEE通过私钥对所述机器码生成的签名;
所述区块链节点在所述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,确定第一TEE属于可信TEE。
4.如权利要求3所述的方法,所述私钥由密钥管理服务器在确定第一TEE通过远程证明的情况下分发至第一TEE中。
5.如权利要求3所述的方法,所述可信TEE镜像包括:基于软件扩展保护SGX的可信围圈enclave的镜像。
6.如权利要求3所述的方法,所述可信TEE镜像对应的公钥被记录于系统合约中;所述方法还包括:
所述区块链节点调用所述系统合约,并向所述系统合约传入所述签名;
所述区块链节点接收所述系统合约返回的识别结果,所述识别结果用于表明所述签名是否被所述可信TEE镜像对应的公钥验证成功。
7.如权利要求6所述的方法,所述区块链节点调用所述系统合约,包括:
所述区块链节点从所述交易中读取所述系统合约的合约地址,并基于所述合约地址调用所述系统合约;或者,
所述区块链节点在确定所述交易的类型为合约部署类型的情况下,根据链代码中定义的所述系统合约的合约地址调用所述系统合约。
8.如权利要求7所述的方法,所述系统合约被部署在创世块中;或者,所述系统合约的管理权限归属于区块链管理员。
9.一种部署智能合约的方法,包括:
区块链节点接收创建智能合约的交易,所述交易中包括所述智能合约的机器码,所述机器码由第一可信执行环境TEE对所述智能合约的字节码进行AoT编译得到;
所述区块链节点在确定所述机器码由可信TEE对所述字节码进行编译得到的情况下,完成所述智能合约的部署;
其中,第一TEE部署于下述任一方:提交所述交易的客户端、区块链网络中区别于所述区块链节点的其他任一区块链节点、区别于所述客户端和所述区块链节点的第三方服务端。
10.如权利要求9所述的方法,将所述智能合约的字节码AoT编译为所述机器码,包括:
对所述智能合约的字节码进行AoT编译的过程中进行优化编译。
11.如权利要求9所述的方法,所述区块链节点确定所述机器码由可信TEE对所述字节码编译得到,包括:
所述区块链节点从所述交易中获取第一TEE通过私钥对所述机器码生成的签名;
所述区块链节点在所述签名被预定义的可信TEE镜像对应的公钥验证成功的情况下,确定第一TEE属于可信TEE。
12.如权利要求11所述的方法,所述私钥由密钥管理服务器在确定第一TEE通过远程证明的情况下分发至第一TEE中。
13.如权利要求11所述的方法,所述可信TEE镜像包括:基于软件扩展保护SGX的可信围圈enclave的镜像。
14.如权利要求11所述的方法,所述可信TEE镜像对应的公钥被记录于系统合约中;所述方法还包括:
所述区块链节点调用所述系统合约,并向所述系统合约传入所述签名;
所述区块链节点接收所述系统合约返回的识别结果,所述识别结果用于表明所述签名是否被所述可信TEE镜像对应的公钥验证成功。
15.如权利要求14所述的方法,所述区块链节点调用所述系统合约,包括:
所述区块链节点从所述交易中读取所述系统合约的合约地址,并基于所述合约地址调用所述系统合约;或者,
所述区块链节点在确定所述交易的类型为合约部署类型的情况下,根据链代码中定义的所述系统合约的合约地址调用所述系统合约。
16.如权利要求15所述的方法,所述系统合约被部署在创世块中;或者,所述系统合约的管理权限归属于区块链管理员。
17.一种部署智能合约的区块链节点,包括:
处理器,
存储器,存储有程序,其中在所述处理器执行所述程序时,执行上述权利要求1-8或9-16中任一项所述的方法。
18.一种存储介质,用于存储程序,其中所述程序在被处理器执行时进行上述权利要求1-8或9-16中任一项的操作。
CN202010901437.8A 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质 Active CN111770206B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202110190299.1A CN112866412B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质
CN202010901437.8A CN111770206B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质
US17/357,179 US11513780B2 (en) 2020-08-31 2021-06-24 Methods, blockchain nodes and storage media for deploying smart contract
EP21182400.8A EP3971742B1 (en) 2020-08-31 2021-06-29 Methods, blockchain nodes and storage media for deploying smart contract

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010901437.8A CN111770206B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202110190299.1A Division CN112866412B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质

Publications (2)

Publication Number Publication Date
CN111770206A CN111770206A (zh) 2020-10-13
CN111770206B true CN111770206B (zh) 2020-12-29

Family

ID=72729130

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202010901437.8A Active CN111770206B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质
CN202110190299.1A Active CN112866412B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202110190299.1A Active CN112866412B (zh) 2020-08-31 2020-08-31 一种部署智能合约的方法、区块链节点和存储介质

Country Status (3)

Country Link
US (1) US11513780B2 (zh)
EP (1) EP3971742B1 (zh)
CN (2) CN111770206B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112394939B (zh) * 2020-10-30 2023-06-13 迅鳐成都科技有限公司 基于联盟链的用户合约自动部署方法、装置及存储介质
CN112836217B (zh) * 2021-01-12 2023-02-10 清华大学深圳国际研究生院 基于sgx的动态减小tcb的区块链虚拟机方法及系统
CN112596754B (zh) * 2021-03-01 2021-07-02 腾讯科技(深圳)有限公司 区块链智能合约部署方法及装置
CN113220326B (zh) * 2021-05-11 2022-09-16 支付宝(杭州)信息技术有限公司 智能合约升级方法及区块链系统
CN113220327B (zh) * 2021-05-11 2022-09-16 支付宝(杭州)信息技术有限公司 智能合约升级方法及区块链系统
CN113407198A (zh) * 2021-06-07 2021-09-17 广东辰宜信息科技有限公司 智能合约部署方法和装置
CN113542405B (zh) * 2021-07-14 2023-10-17 广东卓启云链科技有限公司 基于区块链的网络通信系统、方法、设备及存储介质
CN114598554B (zh) * 2022-05-09 2022-08-02 山东省计算中心(国家超级计算济南中心) 对应用程序中用户隐私数据的保护方法及系统
CN114936093A (zh) * 2022-05-30 2022-08-23 蚂蚁区块链科技(上海)有限公司 区块链系统中的交易执行方法、节点和区块链系统
CN115632776B (zh) * 2022-11-15 2023-03-17 北京智芯微电子科技有限公司 密钥烧录方法、装置、电子设备及可读存储介质
CN116707915A (zh) * 2023-06-12 2023-09-05 山东舜网传媒股份有限公司 基于区块链加密和共识算法的新闻指挥调度指令分发方法
CN117349867B (zh) * 2023-12-04 2024-02-09 成都峰潮信息技术有限公司 智能合约部署方法、系统、设备及介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107342858A (zh) * 2017-07-05 2017-11-10 武汉凤链科技有限公司 一种基于可信环境的智能合约保护方法和系统
CN109766722A (zh) * 2019-01-22 2019-05-17 苏州同济区块链研究院有限公司 一种区块链中构建智能合约的方法及其系统
CN110032883A (zh) * 2019-01-31 2019-07-19 阿里巴巴集团控股有限公司 区块链中实现隐私保护的方法、系统和节点
CN110249307A (zh) * 2018-12-29 2019-09-17 阿里巴巴集团控股有限公司 用于在区块链上执行原生合约的系统和方法
CN110546636A (zh) * 2017-04-25 2019-12-06 微软技术许可有限责任公司 联盟区块链网络中的机密性
CN110704368A (zh) * 2019-09-25 2020-01-17 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的高效运算方法及装置
CN110738567A (zh) * 2019-09-25 2020-01-31 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的交易处理方法及装置
CN110750329A (zh) * 2019-09-25 2020-02-04 支付宝(杭州)信息技术有限公司 基于fpga实现虚拟机运算的方法及装置
CN111090875A (zh) * 2020-03-18 2020-05-01 支付宝(杭州)信息技术有限公司 部署合约的方法及装置

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692047A (en) * 1995-12-08 1997-11-25 Sun Microsystems, Inc. System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US9286039B2 (en) * 2013-03-14 2016-03-15 Microsoft Technology Licensing, Llc Operating system support for contracts
GB2517192A (en) * 2013-08-14 2015-02-18 Micro Focus Ip Dev Ltd Processing for application program deployment
US9467296B2 (en) * 2014-08-29 2016-10-11 Intel Corporation Virally distributable trusted messaging
CN104408371B (zh) * 2014-10-14 2017-12-19 中国科学院信息工程研究所 一种基于可信执行环境高安全应用系统的实现方法
CN104318135B (zh) * 2014-10-27 2017-04-05 中国科学院信息工程研究所 一种基于可信执行环境的Java代码安全动态载入方法
US9893881B2 (en) * 2015-06-29 2018-02-13 Intel Corporation Efficient sharing of hardware encryption pipeline for multiple security solutions
US10649429B2 (en) * 2015-10-13 2020-05-12 LO3 Energy Inc. Use of blockchain based distributed consensus control
US11144893B2 (en) * 2017-10-30 2021-10-12 Nec Corporation Method and system for securing smart contracts in blockchains
US10565014B2 (en) * 2017-12-05 2020-02-18 Western Digital Technologies, Inc. Data processing offload using in-storage code execution
US11528611B2 (en) * 2018-03-14 2022-12-13 Rose Margaret Smith Method and system for IoT code and configuration using smart contracts
US20190303932A1 (en) * 2018-03-28 2019-10-03 NEC Laboratories Europe GmbH Method and system for verifying policy compliance of transactions in a blockchain executing smart contracts
WO2019236635A1 (en) * 2018-06-04 2019-12-12 Scintillating, Inc. Blockchain-based methods and systems
US11171774B2 (en) * 2018-11-28 2021-11-09 Intel Corporation System for synchronizing a cryptographic key state through a blockchain
CN111899102A (zh) * 2018-11-30 2020-11-06 创新先进技术有限公司 区块链中实现隐私保护的方法
US20220084013A1 (en) * 2019-01-18 2022-03-17 Blockrules Ltd Identity management, smart contract generator, and blockchain mediating system, and related methods
WO2021113369A1 (en) * 2019-12-02 2021-06-10 Schvey, Inc. D/B/A Axoni Cross-partition calls in partitioned, tamper-evident data stores
CN111538521B (zh) * 2020-04-24 2024-02-09 中国工商银行股份有限公司 智能合约部署、交易方法及装置
CN111563253B (zh) 2020-07-16 2020-11-03 百度在线网络技术(北京)有限公司 智能合约运行方法、装置、设备及存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110546636A (zh) * 2017-04-25 2019-12-06 微软技术许可有限责任公司 联盟区块链网络中的机密性
CN107342858A (zh) * 2017-07-05 2017-11-10 武汉凤链科技有限公司 一种基于可信环境的智能合约保护方法和系统
CN110249307A (zh) * 2018-12-29 2019-09-17 阿里巴巴集团控股有限公司 用于在区块链上执行原生合约的系统和方法
CN109766722A (zh) * 2019-01-22 2019-05-17 苏州同济区块链研究院有限公司 一种区块链中构建智能合约的方法及其系统
CN110032883A (zh) * 2019-01-31 2019-07-19 阿里巴巴集团控股有限公司 区块链中实现隐私保护的方法、系统和节点
CN110704368A (zh) * 2019-09-25 2020-01-17 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的高效运算方法及装置
CN110738567A (zh) * 2019-09-25 2020-01-31 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的交易处理方法及装置
CN110750329A (zh) * 2019-09-25 2020-02-04 支付宝(杭州)信息技术有限公司 基于fpga实现虚拟机运算的方法及装置
CN111090875A (zh) * 2020-03-18 2020-05-01 支付宝(杭州)信息技术有限公司 部署合约的方法及装置

Also Published As

Publication number Publication date
CN111770206A (zh) 2020-10-13
EP3971742B1 (en) 2023-06-07
CN112866412A (zh) 2021-05-28
EP3971742C0 (en) 2023-06-07
EP3971742A1 (en) 2022-03-23
US11513780B2 (en) 2022-11-29
US20210342133A1 (en) 2021-11-04
CN112866412B (zh) 2023-06-30

Similar Documents

Publication Publication Date Title
CN111770206B (zh) 一种部署智能合约的方法、区块链节点和存储介质
CN113872948A (zh) 一种执行智能合约的方法、区块链节点和节点设备
CN111768187A (zh) 一种部署智能合约的方法、区块链节点和存储介质
CN111770205B (zh) 一种执行智能合约的方法、区块链节点、系统和存储介质
CN111814202B (zh) 一种执行智能合约的方法、区块链节点和存储介质
CN111815330A (zh) 一种部署智能合约的方法、区块链节点和存储介质
CN111770116B (zh) 一种执行智能合约的方法、区块链节点、存储介质
CN111815310B (zh) 一种执行智能合约的方法、区块链节点和存储介质
CN111768200A (zh) 一种部署智能合约的方法、区块链节点和存储介质
EP3961438B1 (en) Method for executing smart contract, blockchain node, and storage medium
EP3961391B1 (en) Method for executing smart contract, blockchain node, and storage medium
CN111768184A (zh) 一种执行智能合约的方法及区块链节点
WO2022237590A1 (zh) 智能合约升级方法及区块链系统
EP3961437B1 (en) Method for executing smart contract, blockchain node, and storage medium
Li et al. Eosioanalyzer: An effective static analysis vulnerability detection framework for eosio smart contracts
CN113220327B (zh) 智能合约升级方法及区块链系统
Ménétrey et al. A Comprehensive Trusted Runtime for WebAssembly with Intel SGX
Zhang et al. Programming smart contract with solidity

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
GR01 Patent grant
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40039051

Country of ref document: HK