一种区块链中构建智能合约的方法及其系统
技术领域
本发明属于区块链领域,尤其涉及一种区块链中构建智能合约的方法及其系统。
背景技术
“智能合约”是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的概念于1994年由Nick Szabo首次提出,直至比特币的诞生,人们才发现比特币底层的区块链技术天生可以为智能合约提供可信的执行环境,智能合约已经成为区块链2.0时代的重要特征。
以太坊平台率先开发了智能合约平台来支持智能合约的运行,合约开发人员可使用Solidity,Serpent,LLL等图灵完备的高级语言来编写智能合约,编译成虚拟机字节码后,可在以太坊虚拟机中解释执行,并消耗一定的费用(gas),以太坊智能合约的诞生,允许在没有第三方的情况下,借助密码学的原理达成可信交易,降低交易成本,并实现了数字货币的可编程性。但是,以太坊智能合约平台也存在以下几个不足:
1、性能问题
以太坊虚拟机的机器码长度被设计为256位,导致一些常规的整数运算效率不够高
2、栈溢出
以太坊虚拟机的调用深度被限制为1024,超过此限制便会触发栈溢出错误
3、不可升级
根据以太坊智能合约平台的设计,智能合约一旦创建便不可修改,在企业应用中,业务迭代升级是最基本的要求,此特点限制了EVM在企业场景中的应用
4、数据隐私问题
智能合约需要被全网中大多数节点执行以此达成共识来实现可信交易,在企业应用中,任何数据的公开都有可能泄露企业的商业机密,给企业造成损失,而以太坊智能合约平台并没有一个好的方案来保证合约数据的安全。
而超级账本(hyper ledger)的Fabric子项目则采用了轻量的,可移植的Docker容器作为智能合约的运行环境,理论上可以支持任何高级语言来编写智能合约,Docker容器实现了资源隔离,智能合约通过Socket通信方式来与公共账本交互。但Docker本身启动时间较长,效率较低,数据隐私保护依赖于Fabric的通道机制。Docker方案严重依赖于第三方,不易部署和扩展。
发明内容
为解决上述技术问题,本发明的目的是提供一种区块链中构建智能合约的方法及其系统。
为实现上述目的,本发明采用如下技术方案:
一种区块链中构建智能合约的构建方法,包括以下步骤:
步骤1:构建区块链中构建智能合约核心系统;
高级编程语言编辑器,根据业务需求使用图灵完备的编程语言编写智能合约代码;
编译器,按照预定义文法规则编译智能合约代码得到合约名称以及可执行的二进制合约文件,并通过单项散列函数H计算得到合约文件地址;
合约管理模块,据智能合约安装发起者的账户地址和合约名称,通过单项散列函数H计算得到合约安装地址,并在区块链底层保存安装地址和合约文件地址的对应关系;
虚拟机,执行智能合约,并将智能合约执行结果反馈给合约管理模块;
存储模块,用于支持智能合约对数据持久化的需求,底层为可读写的存储介质;
可选的密钥管理系统,用于保障智能合约的数据安全和隐私,在安全硬件的保护下,私钥对除硬件以外的任何人,物或设备都是不可访问或获取;
步骤2:基于智能合约核心系统的合约升级;
步骤21:编译器编译智能合约代码得到合约名称和可执行二进制合约文件,并通过单项散列函数H计算得到合约文件地址;
步骤22:根据合约安装升级发起者的账户地址和合约名称,通过单项散列函数H计算得到合约安装地址,并在区块链底层保存安装地址和合约文件地址的对应关系,覆盖已存在的对应关系;
步骤3:基于智能合约核心系统的合约执行;
步骤31:使用编程语言编写智能合约代码,智能合约代码满足智能合约核心系统的接口要求;
步骤32:根据合约安装地址和合约文件地址的对应关系,从可读取物理存储介质中加载可执行合约文件,并使用校验算法G验证合约文件的正确性和完整性,创建合约运行环境,启动虚拟机根据合约方法签名执行合约的功能逻辑;
步骤33:智能合约代码通过编译器编译生成虚拟机可执行代码,在虚拟机上执行,通过存储模块来访问或持久化合约业务数据;
步骤4:基于智能合约核心系统的数据隐私保护;
步骤41:采用可信密钥管理系统,提供秘钥托管和加解密功能,以及基于证书的服务访问控制;
步骤42:编译器编译合约代码时,需要指定可授权访问密钥管理系统的访问证书,编译器将访问证书以二进制格式内嵌入可执行二进制合约文件中;
步骤43:虚拟机请求密钥管理系统解密合约参数时,需使用访问证书与密钥管理系统建立安全加密连接。
优选的,步骤1还包括有区块链应用服务接口,用于响应来自于应用层对智能合约的执行请求。
优选的,所述编译器包括:
程序语言文法,用于定义程序语言规范及编码规则,使得使用者可以借助一种简单易学的高级编程语言来数字化业务规则;
词法模块,用于提取智能合约代码中的词素,词素包括标识符,以及程序语言文法中定义的运算符和关键字;
语法语义模块,根据词法分析产出的词素集合,按照文法规则验证智能合约代码的正确性,并生成抽象语法树和结构化的元数据信息;
编译模块,根据语法语义模块生成的抽象语法树和元数据信息,生成带有校验和的可执行二进制合约文件。
优选的,所述合约管理模块包括:
合约安装,合约管理模块将编译器编译生成的可执行二进制合约文件持久化至可读写存储介质中,并将合约文件地址和合约安装地址的对应关系保存至区块链网络中;
合约升级,合约管理模块将升级版本的可执行二进制合约文件持久化至可读写存储介质中,并用升级版本合约文件地址和合约安装地址的对应关系覆盖已有的记录;
合约执行,合约管理模块根据发起者提交的智能合约执行请求得到智能合约的地址,依据的地址对应关系从可读写存储介质中加载所述可执行二进制合约文件,并按照校验算法G验证所述合约文件的正确性和完整性,合约文件通过校验算法G的验证后,从智能合约执行请求中得到合约调用参数,创建智能合约运行环境,启动虚拟机并在所述运行环境中执行所述智能合约,返回执行结果;
合约销毁,根据合约安装地址卸载对应的合约文件。
优选的,所述虚拟机包括:
创建执行智能合约所必须的指令执行引擎和内存管理模块;
指令执行引擎,用于解析可执行二进制合约文件,得到并装载编译器生成的程序指令集,根据智能合约调用请求参数设定执行智能合约可使用的资源额度,以及定位到执行程序指令的入口地址,按顺序逐一执行代码指令并累加每条指令所消耗的资源配额,当指令执行完毕或超过最大可用资源额度时,程序终止并退出;
内存管理模块,提供了对物理内存的动态分配与管理,用于指令执行引擎执行各种运算。
优选的,所述指令执行引擎还包括:
合约数据的隐私保护,用于保障智能合约在不公开合约调用参数的情况下可以被全网节点正确的验证和执行。
优选的,所述密钥管理系统包括:
接口服务层,用于响应应用层的加密请求和虚拟机的解密请求,且必须提供基于数字证书安全的身份访问控制;
加密解密模块,用于按照密码学算法执行具体的数据加密解密操作。
一种区块链中构建智能合约的系统,包括高级编程语言编辑器、编译器、合约管理模块、虚拟机、存储模块和密钥管理系统,所述高级编程语言编辑器与编译器相连,所述编译器的合约接口与合约管理模块的区块链应用服务接口相连接,所述合约管理模块与虚拟机相交互连接,所述虚拟机与存储模块相连接,所述密钥管理系统与虚拟机相连。
借由上述方案,本发明至少具有以下优点:
1、本发明克服合约执行环境启动时间较长,执行效率较低,制约整个网络性能的瓶颈;
2、本发明隔离了代码与数据,独立的存储模块允许企业对数据采取符合企业数据安全策略的治理方式;
3、本发明合约可升级的架构设计,使得智能合约更加符合企业级应用,满足业务迭代升级的需求;
4、本发明支持数据隐私保护,使得在同一个区块链网络中,合约交易即可得到全网的执行和验证,又能保证合约交易数据的隐私安全。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明的结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
如图1所示,一种区块链中构建智能合约的系统,包括高级编程语言编辑器1、编译器2、合约管理模块3、虚拟机4、存储模块5和密钥管理系统6,所述高级编程语言编辑器1与编译器2相连,所述编译器2的合约接口与合约管理模块3的区块链应用服务接口相连接,所述合约管理模块3与虚拟机4相交互连接,所述虚拟机4与存储模块5相连接,所述密钥管理系统6与虚拟机4相连。
一种区块链中构建智能合约的构建方法,包括以下步骤:
步骤1:构建区块链中构建智能合约核心系统;
高级编程语言编辑器,根据业务需求使用图灵完备的编程语言编写智能合约代码;
编译器,按照预定义文法规则编译智能合约代码得到合约名称以及可执行的二进制合约文件,并通过单项散列函数H计算得到合约文件地址;
合约管理模块,据智能合约安装发起者的账户地址和合约名称,通过单项散列函数H计算得到合约安装地址,并在区块链底层保存安装地址和合约文件地址的对应关系;
虚拟机,执行智能合约,并将智能合约执行结果反馈给合约管理模块;
存储模块,用于支持智能合约对数据持久化的需求,底层为可读写的存储介质;
可选的密钥管理系统,用于保障智能合约的数据安全和隐私,在安全硬件的保护下,私钥对除硬件以外的任何人,物或设备都是不可访问或获取;
步骤2:基于智能合约核心系统的合约升级;
步骤21:编译器编译智能合约代码得到合约名称和可执行二进制合约文件,并通过单项散列函数H计算得到合约文件地址;
步骤22:根据合约安装升级发起者的账户地址和合约名称,通过单项散列函数H计算得到合约安装地址,并在区块链底层保存安装地址和合约文件地址的对应关系,覆盖已存在的对应关系;
步骤3:基于智能合约核心系统的合约执行;
步骤31:使用编程语言编写智能合约代码,智能合约代码满足智能合约核心系统的接口要求;
步骤32:根据合约安装地址和合约文件地址的对应关系,从可读取物理存储介质中加载可执行合约文件,并使用校验算法G验证合约文件的正确性和完整性,创建合约运行环境,启动虚拟机根据合约方法签名执行合约的功能逻辑;
步骤33:智能合约代码通过编译器编译生成虚拟机可执行代码,在虚拟机上执行,通过存储模块来访问或持久化合约业务数据;
步骤4:基于智能合约核心系统的数据隐私保护;
步骤41:采用可信密钥管理系统,提供秘钥托管和加解密功能,以及基于证书的服务访问控制;
步骤42:编译器编译合约代码时,需要指定可授权访问密钥管理系统的访问证书,编译器将访问证书以二进制格式内嵌入可执行二进制合约文件中;
步骤43:虚拟机请求密钥管理系统解密合约参数时,需使用访问证书与密钥管理系统建立安全加密连接。
本发明步骤3中涉及的校验算法G的算法如下:
设合约二进制可执行文件为B
可执行代码解析函数PFa
校验码解析函数PFb
密钥派生函数KDF
哈希加密算法HMAC
a)可执行代码Code=PFa(B)
b)期望校验码ECS=PFb(B)
c)密钥K=KDF(Code)
d)实际校验码ACS=HMAC(K,Code)
e)比较ACS是否等于ECS
本发明中步骤1还包括有区块链应用服务接口,用于响应来自于应用层对智能合约的执行请求。
本发明中所述编译器包括:
程序语言文法,用于定义程序语言规范及编码规则,使得使用者可以借助一种简单易学的高级编程语言来数字化业务规则;
词法模块,用于提取智能合约代码中的词素,词素包括标识符,以及程序语言文法中定义的运算符和关键字;
语法语义模块,根据词法分析产出的词素集合,按照文法规则验证智能合约代码的正确性,并生成抽象语法树和结构化的元数据信息;
编译模块,根据语法语义模块生成的抽象语法树和元数据信息,生成带有校验和的可执行二进制合约文件。
本发明中所述合约管理模块包括:
合约安装,合约管理模块将编译器编译生成的可执行二进制合约文件持久化至可读写存储介质中,并将合约文件地址和合约安装地址的对应关系保存至区块链网络中;
合约升级,合约管理模块将升级版本的可执行二进制合约文件持久化至可读写存储介质中,并用升级版本合约文件地址和合约安装地址的对应关系覆盖已有的记录;
合约执行,合约管理模块根据发起者提交的智能合约执行请求得到智能合约的地址,依据的地址对应关系从可读写存储介质中加载所述可执行二进制合约文件,并按照校验算法G验证所述合约文件的正确性和完整性,合约文件通过校验算法G的验证后,从智能合约执行请求中得到合约调用参数,创建智能合约运行环境,启动虚拟机并在所述运行环境中执行所述智能合约,返回执行结果;
合约销毁,根据合约安装地址卸载对应的合约文件。
本发明中所述虚拟机包括:
创建执行智能合约所必须的指令执行引擎和内存管理模块;
指令执行引擎,用于解析可执行二进制合约文件,得到并装载编译器生成的程序指令集,根据智能合约调用请求参数设定执行智能合约可使用的资源额度,以及定位到执行程序指令的入口地址,按顺序逐一执行代码指令并累加每条指令所消耗的资源配额,当指令执行完毕或超过最大可用资源额度时,程序终止并退出;
内存管理模块,提供了对物理内存的动态分配与管理,用于指令执行引擎执行各种运算。
本发明中所述指令执行引擎还包括:
合约数据的隐私保护,用于保障智能合约在不公开合约调用参数的情况下可以被全网节点正确的验证和执行。
本发明中所述密钥管理系统包括:
接口服务层,用于响应应用层的加密请求和虚拟机的解密请求,且必须提供基于数字证书安全的身份访问控制;
加密解密模块,用于按照密码学算法执行具体的数据加密解密操作,编译器编译智能合约代码生成可执行二进制合约文件时,可指定有授权访问密钥管理系统的数字证书,编译器将数字证书以二进制数据格式嵌入到所述可执行二进制合约文件中;
在虚拟机发起数据解密请求时,使用数字证书和密钥管理系统建立安全连接,并声明智能合约的身份,密钥管理系统验证数字证书,接受或拒绝虚拟机的解密请求;
加密解密模块可以使用硬件级别的安全保护策略,将秘钥托管在硬件设备内,加解密操作运行于可信执行环境(TEE)中,防止明文暴露。
本发明至少具有以下优点:
1、本发明克服合约执行环境启动时间较长,执行效率较低,制约整个网络性能的瓶颈;
2、本发明隔离了代码与数据,独立的存储模块允许企业对数据采取符合企业数据安全策略的治理方式;
3、本发明合约可升级的架构设计,使得智能合约更加符合企业级应用,满足业务迭代升级的需求;
4、本发明支持数据隐私保护,使得在同一个区块链网络中,合约交易即可得到全网的执行和验证,又能保证合约交易数据的隐私安全。
以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。