EVM Biaya Gas Optimasi - Panduan Pengembangan Kontrak Pintar Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sangat diperhatikan, 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 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 efektif 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. Diharapkan konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, sekaligus membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengantar Mekanisme Biaya Gas EVM
Dalam jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk melakukan operasi tertentu.
Dalam struktur 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 siklus tak terbatas dan serangan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan suatu transaksi disebut "Gas fee".
Sejak EIP-1559 berlaku, biaya Gas dihitung melalui 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 dimasukkan dalam blok berikutnya. Ini mirip dengan "tip" yang dibayarkan pengguna kepada validator.
Memahami optimasi Gas dalam 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 mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan 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.
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, 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 dengan biaya tinggi meliputi:
Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
Panggilan fungsi eksternal
Operasi siklus
Praktik Terbaik untuk Optimasi Biaya Gas EVM
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 ada 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 menghabiskan 3 unit Gas, sedangkan 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 di memori, dan setelah semua perhitungan selesai, baru 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan bijak, sehingga beberapa variabel dapat disesuaikan ke dalam satu slot penyimpanan.
Dengan pengepakan variabel, pengembang dapat menghemat banyak unit Gas. Karena setiap slot penyimpanan akan mengkonsumsi Gas, pengepakan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
Memilih tipe data yang tepat membantu mengoptimalkan penggunaan Gas. Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi ukuran yang berbeda: uint8, uint16, uint32, dan sebagainya. Karena EVM melakukan operasi dalam unit 256-bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan mengonsumsi Gas tambahan.
Namun, jika menggunakan pengemasan variabel untuk optimasi, 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, dan dalam satu operasi, menempatkan keempat variabel uint8 ke dalam memori/penyimpanan.
![Gas optimalisasi sepuluh praktik terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 daripada 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 oleh dua jenis tipe data: Array ###Arrays ( dan Mapping )Mappings (, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan umumnya lebih efisien dan lebih murah dalam sebagian besar kasus, tetapi array memiliki iterabilitas dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih mengutamakan penggunaan pemetaan saat mengelola daftar data, kecuali jika perlu iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimization terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Gunakan 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 di dalam penyimpanan kontrak. Variabel ini akan 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.
![Gas optimization 10 best practices for Ethereum smart contracts]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 8. Gunakan Unchecked saat memastikan tidak terjadi overflow/underflow
Saat pengembang dapat memastikan bahwa operasi aritmetika 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 yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri sudah memiliki fitur perlindungan terhadap overflow dan underflow.
Kode modifier disisipkan ke dalam fungsi yang telah dimodifikasi, dan setiap kali modifier digunakan, kodenya akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas. Ukuran bytecode dapat dikurangi dan biaya Gas dapat diturunkan dengan merekonstruksi logika menjadi fungsi internal, dan menggunakan kembali fungsi internal tersebut di dalam modifier.
Untuk || dan && operator, evaluasi logika akan mengalami short-circuit evaluation, yaitu jika kondisi pertama sudah bisa menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, kondisi dengan biaya perhitungan yang rendah harus diletakkan di depan, sehingga mungkin dapat melewati perhitungan yang mahal.
![Gas optimization 10 best practices untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.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 yang redundan ini harus dihilangkan. Secara prinsip, 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 yang mahal, gabungkan loop sebanyak 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 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 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 efisien 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 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 Ethereum.
Solusi Layer 2 seperti rollups, sidechain, dan state channel dapat memindahkan pemrosesan transaksi dari rantai utama Ethereum, sehingga memungkinkan transaksi yang lebih cepat dan lebih murah.
Dengan menggabungkan sejumlah besar transaksi, solusi ini mengurangi jumlah transaksi di blockchain, sehingga mengurangi biaya Gas. Menggunakan solusi Layer 2 juga dapat meningkatkan skalabilitas Ethereum, memungkinkan lebih banyak pengguna dan aplikasi untuk berpartisipasi dalam jaringan, tanpa menyebabkan
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
4
Bagikan
Komentar
0/400
GateUser-beba108d
· 20jam yang lalu
Biaya gas menekan saya, kan?
Lihat AsliBalas0
BTCBeliefStation
· 21jam yang lalu
Gas juga harus berkompetisi, kan? Menurunkan sedikit juga tidak masalah.
Panduan Optimasi Biaya Gas untuk Kontrak Pintar EVM - 13 Tips Berguna
EVM Biaya Gas Optimasi - Panduan Pengembangan Kontrak Pintar Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sangat diperhatikan, 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 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 efektif 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. Diharapkan konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, sekaligus membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengantar Mekanisme Biaya Gas EVM
Dalam jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk melakukan operasi tertentu.
Dalam struktur 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 siklus tak terbatas dan serangan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan suatu transaksi disebut "Gas fee".
Sejak EIP-1559 berlaku, biaya Gas dihitung melalui 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 dimasukkan dalam blok berikutnya. Ini mirip dengan "tip" yang dibayarkan pengguna kepada validator.
Memahami optimasi Gas dalam 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 mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan 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.
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, operasi berikut memiliki biaya yang lebih rendah:
Operasi dengan biaya tinggi meliputi:
Praktik Terbaik untuk Optimasi Biaya Gas EVM
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 ada 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 menghabiskan 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore, bahkan dalam kondisi paling ideal, biayanya setidaknya memerlukan 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel dengan bijak, sehingga beberapa variabel dapat disesuaikan ke dalam satu slot penyimpanan.
Dengan pengepakan variabel, pengembang dapat menghemat banyak unit Gas. Karena setiap slot penyimpanan akan mengkonsumsi Gas, pengepakan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Optimalkan tipe data
Memilih tipe data yang tepat membantu mengoptimalkan penggunaan Gas. Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi ukuran yang berbeda: uint8, uint16, uint32, dan sebagainya. Karena EVM melakukan operasi dalam unit 256-bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan mengonsumsi Gas tambahan.
Namun, jika menggunakan pengemasan variabel untuk optimasi, 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, dan dalam satu operasi, menempatkan keempat variabel uint8 ke dalam memori/penyimpanan.
![Gas optimalisasi sepuluh praktik terbaik untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 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 daripada 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 oleh dua jenis tipe data: Array ###Arrays ( dan Mapping )Mappings (, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan umumnya lebih efisien dan lebih murah dalam sebagian besar kasus, tetapi array memiliki iterabilitas dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih mengutamakan penggunaan pemetaan saat mengelola daftar data, kecuali jika perlu iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimization terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Gunakan 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.
![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 7. Gunakan kata kunci Constant/Immutable sebisa mungkin
Variabel Constant/Immutable tidak akan disimpan di dalam penyimpanan kontrak. Variabel ini akan 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.
![Gas optimization 10 best practices for Ethereum smart contracts]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 8. Gunakan Unchecked saat memastikan tidak terjadi overflow/underflow
Saat pengembang dapat memastikan bahwa operasi aritmetika 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 yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri sudah memiliki fitur perlindungan terhadap overflow dan underflow.
![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 9. Optimasi Modifikasi
Kode modifier disisipkan ke dalam fungsi yang telah dimodifikasi, dan setiap kali modifier digunakan, kodenya akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas. Ukuran bytecode dapat dikurangi dan biaya Gas dapat diturunkan dengan merekonstruksi logika menjadi fungsi internal, dan menggunakan kembali fungsi internal tersebut di dalam modifier.
![Gas optimasi kontrak pintar Ethereum sepuluh praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 10. optimasi jalur pendek
Untuk || dan && operator, evaluasi logika akan mengalami short-circuit evaluation, yaitu jika kondisi pertama sudah bisa menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, kondisi dengan biaya perhitungan yang rendah harus diletakkan di depan, sehingga mungkin dapat melewati perhitungan yang mahal.
![Gas optimization 10 best practices untuk smart contract Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.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 yang redundan ini harus dihilangkan. Secara prinsip, 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 yang mahal, gabungkan loop sebanyak 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 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 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 efisien 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 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 Ethereum.
Solusi Layer 2 seperti rollups, sidechain, dan state channel dapat memindahkan pemrosesan transaksi dari rantai utama Ethereum, sehingga memungkinkan transaksi yang lebih cepat dan lebih murah.
Dengan menggabungkan sejumlah besar transaksi, solusi ini mengurangi jumlah transaksi di blockchain, sehingga mengurangi biaya Gas. Menggunakan solusi Layer 2 juga dapat meningkatkan skalabilitas Ethereum, memungkinkan lebih banyak pengguna dan aplikasi untuk berpartisipasi dalam jaringan, tanpa menyebabkan