Web3 & DApp Development Fundamentals · 课时

Gas 成本模型

哪些操作会消耗 Gas

第 1 / 4 课13 个步骤

Gas 成本模型 是 CoddyKit 上的免费 Web3 & DApp Development Fundamentals 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Web3 & DApp Development Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Web3 & DApp Development Fundamentals 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

Why Gas Exists

Every operation on the Ethereum Virtual Machine (EVM) costs gas. Gas is a unit that measures the computational work required to execute a transaction.

Gas exists to:

  • Pay validators for the resources they spend
  • Prevent infinite loops and denial-of-service attacks
  • Price scarce on-chain resources fairly

The total fee you pay equals gasUsed * gasPrice, denominated in wei.

Gas, Gas Price, and Gas Limit

Three numbers matter for every transaction:

  • gasUsed — how much computation actually happened
  • gasPrice (or maxFeePerGas under EIP-1559) — how much you pay per unit
  • gasLimit — the maximum gas you allow before the transaction reverts

If execution exceeds the gas limit, the transaction reverts with an out of gas error, but you still pay for the gas consumed.

// Fee calculation
// totalFee = gasUsed * effectiveGasPrice
// Example: 50000 gas * 20 gwei = 1,000,000 gwei = 0.001 ETH

Opcode Costs

Each EVM opcode has a fixed gas cost defined in the Ethereum protocol. Cheap arithmetic costs very little, while storage and external calls cost a lot.

  • ADD, SUB — 3 gas
  • MUL — 5 gas
  • SLOAD (read storage) — 2100 gas cold, 100 warm
  • SSTORE (write storage) — up to 22100 gas

Storage dominates the cost of most contracts.

The Cost of Storage

Persistent storage is the single most expensive resource on the EVM. Writing a storage slot from zero to non-zero costs 20000 gas; updating a non-zero slot costs 5000 gas.

Reading is cheaper than writing but still significant. This is why the golden rule of gas optimization is: touch storage as rarely as possible.

contract Counter {
    uint256 public count; // each increment writes a storage slot

    function increment() external {
        count += 1; // 1 SLOAD + 1 SSTORE
    }
}

Memory vs Storage vs Calldata

The EVM has three data locations, each with a different cost profile:

  • storage — persistent, most expensive
  • memory — temporary per-call, cheap but grows quadratically
  • calldata — read-only input data, cheapest for function arguments

Using calldata instead of memory for external function parameters avoids an unnecessary copy.

function sum(uint256[] calldata nums) external pure returns (uint256 total) {
    for (uint256 i = 0; i < nums.length; i++) {
        total += nums[i];
    }
}

Intrinsic Gas

Before any code runs, every transaction pays a base cost called intrinsic gas:

  • 21000 gas for a base transaction
  • 16 gas per non-zero calldata byte
  • 4 gas per zero calldata byte

This means even an empty transfer costs 21000 gas, and larger calldata payloads make transactions more expensive before execution even begins.

Cold vs Warm Access

Since EIP-2929, the first access to an account or storage slot in a transaction is cold and expensive; subsequent accesses are warm and cheap.

  • Cold SLOAD: 2100 gas
  • Warm SLOAD: 100 gas
  • Cold account access: 2600 gas

Caching a storage value in a local variable converts repeated cold reads into a single read plus cheap memory access.

uint256 cached = count; // one SLOAD
for (uint256 i = 0; i < cached; i++) {
    // use cached instead of re-reading count
}

Refunds

The EVM grants a partial gas refund when you clear storage, setting a non-zero slot back to zero (via SSTORE or SELFDESTRUCT historically).

Refunds are capped at one fifth of the transaction gas used (EIP-3529). Patterns like deleting array elements or zeroing balances can recover some gas, but you should never rely on refunds as a primary optimization.

function clear(uint256 key) external {
    delete data[key]; // zeroing a slot triggers a refund
}

EIP-1559 Fee Market

EIP-1559 split the gas price into two parts:

  • base fee — burned, adjusts automatically per block based on demand
  • priority fee (tip) — paid to the validator

Users set maxFeePerGas and maxPriorityFeePerGas. The effective price never exceeds the max, and unused amounts are refunded. This makes fees more predictable.

Deployment vs Runtime Gas

Contracts have two distinct gas profiles:

  • Deployment gas — paid once, proportional to bytecode size (200 gas per byte stored)
  • Runtime gas — paid on every call to the deployed contract

Sometimes you trade a larger, more expensive deployment for cheaper runtime, or vice versa. Optimize for the dimension that matters most to your use case.

The Optimization Mindset

Effective gas optimization follows a hierarchy:

  • Avoid storage writes (biggest wins)
  • Minimize cold accesses by caching
  • Use calldata over memory
  • Reduce calldata size
  • Micro-optimize opcodes last

Always measure before and after. Premature micro-optimization often hurts readability for negligible gain.

Quick Check

Which operation is typically the most expensive in an EVM contract?

Recap

You now understand the EVM gas cost model:

  • Fees equal gasUsed * gasPrice, bounded by a gas limit
  • Storage writes dominate cost; arithmetic is cheap
  • Cold accesses cost more than warm ones
  • Intrinsic gas (21000 + calldata bytes) is paid before execution
  • EIP-1559 splits fees into a burned base fee and a validator tip

Next we apply this knowledge to optimize contract storage layout.

免费开始

用 AI 导师学习 Web3 & DApp Development Fundamentals — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
29
课程
105

常见问题解答

「Gas 成本模型」课时是免费的吗?

是的 — 「Gas 成本模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Web3 & DApp Development Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Web3 & DApp Development Fundamentals 课程共包含 4 节课。

「Gas 成本模型」这节课中我会学到什么?

哪些操作会消耗 Gas 你通过在浏览器中直接运行的动手代码来练习 Web3 & DApp Development Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Web3 & DApp Development Fundamentals 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Web3 & DApp Development Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Gas 成本模型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Web3 & DApp Development Fundamentals 课中编写并运行代码吗?

能。每节 Web3 & DApp Development Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Gas 成本模型
  2. 存储优化
  3. 循环与 Calldata 技巧
  4. 测量 Gas
← 返回 Web3 & DApp Development Fundamentals