区块链网站|NFTS BTC教学指南 WEB3教程系列33545介绍以太坊虚拟机(EVM)

WEB3教程系列33545介绍以太坊虚拟机(EVM)

广告位

WEB3系列教程之入门篇——5. 以太坊虚拟机(EVM)

以太坊网络的存在只是为了保持状态机(即以太坊区块链)的单一、连续、不间断和不可改变的运行。它是所有以太坊账户、智能合约和数据所在的环境。在任何给定的区块中,以太坊都有一个也是唯一一个全球公认的“状态”。以太坊虚拟机(EVM)定义了从块到块计算新的有效状态的规则。

先决条件理解EVM需要一些字节[1]、内存[2]和堆栈[3]的基础知识。

熟悉一些密码学知识(比如hash函数[4])可能也会有所帮助。

以太坊作为像比特币一样的状态机区块链,通常被描述为“分布式账本”,利用密码学的基本工具实现去中心化货币的存在。

加密货币可以表现得像“正常”货币一样,因为规则规定了人们可以做什么和不可以做什么来修改这个分类账。例如,一个比特币地址不能花费比之前收到的更多的比特币。这些规则支持在比特币和其他类似区块链上发生的所有交易。

虽然以太坊也有其原生加密货币以太坊,但它也支持我们已经看到的更强大的功能——智能合约。对于这个更复杂的函数,我们需要一个比“分布式账本”更强大的类比。

以太坊可以描述为分布式状态机[5]而不是分布式账本。状态机本质上是任何能够响应某些输入而从一种状态变为另一种状态的机器。

简单的状态机是投币旋转门[6],常用于地铁或火车站,防止人们进入,除非他们用硬币支付或有票。

旋转门的初始状态是锁定的。在锁定状态下,如果您继续按它,它将保持锁定状态。如果你插入一枚硬币,它将被解锁。如果您继续插入硬币,它将保持解锁状态。一旦进入解锁状态(有人通过),就会再次锁定。

对于以太坊来说,状态要复杂得多。它由包含区块链所有州的大型数据结构来描述。EVM定义了状态如何从一个块变化到另一个块的具体规则。

以太坊状态在高层次上转移,EVM的行为类似于数学状态转移函数。给定当前状态和一组新的活动事务,它将产生一个新的状态。输出是确定的,这意味着对于相同的输入,它总是产生相同的输出。

Y(S,T)=S’给定旧的有效状态S和一组新的有效事务T,状态转移函数Y产生新的有效状态S

以太坊中的状态存储为一个非常大的数据结构,称为Merkle Patricia Trie。你不需要确切知道它的结构,但如果你喜欢,你可以阅读给定的链接。

EVM层EVM作为以太坊软件栈中的一层存在。

以太坊节点包含了EVM的实现,然后EVM可以在上面执行EVM代码。EVM代码是智能合约的编译和可执行字节码。

EVM码生成

EVM指令(操作码)EVM本身就像一个堆栈机器[7]。堆栈的最大深度是1024项。堆栈中的每一项都是一个256位(32字节)的字。

在执行期间,EVM维护一个32字节的寻址字节数组形式的临时内存,它不会在事务之间持续。当执行一个新的事务时,清除瞬态内存。

然而,智能合约在区块链中保持自己的状态。这种状态也被建模为Merkle Patricia Trie[8]。在事务执行期间,这通常被称为EVM存储。

EVM有逻辑允许它执行EVM操作码[9]。这些操作码在堆栈上执行标准操作,如、XOR等。补充。EVMAND还实现了许多特定于区块链的堆栈操作,如和。子物质平衡

当智能合约被编译成字节码(以十六进制表示)时,它将被编译成EVM操作码。这些操作代码是在EVM上执行的。

EVM实现EVM的所有实现都必须遵守以太坊黄皮书[10]中描述的规范。在以太坊的历史上,EVM经历了多次修订,现在存在多种编程语言的EVM实现。

所有以太坊客户端都包含一个EVM实现。除此之外,还有多个独立的实现。

以太坊客户端(与EVM)Geth[11]|编程语言=Go OpenEthereum[12]|编程语言=锈冥心灵[13]|编程语言=C# .NET) Besu[14]|编程语言=Java Erigon[15]|编程语言=去独立的EVM实现Py-EVM [16]|编程语言=Python evmone[17]|编程语言=C以太网-EVM[18]|编程语言=Javascript飞地EVM[19]|编程语言=C资料以下是推荐的,但可选择的阅读/观看内容,以了解更多关于EVM的信息。

以太坊EVM:插图[20] EVM操作码[21] 以太坊黄皮书[22] 了解EVM[23]默克尔帕特里夏特里[24]

引用链接[1] 字节:https://en。维基百科。org/wiki/Byte[2]内存:https://en。维基百科。org/wiki/Computer _ memory[3]堆栈:https://en。维基百科。org/wiki/Stack _(abstract _ data _ type)[4]散列函数:https://en。维基百科。org/wiki/Cryptographic _ hash _ function[5]状态机:https://en。维基百科。org/wiki/有限状态机[6]旋转门:https://I . imgur。com/uh7m 6 jn . png[7]堆栈机器:https://en。维基百科。org/wiki/Stack _ machine[8]Merkle Patricia Trie:https://eth。wiki/en/fundamentals/帕特里夏-特里[9]EVM操作码:https://以太博物馆。org/en/developers/docs/EVM/Opcodes/[10]以太坊黄皮书:https://以太坊. github . io/yellow paper/paper . pdf

[11]第https://页。以太宇宙。org/[12]open ether eum:https://github。com/open ether eum/open ether eum[13]虚空之心:https://虚空之心。io/[14]Besu:https://consensys。net/quorum/developers/[15]Erigon:https://github。Py-EVM:https://github。com/com

[21] EVM操作码:https://www.ethervm.io/[22]以太坊黄皮书:https://以太坊。github。io/黄纸/纸。pdf[23]了解EVM:https://?帕特里夏特里:https://www.youtube.com/watch?v=OxofT39TJgg

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/btb/btbjiaoxue/5035.html

作者: 大王不失守

上一篇
下一篇

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部