10 Praktik Terbaik untuk Membantu Optimasi Biaya Gas smart contract dan Menurunkan Biaya Transaksi Ethereum

Panduan Optimasi Gas Smart Contract: 10 Praktik Utama untuk Membantu Drop Biaya Transaksi

Masalah biaya Gas di jaringan utama Ethereum selalu menjadi perhatian, terutama saat jaringan macet. Pada saat puncak, pengguna sering kali harus membayar biaya transaksi yang mahal. Oleh karena itu, mengoptimalkan biaya Gas selama tahap pengembangan smart contract sangat penting. Mengoptimalkan konsumsi Gas tidak hanya dapat secara efektif menurunkan Biaya Transaksi, tetapi juga dapat 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 dalam mengoptimalkan biaya Gas saat mengembangkan smart contract. Harapannya, konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, serta membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.

Sepuluh Praktik Terbaik Gas Optimisasi untuk Smart Contract Ethereum

Ringkasan Mekanisme Biaya Gas EVM

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

Dalam struktur EVM, konsumsi Gas dibagi menjadi tiga bagian utama: eksekusi operasi, panggilan pesan eksternal, serta baca dan tulis memori dan penyimpanan.

Setiap eksekusi transaksi memerlukan sumber daya komputasi, oleh karena itu akan dikenakan biaya tertentu untuk mencegah loop tak terbatas dan serangan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan sebuah 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, sementara biaya prioritas digunakan sebagai insentif untuk mendorong validator 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.

Sepuluh Praktik Terbaik untuk Optimasi Gas pada Smart Contract Ethereum

Memahami optimasi Gas dalam EVM

Saat mengompilasi smart contract dengan Solidity, kontrak akan diubah menjadi serangkaian "opcode", yaitu opcodes.

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

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

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, biaya transaksi berikut 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 dengan biaya yang lebih tinggi termasuk:

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

Sepuluh Praktik Terbaik untuk Optimasi Gas pada smart contract Ethereum

Praktik Terbaik untuk Optimasi Biaya Gas EVM

Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik untuk mengoptimalkan biaya Gas bagi komunitas pengembang. Dengan mengikuti praktik-praktik ini, pengembang dapat menurunkan 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( penyimpanan) adalah sumber daya terbatas, dengan konsumsi Gas yang jauh lebih tinggi dibandingkan Memory( memori). 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 biaya operasi memori. Misalnya, instruksi OPcodesmload dan mstore hanya menghabiskan 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi paling ideal, biayanya setidaknya membutuhkan 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, lalu mendistribusikan hasilnya ke variabel penyimpanan.

10 Praktik Terbaik untuk Optimasi Gas pada Smart Contract Ethereum

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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan cara yang rasional, 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 membutuhkan 20.000 Gas (, tetapi sekarang hanya membutuhkan dua slot penyimpanan.

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

![10 Praktik Terbaik untuk Optimasi Gas Kontrak Cerdas Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(

) 3. Mengoptimalkan Tipe Data

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

Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dan lain-lain. Karena EVM melakukan operasi dalam satuan 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan menghabiskan Gas tambahan.

Jika dilihat secara terpisah, menggunakan uint256 lebih mahal daripada uint8. Namun, jika menggunakan pengemasan variabel untuk optimasi, itu akan berbeda. Jika pengembang dapat mengemas empat variabel uint8 ke dalam satu slot penyimpanan, maka total biaya untuk mengiterasi mereka akan lebih rendah dibandingkan dengan empat variabel uint256. Dengan cara ini, smart contract dapat membaca dan menulis satu slot penyimpanan sekaligus, dan dalam satu operasi, menempatkan empat variabel uint8 ke dalam memori/penyimpanan.

![10 Praktik Terbaik untuk Optimalisasi Gas pada smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(

) 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, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.

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

) 5. Pemetaan dan Array

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

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

![Sepuluh Praktik Terbaik untuk Optimasi Gas pada Smart Contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(

) 6. Menggunakan calldata sebagai pengganti memory

Variabel yang dinyatakan dalam parameter fungsi dapat disimpan di calldata atau memory. Perbedaan utama antara keduanya adalah, memory dapat diubah oleh fungsi, sedangkan 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 calldata fungsi ke memory.

![10 Praktik Terbaik Optimasi Gas untuk Kontrak Pintar Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(

) 7. Gunakan kata kunci Constant/Immutable sebisa mungkin

Variabel Constant/Immutable tidak akan disimpan dalam penyimpanan kontrak. Variabel ini 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 sebanyak mungkin.

![10 Praktik Terbaik untuk Optimasi Gas Smart Contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(

) 8. Menggunakan 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 compiler tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri sudah memiliki fungsi perlindungan terhadap overflow dan underflow yang terintegrasi.

![10 Praktik Terbaik untuk Optimasi Gas Kontrak Pintar Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(

) 9. Optimasi Pengubah

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

Dengan merestrukturisasi logika menjadi fungsi internal _checkOwner###(, memungkinkan penggunaan kembali fungsi internal tersebut dalam modifier, yang dapat mengurangi ukuran bytecode dan Biaya Transaksi.

![Gas Optimization 10 Best Practices for Ethereum smart contract])https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(

) 10. Optimasi Jalur Pendek

Untuk || dan && operator, evaluasi logika akan terjadi pemotongan pendek, yaitu jika kondisi pertama sudah dapat menentukan hasil ekspresi logika, maka kondisi kedua tidak akan dievaluasi.

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

![10 Praktik Terbaik Optimasi Gas untuk Kontrak Pintar Ethereum]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp(

Saran Umum Tambahan

) 1. Hapus kode yang tidak berguna

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

Berikut adalah beberapa saran praktis:

  • Menggunakan algoritma paling efisien untuk perhitungan. Jika hasil dari perhitungan tertentu digunakan langsung dalam kontrak, maka proses perhitungan yang berlebihan ini 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 mengaturnya ke nilai default.

  • Optimasi 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 yang telah dikompilasi sebelumnya menyediakan fungsi perpustakaan yang kompleks, seperti operasi enkripsi dan hashing. Karena kode tidak dijalankan di EVM, tetapi dijalankan di node klien secara lokal, maka Gas yang dibutuhkan lebih sedikit. Menggunakan kontrak yang telah dikompilasi sebelumnya dapat menghemat Gas dengan mengurangi beban kerja komputasi yang diperlukan untuk menjalankan 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, pengembang dapat Drop biaya transaksi dan meningkatkan efisiensi operasional aplikasi.

) 3. Menggunakan kode assembly inline

Inline assembly ### memungkinkan pengembang untuk menulis kode rendah yang efisien namun dapat dieksekusi langsung oleh EVM, tanpa perlu menggunakan opcode Solidity yang mahal. Inline assembly juga memungkinkan kontrol yang lebih tepat atas penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, inline assembly dapat melakukan beberapa hal yang sulit dicapai hanya dengan menggunakan Solidity.

GAS-1.84%
ETH-0.05%
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
SilentObservervip
· 23jam yang lalu
gas begitu mahal, menangis karena miskin 555
Lihat AsliBalas0
ConfusedWhalevip
· 23jam yang lalu
Siang hari sudah seperti ini, bagaimana malam harinya bermain?
Lihat AsliBalas0
NightAirdroppervip
· 23jam yang lalu
eth hanya naik gas karena play people for suckers.
Lihat AsliBalas0
SybilSlayervip
· 23jam yang lalu
gas membakar uang, siapa yang bisa bertahan?
Lihat AsliBalas0
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)