Panduan Praktik Optimasi Gas untuk Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sulit dipecahkan, terutama saat jaringan sedang sibuk. Pada saat puncak, pengguna sering kali harus membayar biaya transaksi yang tinggi. Oleh karena itu, penting untuk melakukan optimasi biaya Gas selama tahap pengembangan smart contract. 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 mengulas mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti dari optimasi biaya Gas, serta praktik terbaik dalam optimasi biaya Gas dalam pengembangan smart contract. Diharapkan materi 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.
Pengantar Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur daya komputasi yang diperlukan untuk menjalankan operasi tertentu.
Dalam struktur layout EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, panggilan 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 "Gas fee".
Sejak EIP-1559( hard fork London ) berlaku, biaya Gas dihitung melalui 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 "tip" yang dibayarkan pengguna kepada validator.
memahami optimasi Gas di EVM
Saat mengompilasi smart contract dengan 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 atas mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan biaya ini tercatat dalam buku kuning Ethereum.
Setelah beberapa modifikasi EIP, beberapa biaya Gas dari opcode telah disesuaikan, mungkin berbeda dari yang ada di buku kuning.
Konsep Dasar Optimasi Gas
Inti dari konsep 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 calldata dan struktur
Panggilan fungsi internal
Operasi yang memiliki biaya tinggi termasuk:
Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
Panggilan fungsi eksternal
Operasi loop
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 ini, pengembang dapat mengurangi konsumsi biaya Gas dari smart contract, menurunkan biaya transaksi, dan membangun aplikasi yang lebih efisien dan ramah pengguna.
1. Usahakan untuk mengurangi penggunaan penyimpanan
Dalam Solidity, Storage( penyimpanan) adalah sumber daya yang terbatas, konsumsi Gasnya jauh lebih tinggi dibandingkan Memory( memori). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan muncul biaya Gas yang tinggi.
Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat lebih tinggi daripada 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 membutuhkan 100 unit.
Metode untuk membatasi penggunaan penyimpanan meliputi:
Menyimpan data non-permanen di memori
Mengurangi jumlah modifikasi penyimpanan: dengan menyimpan hasil sementara di dalam memori, setelah semua perhitungan selesai, kemudian hasil tersebut dialokasikan ke variabel penyimpanan.
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 penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan bijak, sehingga beberapa variabel dapat muat ke dalam satu slot penyimpanan.
Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas ) untuk menyimpan satu slot penyimpanan yang tidak terpakai yang membutuhkan 20.000 Gas (, tetapi sekarang hanya memerlukan dua slot penyimpanan.
Karena setiap slot penyimpanan akan mengkonsumsi Gas, pengemasan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
![Ethereum smart contract Gas optimization 10 best practices])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Optimalkan 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, integer dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dll. Karena EVM melakukan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengubahnya 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, maka 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, memasukkan empat variabel uint8 ke dalam memori/penyimpanan.
![Ethereum smart contract Gas optimization 10 best practices]###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 bervariasi. Jika panjang byte dapat dibatasi, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.
5. Pemetaan dan Array
Daftar data dalam Solidity dapat direpresentasikan dengan dua jenis tipe data: Arrays### dan Mappings(, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan umumnya lebih efisien dan lebih rendah biayanya dalam sebagian besar kasus, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memprioritaskan penggunaan pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
) 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 dimodifikasi 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.
( 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.
![Gas optimization 10 best practices for Ethereum smart contracts])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
8. Gunakan Unchecked saat memastikan tidak ada overflow/underflow yang terjadi
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, kompiler versi 0.8.0 dan yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena kompiler itu sendiri telah membangun 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 merekonstruksi logika menjadi fungsi internal _checkOwner)###, memungkinkan penggunaan kembali fungsi internal ini dalam modifier, dapat mengurangi ukuran bytecode dan mengurangi biaya Gas.
![Gas optimization terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Optimasi Sirkuit Pendek
Untuk || dan && operator, evaluasi logika akan terjadi pemotongan pendek, 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 rendah harus diletakkan di depan, sehingga dapat berpotensi melewati perhitungan yang mahal.
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 beberapa perhitungan digunakan secara langsung dalam kontrak, maka proses perhitungan yang berlebihan ini harus dihilangkan. 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, sebaiknya gunakan kata kunci delete untuk menghapusnya, atau atur ke nilai default.
Optimasi loop: hindari operasi loop dengan biaya tinggi, gabungkan loop sebisa mungkin, dan pindahkan perhitungan yang berulang ke luar 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, melainkan dijalankan secara lokal di node klien, maka Gas yang dibutuhkan lebih sedikit. Menggunakan kontrak pra-kompilasi dapat menghemat Gas dengan mengurangi jumlah pekerjaan 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
Assembly in-line ( in-line assembly ) memungkinkan pengembang untuk menulis kode tingkat rendah yang dapat dieksekusi langsung oleh EVM dengan efisien, tanpa harus menggunakan opcode Solidity yang mahal. Assembly in-line juga memungkinkan kontrol yang lebih tepat terhadap penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, assembly in-line dapat melakukan beberapa operasi kompleks yang sulit dicapai hanya dengan Solidity, memberikan lebih banyak fleksibilitas untuk mengoptimalkan konsumsi Gas.
Namun, penggunaan assembly in-line juga dapat membawa risiko dan mudah menimbulkan kesalahan. Oleh karena itu, harus digunakan dengan hati-hati, hanya oleh pengembang yang berpengalaman.
![Praktik Terbaik Gas Optimasi untuk Smart Contract Ethereum]###
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
14 Suka
Hadiah
14
9
Bagikan
Komentar
0/400
WalletWhisperer
· 2jam yang lalu
hmm... pola statistik menunjukkan 82% dari optimasi gas hanyalah solusi sementara untuk ketidakefisienan sistemik
Lihat AsliBalas0
WalletInspector
· 07-12 18:20
biaya gas terlalu mahal, lebih baik L2
Lihat AsliBalas0
CryptoCross-TalkClub
· 07-11 01:06
Tertawa sampai mati, biaya Gas naik, dompet suckers terbakar
Lihat AsliBalas0
liquiditea_sipper
· 07-11 01:03
gas benar-benar mahal sekali
Lihat AsliBalas0
AirdropChaser
· 07-11 01:03
Sekarang gas bisa lebih manusiawi! Menghabiskan uang seperti aliran air.
Lihat AsliBalas0
MEVSandwichVictim
· 07-11 01:02
Masih mengoptimalkan, setiap hari dihabiskan oleh Gas.
Lihat AsliBalas0
LiquidityNinja
· 07-11 01:01
Saya adalah ninja dunia enkripsi, biaya Gas yang terlalu tinggi benar-benar menyakiti hati saya. Mengambil posisi dalam perdagangan adalah jalan yang benar.
Silakan buat komentar dalam bahasa Mandarin untuk artikel ini.
Lihat AsliBalas0
DaoDeveloper
· 07-11 00:56
baru saja menerapkan kontrak pintar yang dioptimalkan gas... kalian tidak akan percaya penghematannya fr
Panduan Praktik Optimasi Biaya Gas Kontrak Cerdas Ethereum
Panduan Praktik Optimasi Gas untuk Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sulit dipecahkan, terutama saat jaringan sedang sibuk. Pada saat puncak, pengguna sering kali harus membayar biaya transaksi yang tinggi. Oleh karena itu, penting untuk melakukan optimasi biaya Gas selama tahap pengembangan smart contract. 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 mengulas mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti dari optimasi biaya Gas, serta praktik terbaik dalam optimasi biaya Gas dalam pengembangan smart contract. Diharapkan materi 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.
Pengantar Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur daya komputasi yang diperlukan untuk menjalankan operasi tertentu.
Dalam struktur layout EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, panggilan 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 "Gas fee".
Sejak EIP-1559( hard fork London ) berlaku, biaya Gas dihitung melalui 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 "tip" yang dibayarkan pengguna kepada validator.
memahami optimasi Gas di EVM
Saat mengompilasi smart contract dengan 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 atas mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan biaya ini tercatat dalam buku kuning Ethereum.
Setelah beberapa modifikasi EIP, beberapa biaya Gas dari opcode telah disesuaikan, mungkin berbeda dari yang ada di buku kuning.
Konsep Dasar Optimasi Gas
Inti dari konsep 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 memiliki biaya tinggi termasuk:
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 ini, pengembang dapat mengurangi konsumsi biaya Gas dari smart contract, menurunkan biaya transaksi, dan membangun aplikasi yang lebih efisien dan ramah pengguna.
1. Usahakan untuk mengurangi penggunaan penyimpanan
Dalam Solidity, Storage( penyimpanan) adalah sumber daya yang terbatas, konsumsi Gasnya jauh lebih tinggi dibandingkan Memory( memori). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan muncul biaya Gas yang tinggi.
Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali lipat lebih tinggi daripada 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 membutuhkan 100 unit.
Metode untuk membatasi penggunaan penyimpanan meliputi:
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 penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan bijak, sehingga beberapa variabel dapat muat ke dalam satu slot penyimpanan.
Dengan penyesuaian detail ini, pengembang dapat menghemat 20.000 unit Gas ) untuk menyimpan satu slot penyimpanan yang tidak terpakai yang membutuhkan 20.000 Gas (, tetapi sekarang hanya memerlukan dua slot penyimpanan.
Karena setiap slot penyimpanan akan mengkonsumsi Gas, pengemasan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
![Ethereum smart contract Gas optimization 10 best practices])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Optimalkan 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, integer dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dll. Karena EVM melakukan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengubahnya 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, maka 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, memasukkan empat variabel uint8 ke dalam memori/penyimpanan.
![Ethereum smart contract Gas optimization 10 best practices]###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 bervariasi. Jika panjang byte dapat dibatasi, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.
5. Pemetaan dan Array
Daftar data dalam Solidity dapat direpresentasikan dengan dua jenis tipe data: Arrays### dan Mappings(, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan umumnya lebih efisien dan lebih rendah biayanya dalam sebagian besar kasus, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memprioritaskan penggunaan pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimalisasi kontrak pintar Ethereum sepuluh 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 dimodifikasi 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.
( 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.
![Gas optimization 10 best practices for Ethereum smart contracts])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
8. Gunakan Unchecked saat memastikan tidak ada overflow/underflow yang terjadi
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, kompiler versi 0.8.0 dan yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena kompiler itu sendiri telah membangun 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 merekonstruksi logika menjadi fungsi internal _checkOwner)###, memungkinkan penggunaan kembali fungsi internal ini dalam modifier, dapat mengurangi ukuran bytecode dan mengurangi biaya Gas.
![Gas optimization terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Optimasi Sirkuit Pendek
Untuk || dan && operator, evaluasi logika akan terjadi pemotongan pendek, 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 rendah harus diletakkan di depan, sehingga dapat berpotensi melewati perhitungan yang mahal.
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 beberapa perhitungan digunakan secara langsung dalam kontrak, maka proses perhitungan yang berlebihan ini harus dihilangkan. 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, sebaiknya gunakan kata kunci delete untuk menghapusnya, atau atur ke nilai default.
Optimasi loop: hindari operasi loop dengan biaya tinggi, gabungkan loop sebisa mungkin, dan pindahkan perhitungan yang berulang ke luar 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, melainkan dijalankan secara lokal di node klien, maka Gas yang dibutuhkan lebih sedikit. Menggunakan kontrak pra-kompilasi dapat menghemat Gas dengan mengurangi jumlah pekerjaan 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
Assembly in-line ( in-line assembly ) memungkinkan pengembang untuk menulis kode tingkat rendah yang dapat dieksekusi langsung oleh EVM dengan efisien, tanpa harus menggunakan opcode Solidity yang mahal. Assembly in-line juga memungkinkan kontrol yang lebih tepat terhadap penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, assembly in-line dapat melakukan beberapa operasi kompleks yang sulit dicapai hanya dengan Solidity, memberikan lebih banyak fleksibilitas untuk mengoptimalkan konsumsi Gas.
Namun, penggunaan assembly in-line juga dapat membawa risiko dan mudah menimbulkan kesalahan. Oleh karena itu, harus digunakan dengan hati-hati, hanya oleh pengembang yang berpengalaman.
![Praktik Terbaik Gas Optimasi untuk Smart Contract Ethereum]###
Silakan buat komentar dalam bahasa Mandarin untuk artikel ini.