Panduan Optimasi Biaya Gas untuk Smart Contract Ethereum: Sepuluh Praktik dan Tip Terbaik

Praktik Terbaik Optimisasi Gas untuk Kontrak Pintar Ethereum

Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang rumit, terutama saat jaringan macet. Pada saat puncak, pengguna sering kali perlu membayar biaya transaksi yang tinggi. Oleh karena itu, mengoptimalkan biaya Gas selama tahap pengembangan smart contract sangat penting. Mengoptimalkan konsumsi Gas tidak hanya dapat secara efektif mengurangi biaya transaksi, tetapi juga meningkatkan efisiensi transaksi, memberikan pengalaman penggunaan blockchain yang lebih ekonomis dan efisien bagi pengguna.

Artikel ini akan menguraikan mekanisme biaya Gas dari Ethereum Virtual Machine ( EVM ), konsep inti terkait optimasi biaya Gas, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Dengan konten ini, diharapkan dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, sekaligus membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.

Gas optimasi 10 praktik terbaik untuk smart contract Ethereum

Ringkasan Mekanisme Biaya Gas EVM

Dalam jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk menjalankan operasi tertentu.

Dalam struktur tata letak EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, pemanggilan pesan eksternal, dan pembacaan serta penulisan memori dan penyimpanan.

Karena setiap eksekusi transaksi memerlukan sumber daya komputasi, akan dikenakan biaya tertentu untuk mencegah loop tanpa akhir dan serangan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan suatu transaksi disebut "Gas Fee".

Sejak EIP-1559 berlaku, biaya Gas dihitung dengan rumus berikut:

Biaya gas = unit gas yang digunakan * (biaya dasar + biaya prioritas)

Biaya dasar akan dihancurkan, sedangkan biaya prioritas akan digunakan sebagai insentif, mendorong validator untuk menambahkan transaksi ke dalam blockchain. Mengatur biaya prioritas yang lebih tinggi saat mengirim transaksi dapat meningkatkan kemungkinan transaksi tersebut dimasukkan ke dalam blok berikutnya. Ini mirip dengan "tip" yang dibayarkan pengguna kepada validator.

1. Memahami Optimasi Gas di EVM

Ketika mengompilasi smart contract menggunakan Solidity, kontrak akan diubah menjadi serangkaian "kode operasi", yaitu opcodes.

Setiap segmen opcode ( seperti membuat kontrak, melakukan pemanggilan pesan, mengakses penyimpanan akun, dan mengeksekusi operasi di mesin virtual ) memiliki biaya konsumsi Gas yang diakui, biaya ini tercatat dalam buku kuning Ethereum.

Setelah beberapa kali modifikasi EIP, beberapa biaya Gas dari opcode telah disesuaikan, mungkin berbeda dari yang terdapat dalam buku kuning.

2.Konsep dasar optimasi Gas

Inti dari optimasi Gas adalah memilih operasi yang efisien biaya di blockchain EVM, menghindari operasi yang mahal dalam biaya Gas.

Dalam EVM, operasi berikut memiliki biaya yang lebih rendah:

  • Membaca dan menulis variabel memori
  • Membaca konstanta dan variabel yang tidak dapat diubah
  • Membaca dan menulis variabel lokal
  • Membaca variabel calldata, seperti array dan struktur calldata
  • Panggilan fungsi internal

Operasi yang biayanya lebih tinggi termasuk:

  • Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
  • Pemanggilan fungsi eksternal
  • Operasi siklus

Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik

Praktik Terbaik untuk Mengoptimalkan Biaya EVM Gas

Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik untuk optimasi biaya Gas bagi komunitas pengembang. Dengan mengikuti praktik ini, pengembang dapat mengurangi konsumsi biaya Gas dari smart contract, menurunkan biaya transaksi, dan menciptakan aplikasi yang lebih efisien dan ramah pengguna.

1. Usahakan untuk mengurangi penggunaan penyimpanan

Dalam Solidity, Storage( adalah sumber daya terbatas, yang konsumsi Gas-nya jauh lebih tinggi dibandingkan Memory). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan ada biaya Gas yang tinggi.

Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat dibandingkan operasi memori. Misalnya, instruksi OPcodesmload dan mstore hanya menghabiskan 3 unit Gas, sementara operasi penyimpanan seperti sload dan sstore, bahkan dalam kondisi yang paling ideal, biayanya setidaknya memerlukan 100 unit.

