Praktik Terbaik Optimasi Gas untuk Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang rumit, terutama saat jaringan mengalami kemacetan. Pada puncak penggunaan, pengguna 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 blockchain yang lebih ekonomis dan efisien bagi pengguna.
Artikel ini akan menguraikan mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti optimasi biaya Gas, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Semoga konten ini dapat memberikan inspirasi dan bantuan praktis bagi pengembang, serta membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengantar Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah satuan yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk menjalankan operasi tertentu.
Dalam tata letak struktur EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, panggilan pesan eksternal, serta baca dan tulis 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( hard fork London ) berlaku, biaya Gas dihitung menggunakan rumus berikut:
Biaya gas = unit gas yang digunakan * (biaya dasar + biaya prioritas)
Biaya dasar akan dihancurkan, sementara 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 dalam blok berikutnya. Ini mirip dengan "uang tip" yang dibayarkan pengguna kepada validator.
Memahami optimasi Gas dalam EVM
Ketika kontrak pintar dikompilasi menggunakan Solidity, kontrak tersebut akan diubah menjadi serangkaian "kode operasi", yaitu opcodes.
Setiap segmen 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 dicatat dalam buku kuning Ethereum.
Setelah beberapa kali modifikasi EIP, beberapa biaya Gas untuk opcode telah disesuaikan, mungkin berbeda dari yang ada di buku kuning.
Konsep dasar optimisasi Gas
Inti dari optimasi Gas adalah memilih operasi yang efisien biaya di blockchain EVM, menghindari operasi yang mahal dalam biaya Gas.
Di 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 biaya lebih tinggi termasuk:
Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
Panggilan fungsi eksternal
Operasi loop
Praktik Terbaik 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 mengurangi konsumsi biaya Gas dari smart contract, mengurangi 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 dikenakan biaya Gas yang tinggi.
Menurut definisi dari buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat dibandingkan dengan operasi memori. Misalnya, instruksi OPcodes mload dan mstore hanya mengkonsumsi 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi yang 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 perhitungan di dalam memori, setelah semua perhitungan selesai, baru hasil tersebut dialokasikan ke variabel penyimpanan.
2.Pengemasan Variabel
Jumlah storage slot( yang digunakan dalam smart contract dan cara developer 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 tepat, sehingga beberapa variabel dapat muat dalam satu slot penyimpanan.
Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas ) untuk menyimpan slot penyimpanan yang tidak terpakai yang membutuhkan 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.
Sebuah variabel dapat diwakili oleh berbagai tipe data, tetapi biaya operasi yang terkait 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, dan lain-lain. Karena EVM menjalankan operasi dalam unit 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 murah daripada uint8. Namun, jika menggunakan optimasi pengemasan variabel yang telah kami sarankan sebelumnya, maka situasinya 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 sekali, dan dalam satu operasi dapat memasukkan empat variabel uint8 ke dalam memori/penyimpanan.
) 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 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.
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.
Peta biasanya lebih efisien dan lebih murah, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memilih penggunaan peta saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimasi 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 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 baca saja, lebih baik menggunakan calldata daripada memory. Ini dapat menghindari operasi penyalinan yang tidak perlu dari calldata fungsi 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 akses mereka jauh lebih rendah dibandingkan dengan penyimpanan, disarankan untuk menggunakan kata kunci Constant atau Immutable sebisa mungkin.
![Gas optimasi terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Menggunakan Unchecked untuk 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, compiler versi 0.8.0 dan di atasnya tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri telah menyertakan fitur perlindungan overflow dan underflow.
9. Pengoptimalan Modifikasi
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 ulang fungsi internal tersebut dalam modifier, dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
![Gas optimization untuk sepuluh praktik terbaik smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. optimasi jalur pendek
Untuk || dan && operator, evaluasi logika akan melakukan short-circuit evaluation, yaitu jika kondisi pertama sudah dapat menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, syarat dengan biaya perhitungan yang rendah harus ditempatkan di depan, sehingga ada kemungkinan untuk melewati perhitungan yang mahal.
Jika ada 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 perhitungan. Jika hasil dari perhitungan tertentu digunakan langsung dalam kontrak, maka proses perhitungan redundan ini harus dihilangkan. Pada dasarnya, setiap perhitungan yang tidak digunakan harus dihapus.
Dalam Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, sebaiknya gunakan kata kunci delete untuk menghapusnya, atau atur ke nilai default.
Optimisasi loop: hindari operasi loop dengan biaya tinggi, gabungkan loop sebanyak mungkin, dan pindahkan perhitungan yang berulang keluar dari tubuh loop.
![Gas Optimization 10 Best Practices for Ethereum Smart Contracts]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 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 kontrak pintar, 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 efisien yang 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 operasi kompleks yang sulit dicapai hanya dengan menggunakan Solidity, memberikan lebih banyak fleksibilitas untuk mengoptimalkan konsumsi Gas.
Namun, penggunaan assembly in-line juga dapat membawa risiko dan mudah terjadi kesalahan. Oleh karena itu, harus digunakan dengan hati-hati, hanya untuk pengembang yang berpengalaman.
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.
14 Suka
Hadiah
14
7
Posting ulang
Bagikan
Komentar
0/400
SandwichTrader
· 20jam yang lalu
gas lagi naik ke langit, tolong!
Lihat AsliBalas0
MEVictim
· 08-10 14:16
Sekali lagi membahas teori yang tidak berguna, lebih baik langsung ajari saya bagaimana melakukan jebakan arbitrase.
Lihat AsliBalas0
UnluckyValidator
· 08-10 11:27
Biaya gas ini benar-benar merepotkan, setelah blok dibuat, saya tidak mendapatkan apa-apa.
Lihat AsliBalas0
GasFeeCryer
· 08-10 11:15
gas biaya bagaimana bisa naik lagi ya, wuwu
Lihat AsliBalas0
AlwaysAnon
· 08-10 11:14
Tolong, kapan gas ini bisa turun?
Lihat AsliBalas0
0xSoulless
· 08-10 11:13
Bawang telah dibabat oleh gas hingga botak, masih mengurus hal yang tidak nyata ini.
Penjelasan Optimasi Gas Kontrak Pintar Ethereum: 10 Tips Berguna
Praktik Terbaik Optimasi Gas untuk Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang rumit, terutama saat jaringan mengalami kemacetan. Pada puncak penggunaan, pengguna 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 blockchain yang lebih ekonomis dan efisien bagi pengguna.
Artikel ini akan menguraikan mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti optimasi biaya Gas, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Semoga konten ini dapat memberikan inspirasi dan bantuan praktis bagi pengembang, serta membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengantar Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah satuan yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk menjalankan operasi tertentu.
Dalam tata letak struktur EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, panggilan pesan eksternal, serta baca dan tulis 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( hard fork London ) berlaku, biaya Gas dihitung menggunakan rumus berikut:
Biaya gas = unit gas yang digunakan * (biaya dasar + biaya prioritas)
Biaya dasar akan dihancurkan, sementara 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 dalam blok berikutnya. Ini mirip dengan "uang tip" yang dibayarkan pengguna kepada validator.
Memahami optimasi Gas dalam EVM
Ketika kontrak pintar dikompilasi menggunakan Solidity, kontrak tersebut akan diubah menjadi serangkaian "kode operasi", yaitu opcodes.
Setiap segmen 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 dicatat dalam buku kuning Ethereum.
Setelah beberapa kali modifikasi EIP, beberapa biaya Gas untuk opcode telah disesuaikan, mungkin berbeda dari yang ada di buku kuning.
Konsep dasar optimisasi Gas
Inti dari optimasi Gas adalah memilih operasi yang efisien biaya di blockchain EVM, menghindari operasi yang mahal dalam biaya Gas.
Di EVM, operasi berikut memiliki biaya yang lebih rendah:
Operasi yang biaya lebih tinggi termasuk:
Praktik Terbaik 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 mengurangi konsumsi biaya Gas dari smart contract, mengurangi 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 dikenakan biaya Gas yang tinggi.
Menurut definisi dari buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat dibandingkan dengan operasi memori. Misalnya, instruksi OPcodes mload dan mstore hanya mengkonsumsi 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi yang paling ideal, biayanya setidaknya membutuhkan 100 unit.
Metode untuk membatasi penggunaan penyimpanan meliputi:
2.Pengemasan Variabel
Jumlah storage slot( yang digunakan dalam smart contract dan cara developer 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 tepat, sehingga beberapa variabel dapat muat dalam satu slot penyimpanan.
Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas ) untuk menyimpan slot penyimpanan yang tidak terpakai yang membutuhkan 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 optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3.Optimalkan Tipe Data
Sebuah variabel dapat diwakili oleh berbagai tipe data, tetapi biaya operasi yang terkait 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, dan lain-lain. Karena EVM menjalankan operasi dalam unit 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 murah daripada uint8. Namun, jika menggunakan optimasi pengemasan variabel yang telah kami sarankan sebelumnya, maka situasinya 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 sekali, dan dalam satu operasi dapat memasukkan empat variabel uint8 ke dalam memori/penyimpanan.
![Gas optimasi kontrak pintar Ethereum sepuluh praktik terbaik]###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 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.
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.
Peta biasanya lebih efisien dan lebih murah, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memilih penggunaan peta saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimasi 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 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 baca saja, lebih baik menggunakan calldata daripada memory. Ini dapat menghindari operasi penyalinan yang tidak perlu dari calldata fungsi 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 akses mereka jauh lebih rendah dibandingkan dengan penyimpanan, disarankan untuk menggunakan kata kunci Constant atau Immutable sebisa mungkin.
![Gas optimasi terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Menggunakan Unchecked untuk 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, compiler versi 0.8.0 dan di atasnya tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri telah menyertakan fitur perlindungan overflow dan underflow.
9. Pengoptimalan Modifikasi
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 ulang fungsi internal tersebut dalam modifier, dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
![Gas optimization untuk sepuluh praktik terbaik smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. optimasi jalur pendek
Untuk || dan && operator, evaluasi logika akan melakukan short-circuit evaluation, yaitu jika kondisi pertama sudah dapat menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, syarat dengan biaya perhitungan yang rendah harus ditempatkan di depan, sehingga ada kemungkinan 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 ada 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 perhitungan. Jika hasil dari perhitungan tertentu digunakan langsung dalam kontrak, maka proses perhitungan redundan ini harus dihilangkan. Pada dasarnya, setiap perhitungan yang tidak digunakan harus dihapus.
Dalam Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, sebaiknya gunakan kata kunci delete untuk menghapusnya, atau atur ke nilai default.
Optimisasi loop: hindari operasi loop dengan biaya tinggi, gabungkan loop sebanyak mungkin, dan pindahkan perhitungan yang berulang keluar dari tubuh loop.
![Gas Optimization 10 Best Practices for Ethereum Smart Contracts]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 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 kontrak pintar, 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 efisien yang 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 operasi kompleks yang sulit dicapai hanya dengan menggunakan Solidity, memberikan lebih banyak fleksibilitas untuk mengoptimalkan konsumsi Gas.
Namun, penggunaan assembly in-line juga dapat membawa risiko dan mudah terjadi kesalahan. Oleh karena itu, harus digunakan dengan hati-hati, hanya untuk pengembang yang berpengalaman.
( 4.