Praktik Terbaik untuk Mengoptimalkan Biaya Gas Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sulit, terutama saat jaringan mengalami kemacetan. Pada puncak waktu, pengguna harus 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 membahas mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti dari optimasi biaya Gas, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Harapannya, konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, sekaligus membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, serta bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengenalan Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk mengeksekusi operasi tertentu.
Dalam struktur EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, pemanggilan 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 satu transaksi dikenal sebagai "Gas fee".
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 mengirimkan transaksi dapat meningkatkan kemungkinan transaksi tersebut dimasukkan ke dalam blok berikutnya. Ini mirip dengan "tip" yang dibayarkan pengguna kepada validator.
1. Memahami optimasi Gas dalam EVM
Saat mengompilasi smart contract dengan Solidity, kontrak akan diubah menjadi serangkaian "opcode", yaitu opcodes.
Setiap segmen opcode ( seperti membuat kontrak, melakukan panggilan pesan, mengakses penyimpanan akun, dan mengeksekusi operasi di mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan 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.
2.Konsep dasar optimasi 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 calldata dan struktur
Panggilan fungsi internal
Operasi yang memiliki biaya lebih tinggi meliputi:
Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
Panggilan fungsi eksternal
Operasi siklus
Praktik Terbaik untuk Mengoptimalkan 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 menciptakan aplikasi yang lebih efisien dan ramah pengguna.
1. Usahakan untuk mengurangi penggunaan penyimpanan
Dalam Solidity, Storage( penyimpanan) adalah sumber daya yang terbatas, di mana konsumsi Gasnya jauh lebih tinggi dibandingkan dengan Memory( memori). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan ada 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 situasi 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 sementara di dalam memori, setelah semua perhitungan selesai, baru kemudian hasilnya 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 secara wajar 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 belum digunakan yang memerlukan 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.
Sebuah variabel dapat direpresentasikan dengan berbagai tipe data, tetapi biaya operasional yang terkait dengan tipe data yang berbeda juga berbeda. Memilih tipe data yang tepat membantu mengoptimalkan penggunaan Gas.
Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dll. Karena EVM menjalankan operasi dalam satuan 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan memakan Gas tambahan.
Jika dilihat secara terpisah, menggunakan uint256 di sini lebih murah daripada uint8. Namun, jika menggunakan optimasi pengemasan variabel yang kami sarankan sebelumnya, itu 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, menempatkan 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 mengonsumsi lebih sedikit Gas dibandingkan dengan variabel dengan ukuran variabel. Jika panjang byte dapat dibatasi, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.
![Gas optimization dari 10 praktik terbaik untuk kontrak pintar Ethereum]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 5. Pemetaan dan Array
Daftar data Solidity dapat direpresentasikan dengan dua tipe data: Arrays### dan Mappings(, tetapi sintaks dan strukturnya sangat berbeda.
Pemetaan biasanya lebih efisien dan lebih murah, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih mengutamakan penggunaan pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimization praktik terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 6. Menggunakan calldata sebagai pengganti memory
Variabel yang dinyatakan dalam parameter fungsi dapat disimpan di calldata atau memory. Perbedaan utama antara keduanya adalah, memory dapat diubah oleh fungsi, sementara 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 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 sebisa mungkin.
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 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 telah menyertakan fungsi perlindungan terhadap overflow dan underflow.
9. Pengubah yang dioptimalkan
Kode modifier disisipkan ke dalam fungsi yang 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 ini dalam modifier, dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
Untuk || dan && operator, evaluasi logika akan terjadi dengan evaluasi pendek, yaitu jika kondisi pertama sudah dapat menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, sebaiknya menempatkan kondisi dengan biaya perhitungan yang rendah di depan, sehingga memungkinkan untuk 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 melakukan perhitungan. Jika hasil dari perhitungan tertentu digunakan langsung dalam kontrak, maka proses perhitungan redundan ini harus dihilangkan. Pada dasarnya, semua perhitungan yang tidak digunakan harus dihapus.
Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, harus menggunakan kata kunci delete untuk menghapusnya, atau mengaturnya ke nilai default.
Optimasi loop: menghindari operasi loop yang mahal, menggabungkan loop sebisa mungkin, dan memindahkan perhitungan yang berulang keluar dari tubuh loop.
![Gas optimization sepuluh praktik terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp###
2. Menggunakan kontrak pra-kompilasi
Kontrak pra-kompilasi menyediakan fungsi pustaka yang kompleks, seperti operasi enkripsi dan hash. 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 kontrak pintar.
Contoh kontrak prakompilasi termasuk algoritma tanda tangan digital kurva elips (ECDSA) dan algoritma hash SHA2-256. Dengan menggunakan kontrak prakompilasi ini dalam kontrak pintar, pengembang dapat mengurangi biaya Gas dan meningkatkan efisiensi operasional aplikasi.
3. Menggunakan kode assembly inline
inline assembly ( in-line assembly ) memungkinkan pengembang untuk menulis kode tingkat rendah yang dapat dieksekusi langsung oleh EVM dengan efisien, 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
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.
13 Suka
Hadiah
13
7
Bagikan
Komentar
0/400
AlgoAlchemist
· 5menit yang lalu
gas harus membunuh saya
Lihat AsliBalas0
BearEatsAll
· 10jam yang lalu
biaya gas yang tinggi bukanlah jalan buntu untuk mendapatkan keuntungan.
Lihat AsliBalas0
MEVHunterWang
· 07-11 05:59
gas lagi naik lihatnya sakit hati
Lihat AsliBalas0
CoffeeNFTrader
· 07-11 05:55
gas lagi dioptimalkan juga adalah jebakan, lebih baik pergi ke layer2
13 Praktik Optimasi Biaya Gas untuk Smart Contract Ethereum
Praktik Terbaik untuk Mengoptimalkan Biaya Gas Smart Contract Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah yang sulit, terutama saat jaringan mengalami kemacetan. Pada puncak waktu, pengguna harus 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 membahas mekanisme biaya Gas dari Ethereum Virtual Machine (EVM), konsep inti dari optimasi biaya Gas, serta praktik terbaik untuk mengoptimalkan biaya Gas saat mengembangkan smart contract. Harapannya, konten ini dapat memberikan inspirasi dan bantuan praktis bagi para pengembang, sekaligus membantu pengguna biasa untuk lebih memahami cara kerja biaya Gas di EVM, serta bersama-sama menghadapi tantangan dalam ekosistem blockchain.
Pengenalan Mekanisme Biaya Gas EVM
Di jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk mengeksekusi operasi tertentu.
Dalam struktur EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, pemanggilan 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 satu transaksi dikenal sebagai "Gas fee".
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 mengirimkan transaksi dapat meningkatkan kemungkinan transaksi tersebut dimasukkan ke dalam blok berikutnya. Ini mirip dengan "tip" yang dibayarkan pengguna kepada validator.
1. Memahami optimasi Gas dalam EVM
Saat mengompilasi smart contract dengan Solidity, kontrak akan diubah menjadi serangkaian "opcode", yaitu opcodes.
Setiap segmen opcode ( seperti membuat kontrak, melakukan panggilan pesan, mengakses penyimpanan akun, dan mengeksekusi operasi di mesin virtual ) memiliki biaya konsumsi Gas yang diakui, dan 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.
2.Konsep dasar optimasi 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 memiliki biaya lebih tinggi meliputi:
Praktik Terbaik untuk Mengoptimalkan 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 menciptakan aplikasi yang lebih efisien dan ramah pengguna.
1. Usahakan untuk mengurangi penggunaan penyimpanan
Dalam Solidity, Storage( penyimpanan) adalah sumber daya yang terbatas, di mana konsumsi Gasnya jauh lebih tinggi dibandingkan dengan Memory( memori). Setiap kali smart contract membaca atau menulis data dari penyimpanan, akan ada 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 situasi 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel secara wajar 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 belum digunakan yang memerlukan 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.
![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 direpresentasikan dengan berbagai tipe data, tetapi biaya operasional yang terkait dengan tipe data yang berbeda juga berbeda. Memilih tipe data yang tepat membantu mengoptimalkan penggunaan Gas.
Misalnya, dalam Solidity, bilangan bulat dapat dibagi menjadi berbagai ukuran: uint8, uint16, uint32, dll. Karena EVM menjalankan operasi dalam satuan 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya menjadi uint256, dan konversi ini akan memakan Gas tambahan.
Jika dilihat secara terpisah, menggunakan uint256 di sini lebih murah daripada uint8. Namun, jika menggunakan optimasi pengemasan variabel yang kami sarankan sebelumnya, itu 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, menempatkan empat variabel uint8 ke dalam memori/penyimpanan.
![Gas optimalisasi 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 mengonsumsi lebih sedikit Gas dibandingkan dengan variabel dengan ukuran variabel. Jika panjang byte dapat dibatasi, usahakan untuk memilih panjang minimum dari bytes1 hingga bytes32.
![Gas optimization dari 10 praktik terbaik untuk kontrak pintar Ethereum]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 5. Pemetaan dan Array
Daftar data Solidity dapat direpresentasikan dengan dua tipe data: Arrays### dan Mappings(, tetapi sintaks dan strukturnya sangat berbeda.
Pemetaan biasanya lebih efisien dan lebih murah, tetapi array memiliki kemampuan iterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih mengutamakan penggunaan pemetaan saat mengelola daftar data, kecuali jika diperlukan iterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Gas optimization praktik terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 6. Menggunakan calldata sebagai pengganti memory
Variabel yang dinyatakan dalam parameter fungsi dapat disimpan di calldata atau memory. Perbedaan utama antara keduanya adalah, memory dapat diubah oleh fungsi, sementara 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 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 sebisa mungkin.
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 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 telah menyertakan fungsi perlindungan terhadap overflow dan underflow.
9. Pengubah yang dioptimalkan
Kode modifier disisipkan ke dalam fungsi yang 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 ini dalam modifier, dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(
) 10. Optimasi Jarak Pendek
Untuk || dan && operator, evaluasi logika akan terjadi dengan evaluasi pendek, yaitu jika kondisi pertama sudah dapat menentukan hasil dari ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, sebaiknya menempatkan kondisi dengan biaya perhitungan yang rendah di depan, sehingga memungkinkan untuk 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 melakukan perhitungan. Jika hasil dari perhitungan tertentu digunakan langsung dalam kontrak, maka proses perhitungan redundan ini harus dihilangkan. Pada dasarnya, semua perhitungan yang tidak digunakan harus dihapus.
Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan melepaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, harus menggunakan kata kunci delete untuk menghapusnya, atau mengaturnya ke nilai default.
Optimasi loop: menghindari operasi loop yang mahal, menggabungkan loop sebisa mungkin, dan memindahkan perhitungan yang berulang keluar dari tubuh loop.
![Gas optimization sepuluh praktik terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp###
2. Menggunakan kontrak pra-kompilasi
Kontrak pra-kompilasi menyediakan fungsi pustaka yang kompleks, seperti operasi enkripsi dan hash. 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 kontrak pintar.
Contoh kontrak prakompilasi termasuk algoritma tanda tangan digital kurva elips (ECDSA) dan algoritma hash SHA2-256. Dengan menggunakan kontrak prakompilasi ini dalam kontrak pintar, pengembang dapat mengurangi biaya Gas dan meningkatkan efisiensi operasional aplikasi.
3. Menggunakan kode assembly inline
inline assembly ( in-line assembly ) memungkinkan pengembang untuk menulis kode tingkat rendah yang dapat dieksekusi langsung oleh EVM dengan efisien, 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