Model Kos Gas
Perkara yang menggunakan gas
Model Kos Gas ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Mengapa Gas Wujud
Setiap operasi pada Mesin Maya Ethereum (EVM) memerlukan gas. Gas ialah unit yang mengukur kerja pengiraan yang diperlukan untuk melaksanakan transaksi.
Gas wujud untuk:
- Membayar validator bagi sumber yang digunakan
- Menghalang gelung tanpa penghujung dan serangan penafian perkhidmatan
- Menetapkan harga sumber dalam rantaian yang terhad secara adil
Jumlah yuran yang anda bayar adalah sama dengan gasUsed * gasPrice, dan dinyatakan dalam wei.
Gas, Harga Gas dan Had Gas
Tiga nombor penting bagi setiap transaksi:
- gasUsed — jumlah pengiraan yang benar-benar berlaku
- gasPrice (atau maxFeePerGas di bawah EIP-1559) — jumlah bayaran bagi setiap unit
- gasLimit — jumlah gas maksimum yang dibenarkan sebelum transaksi dibatalkan
Jika pelaksanaan melebihi had gas, transaksi dibatalkan dengan ralat out of gas, tetapi anda masih membayar gas yang telah digunakan.
// Fee calculation
// totalFee = gasUsed * effectiveGasPrice
// Example: 50000 gas * 20 gwei = 1,000,000 gwei = 0.001 ETHKos Opcode
Setiap opcode EVM mempunyai kos gas tetap yang ditakrifkan dalam protokol Ethereum. Pengiraan aritmetik yang mudah memerlukan kos yang sangat kecil, manakala storan dan panggilan luaran memerlukan kos yang tinggi.
ADD,SUB— 3 gasMUL— 5 gasSLOAD(membaca storan) — 2100 gas sejuk, 100 gas panasSSTORE(menulis storan) — sehingga 22100 gas
Storan merupakan komponen kos terbesar bagi kebanyakan kontrak.
Kos Storan
Storan berterusan ialah sumber tunggal yang paling mahal pada EVM. Menulis slot storan daripada sifar kepada bukan sifar memerlukan 20000 gas; mengemas kini slot bukan sifar memerlukan 5000 gas.
Membaca lebih murah daripada menulis tetapi masih melibatkan kos yang ketara. Inilah sebabnya peraturan emas pengoptimuman gas ialah: akses storan sesedikit mungkin.
contract Counter {
uint256 public count; // each increment writes a storage slot
function increment() external {
count += 1; // 1 SLOAD + 1 SSTORE
}
}Memori berbanding Storan berbanding Data Panggilan
EVM mempunyai tiga lokasi data, setiap satunya dengan ciri kos yang berbeza:
- storan — berterusan, paling mahal
- memori — sementara bagi setiap panggilan, murah tetapi berkembang secara kuadratik
- data panggilan — data input baca sahaja, paling murah untuk argumen fungsi
Menggunakan calldata berbanding memory bagi parameter fungsi luaran mengelakkan penyalinan yang tidak diperlukan.
function sum(uint256[] calldata nums) external pure returns (uint256 total) {
for (uint256 i = 0; i < nums.length; i++) {
total += nums[i];
}
}Gas Asasi
Sebelum sebarang kod dijalankan, setiap transaksi membayar kos asas yang dipanggil gas asasi:
- 21000 gas untuk transaksi asas
- 16 gas bagi setiap bait data panggilan bukan sifar
- 4 gas bagi setiap bait data panggilan sifar
Ini bermakna pemindahan kosong sekalipun memerlukan 21000 gas, dan muatan data panggilan yang lebih besar menjadikan transaksi lebih mahal sebelum pelaksanaan bermula.
Akses Sejuk berbanding Akses Panas
Sejak EIP-2929, akses pertama kepada akaun atau slot storan dalam transaksi adalah sejuk dan mahal; akses seterusnya adalah panas dan murah.
SLOADsejuk: 2100 gasSLOADpanas: 100 gas- Akses akaun sejuk: 2600 gas
Menyimpan nilai storan dalam pemboleh ubah tempatan menukar bacaan sejuk berulang kepada satu bacaan dan akses memori yang murah.
uint256 cached = count; // one SLOAD
for (uint256 i = 0; i < cached; i++) {
// use cached instead of re-reading count
}Bayaran Balik
EVM memberikan sebahagian bayaran balik gas apabila anda mengosongkan storan, iaitu menetapkan slot bukan sifar kembali kepada sifar (melalui SSTORE atau SELFDESTRUCT dari segi sejarah).
Bayaran balik dihadkan kepada satu perlima daripada gas transaksi yang digunakan (EIP-3529). Corak seperti memadam elemen tatasusunan atau menetapkan baki kepada sifar boleh mendapatkan semula sebahagian gas, tetapi anda tidak sepatutnya bergantung pada bayaran balik sebagai pengoptimuman utama.
function clear(uint256 key) external {
delete data[key]; // zeroing a slot triggers a refund
}Pasaran Yuran EIP-1559
EIP-1559 membahagikan harga gas kepada dua bahagian:
- yuran asas — dibakar, dilaraskan secara automatik bagi setiap blok berdasarkan permintaan
- yuran keutamaan (tip) — dibayar kepada validator
Pengguna menetapkan maxFeePerGas dan maxPriorityFeePerGas. Harga berkesan tidak pernah melebihi maksimum, dan jumlah yang tidak digunakan dibayar balik. Ini menjadikan yuran lebih mudah dijangka.
Gas Penggunaan berbanding Gas Pelaksanaan
Kontrak mempunyai dua profil gas yang berbeza:
- Gas penggunaan — dibayar sekali, berkadar dengan saiz kod bait (200 gas bagi setiap bait yang disimpan)
- Gas pelaksanaan — dibayar bagi setiap panggilan kepada kontrak yang telah digunakan
Kadangkala anda menukar penggunaan yang lebih besar dan mahal demi pelaksanaan yang lebih murah, atau sebaliknya. Optimumkan dimensi yang paling penting untuk kes penggunaan anda.
Cara Berfikir tentang Pengoptimuman
Pengoptimuman gas yang berkesan mengikut hierarki:
- Elakkan penulisan storan (keuntungan terbesar)
- Kurangkan akses sejuk dengan menyimpan nilai dalam cache
- Gunakan
calldataberbandingmemory - Kurangkan saiz data panggilan
- Optimumkan opcode secara kecil-kecilan pada peringkat akhir
Sentiasa ukur sebelum dan selepas. Pengoptimuman kecil yang dilakukan terlalu awal sering menjejaskan kebolehbacaan dengan peningkatan yang tidak ketara.
Semakan Pantas
Operasi manakah yang biasanya paling mahal dalam kontrak EVM?
Imbas Kembali
Anda kini memahami model kos gas EVM:
- Yuran bersamaan
gasUsed * gasPrice, dan dihadkan oleh had gas - Penulisan storan mendominasi kos; pengiraan aritmetik adalah murah
- Akses sejuk lebih mahal daripada akses panas
- Gas asasi (21000 + bait data panggilan) dibayar sebelum pelaksanaan
- EIP-1559 membahagikan yuran kepada yuran asas yang dibakar dan tip validator
Seterusnya kita akan menggunakan pengetahuan ini untuk mengoptimumkan susun atur storan kontrak.
Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 29
- Pelajaran
- 105
Soalan Lazim
Adakah pelajaran “Model Kos Gas” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Model Kos Gas”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Model Kos Gas”?
Perkara yang menggunakan gas Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Model Kos Gas” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?
Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.