Panduan Optimalisasi Biaya Gas Kontrak Pintar Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah, terutama saat jaringan mengalami kemacetan. Pada saat puncak, pengguna sering kali harus membayar biaya transaksi yang sangat 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 penggunaan blockchain yang lebih ekonomis dan efisien 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 EVM, dalam menghadapi tantangan di ekosistem blockchain.
Ringkasan Mekanisme Biaya Gas EVM
Dalam jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk mengeksekusi operasi tertentu.
Dalam struktur layout EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, pemanggilan pesan eksternal, serta baca dan tulis memori dan penyimpanan.
Karena setiap eksekusi transaksi memerlukan sumber daya komputasi, biaya tertentu akan dikenakan untuk mencegah siklus tak terbatas dan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan sebuah transaksi disebut "Gas fee".
Sejak berlakunya hard fork London EIP-1559(), biaya Gas dihitung dengan rumus berikut:
Biaya gas = unit gas yang digunakan * (biaya dasar + biaya prioritas)
Biaya dasar akan dihancurkan, sedangkan biaya prioritas akan digunakan sebagai insentif, mendorong validator untuk menambahkan transaksi ke dalam blockchain. Dengan menetapkan biaya prioritas yang lebih tinggi saat mengirim transaksi, kemungkinan transaksi tersebut dimasukkan ke dalam blok berikutnya dapat meningkat. 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 "kode operasi", yaitu opcodes.
Setiap segmen opcode (, seperti membuat kontrak, melakukan panggilan pesan, mengakses penyimpanan akun, dan menjalankan operasi di mesin virtual, ) memiliki biaya konsumsi Gas yang diakui, yang 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.
2.Konsep dasar optimasi Gas
Inti dari optimasi Gas adalah memilih operasi yang efisien dalam biaya di blockchain EVM, menghindari operasi yang memiliki biaya Gas yang mahal.
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 dan struktur calldata
Panggilan fungsi internal
Operasi dengan biaya tinggi termasuk:
Membaca dan menulis variabel status yang disimpan dalam penyimpanan kontrak
Panggilan fungsi eksternal
Operasi berulang
Praktik Terbaik untuk Mengoptimalkan Biaya Gas EVM
Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik pengoptimalan biaya Gas untuk komunitas pengembang. Dengan mengikuti praktik ini, para 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( adalah sumber daya yang terbatas, dengan konsumsi Gas yang jauh lebih tinggi dibandingkan dengan Memory). Setiap kali smart contract membaca atau menulis data dari storage, akan ada biaya Gas yang tinggi.
Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali biaya operasi memori. Misalnya, instruksi OPcodesmload dan mstore hanya menghabiskan 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi yang 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 perhitungan sementara di memori, setelah semua perhitungan selesai, baru kemudian hasil tersebut dialokasikan ke variabel penyimpanan.
( 2. Pengemasan variabel
Jumlah slot penyimpanan ) 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel secara wajar sehingga beberapa variabel dapat disesuaikan 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 memerlukan 20.000 Gas (, tetapi sekarang hanya memerlukan dua slot penyimpanan.
Karena setiap slot penyimpanan akan menggunakan Gas, pengemasan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
![Gas optimization untuk smart contract Ethereum: 10 praktik terbaik])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 sesuai untuk setiap jenis data berbeda. Memilih jenis data yang tepat membantu mengoptimalkan penggunaan Gas.
Misalnya, di Solidity, bilangan bulat dapat dibagi menjadi ukuran yang berbeda: uint8, uint16, uint32, dan sebagainya. Karena EVM menjalankan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya ke uint256, dan konversi ini akan menghabiskan Gas tambahan.
Jika dilihat secara terpisah, menggunakan uint256 lebih murah daripada uint8. Namun, jika menggunakan pengemasan variabel yang disarankan sebelumnya, itu akan berbeda. Jika pengembang dapat mengemas empat variabel uint8 ke dalam satu slot penyimpanan, maka total biaya untuk mengiterasinya akan lebih rendah daripada empat variabel uint256. Dengan cara ini, kontrak pintar dapat membaca dan menulis satu slot penyimpanan, dan memasukkan empat variabel uint8 ke dalam memori/penyimpanan dalam satu operasi.
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 lebih sedikit Gas dibandingkan variabel dengan ukuran yang dapat berubah. Jika panjang byte dapat dibatasi, usahakan untuk memilih dari bytes1 hingga bytes32 dengan panjang terkecil.
( 5. Pemetaan dan Array
Daftar data Solidity dapat diwakili dengan dua jenis tipe data: Array ) dan Mappings ###, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan biasanya lebih efisien dan lebih rendah biaya dalam kebanyakan kasus, tetapi array memiliki kemampuan untuk diiterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memilih pemetaan saat mengelola daftar data, kecuali jika perlu diiterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Optimasi Gas 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 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 hanya baca, utamakan 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 optimasi untuk kontrak pintar Ethereum: 10 praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Gunakan 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 yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri telah menyertakan fungsi perlindungan terhadap overflow dan underflow.
9. Optimalkan Pengubah
Kode modifier disisipkan ke dalam fungsi yang telah dimodifikasi, setiap kali modifier digunakan, kode tersebut akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas.
Dengan membangun ulang logika menjadi fungsi internal _checkOwner###(, memungkinkan penggunaan kembali fungsi internal ini dalam modifier, yang dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
Untuk || dan && operator, evaluasi logika akan mengalami short-circuiting, yaitu jika kondisi pertama sudah dapat menentukan hasil ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, kondisi dengan biaya perhitungan rendah harus diletakkan di depan, sehingga dapat memungkinkan untuk melewati perhitungan yang mahal.
Saran Umum Tambahan
( 1. Hapus kode yang tidak berguna
Jika terdapat fungsi atau variabel yang tidak digunakan dalam kontrak, disarankan untuk menghapusnya. Ini adalah cara paling langsung untuk mengurangi biaya penyebaran kontrak dan menjaga ukuran kontrak tetap kecil.
Berikut adalah beberapa saran praktis:
Gunakan algoritma yang paling efisien untuk perhitungan. Jika hasil dari beberapa perhitungan digunakan langsung dalam kontrak, maka proses perhitungan yang berlebihan harus dihilangkan. Pada dasarnya, semua perhitungan yang tidak digunakan harus dihapus.
Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan membebaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, harus menggunakan kata kunci delete untuk menghapusnya, atau mengaturnya ke nilai default.
Optimasi loop: hindari operasi loop yang mahal, gabungkan loop sebisa mungkin, dan pindahkan perhitungan yang berulang keluar dari tubuh loop.
) 2. Menggunakan kontrak yang telah dipra-kompilasi
Kontrak prakomplasi 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 prakomplasi 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 operasional aplikasi.
![Gas optimization terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
3. Menggunakan kode assembly inline
Assembly inline ( in-line assembly ) memungkinkan pengembang menulis kode tingkat rendah yang efisien dan dapat dijalankan langsung oleh EVM, tanpa perlu menggunakan opcode Solidity yang mahal. Assembly inline juga memungkinkan kontrol yang lebih tepat atas penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, assembly inline 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 yang perlu disimpan dan dihitung di jaringan utama Ethereum.
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.
10 Suka
Hadiah
10
3
Posting ulang
Bagikan
Komentar
0/400
SocialFiQueen
· 07-10 22:01
Selalu ada yang menggigit gigi menanggung biaya gas...
Lihat AsliBalas0
LostBetweenChains
· 07-08 12:24
Sangat menyebalkan, biaya gas seperti mesin pemotong sayuran.
Lihat AsliBalas0
ResearchChadButBroke
· 07-08 05:57
Kapan kita tidak akan dipermainkan oleh gas tinggi dan dianggap bodoh?
Optimasi Biaya Gas Kontrak Pintar Ethereum 15 Tips Singkat
Panduan Optimalisasi Biaya Gas Kontrak Pintar Ethereum
Biaya Gas di jaringan utama Ethereum selalu menjadi masalah, terutama saat jaringan mengalami kemacetan. Pada saat puncak, pengguna sering kali harus membayar biaya transaksi yang sangat 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 penggunaan blockchain yang lebih ekonomis dan efisien 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 EVM, dalam menghadapi tantangan di ekosistem blockchain.
Ringkasan Mekanisme Biaya Gas EVM
Dalam jaringan yang kompatibel dengan EVM, "Gas" adalah unit yang digunakan untuk mengukur kemampuan komputasi yang diperlukan untuk mengeksekusi operasi tertentu.
Dalam struktur layout EVM, konsumsi Gas dibagi menjadi tiga bagian: eksekusi operasi, pemanggilan pesan eksternal, serta baca dan tulis memori dan penyimpanan.
Karena setiap eksekusi transaksi memerlukan sumber daya komputasi, biaya tertentu akan dikenakan untuk mencegah siklus tak terbatas dan penolakan layanan (DoS). Biaya yang diperlukan untuk menyelesaikan sebuah transaksi disebut "Gas fee".
Sejak berlakunya hard fork London EIP-1559(), biaya Gas dihitung dengan rumus berikut:
Biaya gas = unit gas yang digunakan * (biaya dasar + biaya prioritas)
Biaya dasar akan dihancurkan, sedangkan biaya prioritas akan digunakan sebagai insentif, mendorong validator untuk menambahkan transaksi ke dalam blockchain. Dengan menetapkan biaya prioritas yang lebih tinggi saat mengirim transaksi, kemungkinan transaksi tersebut dimasukkan ke dalam blok berikutnya dapat meningkat. 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 "kode operasi", yaitu opcodes.
Setiap segmen opcode (, seperti membuat kontrak, melakukan panggilan pesan, mengakses penyimpanan akun, dan menjalankan operasi di mesin virtual, ) memiliki biaya konsumsi Gas yang diakui, yang 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.
2.Konsep dasar optimasi Gas
Inti dari optimasi Gas adalah memilih operasi yang efisien dalam biaya di blockchain EVM, menghindari operasi yang memiliki biaya Gas yang mahal.
Dalam EVM, operasi berikut memiliki biaya yang lebih rendah:
Operasi dengan biaya tinggi termasuk:
Praktik Terbaik untuk Mengoptimalkan Biaya Gas EVM
Berdasarkan konsep dasar di atas, kami telah menyusun daftar praktik terbaik pengoptimalan biaya Gas untuk komunitas pengembang. Dengan mengikuti praktik ini, para 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( adalah sumber daya yang terbatas, dengan konsumsi Gas yang jauh lebih tinggi dibandingkan dengan Memory). Setiap kali smart contract membaca atau menulis data dari storage, akan ada biaya Gas yang tinggi.
Menurut definisi buku kuning Ethereum, biaya operasi penyimpanan lebih dari 100 kali biaya operasi memori. Misalnya, instruksi OPcodesmload dan mstore hanya menghabiskan 3 unit Gas, sedangkan operasi penyimpanan seperti sload dan sstore bahkan dalam kondisi yang paling ideal, biayanya setidaknya memerlukan 100 unit.
Metode untuk membatasi penggunaan penyimpanan meliputi:
( 2. Pengemasan variabel
Jumlah slot penyimpanan ) 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 untuk penyimpanan variabel. Pengemasan variabel berarti mengatur variabel secara wajar sehingga beberapa variabel dapat disesuaikan 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 memerlukan 20.000 Gas (, tetapi sekarang hanya memerlukan dua slot penyimpanan.
Karena setiap slot penyimpanan akan menggunakan Gas, pengemasan variabel mengoptimalkan penggunaan Gas dengan mengurangi jumlah slot penyimpanan yang diperlukan.
![Gas optimization untuk smart contract Ethereum: 10 praktik terbaik])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 sesuai untuk setiap jenis data berbeda. Memilih jenis data yang tepat membantu mengoptimalkan penggunaan Gas.
Misalnya, di Solidity, bilangan bulat dapat dibagi menjadi ukuran yang berbeda: uint8, uint16, uint32, dan sebagainya. Karena EVM menjalankan operasi dalam unit 256 bit, menggunakan uint8 berarti EVM harus terlebih dahulu mengonversinya ke uint256, dan konversi ini akan menghabiskan Gas tambahan.
Jika dilihat secara terpisah, menggunakan uint256 lebih murah daripada uint8. Namun, jika menggunakan pengemasan variabel yang disarankan sebelumnya, itu akan berbeda. Jika pengembang dapat mengemas empat variabel uint8 ke dalam satu slot penyimpanan, maka total biaya untuk mengiterasinya akan lebih rendah daripada empat variabel uint256. Dengan cara ini, kontrak pintar dapat membaca dan menulis satu slot penyimpanan, dan memasukkan empat variabel uint8 ke dalam memori/penyimpanan dalam satu operasi.
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 lebih sedikit Gas dibandingkan variabel dengan ukuran yang dapat berubah. Jika panjang byte dapat dibatasi, usahakan untuk memilih dari bytes1 hingga bytes32 dengan panjang terkecil.
( 5. Pemetaan dan Array
Daftar data Solidity dapat diwakili dengan dua jenis tipe data: Array ) dan Mappings ###, tetapi sintaksis dan strukturnya sangat berbeda.
Pemetaan biasanya lebih efisien dan lebih rendah biaya dalam kebanyakan kasus, tetapi array memiliki kemampuan untuk diiterasi dan mendukung pengemasan tipe data. Oleh karena itu, disarankan untuk lebih memilih pemetaan saat mengelola daftar data, kecuali jika perlu diiterasi atau dapat mengoptimalkan konsumsi Gas melalui pengemasan tipe data.
![Optimasi Gas 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 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 hanya baca, utamakan 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 optimasi untuk kontrak pintar Ethereum: 10 praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Gunakan 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 yang lebih tinggi tidak lagi memerlukan penggunaan pustaka SafeMath, karena compiler itu sendiri telah menyertakan fungsi perlindungan terhadap overflow dan underflow.
9. Optimalkan Pengubah
Kode modifier disisipkan ke dalam fungsi yang telah dimodifikasi, setiap kali modifier digunakan, kode tersebut akan disalin. Ini akan meningkatkan ukuran bytecode dan meningkatkan konsumsi Gas.
Dengan membangun ulang logika menjadi fungsi internal _checkOwner###(, memungkinkan penggunaan kembali fungsi internal ini dalam modifier, yang dapat mengurangi ukuran bytecode dan menurunkan biaya Gas.
![Gas optimalisasi kontrak pintar Ethereum sepuluh praktik terbaik])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###
10. Optimasi Jalur Pendek
Untuk || dan && operator, evaluasi logika akan mengalami short-circuiting, yaitu jika kondisi pertama sudah dapat menentukan hasil ekspresi logika, maka kondisi kedua tidak akan dievaluasi.
Untuk mengoptimalkan konsumsi Gas, kondisi dengan biaya perhitungan rendah harus diletakkan di depan, sehingga dapat memungkinkan untuk melewati perhitungan yang mahal.
Saran Umum Tambahan
( 1. Hapus kode yang tidak berguna
Jika terdapat fungsi atau variabel yang tidak digunakan dalam kontrak, disarankan untuk menghapusnya. Ini adalah cara paling langsung untuk mengurangi biaya penyebaran kontrak dan menjaga ukuran kontrak tetap kecil.
Berikut adalah beberapa saran praktis:
Gunakan algoritma yang paling efisien untuk perhitungan. Jika hasil dari beberapa perhitungan digunakan langsung dalam kontrak, maka proses perhitungan yang berlebihan harus dihilangkan. Pada dasarnya, semua perhitungan yang tidak digunakan harus dihapus.
Di Ethereum, pengembang dapat memperoleh hadiah Gas dengan membebaskan ruang penyimpanan. Jika suatu variabel tidak lagi diperlukan, harus menggunakan kata kunci delete untuk menghapusnya, atau mengaturnya ke nilai default.
Optimasi loop: hindari operasi loop yang mahal, gabungkan loop sebisa mungkin, dan pindahkan perhitungan yang berulang keluar dari tubuh loop.
) 2. Menggunakan kontrak yang telah dipra-kompilasi
Kontrak prakomplasi 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 prakomplasi 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 operasional aplikasi.
![Gas optimization terbaik untuk smart contract Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
3. Menggunakan kode assembly inline
Assembly inline ( in-line assembly ) memungkinkan pengembang menulis kode tingkat rendah yang efisien dan dapat dijalankan langsung oleh EVM, tanpa perlu menggunakan opcode Solidity yang mahal. Assembly inline juga memungkinkan kontrol yang lebih tepat atas penggunaan memori dan penyimpanan, sehingga lebih lanjut mengurangi biaya Gas. Selain itu, assembly inline 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 yang perlu disimpan dan dihitung di jaringan utama Ethereum.