Metode untuk membatasi penggunaan penyimpanan meliputi:

  • Menyimpan data non-permanen di dalam memori
  • Mengurangi jumlah modifikasi penyimpanan: dengan menyimpan hasil sementara di memori, setelah semua perhitungan selesai, baru hasil tersebut dialokasikan ke variabel penyimpanan.

Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik

( 2. Pengemasan variabel

Jumlah slot penyimpanan ) yang digunakan dalam smart contract dan cara pengembang menyatakan data akan sangat mempengaruhi konsumsi Gas.

Kompiler Solidity akan mengemas variabel penyimpanan yang berurutan selama proses kompilasi, dan menggunakan slot penyimpanan 32 byte sebagai unit dasar penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan cara yang rasional, sehingga beberapa variabel dapat cocok ke dalam satu slot penyimpanan.

Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas ### untuk menyimpan satu slot penyimpanan yang tidak terpakai membutuhkan 20.000 Gas (, tetapi sekarang hanya membutuhkan dua slot penyimpanan.

Karena setiap slot penyimpanan akan mengonsumsi Gas, pengemasan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.

![Gas optimization untuk smart contract Ethereum: 10 praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(

) 3. Mengoptimalkan tipe data

Sebuah variabel dapat diwakili oleh berbagai tipe data, tetapi biaya operasi yang sesuai dengan tipe data yang berbeda juga berbeda. Memilih tipe data yang tepat dapat membantu mengoptimalkan penggunaan Gas.

Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi ukuran yang berbeda: uint8, uint16, uint32, dll. Karena EVM melakukan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengkonversinya menjadi uint256, dan konversi ini akan menghabiskan Gas tambahan.

Dilihat secara terpisah, di sini menggunakan uint256 lebih murah daripada uint8. Namun, jika menggunakan optimasi pengemasan variabel yang kami sarankan sebelumnya, itu akan berbeda. Jika pengembang dapat mengemas empat variabel uint8 ke dalam satu slot penyimpanan, maka total biaya untuk mengiterasi mereka akan lebih rendah daripada empat variabel uint256. Dengan cara ini, smart contract dapat membaca dan menulis satu slot penyimpanan, dan dalam satu operasi, menempatkan empat variabel uint8 ke dalam memori/penyimpanan.

Gas optimization untuk smart contract Ethereum: 10 praktik terbaik

4. Menggunakan variabel ukuran tetap sebagai pengganti variabel dinamis

Jika data dapat dikendalikan dalam 32 byte, disarankan untuk menggunakan tipe data bytes32 sebagai pengganti bytes atau strings. Secara umum, variabel dengan ukuran tetap menghabiskan Gas lebih sedikit dibandingkan variabel dengan ukuran yang dapat berubah. Jika panjang byte dapat dibatasi, pilihlah panjang minimum dari bytes1 hingga bytes32.

Gas optimization untuk smart contract Ethereum: 10 praktik terbaik

5. Pemetaan dan Array

Daftar data Solidity dapat diwakili dengan dua jenis tipe data: array(Arrays) dan mapping###Mappings(, tetapi sintaksis dan strukturnya sangat berbeda.

Pemetaan dalam sebagian besar kasus lebih efisien dan lebih murah, tetapi array memiliki iterabilitas dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memilih pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.

![Gas optimization untuk 10 praktik terbaik smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6. Menggunakan calldata sebagai pengganti memory

Variabel yang dideklarasikan dalam parameter fungsi dapat disimpan di calldata atau memory. Perbedaan utama antara keduanya adalah, memory dapat diubah oleh fungsi, sedangkan calldata tidak dapat diubah.

Ingat prinsip ini: jika parameter fungsi bersifat read-only, lebih baik menggunakan calldata daripada memory. Ini dapat menghindari operasi penyalinan yang tidak perlu dari calldata fungsi ke memory.

Gas optimization untuk smart contract Ethereum: 10 praktik terbaik

7. Gunakan kata kunci Constant/Immutable sebisa mungkin

Variabel Constant/Immutable tidak akan disimpan dalam penyimpanan kontrak. Variabel ini akan dihitung pada saat kompilasi, dan disimpan dalam bytecode kontrak. Oleh karena itu, biaya aksesnya jauh lebih rendah dibandingkan dengan penyimpanan, disarankan untuk menggunakan kata kunci Constant atau Immutable sebisa mungkin.

Gas optimization sepuluh praktik terbaik untuk smart contract Ethereum

8. Gunakan Unchecked dengan memastikan tidak terjadi overflow/underflow

Ketika pengembang dapat memastikan bahwa operasi aritmatika tidak akan menyebabkan overflow atau underflow, mereka dapat menggunakan kata kunci unchecked yang diperkenalkan di Solidity v0.8.0 untuk menghindari pemeriksaan overflow atau underflow yang berlebihan, sehingga menghemat biaya Gas.

Selain itu, versi 0.8.0 dan yang lebih tinggi dari kompiler tidak lagi memerlukan penggunaan pustaka SafeMath, karena kompiler itu sendiri sudah dilengkapi dengan fungsi perlindungan terhadap overflow dan underflow.

Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik

9. pengubah optimasi

Kode modifier disisipkan ke dalam fungsi yang dimodifikasi, setiap kali modifier digunakan, kodenya akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas.

Dengan merekonstruksi logika menjadi fungsi internal _checkOwner(), memungkinkan penggunaan kembali fungsi internal ini dalam modifier, dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.

![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(

) 10. Optimasi Jalur Pendek

Untuk || dan && operator, evaluasi logika akan mengalami short-circuit evaluation, yaitu jika kondisi pertama sudah dapat menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.

Untuk mengoptimalkan konsumsi Gas, kondisi dengan biaya perhitungan yang rendah harus ditempatkan di depan, sehingga mungkin untuk melewati perhitungan yang mahal.

Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik

Saran Umum Tambahan

1. Hapus kode yang tidak berguna

Jika ada fungsi atau variabel yang tidak terpakai dalam kontrak, disarankan untuk menghapusnya. Ini adalah cara paling langsung untuk mengurangi biaya penyebaran kontrak dan menjaga ukuran kontrak tetap kecil.

Berikut adalah beberapa saran praktis:

Gunakan algoritma yang paling efisien untuk melakukan perhitungan. Jika hasil dari beberapa perhitungan digunakan langsung dalam kontrak, maka proses perhitungan redundan tersebut harus dihilangkan. Pada dasarnya, setiap perhitungan yang tidak digunakan harus dihapus.

Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, harus menggunakan kata kunci delete untuk menghapusnya, atau mengatur nilainya ke nilai default.

Optimisasi Loop: hindari operasi loop yang mahal, gabungkan loop sebisa mungkin, dan pindahkan perhitungan yang berulang keluar dari tubuh loop.

( 2. Menggunakan kontrak pra-kompilasi

Kontrak pra-kompilasi menyediakan fungsi pustaka yang kompleks, seperti operasi enkripsi dan hashing. Karena kode tidak dijalankan di EVM, melainkan dijalankan secara lokal di node klien, jumlah Gas yang dibutuhkan lebih sedikit. Menggunakan kontrak pra-kompilasi dapat menghemat Gas dengan mengurangi beban kerja komputasi yang diperlukan untuk mengeksekusi smart contract.

Contoh kontrak yang sudah dikompilasi termasuk algoritma tanda tangan digital kurva elips )ECDSA### dan algoritma hash SHA2-256. Dengan menggunakan kontrak yang sudah dikompilasi ini dalam smart contract, pengembang dapat mengurangi biaya Gas dan meningkatkan kinerja aplikasi.

ETH-2.46%
GAS-1.69%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 8
  • Bagikan
Komentar
0/400
SerumDegenvip
· 07-23 04:02
lmao gas menguras dompet saya sekarang... rekt af
Lihat AsliBalas0
WalletDivorcervip
· 07-21 18:08
Dengan tangan, bisa melihat optimasi kontrak
Lihat AsliBalas0
ProofOfNothingvip
· 07-20 15:12
gas tidak ada uang masih bicara apa
Lihat AsliBalas0
AlphaBrainvip
· 07-20 04:31
Sudahlah, malas untuk mengoptimalkan gas, pergi ke L2.
Lihat AsliBalas0
ImpermanentLossEnjoyervip
· 07-20 04:29
Siapa yang masih ingat tragedi transaksi 2000u?
Lihat AsliBalas0
OvertimeSquidvip
· 07-20 04:19
Jika ingin melakukan transaksi, maka harus membayar hipotek.
Lihat AsliBalas0
DeFiVeteranvip
· 07-20 04:17
lebih baik pergi diam
Lihat AsliBalas0
IronHeadMinervip
· 07-20 04:08
biaya gas memang tidak tertahankan
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)