Panduan Praktik Optimasi Gas untuk Smart Contract Ethereum

Panduan Praktik Optimasi Gas Kontrak Pintar Ethereum

Biaya Gas di jaringan Ethereum selalu menjadi tantangan yang dihadapi oleh pengembang dan pengguna, terutama saat jaringan padat. Pada saat puncak, pengguna seringkali harus membayar biaya transaksi yang sangat tinggi. Oleh karena itu, optimasi biaya Gas selama tahap pengembangan smart contract sangat penting. Mengoptimalkan konsumsi Gas tidak hanya dapat secara efektif mengurangi biaya transaksi, tetapi juga dapat meningkatkan efisiensi transaksi, memberikan pengalaman penggunaan blockchain yang lebih ekonomis dan efisien bagi pengguna.

Artikel ini akan memberikan gambaran umum tentang mekanisme biaya gas dari (EVM) EVM, konsep inti yang terkait dengan pengoptimalan biaya gas, dan praktik terbaik untuk pengoptimalan biaya gas saat mengembangkan kontrak pintar. Diharapkan konten ini dapat memberikan inspirasi dan bantuan praktis bagi pengembang, dan pada saat yang sama, membiarkan pengguna biasa lebih memahami cara kerja biaya gas EVM, dan bersama-sama memecahkan tantangan dalam ekosistem blockchain.

Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik

Pengenalan Mekanisme Biaya Gas EVM

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

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

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

Sejak EIP-1559( London hard fork ) berlaku, biaya Gas dihitung menggunakan rumus berikut:

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

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

Gas optimization best practices untuk smart contract Ethereum

1. Memahami optimasi Gas dalam EVM

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

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

Setelah beberapa kali modifikasi EIP, beberapa biaya Gas untuk opcode telah disesuaikan, mungkin berbeda dengan yang ada di buku kuning.

2.Konsep dasar optimasi Gas

Inti dari optimasi Gas adalah memilih operasi yang efisien dalam 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 memiliki biaya lebih tinggi meliputi:

  • Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
  • Panggilan fungsi eksternal
  • Operasi loop

Gas optimalisasi Ethereum smart contract sepuluh praktik terbaik

Praktik Terbaik Optimasi Biaya Gas EVM

Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik untuk optimasi biaya Gas bagi komunitas pengembang. Dengan mengikuti praktik-praktik ini, para pengembang dapat mengurangi konsumsi biaya Gas pada smart contract, menurunkan biaya transaksi, dan membangun aplikasi yang lebih efisien serta 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 menghasilkan biaya Gas yang tinggi.

Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat dibandingkan dengan operasi memori. Misalnya, instruksi OPcodesmload dan mstore hanya mengkonsumsi 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 dalam memori, setelah semua perhitungan selesai, hasil tersebut akan dialokasikan ke variabel penyimpanan.

Gas optimization dalam smart contract Ethereum: 10 praktik terbaik

( 2.Pengemasan Variabel

Jumlah storage slot) 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan bijak sehingga beberapa variabel dapat disesuaikan ke dalam satu slot penyimpanan.

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

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

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

) 3. Optimalisasi Tipe Data

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

Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dll. Karena EVM menjalankan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan mengkonsumsi Gas tambahan.

Jika dilihat secara terpisah, menggunakan uint256 lebih mahal daripada uint8. Namun, jika menggunakan pengemasan variabel untuk optimasi, itu 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 dapat menempatkan empat variabel uint8 ke dalam memori/penyimpanan.

Gas optimization sepuluh praktik terbaik untuk smart contract Ethereum

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 mengonsumsi Gas lebih sedikit dibandingkan dengan variabel dengan ukuran yang bervariasi. Jika panjang byte dapat dibatasi, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.

( 5.Pemetaan dan Array

Daftar data dalam Solidity dapat diwakili oleh dua jenis data: Arrays) dan Mappings###, tetapi sintaksis dan strukturnya sangat berbeda.

Pemetaan umumnya lebih efisien dan lebih murah, tetapi array memiliki kemampuan untuk diiterasi 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 smart contract Ethereum: 10 praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6. Menggunakan calldata sebagai pengganti memory

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

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

( 7. Usahakan untuk menggunakan kata kunci Constant/Immutable

Variabel Constant/Immutable tidak akan disimpan dalam penyimpanan kontrak. Variabel ini akan dihitung 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 dari sepuluh praktik terbaik smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(

) 8. Gunakan Unchecked saat 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 telah menyertakan fungsi perlindungan terhadap overflow dan underflow.

9. Pengoptimalan Modifikasi

Kode modifier disematkan ke dalam fungsi yang dimodifikasi, dan setiap kali modifier digunakan, kodenya akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas. Metode optimasi adalah dengan merekonstruksi logika menjadi fungsi internal, yang memungkinkan penggunaan kembali fungsi internal dalam modifier, sehingga dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.

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

) 10. optimasi sirkuit pendek

Untuk || dan && operator, evaluasi logika akan terjadi 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 komputasi rendah harus diletakkan di depan, sehingga memungkinkan untuk melewati perhitungan yang mahal.

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

Saran Umum Tambahan

( 1.Hapus kode yang tidak berguna

Jika terdapat fungsi atau variabel yang tidak digunakan 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 yang redundan ini harus dihapus. 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 perpustakaan yang kompleks, seperti operasi enkripsi dan hashing. Karena kode tidak dijalankan di EVM, tetapi dijalankan secara lokal di node klien, maka 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 pra-kompilasi termasuk algoritma tanda tangan digital kurva elips ###ECDSA( dan algoritma hash SHA2-256. Dengan menggunakan kontrak pra-kompilasi ini dalam smart contract, para pengembang dapat mengurangi biaya Gas dan meningkatkan efisiensi operasional aplikasi.

![Gas Optimization 10 Best Practices untuk Smart Contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###

3.Menggunakan kode assembly inline

Assembly in-line ( in-line assembly ) memungkinkan pengembang untuk menulis kode tingkat rendah yang efisien namun dapat dieksekusi langsung oleh EVM, tanpa perlu menggunakan opcode Solidity yang mahal. Assembly in-line juga memungkinkan kontrol yang lebih tepat atas penggunaan memori dan penyimpanan, yang lebih lanjut mengurangi biaya Gas. Selain itu, assembly in-line dapat melakukan beberapa operasi kompleks yang sulit dicapai hanya dengan menggunakan Solidity, memberikan lebih banyak fleksibilitas untuk mengoptimalkan konsumsi Gas.

Namun, penggunaan assembly inline juga dapat membawa risiko dan mudah menyebabkan kesalahan. Oleh karena itu, harus digunakan dengan hati-hati dan hanya oleh pengembang yang berpengalaman.

( 4. Menggunakan solusi Layer 2

Menggunakan solusi Layer 2 dapat mengurangi jumlah data yang perlu disimpan dan dihitung di jaringan utama Ethereum.

seperti rollups, sidechain

ETH-0.29%
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
  • 4
  • Bagikan
Komentar
0/400
BlockchainBouncervip
· 16jam yang lalu
Menurunkan biaya gas sangatlah penting.
Lihat AsliBalas0
WalletAnxietyPatientvip
· 16jam yang lalu
Pengembang hemat gas benar-benar hebat
Lihat AsliBalas0
AirdropLickervip
· 16jam yang lalu
Hemat gas dan dapatkan banyak uang
Lihat AsliBalas0
ContractExplorervip
· 16jam yang lalu
gas optimasi sangat penting
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)