2018-08-08 00:48
标签:

 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/joleen1006/b-1578.html

前段时间,专员写了一篇文章,说了一下智能合约的相关东西,其实智能合约与虚拟机是密不可分的两个东西,一般我们介绍的时候都会把这两者结合起来一起讲,但是专员还是想说一下这个单独说一下虚拟机这个东西,因为区块链从没有有虚拟机到有虚拟机可以说是一个里程碑式的进步。

虚拟机出现以前,大家可以想象一下,其实在区块链上最大的作用其实也就是就是数字货币的交易,当然这也是目前来看区块链存在的最大意义了。但是,自从虚拟机出现以后,其实也就是EVM成熟以后,区块链才会有了更大的一篇天地,在虚拟机上我们可以执行更多的业务逻辑,帮更多的有更多的想象空间,也能帮助区块链有更多落地的可能性。

1533660464581201.jpg

(虚拟机)

何为虚拟机?

专员觉得,虽说百度百科对虚拟机的介绍是对传统虚拟机的介绍,但是归根到底,区块链的虚拟机其实也是具有这些个性质存在的。

首先不管EVM等其他的虚拟机也好,其实一个先决条件,专员觉得就是虚拟机得是一个沙箱的环境,就像刚刚百度百科上说的那样,他是一个运行在完全隔离的环境中的计算机系统。

为什么要沙箱呢?

打个比方,也就是说EVM的内部代码其实不难接触到区块链的网络、文件系统或者说其他进程等等,如果说EVM能够接触到这些模块,很容易出现一个状况,大家可以想象,无论是谁编写一个恶意的智能合约的代码,部署到以太坊网络中,轻则出现ETH被盗等情况的出现,严重的话,专员觉得,完全可以造成整个以太坊网络的崩溃,造成毁灭性的打击。

其次,虚拟机的另外一个重要的作用其实就是一个较为完整的计算机系统,但是在区块链中,可能这一点已经被淡化了,在区块链虚拟机中,承担的作用其实主要就是一个运行智能合约的作用,本质上来说就是一个代码的运行环境。

EVM为例子来说,首先用户不可能直接编写能够让以太坊虚拟机执行的字节码,用户首先需要用Solidity这种高级语言进行合约编写,编写完成之后,再由虚拟机进行编译,生成合约的BIN(可执行二进制)文件,之后便可以进行合约的部署以及调用如下图所示。而EOSWASM(Web Assembly)也是一种新型的网络标准,用户可以通过CC++等来编写代码,通过编译器编译成WASM文件,之后通过少量的适配即可以做到合约代码的执行。而在智能合约中,其实还有一个作用就是合约数据的存储智能合约中的数据需要被持久化到区块链中,保证数据不会被丢失。

举个例子,在以太坊中,有两种主要的数据类型,一种是区块数据,另外一种极为状态数据,而智能合约中的数据就是我们所说的状态数据,在EVM中有一个StateDB(一种逻辑上的定义),就是用来存储合约相关的数据。每一次合约的调用,其实就是一个从StateDB中取数据,进行计算,最后再存回StateDB的过程。

另外,在各种虚拟机中,为了防止虚拟机执行过多的计算指令,陷入死循环等等,各类虚拟机都会制定一系列的检查机制:

比如EVM,在虚拟机中的执行代码收到一个参数的严格限定,这个参数就是我们长说的Gas,无限循坏最终会因为Gas被耗尽而中止,也是间接的保护了虚拟机的安全稳定性。

综上,专员觉得,区块链+虚拟机其实是一个很令人着急的组合方式,他使区块链有了更多的可能性,也帮助区块链有更好的发展,但是就像专员之前说过,智能合约和虚拟机是一把双刃剑,他在带给我们便利的同时,我们也需要更多的关注他的安全性,避免出现过多的安全稳定性的问题,使虚拟机更加成熟,可用性更高。


 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/joleen1006/b-1578.html

评论