# EVM和Solidity是什么？从代码、状态与Gas理解合约开发

整理：链小知（AI 辅助）
更新日期：2026-10-31
引用地址：https://lianxiaozhi.com/learn/evm-and-solidity-basics

EVM是Ethereum执行智能合约代码的运行环境，Solidity是编写合约的一种语言。源代码经编译得到字节码，合约被调用时按网络规则执行；读取、状态写入、部署和支付Gas是不同阶段。

## EVM执行的是什么？

Ethereum节点按相同规则执行EVM字节码，并在交易有效且执行成功时更新相关状态。字节码由操作码组成；合约通常保有可持久化的storage，而一次调用中使用的memory不会作为同样的持久状态保留。

EVM不是一种独立代币，也不意味着每条兼容链共享余额、历史或安全性。不同网络的实现、升级版本、费用和支持的操作码可能不同，需要按目标链验证。

依据：[Ethereum：EVM、字节码与状态](https://ethereum.org/developers/docs/evm/)

## Solidity与EVM之间是什么关系？

Solidity是一种面向智能合约的语言。开发者写出包含状态变量、函数和权限条件的源码，选择兼容的编译器版本，编译为EVM字节码及ABI，再部署并通过地址调用。源代码、编译产物和已部署地址是不同对象。

举例说，一个计数器可以有数字状态与增加数字的函数：先读取初始值，再发起改变状态的调用，最后读回新值。实际案例还应测试越权、边界和失败回滚；“编译成功”只说明源码通过该编译器，并不能证明业务逻辑安全。

依据：[Solidity：智能合约入门](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html)

## 读取、写入与Gas怎样区分？

节点执行运算要计量Gas。提交需要上链改变状态的交易，通常要由发送方或其他承担费用的机制支付网络费；只读调用一般可在本地节点模拟而不产生上链交易，但RPC提供商可能另有服务条件。

执行失败通常会回滚相应状态变更，但已经消耗的Gas可能仍产生费用。网络费还受实际消耗量、定价机制及网络而影响，不能把Gas限额或某次历史数值当作当前总费。

依据：[Ethereum：EVM、字节码与状态](https://ethereum.org/developers/docs/evm/)
依据：[Ethereum：交易与Gas](https://ethereum.org/developers/docs/transactions/)

## 初学者怎样练习并保留边界？

先阅读Solidity官方入门，使用Remix VM等隔离沙箱编译小合约，记录编译器版本、源码、环境及初始状态；操作一次成功写入，再验证一次预期失败，并重新读取状态。教程中的预期结果必须由自己实际运行后才算取得证据。

不要用真实资产、恢复材料或未经审阅的代码练习。之后可继续测试事件、权限和边界条件；真实部署还需要明确依赖、管理员、审计范围、升级与监测安排。

依据：[Solidity：智能合约入门](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html)
依据：[Ethereum：EVM、字节码与状态](https://ethereum.org/developers/docs/evm/)

## 继续核对
- [Remix VM合约练习步骤](https://lianxiaozhi.com/tools/guides/remix-local-vm-first-contract)
- [本地Counter与失败回滚](https://lianxiaozhi.com/tools/guides/foundry-local-counter-revert-test)
- [智能合约开发流程](https://lianxiaozhi.com/learn/smart-contract-development-path)
- [智能合约审计流程](https://lianxiaozhi.com/learn/smart-contract-audit-workflow)
