Asas Pembangunan Web3 & DApp · Pelajaran

Model Kos Gas

Perkara yang menggunakan gas

Pelajaran 1 daripada 413 langkah

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 ETH

Kos 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 gas
  • MUL — 5 gas
  • SLOAD (membaca storan) — 2100 gas sejuk, 100 gas panas
  • SSTORE (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.

  • SLOAD sejuk: 2100 gas
  • SLOAD panas: 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 calldata berbanding memory
  • 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.

Percuma untuk bermula

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.

Semua pelajaran dalam kursus ini

  1. Model Kos Gas
  2. Pengoptimuman Storan
  3. Helah Gelung dan Calldata
  4. Mengukur Gas
← Kembali ke Asas Pembangunan Web3 & DApp