到底啥是以太坊虚拟机
发布于 3 年前 作者 qinxingyi 768 次浏览 来自 以太坊

到底啥是以太坊虚拟机

以太坊虚拟机(EVM) 瑞安·科德尔(Ryan Cordell) 最后编辑:@ ryancreatescopy,2020年12月1 查看贡献者 EVM的物理实例化无法以可能指向云或海浪的相同方式来描述,但它确实是由运行以太坊客户端的数千台已连接计算机维护的单个实体而存在。

以太坊协议本身的存在仅仅是为了保持这种特殊状态机的连续,不间断和不变的运行。这是所有以太坊账户和智能合约赖以生存的环境。在链中任何给定的区块上,以太坊只有一个“规范”状态,而EVM定义了计算区块之间新的有效状态的规则。

先决条件 必须具备一些计算机科学通用术语的基本知识,例如字节,内存和堆栈,才能理解EVM。熟悉诸如哈希函数,工作量证明和Merkle树之类的密码学/区块链概念也将有所帮助。

从账本到状态机 通常使用“分布式分类帐”的类比来描述像比特币这样的区块链,它使用密码学的基本工具来实现去中心化的货币。加密货币的行为就像“普通”货币一样,因为规则控制着人们可以做什么和不可以做什么来修改分类账。例如,比特币地址不能花费比以前更多的比特币。这些规则是比特币和许多其他区块链上所有交易的基础。

以太坊拥有自己的本机加密货币(Ether),几乎遵循完全相同的直观规则,但它还启用了更强大的功能:智能合约。对于此更复杂的功能,需要一个更复杂的类比。以太坊不是分布式账本,而是分布式状态机。以太坊的状态是一个大型数据结构,不仅拥有所有账户和余额,而且拥有机器状态,它可以根据一组预定义的规则在不同的块之间变化,并且可以执行任意机器代码。EVM定义在块之间更改状态的特定规则。

该图显示了EVM的组成 图示以太坊EVM改编的图表

以太坊状态转换函数 EVM的行为就像一个数学函数:在给定输入的情况下,它将产生确定性的输出。因此,更正式地将以太坊描述为具有状态转换功能非常有帮助:

Y(S,T)= S’ 给定旧的有效状态(S)和一组新的有效交易(T),以太坊状态转换函数Y(S, T)会产生新的有效输出状态S’

状态 在以太坊的背景下,该状态是一个巨大的数据结构,称为修改后的Merkle Patricia Trie,该结构使所有帐户都通过哈希链接并可以还原为存储在区块链上的单个根哈希。

交易次数 交易是来自帐户的加密签名指令。有两种类型的交易:导致消息调用的交易和导致合同创建的交易。

合同创建会导致创建一个新的合同帐户,其中包含已编译的智能合同字节码。每当另一个帐户对该合同进行消息调用时,它将执行其字节码。

EVM说明 EVM作为具有1024个项目深度的堆栈机执行。每个项目都是一个256位字,选择该字是为了与SHA-3-256哈希方案具有最大的兼容性。

在执行期间,EVM维护一个瞬态内存(作为字寻址的字节数组),该内存在事务之间不会持久存在。

但是,合同确实包含Merkle Patricia存储Trie(作为可字寻址的字数组),与所讨论的帐户相关联,并且是全局状态的一部分。

编译智能合同字节码执行作为数字EVM的操作码,其执行诸如标准栈操作XOR,AND,ADD,SUB,等。该EVM还实现了许多特定blockchain-栈操作的,如ADDRESS,BALANCE,SHA3,BLOCKHASH,等。

该图显示了EVM操作所需的气体位置 从以太坊EVM改编的图表

EVM实施 EVM的所有实现都必须遵守以太坊黄皮书中描述的规范。

在以太坊的5年历史中,EVM经历了多次修订,并且以多种编程语言实现了EVM的多种实现。

所有以太坊客户端均包含EVM实现。此外,还有多种独立的实现,包括:

Py-EVM - Python evmone - C ++ ethereumjs-vm - JavaScript eEVM - C ++ Hyperledger伯罗-围棋

欢迎使用OKX交易所
回到顶部