EVM(以太坊虚拟机),用Solidity编程语言编写,可以执行任何算法复杂的代码。以太坊就是通过EVM从而实现智能合约的调用和执行。发展至今,可以说EVM已经非常成熟并且应用广泛。 那么,什么是以太坊虚拟机? 不要着急,容我们详细道来 第一:以太坊账户 我们要明白在以太坊中的账户,一般有两类,一个是外部账户,一个是合约账户,两个账户的区别在于拥有不同的控制载体,外部账户,该类账户被公钥-私钥对控制(人类)。合约账户,该类账户被存储在账户中的代码控制。但是他们共用一个地址空间。外部账户的地址是由公钥决定的,合约账户的地址是在创建改合约时确定的(这个地址由合约创建者的地址和该地址发出过的交易数量计算得到,地址发出过的交易数量也被称作"nonce"),合约账户存储了代码,外部账户则没有,换句话说,去除掉这一点来说,两类账户没有多少区别。 第二:以太坊交易 一笔交易是一条消息,从一个账户发送到另一个账户(可能是相同的账户或者零账户,见下文)。交易可以包含二进制数据(payload)和以太币。如果目标账户包含代码,该代码会执行,payload就是输入数据。如果目标账户的地址是0,那么交易将创建一个新合约。而这个合约地址不是零地址,对于这一点,我们一定要切记,记住了这一点,我们对于下面所要进行的工作就有了思路,言归正传,这个地址是由合约创建者的地址和该地址发出过的交易数量(被称为nonce)计算得到。创建合约交易的payload被当作EVM字节码执行。执行的输出做为合约代码被永久存储。这意味着,为了创建一个合约,你不需要向合约发送真正的合约代码,而是发送能够返回真正代码的代码。 第三:Gas 这个可以理解为传统金融业务中的手续费,当以太坊上产生一笔交易的时候,每笔交易都会被收取一定数量的gas,gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当EVM执行交易时,gas将按照特定规则被逐渐消耗。 gasprice(gas价格,以太币计)是由交易创建者设置的,发送账户需要预付的交易费用=gasprice*gasamount。如果执行结束还有gas剩余,这些gas将被返还给发送账户。无论执行到什么位置,一旦gas被耗尽(比如降为负值),将会触发一个out-of-gas异常。当前调用帧所做的所有状态修改都将被回滚。 第四:存储,主存和栈 每个账户有一块持久化内存区域被称为存储。其形式为key-value,key和value的长度均为256比特。在合约里,不能遍历账户的存储。相对于另外两种,存储的读操作相对来说开销较大,修改存储更甚。一个合约只能对它自己的存储进行读写。第二个内存区被称为主存。合约执行每次消息调用时,都有一块新的,被清除过的主存。主存可以以字节粒度寻址,但是读写粒度为32字节(256比特)。操作主存的开销随着其增长而变大(平方级别)。 从上述的讲述中,我们可以得出一个重要的信息,那就是EVM不是基于寄存器,而是基于栈的虚拟机。因此所有的计算都在一个被称为栈的区域执行。栈最大有1024个元素,每个元素256比特。对栈的访问只限于其顶端,方式为——允许拷贝最顶端的16个元素中的一个到栈顶,或者是交换栈顶元素和下面16个元素中的一个。所有其他操作都只能取最顶的两个元素,并把结果压在栈顶。当然可以把栈上的元素放到存储或者主存中。但是无法只访问栈上指定深度的那个元素,在那之前必须要把指定深度之上的所有元素都从栈中移除才行。 用很通俗的话语来解释以太坊虚拟机,我们举个例子,你有一个房子,马上就要进行装修,但是装修不是说把所有的家具摆放在一块就可以,这样会显的很杂乱,也没有章法可言,美观更无从谈起,为此,我们会提前先进行装修计划的打造,打一个草稿,或者更为专业一点的,那就是打开SketchUp软件模拟一个同样的三维空间,并在上面绘制规划图纸。 也就是,以太坊虚拟机扮演的就是这样的角色,它生成现有操作系统的虚拟镜像,具有和真实Windows系统完全一样的功能。这为现在的区块链落地应用提供了一种虚拟的测试环境,所以成为区块链重要的技术支撑。 在此框架之下,ORION集成了EVM模块,并使?Substrate的contractpallet来?持solidity智能合约的开发与运?。这不仅有利于自身链上智能合约的快速开发与调用,也为以后与以太坊跨链转接提供了兼容性 猎户座在虚拟机和区块链的其他部分之间提供了一个环境无关接口。这是通过统一的猎户座API(应用程序编程接口)完成的,该API使区块链软件的各个组件可以通过一种通用语言彼此“对话”,而无需学习任何新技巧。使用猎户座,其他软件组件无需针对特殊情况、异常、或者别的奇怪代码进行编程(程序员将其称为“简陋代码”、“意大利面条代码”或者其他NSFW术语)。相反,猎户座提供了一个稳定、安全、有前瞻性的平台,用于集成各种虚拟机,而无需接触任何VM代码。 在猎户座中,允许执行智能合约代码。合约状态或内存存储在智能合约地址中。可以将这种存储视为位于智能合约地址的无限长度的数据结构数组。存储机制确保存储位置没有冲突,并遵循一组规则。使用这些规则,我们可以解码任何合约的状态。解码存储在映射中的数据需要知道所使用的密钥。 —- 编译者/作者:AOW中文社区 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
AOW先行网络猎户座的技术亮点之三——EVM(以太坊虚拟机)
2020-12-02 AOW中文社区 来源:区块链网络
LOADING...
相关阅读:
- GOEX强势入驻OKtoken社区A仓交易所2020-12-02
- 至诚论币BTC/比特币12/02晚间行情分析以及操作建议2020-12-02
- 比特币能破20000美元吗?跟你还有关系吗?2020-12-02
- 比特赢家:12.2比特币突破历史新高后市如何演绎?2020-12-02
- 比特币走出过山车行情庄家又搞突袭了你的合约爆仓了吗?2020-12-02