主页 > imtoken官网最新版 > 以太坊核心概念

以太坊核心概念

imtoken官网最新版 2023-08-25 05:12:09

联客,为开发者而生,答疑解惑!

本文来自区块链技术社区,未经许可拒绝转载。

在这里插入图片描述

以太坊虚拟机 (EVM)

以太坊虚拟机 (EVM) 是以太坊中智能合约的运行时环境。 它不仅是沙盒化的,而且实际上是完全隔离的,这意味着在 EVM 内运行的代码无法接触网络、文件系统或其他进程。 智能合约之间甚至还有有限的调用。

以太坊创世区块不能挖矿了_以太坊 挖矿_以太坊挖矿显卡算力表

帐户

以太坊中有两种类型的账户,它们共享相同的地址空间。 外部账户,由公私密钥对控制。 合约账户,此类账户由账户中存储的代码控制。 外部账户的地址由公钥确定,而合约账户的地址是在创建合约时确定的(这个地址是根据合约创建者的地址和该地址发送的交易数量计算的,以及该地址发送的交易数量也由所谓的“随机数”决定)

两种账户的唯一区别是合约账户存储代码,而外部账户不存储代码。

以太坊 挖矿_以太坊创世区块不能挖矿了_以太坊挖矿显卡算力表

每个账户都有一个键值对形式的持久化存储。 key和value的长度都是256bit。

此外,每个账户都有一个以太币余额(以“Wei”为单位)以太坊创世区块不能挖矿了,可以通过向其发送以太币交易来更改。

交易

以太坊 挖矿_以太坊创世区块不能挖矿了_以太坊挖矿显卡算力表

交易是一条消息,从一个帐户发送到另一个帐户。 交易可以包含二进制数据(有效载荷)和以太币。

如果目标帐户包含代码,则将执行该代码和输入数据。

如果目标账户是零账户(账户地址为0),交易将创建一个新合约。 上面说了,这个合约地址不是零地址,而是根据合约创建者的地址和这个地址发送的交易数量计算出来的。 合约创建交易的有效负载作为 EVM 字节码执行。 执行的输出作为合约代码永久存储。 这意味着,为了创建合约,您不需要向合约发送真实的合约代码,而是发送返回真实代码的代码。

以太坊挖矿显卡算力表_以太坊 挖矿_以太坊创世区块不能挖矿了

气体

以太坊上的每笔交易都会收取一定数量的天然气。 gas 的目的是在支付执行费用的同时限制执行交易所需的工作量。 当EVM执行一笔交易时,gas会按照一定的规则逐渐消耗。

gas price(gas price, in Ether)由交易创建者设定,发送账户需要预付交易费=gas price * gas amount。 如果执行后还有gas剩余,gas会返还给发送账户。

以太坊 挖矿_以太坊创世区块不能挖矿了_以太坊挖矿显卡算力表

无论在哪里执行,一旦gas耗尽(比如下降到负值),都会触发out-of-gas异常。 当前调用框架所做的所有状态修改都将回滚。

存储、内存和堆栈

每个帐户都有一个称为存储的持久内存区域。 它的格式是key-value,key和value的长度都是256位。 在合约中,无法遍历账户的存储。 与其他两者相比,存储读取操作的开销相对较大,而修改存储的开销更大。 合约只能读写自己的存储。

第二个内存区域称为主内存。 每次合约执行消息调用时,都会有一个新的、清理过的主内存。 主存可以按字节粒度寻址,但读写粒度为32字节(256位)。 操作主内存的开销随着它的增长而增长(平方尺度)。

EVM 不是基于寄存器的,而是基于堆栈的虚拟机。 因此所有的计算都在一个称为堆栈的区域中进行。 堆栈最多有1024个元素,每个元素256位。 通过允许将顶部 16 个元素之一复制到堆栈顶部,或将堆栈的顶部元素与以下 16 个元素之一交换,对堆栈的访问仅限于其顶部。 所有其他操作只能取栈顶的两个(或一个,或多个,取决于具体操作)元素并将结果压入栈顶。 当然,你可以把栈上的元素放入存储器或主存中。 但是不可能只访问栈上指定深度的元素。 在此之前以太坊创世区块不能挖矿了,必须从堆栈中删除指定深度以上的所有元素。