长安链ChainMaker容器虚拟机——DockerVM

2024-01-20 19:10

本文主要是介绍长安链ChainMaker容器虚拟机——DockerVM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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。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链接,随后进⾏相关消息的传送

DockerVM特点

接下来,我们基于虚拟机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使用

二进制文件部署

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”是国内首个自主可控区块链软硬件技术体系,由微芯研究院联合头部企业和高校共同研发,具有全自主、高性能、强隐私、广协作的突出特点。长安链面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案,为长安链生态联盟提供强有力的区块链技术支撑。取名“长安链”,喻意“长治久安、再创辉煌、链接世界“

这篇关于长安链ChainMaker容器虚拟机——DockerVM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627033

相关文章

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

虚拟机ubuntu配置opencv和opencv_contrib

前期准备  1.下载opencv和opencv_contrib源码 opencv-4.6.0:https://opencv.org/releases/ opencv_contrib-4.6.0:https://github.com/opencv/opencv_contrib 在ubuntu直接下载或者在window上下好传到虚拟机里都可以 自己找个地方把他们解压,个人习惯在home下新建一

OpenStack创建虚拟机过程

OpenStack创建虚拟机过程 一、在分析OpenStack创建虚拟机的过程之前,先来梳理一下需要用用到哪些组件。 二、每一步都需要去keystone去进行验证,下图有详细的流程。 登录界面或命令行通过RESTful API向keystone获取认证信息。keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。界面或命令行通过RESTful API

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!!! Win11安装完成,软件打开效果 一、VMware安装Windows11虚拟机 首先确保自己的mac开启了网络共享。不然虚拟机连不上👀的 1️⃣:准备镜像