起源

在我们了解XVM之前,我们必须回溯虚拟机的发展历程,智能合约这一概念由萨博在1994年提出,他认为,“智能合约是一种数字形式的承诺,智能合约可以满足合约各方在其上履行自己的承诺”。由此智能合约这一概念出现,萨博在定义智能合约时强调了“数字形式”和“协议”。这让智能合约与传统的承诺出现了区别。
在这里插入图片描述

智能合约最早被以太坊引入并使用,但是很快以太坊就发现了智能合约存在的问题。

对于脚本语言,脚本是非图灵完备的,所以无法执行一些复杂的操作,比如签名。

脚本无法对交易进行细粒度操作。

脚本缺乏保存状态,无法支持更加复杂的操作。

执行时获取的数据十分有限。

对此以太坊设计了独特的智能合约语言Solidity,随着Solidity的出现,一个图灵完备的智能合约执行引擎出现了,EVM可以让用户实现更加复杂的操作。
在这里插入图片描述

详解

EVM是一种栈式虚拟机,使用字节作为指令。Solidity合约源码经过编译后是用一种低级的、基于堆栈的字节码,所以真正部署在以太坊上并且在EVM中执行的其实是一串字节码。代码由一系列字节组成,其中每个字节代表一个操作。字节码执行时从第一个字节码开始根据字节码的操作含义依次执行,直到到达代码末尾或出现错误(如遇到REVERT 、STOP或RETURN 操作码)。

栈: 后进先出容器,其值可以被压入和弹出;

Memory: 一个无限可扩展的字节数组;

Storage: 合约的长期存储,为键/值对存储。与计算结束后重置的堆栈和Memory不同,存储会长期存在,这部分也就是常说的“区块链账本”的一部分。

PUSH1:字节码16进制为60 ,操作含义是将紧跟着的一个字节推入栈中。

ADD:字节码16进制为01 ,操作含义是将栈上的两个元素弹出相加,然后将结果放回栈中。MSTORE:字节码16进制为52 ,操作含义是将栈中弹出的第二个值存入Memory中,存入的索引值为栈中弹出的第一个元素。RET:字节码16进制为f3 ,操作含义是执行结束,返回结果,结果在Memory中,起始索引为栈中弹出的第一个值,长度为栈中弹出的第二个值。

具体过程如下图所示。

在这里插入图片描述

蓬勃发展的虚拟机

随着虚拟机技术的不断发展,行业内出现了许多智能合约执行引擎,

EVM:兼容以太坊EVM,并进行了性能优化与功能丰富。

HVM:趣链首创支持Java语言编写智能合约的高效、易用、完备的智能合约执行引擎。

FVM:支持Rust等语言编写智能合约的安全、多样、高效的智能合约执行引擎。

KVSQL:支持在区块链上执行SQL语句的新型执行引擎。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