4 410002900.com
BTC ▲ 67,820 ETH ▲ 3,540 BNB ▼ 612 SOL ▲ 198 XRP ▲ 0.62 DOGE ▼ 0.14 ADA ▲ 0.58 AVAX ▲ 42.30
410002900.com » gasyou-hua-xin-shou-ru-men
深度 Gas优化新手入门 - Gas优化新手入门:用十分钟读懂以太坊智能合约的成本模型

Gas优化新手入门:用十分钟读懂以太坊智能合约的成本模型

发布 · 2026-05-24T06:12:20.359587+00:00 更新 · 2026-05-24T14:44:14.396915+00:00

Gas优化新手入门

刚接触以太坊与 Binance 智能链开发的同学,往往会被一连串术语劝退:Gas、Gas Price、Base Fee、Priority Fee、Opcode……本篇 Gas优化新手入门 用最朴素的语言,把整个成本模型梳理一遍,并给出第一阶段就能上手的优化建议。

一、为什么链上要收 Gas

Gas 本质上是计算资源的计费单位。EVM 是一台共享虚拟机,每个节点都要为每一条 opcode 付出 CPU、内存、磁盘代价。Gas 让用户为这些消耗付费,避免恶意脚本无限循环占用网络。

一笔交易最终支付的费用 = Gas 用量 × Gas 单价。Gas 用量取决于合约写法,Gas 单价由网络拥堵决定。开发者无法直接控制单价,但可以通过优化用量来降低用户体验成本。

二、最基础的成本结构

任何一笔交易首先要支付 21000 的基础 Gas。在此之上:

  • 每字节非零 calldata 收 16 Gas;
  • 写一个新的 storage 槽位收 22100 Gas;
  • 修改已有槽位收 2900 Gas;
  • 读 storage 收 2100 Gas;
  • 读 memory 仅 3 Gas。

这组数字解释了一个核心规律:内存便宜,存储昂贵。新手入门阶段,只要养成「能用 memory 就别 storage」的习惯,就能省下大量 Gas。

三、新手最容易踩的 3 个坑

1. 在循环里读同一个状态变量

for (uint i = 0; i < users.length; i++) {
  total += users[i].balance;
}

上面 users.length 每次循环都会触发 SLOAD。改成本地变量:

uint len = users.length;
for (uint i = 0; i < len; i++) { ... }

2. 用字符串做 revert 信息

require(amount > 0, "amount must be positive");

字符串会被打包进合约字节码并在 revert 时返回。新手期可以用更短的字符串,进阶后改成 custom error。

3. 多次写入同一变量

如果在函数里多处累加 balance,最后才写回,比每次都 SSTORE 划算得多。

四、初学者的优化清单

面向 B安 智能链等开发者友好型网络,先掌握下面五条:

  1. 把高频读取的状态变量缓存到局部变量;
  2. 删除不必要的事件参数;
  3. 紧凑结构体字段顺序,让多个小字段共享一个 slot;
  4. 把不会变的合约 owner 改为 immutable;
  5. 用 unchecked 包裹纯内部循环计数器。

这五条不需要写汇编、不需要改架构,但通常能让你的合约 Gas 直接下降 15%–25%。

五、用工具量化每一次优化

感觉「应该变快」不算优化。建议新手立刻把 Foundry 装上,跑一遍:

forge test --gas-report
forge snapshot

每次修改后再跑一次,看具体函数的 Gas 变化。把数据贴在 PR 描述里,是新人能展示的最直观成长。

六、再往后该看什么

如果你已经能熟练运用上面这些技巧,可以继续阅读 solmate、solady 等开源库的源码。它们针对 ERC-20、ERC-721 等基础合约做过极致优化,是从「会写合约」到「会写高效合约」之间最好的桥梁。在 BN必安 等生态项目中,这种能力会直接转化为用户费率优势。

持之以恒地度量、对比、复盘,每一位新手都能在三到六个月内成长为团队里值得信赖的 Gas 优化专家。