市值: $2.812T -5.85%
成交额(24h): $186.0816B 66.46%
恐惧与贪婪指数:

38 - 恐惧

  • 市值: $2.812T -5.85%
  • 成交额(24h): $186.0816B 66.46%
  • 恐惧与贪婪指数:
  • 市值: $2.812T -5.85%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

什么是以太坊虚拟机(EVM)以及它如何执行合约?

The EVM is a deterministic, sandboxed, stack-based VM with 256-bit words, executing immutable bytecode in isolated contexts, governed by gas limits and state trie persistence.

2026/01/14 01:20

EVM核心架构

1. 以太坊虚拟机作为嵌入在每个以太坊节点中的确定性沙盒运行时环境运行。

2. 它被实现为基于堆栈的虚拟机,字大小为 256 位,针对加密操作和状态转换进行了优化。

3. 每个 EVM 实例将合约执行与底层主机系统隔离,防止直接访问文件系统、网络或外部进程。

4. EVM 中的内存是易失性的,并组织为字节可寻址的线性数组,而存储是持久的,并映射到区块链的全局状态树。

5. 执行以交易发送者指定的固定 Gas 限制开始,每个操作码都会消耗预定义的 Gas 成本,以防止无限循环和资源耗尽。

字节码编译和部署

1. 使用Solidity等高级语言编写的智能合约,使用solc等工具编译成EVM字节码。

2. 该字节码由操作码(低级指令,如PUSH1SSTORERETURN )组成,每个操作码映射到一个单字节标识符。

3. 在部署期间,创建事务触发 EVM 执行构造函数代码,然后将生成的运行时字节码存储在新派生的地址中。

4. 部署的合约代码变得不可变;任何后续调用都会调用此存储的字节码,而无需重新编译。

5. EVM 在执行前验证字节码有效性,拒绝包含未定义或格式错误的操作码的序列。

事务驱动的执行流程

1. 每个合约交互都源自外部拥有的账户(EOA)发起针对特定合约地址的签名交易。

2. EVM 加载目标合约的字节码,并使用调用者地址、传输的值、调用数据和剩余气体来初始化新的执行上下文。

3. 执行逐条指令进行:从调用数据读取、修改内存或存储、执行算术以及通过条件跳转进行分支。

4. 如果操作失败(例如除以零、气体耗尽或跳转目标无效),EVM 将恢复该事务期间所做的所有状态更改。

5. 成功执行会发出日志、更新存储,并可能触发对其他合约的嵌套调用,每个合约都限制在自己独立的堆栈和内存空间内。

天然气核算和国家诚信

1. Gas既充当计算定价机制,又充当安全边界;每个操作码在执行前都会扣除gas,gas不足会立即停止处理。

2. 存储写入所产生的 Gas 成本明显高于内存操作,这反映了它们在世界状态中的持久性。

3. EVM 强制执行严格的确定性:相同的输入、相同的合约代码和相同的前状态总是产生相同的后状态和输出。

4. 本身无法访问随机性或基于时间的值;块号和时间戳是在调用时注入的只读环境变量。

5. 所有状态修改都是批量的,并且只有在完整事务执行结束后才会提交到全局状态树,无一例外。

常见问题解答

问:EVM 字节码可以逆向工程为可读的 Solidity 源吗?答:反编译产生近似逻辑,但由于不可逆的编译损失而无法恢复原始变量名称、注释或高级抽象。

问:为什么 EVM 使用 256 位字而不是 64 位或 128 位?答:256 位与以太坊的加密原语(Keccak-256 哈希、ECDSA 签名和 Merkle 证明)一致,所有这些都在 32 字节块上运行。

问:合约自毁时会发生什么?答:EVM 从状态树中删除合约的代码和存储,退还剩余的 Gas,并将其全部余额转移到指定的受益人地址。

问:EVM 执行可以跨节点并行吗?答:不会。以太坊强制执行每个区块的顺序、确定性执行;节点按照规范顺序一一重播交易,以就最终状态达成共识。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

如何使用LayerZero合约执行跨链消息?

如何使用LayerZero合约执行跨链消息?

2026-01-18 13:19:39

了解 LayerZero 架构1. LayerZero 作为一种轻量级、无需许可的互操作性协议运行,无需依赖可信中介或包装资产即可实现区块链之间的通信。 2. 它利用部署在每条链上的超轻节点(ULN)来验证消息的完整性和一致性,而无需存储完整的区块链状态。 3. 核心组件包括处理消息路由的 Endp...

如何实施EIP-712进行安全签名验证?

如何实施EIP-712进行安全签名验证?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定义了以太坊应用程序中类型化结构化数据哈希和签名的标准。 2. 它使钱包能够在签名请求期间显示人类可读的域和消息字段,而不是原始的十六进制字符串。 3. 该规范通过域分隔符哈希引入域分离,防止跨不同 dApp 或链的签名重放。 4. 每个签名的有效...

