01
智能合约与虚拟机
智能合约
在区块链中,智能合约扮演着非常重要的角色,用户提交的业务请求,都是通过链上智能合约的执行得到最终结果。有了智能合约,我们就可以根据不同的业务场景,在区块链中实现相应的功能。那么,什么是智能合约呢?我们可以从两个层面来理解智能合约:
1. 对于应用场景:智能合约是一种交易协议,记录了交易条款信息、事件、行为,旨在减少对可信中间人的需求、仲裁和执行成本。
我们可以将交易逻辑抽象成程序,将这段程序存在区块链上,接下来这段程序就可以帮助我们自动处理交易的逻辑,完成现实生活中相关的交易。
2. 对于计算机而言,智能合约是一段编写好的程序,可以实现对链上数据的增,删,查和改。我们都知道,数据在区块链中主要有两部分,一部分是世界状态,它记录了当前各个主体的信息,另一个部分就是交易记录。其中,对于世界状态数据的增,删,查和改就需要智能合约来实现,通过智能合约对世界状态修改的过程,会作为交易的一部分记录起来。
那么,什么是虚拟机呢?虚拟机就是智能合约运行的环境,为智能合约提供计算资源和运行环境。
虚拟机有以下3个特点:
1. 确定性:我们知道,区块链是包含了多个节点,有的节点要组装区块,有的节点要验证区块。他们其实是在各自的环境中运行这些交易。我们需要让同一笔交易在每个节点运行的结果都相同。
这需要在运行的时候,排除随机数、浮点数运算等这种可能带来不确定的因素,以及直接使用外部数据源等。
2. 隔离性:无论执行结果、是否崩溃等,主链不受影响,每个虚拟机都运行在隔离的环境中,确保资源访问安全性,只能修改属于该合约自身的状态记录。也就是说,虚拟机与虚拟机彼此隔离,虚拟机也不会影响主链。
3. 可终止性:能主动停止,使用GAS、指令数、超时时间等标准
02
长安链合约引擎
长安链支持多种智能合约编程语言和虚拟机,为虚拟机提供统一的数据访问和密码算法访问接口。当一批交易通过调度器被发送至虚拟机时,虚拟机将解析交易中的智能合约调用参数,并且在运行时,通过数据访问接口获取运行时必要的数据,最后执行生成交易的读写集、交易执行结果和交易执行的日志信息。交流流程如图1:
图1
长安链目前支持3类虚拟机:
1. EVM虚拟机,是基于以太坊的虚拟机改造,更加适应长安链的虚拟机。它是一种基于栈的虚拟机,在运行期间不能访问网络,文件,即使不同合约之间也是有限的访问权限。
2. WASM类虚拟机,是一种字节码的格式,WASM虚拟机就是可以解释执行wasm字节码的虚拟机,是一种基于栈的指令集合。
3. 容器类虚拟机,作为本文的重点,会在下面进行详细介绍。
这里,我们可以对上面3种虚拟机做一个对比:
安全性 |
性能 |
语言友好 |
开发难度 |
|
EVM虚拟机 |
高 |
中 |
中 |
中 |
WASM虚拟机 |
高 |
高 |
低 |
高 |
容器类虚拟机 |
高 |
中 |
高 |
低 |
表1
03
DockerVM
容器类虚拟机,顾名思义,就是利用容器来实现的虚拟机。让我们回顾一下容器是什么:
容器就是将软件打包成标准化单元,以用于开发、交付和部署。容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。容器化软件在任何环境中都能够始终如一地运行。
Docker作为非常成熟的容器技术,拥有以下3个特点:
1. 轻量:在一台机器上运行的多个Docker容器可以共享这台机器的操作系统内核;它们能够迅速启动,只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更快地下载镜像。
2. 标准:Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
3. 安全:Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。
所以,容器的特点很好的契合了虚拟机的要求,在长安链中,我们就使用了Docker来实现容器类虚拟机。
接下来,我们正式介绍DockerVM。DockerVM中最重要的组件为Docker Manager,它负责DockerVM与链的通信,交易的调度,管理合约。结构如图2:
图2
以下为各个子模块的介绍:
CDM RPC
CDM RPC模块⽤来和节点进⾏本地通信,启动容器时会建⽴链接
DMS RPC
DMS RPC模块⽤来和各个合约进程进⾏通信
Security Env
Security Env模块⽤来设置容器的环境,包括设置Control Group, IPC等
Contract Manager
Contract Manager模块⽤来管理合约的⼆进制⽂件
User Controller
User Controller模块⽤来⽣成user结构体,其中包括uid,sock⽂件等;并且可以分配和回收user。
Handler Register
Handler管理Docker Manager和合约进程的通信逻辑;每⼀个合约进程会产⽣⼀个独⽴的 handler 进⾏通信管理。Handler Register控制handler的⽣成,注册,和销毁。
Docker Scheduler
Docker Scheduler模块⽤来管理合约进程,在拉起合约进程的时候,会为其准备好合约⼆进制⽂件,分配好可⽤的user,⽣成新的Handler,为进程设置超时时间;在进程结束时,对上述资源进⾏回收
Sandbox
Sandbox为合约进程,在合约运⾏的时候,⾸先会与Docker manager进⾏基于unix domain socket的rpc链接,随后进⾏相关消息的传送
接下来,我们基于虚拟机3大特点,逐一来介绍DockerVM的实现细节。
首先,DockerVM实现了两层隔离:DockerVM与主机的隔离,合约的隔离。
1. DockerVM与主机的隔离
DockerVM采用一个容器运行所有的合约,对于每一个节点,都会启动一个容器,节点与容器通过 unix domain socket 进行本地通信。如果开启 Docker VM ,则在链启动的时候启动容器。如图3。
图3
借助容器的特点,DockerVM与主机很好隔离开。DockerVM里面的运行不会影响到主机或者运行在主机上的链的运行。另外,DockerVM容器里面运行的是ubuntu系统,我们可以在这个系统中做很多有意思的操作,但是这些操作都不会对主机有任何的影响。
采用一个容器的好处:1. 方便管理,DockerVM负责管理所有的合约,包括合约的表现,异常等;2. 节省拉起容器的时间,我们不需要为每一个合约去拉起一个新的容器,从始至终都只有一个容器,它为我们处理所有的事情。
2. 合约的隔离
合约交易都在容器中的一个独立的进程中运行,我们称之为合约沙盒。我们为这个进程赋予独立的Process Namespace, 唯一的User Id 与 Group Id,并且这些进程都被同一个CGroup控制。同时,整个容器关闭了网络功能,所以合约进程拥有以下3个特点(如图4):
1. 文件隔离
2. 网络隔离
3. 进程间隔离
图4
对于合约进程来说,它被启动以后,一直在等待新的交易到来,这些交易都是属于这一个合约的。当这笔交易处理完毕,DockerVM会发送新的交易给它。当一段时间,合约进程没有接受到新的交易时,DockerVM就会关闭这个进程,节省资源。默认的等待时间为10分钟。
借助合约进程的网络隔离,文件隔离,进程间隔离,智能合约不可以从外部获取数据,只能使用属于本合约的数据。这就保证了交易运行的确定性。
对于任一交易,我们需要有能力来终止。DockerVM采用交易超时来实现终止交易。用户可以为DockerVM配置交易超时时间,当这笔交易开始运行的时候,DockerVM开始计时,如果规定时间内没有运行结束,则会停掉合约进程,并且返回超时结果。
DockerVM采用二进制文件部署。
对于合约部署来说,一般有两种方式:源码部署与二进制文件部署,我们不妨看一下下面的对比:
源码部署 |
二进制部署 |
体积小 |
体积大 |
在链上编译,时间长 合约部署与调用行为不一致 |
在链下编译,链上部署快 合约部署与调用行为一致 |
容易泄露源码 |
不容易泄露 |
表2
采用二进制文件部署最大的优势在于省去了链上编译文件的过程,而这个过程是不可控的,对于简单的合约,它的编译时间相对很短,但是对于特别复杂的合约,它的编译时间就会很长。使用二进制部署,就是把编译的过程放在了链下,对于链上,我们直接就可以进行使用。
RECOMMEND
推荐阅读
长安链ChainMaker国密TLS设计与实现、
长安链ChainMaker新特性——透明数据加密TDE
长安链自研网络Liquid详解及应用指南
Tips
更多长安链开源项目QA,可登录开源社区、技术文档库查看。
下载源码
https://git.chainmaker.org.cn/chainmaker/chainmaker-go
查阅文档
https://docs.chainmaker.org.cn/
长安链ChainMaker案例征集
http://www.wenjuan.com/s/UZBZJvhFGte/
“长安链ChainMaker”是国内首个自主可控区块链软硬件技术体系,由微芯研究院联合头部企业和高校共同研发,具有全自主、高性能、强隐私、广协作的突出特点。长安链面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案,为长安链生态联盟提供强有力的区块链技术支撑。取名“长安链”,喻意“长治久安、再创辉煌、链接世界“