主页 > imtoken用什么id下载 > EVM(以太坊虚拟机)

EVM(以太坊虚拟机)

imtoken用什么id下载 2023-03-22 05:33:45

EVM(以太坊虚拟机),用Solidity编程语言编写,可以执行任何算法复杂度的代码。 以太坊通过 EVM 实现智能合约的调用和执行。 到目前为止,可以说EVM已经非常成熟,应用非常广泛。

那么,什么是以太坊虚拟机?

别担心,让我们详细解释

以太坊钱包如何设置子账户_以太坊账户存储了哪些_以太坊和以太币有什么区别

第一:以太坊账户

我们需要了解,以太坊中一般有两种账户,一种是外部账户,一种是合约账户。 两个账户的区别在于它们拥有不同的控制载体。 控制(人)。 合约账户,此类账户由账户中存储的代码控制。 但是他们共享一个地址空间。 外部账户的地址由公钥确定,而合约账户的地址是在创建合约时确定的(这个地址是根据合约创建者的地址和该地址发送的交易数量计算的,以及地址发送的交易数也叫“nonce”),合约账户存储代码,外部账户没有,换句话说,除了这一点,两类账户没有太大区别。

第二:以太坊交易

以太坊钱包如何设置子账户_以太坊和以太币有什么区别_以太坊账户存储了哪些

交易是一条消息,从一个账户发送到另一个账户(可以是同一个账户或零账户,见下文)。 交易可以包含二进制数据(有效载荷)和以太币。 如果目标帐户包含代码,则执行该代码,并且有效负载是输入数据。 如果目标账户的地址为 0,则交易将创建一个新合约。 而且这个合约地址不是零地址。 关于这一点,大家一定要牢记,记住这一点,我们就有了下面要开展的工作的思路。 言归正传,这个地址是由合约创建者的地址和这个地址共同发行的。 计算通过的事务数(称为随机数)。 合约创建交易的有效负载作为 EVM 字节码执行。 执行的输出作为合约代码永久存储。 这意味着,为了创建合约,您不需要向合约发送真实的合约代码,而是发送返回真实代码的代码。

第三:煤气

这可以理解为传统金融服务中的手续费。 当在以太坊上产生一笔交易时,每笔交易都会被收取一定数量的gas。 gas 的目的是限制执行交易所需的工作量,同时提供支付费用。 当EVM执行一笔交易时,gas会按照一定的规则逐渐消耗。

以太坊账户存储了哪些_以太坊和以太币有什么区别_以太坊钱包如何设置子账户

gasprice(gas价格,以Ether计算)由交易创建者设定以太坊账户存储了哪些,发送账户需要预付交易费用=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智能合约的开发和运行。这不仅有利于智能合约在自有链上的快速开发和调用,也为未来跨链提供了兼容性。 -使用以太坊进行链式传输

Orion 在虚拟机和区块链的其余部分之间提供了一个与环境无关的接口。 这是通过统一的 Orion API(应用程序编程接口)完成的,它使区块链软件的各个组件能够通过通用语言相互“交谈”,而无需学习任何新技巧。 使用 Orion,无需针对特殊情况、异常或其他奇怪的代码(程序员称之为“黑客代码”、“意大利面条代码”或其他 NSFW 术语)对其他软件组件进行编程。 相反,Orion 提供了一个稳定、安全且面向未来的平台,用于集成各种虚拟机,而无需接触任何 VM 代码。

在 Orion 中,允许执行智能合约代码。 合约状态或内存存储在智能合约地址中。 将此存储视为位于智能合约地址的无限长度的数据结构数组。 存储机制确保存储位置不冲突并遵循一组规则。 使用这些规则,我们可以解码任何合约的状态。 解码存储在地图中的数据需要知道所使用的密钥。