如何通过新合约交互获得空投资格?

如何通过新合约交互获得空投资格?

2026-01-24 21:00:23

了解合约交互要求1. 大多数空投活动都要求与部署在受支持的区块链(例如以太坊、Arbitrum 或 Base)上的智能合约进行直接交互。 2. 交互通常涉及使用连接到 dApp 接口的钱包执行诸如approve() 、 stake()或mint()之类的函数。 3. 某些协议需要多种交易类型,例如将...

如何监控智能合约的安全警报?

如何监控智能合约的安全警报?

2026-01-21 07:59:57

链上监控工具1. Etherscan和Blockscout等区块链浏览器允许实时检查合约字节码、交易日志和内部调用。 2. 在信任任何链上数据之前必须确认合约验证状态——未经验证的合约存在高风险。 3. 事件日志解析可以检测异常状态变化,例如意外的代币转移或所有权修改。 4. 可以针对特定事件签名设...

如何建立自动支付合同并为其提供资金?

如何建立自动支付合同并为其提供资金?

2026-01-26 08:59:35

了解智能合约部署1. 开发者必须根据gas效率和安全性要求选择兼容的区块链平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是编写支付自动化逻辑的主要语言,特别是对于定期或有条件的转账。 3. 在主网部署之前,使用 Hardhat 或 Foundry 等本地开发环境来...

如何使用 OpenZeppelin 合约构建安全的 dApp?

如何使用 OpenZeppelin 合约构建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合约基础知识1. OpenZeppelin Contracts 是一个可重用、经过社区审核的智能合约组件库,专为以太坊和 EVM 兼容的区块链而构建。 2. 库中的每个合约都遵循严格的安全实践,包括遵守“检查-效果-交互”模式以及广泛使用访问控制修饰符。 3. 该库提...

如何使用LayerZero合约执行跨链消息?

如何使用LayerZero合约执行跨链消息?

2026-01-18 13:19:39

了解 LayerZero 架构1. LayerZero 作为一种轻量级、无需许可的互操作性协议运行,无需依赖可信中介或包装资产即可实现区块链之间的通信。 2. 它利用部署在每条链上的超轻节点(ULN)来验证消息的完整性和一致性,而无需存储完整的区块链状态。 3. 核心组件包括处理消息路由的 Endp...

如何实施EIP-712进行安全签名验证?

如何实施EIP-712进行安全签名验证?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定义了以太坊应用程序中类型化结构化数据哈希和签名的标准。 2. 它使钱包能够在签名请求期间显示人类可读的域和消息字段,而不是原始的十六进制字符串。 3. 该规范通过域分隔符哈希引入域分离,防止跨不同 dApp 或链的签名重放。 4. 每个签名的有效...

如何通过新合约交互获得空投资格?

如何通过新合约交互获得空投资格?

2026-01-24 21:00:23

了解合约交互要求1. 大多数空投活动都要求与部署在受支持的区块链(例如以太坊、Arbitrum 或 Base)上的智能合约进行直接交互。 2. 交互通常涉及使用连接到 dApp 接口的钱包执行诸如approve() 、 stake()或mint()之类的函数。 3. 某些协议需要多种交易类型,例如将...

如何监控智能合约的安全警报?

如何监控智能合约的安全警报?

2026-01-21 07:59:57

链上监控工具1. Etherscan和Blockscout等区块链浏览器允许实时检查合约字节码、交易日志和内部调用。 2. 在信任任何链上数据之前必须确认合约验证状态——未经验证的合约存在高风险。 3. 事件日志解析可以检测异常状态变化,例如意外的代币转移或所有权修改。 4. 可以针对特定事件签名设...

如何建立自动支付合同并为其提供资金?

如何建立自动支付合同并为其提供资金?

2026-01-26 08:59:35

了解智能合约部署1. 开发者必须根据gas效率和安全性要求选择兼容的区块链平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是编写支付自动化逻辑的主要语言,特别是对于定期或有条件的转账。 3. 在主网部署之前,使用 Hardhat 或 Foundry 等本地开发环境来...

如何使用 OpenZeppelin 合约构建安全的 dApp?

如何使用 OpenZeppelin 合约构建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合约基础知识1. OpenZeppelin Contracts 是一个可重用、经过社区审核的智能合约组件库,专为以太坊和 EVM 兼容的区块链而构建。 2. 库中的每个合约都遵循严格的安全实践,包括遵守“检查-效果-交互”模式以及广泛使用访问控制修饰符。 3. 该库提...

查看所有文章

User not found or password invalid

Your input is correct