Strategi dan Praktik Terbaik untuk Optimasi Biaya Gas pada Smart Contract Ethereum

Strategi Optimasi Biaya Gas dalam Pengembangan Smart Contract

Masalah biaya Gas di jaringan utama Ethereum selalu menjadi fokus perhatian para pengembang dan pengguna, terutama saat jaringan mengalami kemacetan. Pada saat puncak transaksi, pengguna sering kali harus membayar biaya yang tinggi. Oleh karena itu, melakukan optimasi biaya Gas pada tahap pengembangan smart contract sangatlah 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 menguraikan mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti yang terkait, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Semoga konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, serta membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.

Sepuluh Praktik Terbaik Optimasi Gas untuk Smart Contract Ethereum

Pengantar 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 EVM, konsumsi Gas terbagi menjadi tiga bagian utama: eksekusi operasi, panggilan pesan eksternal, dan pembacaan serta penulisan memori dan penyimpanan.

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

Sejak EIP-1559( hard fork London ) 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.

Memahami optimasi Gas dalam EVM

Ketika mengompilasi smart contract dengan Solidity, kontrak akan diubah menjadi serangkaian opcode (opcodes).

Setiap potongan kode operasi ( seperti membuat kontrak, melakukan panggilan 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 untuk 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 memiliki biaya Gas yang mahal.

Dalam EVM, berikut adalah operasi dengan 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 calldata dan struktur
  • Panggilan fungsi internal

Operasi yang biayanya relatif tinggi meliputi:

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

10 Praktik Terbaik untuk Optimasi Gas pada Kontrak Pintar Ethereum

Praktik Terbaik untuk Optimasi Biaya Gas EVM

Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik untuk optimasi biaya Gas untuk 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 yang terbatas, dengan konsumsi Gas yang jauh lebih tinggi dibandingkan Memory). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan timbul 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, sementara operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi paling ideal, biayanya setidaknya memerlukan 100 unit.

Metode untuk membatasi penggunaan penyimpanan meliputi:

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

Sepuluh Praktik Terbaik untuk Optimasi Gas Kontrak Pintar Ethereum

( 2. Pengemasan Variabel

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

Kompilator 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 bijak sehingga beberapa variabel dapat disesuaikan ke dalam satu slot penyimpanan.

Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas. ### Menyimpan satu slot penyimpanan yang tidak terpakai membutuhkan 20.000 Gas (.

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

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

) 3. Optimalkan 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 membantu mengoptimalkan penggunaan Gas.

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

Dilihat secara terpisah, menggunakan uint256 lebih mahal dibandingkan 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, memasukkan empat variabel uint8 ke dalam memori/penyimpanan.

10 Praktik Terbaik Optimasi Gas untuk Smart Contract Ethereum

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

Sepuluh Praktik Terbaik untuk Optimasi Gas Kontrak Pintar Ethereum

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 umumnya lebih efisien dan lebih murah dalam kebanyakan kasus, tetapi array memiliki kemampuan untuk diiterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk memprioritaskan penggunaan pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.

![Sepuluh Praktik Terbaik untuk Mengoptimalkan Gas Kontrak Pintar Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.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, lebih baik menggunakan calldata daripada memory. Ini dapat menghindari operasi penyalinan yang tidak perlu dari calldata fungsi ke memory.

Sepuluh Praktik Terbaik Optimasi Gas untuk Kontrak Pintar Ethereum

7. Gunakan kata kunci Constant/Immutable sebisa mungkin

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 sebanyak mungkin.

10 Praktik Terbaik untuk Optimasi Gas pada Smart Contract Ethereum

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 tidak perlu, 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 telah memiliki fitur perlindungan terhadap overflow dan underflow yang terintegrasi.

Sepuluh Praktik Terbaik untuk Optimasi Gas pada Kontrak Pintar Ethereum

9. Pengoptimalan Modifikasi

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

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

Sepuluh Praktik Terbaik untuk Optimasi Gas pada Smart Contract Ethereum

10. Optimasi jalur pendek

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

Untuk mengoptimalkan konsumsi Gas, sebaiknya menempatkan kondisi yang memiliki biaya perhitungan rendah di depan, sehingga memungkinkan untuk melewati perhitungan yang mahal.

Sepuluh Praktik Terbaik untuk Optimasi Gas Kontrak Pintar Ethereum

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 paling efisien untuk perhitungan. Jika hasil dari beberapa perhitungan digunakan langsung dalam kontrak, maka proses perhitungan yang berlebihan ini harus dihapus. Secara esensial, setiap perhitungan yang tidak digunakan harus dihapus.

  • Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, itu harus dihapus dengan menggunakan kata kunci delete, atau diatur ke nilai default.

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

( 2. Menggunakan smart contract precompiled

Kontrak prakompetisi menyediakan fungsi pustaka yang kompleks, seperti operasi enkripsi dan hashing. Karena kode tidak dijalankan di EVM, melainkan dijalankan secara lokal di node klien, maka Gas yang dibutuhkan lebih sedikit. Menggunakan kontrak prakompetisi 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, pengembang dapat mengurangi biaya Gas dan meningkatkan efisiensi operasi aplikasi.

3. Menggunakan kode assembly inline

Inline assembly ( memungkinkan pengembang untuk menulis kode tingkat rendah yang dapat dieksekusi langsung oleh EVM, tanpa perlu menggunakan opcode Solidity yang mahal. Inline assembly juga memungkinkan kontrol yang lebih tepat terhadap penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, inline assembly 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 terjadi kesalahan. Oleh karena itu, harus digunakan dengan hati-hati, hanya untuk pengembang yang berpengalaman.

) 4. Menggunakan solusi Layer 2

duta

ETH2.55%
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
DancingCandlesvip
· 08-01 22:01
Biaya gas benar-benar terlalu mahal
Lihat AsliBalas0
MEVEyevip
· 07-31 20:06
Optimasi khusus sudah menjadi kebutuhan yang mendesak.
Lihat AsliBalas0
P2ENotWorkingvip
· 07-31 11:30
Biaya gas memang mahal ya
Lihat AsliBalas0
ReverseFOMOguyvip
· 07-31 01:52
Biaya gasnya terlalu berlebihan, ya?
Lihat AsliBalas0
BearMarketBardvip
· 07-31 01:51
Optimalisasi adalah topik abadi
Lihat AsliBalas0
MetaMisfitvip
· 07-31 01:49
Biaya Gas ini sangat tajam
Lihat AsliBalas0
OldLeekMastervip
· 07-31 01:35
jebakan boneka ini dalamnya sangat dalam ya
Lihat AsliBalas0
BlockchainTherapistvip
· 07-31 01:26
Laporan di garis depan menyampaikan kebenaran
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)