一文读懂:XVM虚拟机(一)
起源在我们了解XVM之前,我们必须回溯虚拟机的发展历程,智能合约这一概念由萨博在1994年提出,他认为,“智能合约是一种数字形式的承诺,智能合约可以满足合约各方在其上履行自己的承诺”。由此智能合约这一概念出现,萨博在定义智能合约时强调了“数字形式”和“协议”。这让智能合约与传统的承诺出现了区别。智能合约最早被以太坊引入并使用,但是很快以太坊就发现了智能合约存在的问题。对于脚本语言,脚本是非图灵完备
起源
在我们了解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语句的新型执行引擎。
更多推荐
所有评论(0)