Mengukur Gas
Alat profiling
Mengukur Gas adalah pelajaran Web3 & DApp Development Fundamentals gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Web3 & DApp Development Fundamentals, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Web3 & DApp Development Fundamentals mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Measure, Don't Guess
Gas optimization without measurement is guesswork. The compiler, opcode costs, and access patterns interact in non-obvious ways, so an intuitive change can sometimes make things worse.
Always profile before and after. A change that does not reduce measured gas is not an optimization, no matter how clever it looks.
Forge Gas Reports
Foundry's forge test --gas-report prints a per-function table of min, average, median, and max gas usage across all your tests. It is the fastest way to spot expensive functions.
$ forge test --gas-report
| Function | min | avg | median | max | # calls |
| transfer | 28012 | 34521 | 34521 | 51012 | 12 |
| approve | 24300 | 24300 | 24300 | 24300 | 5 |Gas Snapshots
forge snapshot writes the gas cost of every test to a .gas-snapshot file. Commit it to version control, then run forge snapshot --diff to see exactly how a change affected gas.
This turns gas regressions into reviewable diffs in pull requests.
$ forge snapshot
$ forge snapshot --diff
testTransfer() (gas: -1240 (-3.6%))
testMint() (gas: +85 (+0.2%))Measuring in Tests
For fine-grained measurement, read gasleft() before and after a call inside a test. The difference is the gas consumed by that block of code.
uint256 before = gasleft();
target.doWork();
uint256 used = before - gasleft();
emit log_named_uint("gas used", used);Verbose Traces
Running tests with -vvvv shows a full execution trace including the gas cost of each external call and opcode group. This reveals where gas is spent, not just the total.
$ forge test --match-test testTransfer -vvvv
[34521] Token::transfer(bob, 100)
emit Transfer(from: alice, to: bob, value: 100)
return: trueThe Optimizer Setting
The Solidity optimizer changes runtime and deployment gas. The runs parameter is a hint about how often functions are called.
- Low
runs(e.g. 1) optimizes for cheap deployment - High
runs(e.g. 10000) optimizes for cheap repeated calls
Set it in foundry.toml and always measure with the optimizer enabled, since it reflects production behavior.
# foundry.toml
[profile.default]
optimizer = true
optimizer_runs = 10000Comparing Implementations
To compare two approaches, write a test that exercises each under identical conditions and inspect the gas report side by side.
Keep inputs the same and isolate the change to one variable, otherwise you cannot attribute the gas difference to the optimization you made.
function testNaive() public { c.sumNaive(data); }
function testOptimized() public { c.sumOptimized(data); }
// compare both rows in --gas-reportBeware Warm vs Cold Skew
Gas reports can mislead because the first access in a test is cold and later ones are warm. A function called once in setup may show a higher cold cost than the same function later.
Look at min, median, and max columns together rather than a single average, and design tests that reflect real-world access patterns.
Etherscan and Real Receipts
On-chain transaction receipts report the actual gasUsed. Etherscan and block explorers display this for every transaction, letting you validate your local measurements against mainnet reality.
The eth_estimateGas RPC method gives a pre-flight estimate, though it adds a safety margin and may differ from the real execution cost.
CI Gas Regression Gates
Wire forge snapshot --check into continuous integration. It fails the build if any test's gas exceeds the committed snapshot beyond a tolerance.
This prevents accidental gas regressions from slipping into production and makes gas a first-class quality metric.
$ forge snapshot --check
# exits non-zero if gas increased vs committed snapshotA Measurement Workflow
A solid gas workflow:
- Write tests covering the hot paths
- Record a baseline with
forge snapshot - Make one optimization at a time
- Run
forge snapshot --diffto confirm the gain - Gate regressions in CI with
--check
Discipline beats cleverness.
Quick Check
Which Foundry command produces a per-function table of min, average, and max gas usage?
Recap
You learned to measure gas:
forge test --gas-reportfor per-function tablesforge snapshot --diffto track changesgasleft()for fine-grained measurement- Verbose traces reveal where gas goes
- Gate regressions in CI with
--check
This completes the Gas Optimization course. Next: the Foundry toolkit in depth.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengukur Gas” gratis?
Ya — teks lengkap “Mengukur Gas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Web3 & DApp Development Fundamentals, upgrade ke CoddyKit PRO. Kursus Web3 & DApp Development Fundamentals mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengukur Gas”?
Alat profiling Kamu berlatih Web3 & DApp Development Fundamentals dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Web3 & DApp Development Fundamentals?
Tidak diperlukan pengalaman sebelumnya. Web3 & DApp Development Fundamentals di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Mengukur Gas” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Web3 & DApp Development Fundamentals ini?
Ya. Setiap pelajaran Web3 & DApp Development Fundamentals menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.