前言:
当前朋友们对“以太世界js”大概比较关怀,兄弟们都需要剖析一些“以太世界js”的相关内容。那么小编也在网络上搜集了一些对于“以太世界js””的相关内容,希望朋友们能喜欢,小伙伴们快快来了解一下吧!以太坊虚拟机(简称为EVM)是以太坊协议和具体操作的核心。你大概会从名字上猜到,这是一个计算引擎,它与微软的.NET框架的虚拟机或者像Java这样的基于字节码的编译语言没有太大的不同。
什么是EVM?EVM是以太坊协议的一部分,它用来处理智能合约的部署和执行。事实上,除了在EOA(由用户私钥控制的所谓“外部账户”)之间的简单转账交易以外,其他所有涉及状态更新的操作都是通过EVM来计算的。从高层抽象的角度,运行在以太坊区块链上的EVM可以被想象成一个包含了数百万可执行对象的全球化的去中心化计算机,这些可执行对象都拥有它们各自的永久数据存储。EVM是一个“准”图灵完备的状态机,因为在其中进行的任意智能合约的执行都必须限定在一个由可用的gas总量所限制的、有限的计算步骤数量之内。这样,停机故障(指所有程序执行都被迫停止)就被“解决了”,并且避免了程序可能会(意外地或者恶意地)永远执行下去,从而使以太坊平台进入完全停止的状态的问题。EVM有一个基于栈的架构,在一个栈中保存了所有内存数值[插图]。EVM的数据处理单位被定义为256位的“字”(这主要是为了方便处理哈希运算和椭圆曲线运算操作),并且它还具有以下数据组件:· 一个不可变的程序代码存储区ROM,加载了要执行的智能合约字节码。· 一个内容可变的内存,它被严格地初始化为全0数值。· 一个永久的存储,它是作为以太坊状态的一部分存在的,也会被初始化为全0。
所谓“虚拟机”的概念通常用于对真实计算机的虚拟化,一般是通过一个像VirtualBox或者QEMU这样的“管理程序”,或者像Linux上的KVM这样的完整的操作系统实例来实现的。这些方案中都必须分别对实际的硬件、系统调用和其他内核功能提供一个软件抽象。EVM运作在一个更局限的领域:它仅仅是一个计算引擎,仅提供对计算和存储的抽象,就像Java虚拟机(JVM)那样。从高级视角来看,JVM的设计提供了一个无须知晓底层宿主OS或硬件的运行环境,从而提供了跨不同系统平台的兼容性。像Java、Scala(基于JVM)或者C#(基于.NET)这样的高级程序设计语言会被编译为与它们对应的虚拟机字节码指令集。同样地,像LLL、Serpent、Mutan或Solidity这样的高级智能合约开发语言,也会被编译为由EVM执行的字节码指令集。EVM没有可调度性,因为执行顺序是由其外部所组织好的,也就是由以太坊客户端通过验证区块中的交易来决定哪些智能合约应该运行,以及它们的执行顺序应该是什么。从这个角度讲,以太坊世界计算机就像JavaScript引擎那样是“单线程”的。EVM既没有任何“系统接口”,也没有“硬件支持”,因为并没有任何物理机器需要与之交互。
以太坊世界计算机是完全虚拟化的。
#欧易OKEx##数字货币##比特币[超话]#
标签: #以太世界js