Apa Itu Gas Golfing?
Gas golfing adalah praktik melakukan perubahan kecil yang terarah pada kode smart contract untuk mengurangi konsumsi gas.Istilah ini terinspirasi dari code golf, tantangan pemrograman yang mengajak developer menyelesaikan masalah dengan jumlah kode sumber sesedikit mungkin.Dalam pengembangan mata uang kripto, tujuannya tidak selalu menulis kode dengan karakter sesedikit mungkin.Tujuannya adalah menghasilkan bytecode yang menggunakan lebih sedikit sumber daya blockchain tanpa mengubah perilaku kontrak yang diwajibkan.Gas golfing paling sering dikaitkan dengan Ethereum dan jaringan lain yang menjalankan smart contract melalui Ethereum Virtual Machine.Developer dapat melakukan gas golfing pada kontrak dengan mengurangi operasi penyimpanan, menyederhanakan perhitungan, memperpendek data revert, menghindari penyalinan memori yang tidak perlu, atau memilih instruksi EVM berbiaya lebih rendah.Gas golfing biasanya berfokus pada mikro-optimasi, bukan perancangan ulang aplikasi secara menyeluruh.Karena itu, cakupannya lebih sempit daripada optimasi gas secara umum, yang dapat mencakup arsitektur kontrak, penggabungan transaksi, deployment ke Layer 2, desain aplikasi, dan komputasi off-chain.Perubahan gas golfing yang berhasil harus tetap menjaga keamanan, kebenaran, keterbacaan, dan kompatibilitas.Menghemat sedikit gas tidak sepadan jika perubahan tersebut menimbulkan kerentanan atau membuat kontrak sulit dipelihara dengan aman.Mengapa Disebut Gas Golfing?
Kata golfing merujuk pada tujuan untuk mendapatkan skor yang lebih rendah.Dalam golf tradisional, jumlah pukulan yang lebih sedikit lebih baik.Dalam gas golfing smart contract, penggunaan gas yang lebih rendah umumnya dianggap lebih baik jika kode yang dioptimalkan menjalankan tugas yang sama dengan aman.Developer dapat membandingkan dua implementasi dengan mengukur gas deployment, gas saat eksekusi, ukuran bytecode, atau total biaya selama perkiraan masa pakai kontrak.Tantangan gas golfing dapat meminta peserta membuat sebuah fungsi dengan penggunaan gas sesedikit mungkin.Pengembangan untuk produksi lebih rumit karena solusi dengan gas terendah belum tentu paling aman atau paling mudah diaudit.Istilah ini bersifat informal dan bukan nama protokol Ethereum, token, jenis transaksi, atau standar pemrograman resmi.Cara Kerja Gas Golfing
Ethereum menetapkan biaya gas untuk setiap operasi yang dilakukan Ethereum Virtual Machine.Dokumentasi gas Ethereum resmi menjelaskan bahwa gas mengukur upaya komputasi yang diperlukan untuk menjalankan transaksi dan operasi smart contract.
Aritmetika, penggunaan memori, penyimpanan persisten, log peristiwa, pemanggilan kontrak, pembuatan kontrak, dan data transaksi semuanya berkontribusi terhadap konsumsi gas.Gas golfing mencari urutan operasi yang lebih murah tetapi tetap menghasilkan keluaran yang diwajibkan.Misalnya, developer dapat mengganti beberapa pembacaan penyimpanan dengan satu pembacaan, lalu menggunakan kembali nilai yang dimuat melalui variabel lokal.Developer lain dapat mengganti string revert yang panjang dengan custom error yang lebih ringkas.Developer yang bekerja pada level lebih rendah dapat mengganti loop penyalinan memori yang dibuat secara manual dengan instruksi EVM yang dirancang khusus untuk menyalin memori.Hasil akhirnya harus diukur pada bytecode yang telah dikompilasi karena kode Solidity yang tampak lebih pendek belum tentu menghasilkan eksekusi EVM yang lebih murah.Gas Golfing vs. Optimasi Gas
Optimasi gas adalah proses luas untuk mengurangi biaya deployment dan eksekusi smart contract.Gas golfing merupakan bentuk optimasi yang lebih sempit dan biasanya menekankan penghematan kecil pada level kode.Proyek optimasi gas menyeluruh dapat merancang ulang model penyimpanan aplikasi, memindahkan komputasi yang sesuai ke off-chain, menggunakan jaringan Layer 2, atau mengurangi jumlah transaksi yang harus dilakukan setiap pengguna.Gas golfing mungkin hanya membandingkan dua struktur loop, dua metode penanganan error, atau dua cara memuat nilai yang sama.Optimasi arsitektur biasanya menghasilkan penghematan yang lebih besar daripada mikro-optimasi.Namun, penghematan kecil yang berulang dapat menjadi signifikan jika sebuah fungsi dijalankan jutaan kali.Developer profesional sebaiknya terlebih dahulu menghilangkan pekerjaan yang tidak perlu pada level arsitektur, lalu melakukan gas golfing pada jalur eksekusi penting yang masih tersisa.Gas Golfing vs. Code Golf
Code golf berupaya meminimalkan panjang kode sumber, sering kali tanpa mengutamakan keterbacaan atau kemudahan pemeliharaan jangka panjang.Gas golfing berupaya meminimalkan biaya eksekusi blockchain.Ekspresi Solidity yang paling pendek dapat dikompilasi menjadi lebih banyak instruksi daripada ekspresi yang lebih panjang dan jelas.Optimasi compiler juga dapat mengubah beberapa gaya kode sumber yang berbeda menjadi bytecode yang identik.Karena itu, developer sebaiknya membandingkan hasil kompilasi dan gas yang terukur, bukan menghitung karakter pada kode sumber.Solusi code golf mungkin menarik, tetapi tidak cocok untuk kontrak yang mengelola mata uang kripto bernilai tinggi.Gas golfing untuk produksi harus selalu disertai pengujian keamanan, dokumentasi, dan peninjauan.Gas Golfing vs. Harga Gas yang Lebih Rendah
Gas golfing mengurangi jumlah unit gas yang dikonsumsi transaksi.Gas golfing tidak secara langsung menurunkan harga pasar untuk setiap unit gas.Biaya transaksi dapat dinyatakan sebagai Gas yang Dikenakan × Harga Gas Efektif.Perubahan melalui gas golfing menyasar komponen gas yang dikenakan dalam rumus ini.Permintaan jaringan, base fee protokol, dan priority fee pengguna memengaruhi harga gas efektif.Kontrak yang sangat dioptimalkan tetap dapat mahal digunakan saat jaringan mengalami kemacetan parah.Kontrak yang kurang dioptimalkan juga tetap boros meski harga gas sedang rendah untuk sementara.Mengapa Developer Melakukan Gas Golfing
Gas golfing dapat mengurangi biaya yang dibayar setiap pengguna yang berinteraksi dengan fungsi smart contract yang sering dipanggil.Biaya transaksi yang lebih rendah dapat membuat keuangan terdesentralisasi, transfer token, game blockchain, operasi NFT, dan sistem tata kelola lebih mudah diakses.Gas golfing juga dapat mengurangi biaya deployment kontrak jika optimasi mengurangi pekerjaan inisialisasi atau ukuran bytecode saat runtime.Strategi mata uang kripto otomatis dapat bergantung pada penghematan gas dalam jumlah kecil karena biaya transaksi langsung mengurangi potensi imbal hasilnya.Protokol yang menjalankan banyak operasi internal berulang dapat menghemat jumlah besar meski setiap perbaikan hanya memberi penghematan kecil.Penggunaan gas yang lebih rendah juga menyisakan lebih banyak kapasitas blok untuk transaksi lain.Namun, optimasi harus didasarkan pada perkiraan penggunaan, bukan keinginan untuk menghasilkan benchmark terendah pada kasus pengujian yang tidak realistis.Ukur Sebelum Melakukan Gas Golfing
Developer sebaiknya mengukur penggunaan gas sebelum mencoba mikro-optimasi.Compiler yang digunakan mungkin sudah menghapus operasi yang tampak tidak perlu.Perubahan yang mengurangi gas pada versi Solidity lama mungkin tidak memberi manfaat pada compiler terkini.Perubahan lain mungkin mengurangi gas saat runtime tetapi meningkatkan biaya deployment kontrak.Pengujian gas harus mencakup fungsi yang paling sering dijalankan pengguna.Pengujian juga harus mencakup input minimum, input maksimum yang didukung, eksekusi yang berhasil, dan jalur kegagalan.Dokumentasi compiler Solidity menjelaskan opsi keluaran compiler dan estimasi gas.
Estimasi compiler mungkin tidak lengkap jika loop, pemanggilan eksternal, atau kondisi blockchain yang dinamis memengaruhi eksekusi.Karena itu, developer sebaiknya menggabungkan keluaran compiler dengan pengujian transaksi aktual dan execution trace.Gunakan Compiler Solidity Terkini
Rilis compiler Solidity secara berkala menambahkan optimasi, dukungan EVM, fitur bahasa, dan perbaikan keamanan.Pengumuman rilis Solidity 0.8.36 resmi menyatakan bahwa versi 0.8.36 adalah rilis terkini pada Juli 2026.
Rilis tersebut mencakup perbaikan keamanan dan pengembangan lebih lanjut untuk pipeline pembuatan kode berbentuk SSA yang masih eksperimental.Hasil gas golfing dari satu versi compiler mungkin berbeda dengan hasil dari versi lainnya.Developer sebaiknya menetapkan versi compiler, konfigurasi optimizer, target EVM, dan versi dependensi yang digunakan untuk build produksi.Mereka juga sebaiknya meninjau daftar bug compiler Solidity resmi sebelum melakukan deployment kontrak mata uang kripto bernilai tinggi.
Memperbarui compiler hanya demi penggunaan gas yang lebih rendah tanpa menguji ulang seluruh aplikasi dapat menimbulkan perilaku tak terduga atau perbedaan bytecode.Gunakan Solidity Optimizer Sebelum Melakukan Gas Golfing Manual
Solidity optimizer dapat menyederhanakan ekspresi, menghapus operasi redundan, menggabungkan perhitungan, dan mengurangi ukuran bytecode.Dokumentasi Solidity optimizer resmi menjelaskan bahwa optimasi dapat mengurangi ukuran deployment dan biaya eksekusi.
Gas golfing manual harus memperhitungkan optimasi yang sudah dilakukan optimizer.Dua fungsi Solidity yang tampak berbeda dapat dikompilasi menjadi bytecode teroptimasi yang sama.Pengaturan runs pada optimizer memengaruhi kompromi antara ukuran kode deployment yang lebih kecil dan biaya eksekusi berulang yang lebih rendah.Nilai runs yang rendah umumnya lebih mengutamakan ukuran deployment.Nilai runs yang lebih tinggi umumnya lebih mengutamakan eksekusi runtime berulang.Pengaturan terbaik bergantung pada seberapa sering kontrak akan di-deploy dan setiap fungsinya akan dipanggil.Developer sebaiknya membandingkan beberapa konfigurasi yang telah diuji, bukan menggunakan satu nilai umum tanpa pengukuran.Simpan Hasil Pembacaan Storage Berulang di Cache
Akses ke penyimpanan persisten sering kali lebih mahal daripada menggunakan nilai yang sudah tersedia di stack EVM atau memori.Teknik gas golfing yang sering digunakan adalah memuat nilai storage satu kali ke variabel lokal, lalu menggunakannya kembali.Ethereum menerapkan biaya akses cold dan warm berdasarkan EIP-2929.
Akses pertama ke slot storage dalam sebuah transaksi umumnya lebih mahal daripada akses berikutnya ke slot yang sama.Pembacaan storage warm pun dapat dihindari jika kontrak sudah memiliki salinan lokal yang benar.Developer juga dapat menghitung hasil akhir secara lokal, lalu melakukan satu penulisan ke storage alih-alih menulis setiap nilai perantara.Teknik caching tidak aman jika pemanggilan eksternal dapat mengubah state terkait sebelum nilai yang di-cache digunakan kembali.Reentrancy, callback, delegate call, dan perilaku yang diwariskan harus dipertimbangkan sebelum teknik ini diterapkan.Kurangi Penulisan Storage
Menulis state persisten adalah salah satu operasi smart contract umum yang paling mahal.Kontrak sebaiknya tidak menulis nilai jika nilai yang diminta sudah tersimpan.Kontrak sebaiknya menghindari pencatatan informasi yang dapat diturunkan dengan aman dari state yang sudah ada.Beberapa nilai terkait terkadang dapat direpresentasikan dengan satu indeks akumulatif atau checkpoint akuntansi.Sebuah fungsi juga dapat melakukan perhitungan secara lokal dan hanya menyimpan hasil akhirnya ke storage.Perubahan ini dapat memberi penghematan jauh lebih besar daripada menulis ulang ekspresi aritmetika kecil.Developer harus memastikan bahwa model state yang disederhanakan tetap mendukung saldo, izin, pencatatan historis, dan upgrade secara benar.Kemas Variabel Storage
Ethereum membagi storage kontrak menjadi slot berukuran 32 byte.Solidity dapat mengemas beberapa variabel bertipe nilai yang lebih kecil ke dalam satu slot jika urutan dan ukuran gabungannya memungkinkan.Dokumentasi tata letak storage Solidity menjelaskan cara variabel dialokasikan dan dikemas.
Mengurangi jumlah slot storage yang diperlukan dapat menurunkan gas deployment dan runtime dalam kondisi tertentu.Tipe integer yang lebih kecil tidak otomatis menghemat gas jika disimpan secara terpisah.EVM biasanya melakukan aritmetika menggunakan word 256-bit, sehingga tipe yang lebih kecil mungkin memerlukan masking atau konversi tambahan.Pengemasan paling bermanfaat ketika nilai yang dikemas sering diakses atau diubah secara bersamaan.Variabel storage tidak boleh diubah urutannya pada kontrak upgradeable yang sudah di-deploy karena tata letak baru dapat menafsirkan data yang ada secara keliru.Gunakan Nilai Constant dan Immutable
Variabel state biasa menimbulkan biaya storage ketika nilainya perlu dibaca dari state persisten.Nilai yang diketahui saat kompilasi dapat dideklarasikan sebagai
Nilai yang dipilih saat konstruksi dan tetap setelah deployment dapat dideklarasikan sebagai
Dokumentasi kontrak Solidity menjelaskan bahwa nilai tersebut tidak menggunakan slot storage biasa dengan cara yang sama seperti variabel state yang dapat diubah.
Alamat permanen, nilai matematis, dan batas konfigurasi tetap merupakan kandidat umum.Nilai tidak sebaiknya dibuat immutable jika aplikasi memang memerlukan proses pembaruan yang berwenang.Menghemat gas dengan menghilangkan fleksibilitas konfigurasi yang diperlukan dapat menimbulkan batasan operasional yang mahal atau berbahaya.Gunakan Calldata untuk Input Hanya-Baca
Input fungsi eksternal yang tidak perlu diubah sering kali dapat tetap berada di
Dokumentasi lokasi data Solidity menjelaskan perbedaan antara calldata, memory, storage, dan transient storage.
Teknik ini paling berguna untuk input eksternal dinamis yang hanya dibaca oleh fungsi.Memori tetap diperlukan saat kontrak harus mengubah nilai atau membuat data baru di memori.Developer juga sebaiknya menghapus input transaksi yang tidak diperlukan karena byte calldata turut menambah biaya gas intrinsik.Mengodekan nilai dengan lebih ringkas dapat menghemat gas calldata, tetapi perhitungan decoding harus disertakan dalam perbandingan.Gunakan Custom Error
Custom error dapat mengurangi bytecode kontrak dan biaya data revert dibandingkan string error yang panjang.Custom error menggunakan selector ringkas empat byte dan dapat menyertakan parameter terstruktur.Dokumentasi custom error Solidity resmi menjelaskan bahwa custom error merupakan metode hemat gas untuk melaporkan kegagalan.
Misalnya, error dapat menyertakan alamat pemanggil dan saldo yang diwajibkan tanpa menyematkan kalimat panjang ke dalam bytecode runtime.Custom error tidak membuat jalur eksekusi yang berhasil menjadi bebas biaya karena kontrak tetap harus mengevaluasi kondisi.Error harus tetap cukup mudah dipahami agar wallet, interface, auditor, dan developer dapat mendiagnosis kegagalan transaksi mata uang kripto.Atur Urutan Kondisi untuk Evaluasi Short-Circuit
Ekspresi Boolean Solidity dapat berhenti lebih awal saat hasil akhirnya sudah diketahui.Dalam ekspresi dengan logical AND, evaluasi dapat berhenti setelah kondisi pertama yang bernilai false.Dalam ekspresi dengan logical OR, evaluasi dapat berhenti setelah kondisi pertama yang bernilai true.Menempatkan kondisi murah sebelum kondisi mahal dapat mengurangi rata-rata gas jika kondisi murah sering menentukan hasilnya.Teknik ini harus tetap menjaga perilaku logis yang dimaksud dan setiap asumsi tentang fungsi yang dapat mengalami revert atau memiliki efek samping.Kondisi tidak boleh diurutkan ulang begitu saja jika urutannya berpengaruh terhadap keamanan atau pelaporan error.Optimalkan Loop dengan Hati-Hati
Loop dapat mengonsumsi banyak gas ketika memproses sejumlah besar elemen.Developer dapat menyimpan panjang array yang sering diakses ke cache jika koleksi tersebut tidak dapat berubah selama loop.Developer juga dapat menyimpan nilai storage yang digunakan pada setiap iterasi ke cache.Counter loop dapat menggunakan increment
Gunakan Aritmetika Unchecked Hanya dengan Pembuktian
Solidity 0.8 dan versi lebih baru biasanya memeriksa aritmetika integer untuk mendeteksi overflow dan underflow.Pemeriksaan ini menggunakan sedikit gas, tetapi mencegah jenis kesalahan pemrograman yang penting.Blok
Gunakan Transient Storage untuk State Sementara
Transient storage menyediakan state dengan cakupan satu transaksi yang otomatis dihapus saat transaksi berakhir.Ethereum memperkenalkan operasi
Gunakan Instruksi EVM Modern
Upgrade Ethereum dapat memperkenalkan instruksi yang menggantikan rangkaian operasi lama yang lebih mahal.EIP-3855 memperkenalkan
EIP-5656 memperkenalkan
Kurangi Pemanggilan Eksternal
Pemanggilan kontrak eksternal menimbulkan biaya untuk akses akun, encoding argumen, pemrosesan data yang dikembalikan, dan eksekusi kontrak yang dipanggil.Kontrak dapat menghemat gas dengan menghindari pemanggilan berulang yang mengembalikan nilai sama dalam satu transaksi.Beberapa pembacaan terkait terkadang dapat digabungkan menjadi satu pemanggilan yang mengembalikan hasil terstruktur.Namun, perubahan struktur pemanggilan dapat memengaruhi reentrancy, penanganan error, composability, dan batas kontrak.Nilai yang dikembalikan dan kondisi keberhasilan tetap harus diperiksa dengan benar.Pemanggilan murah yang menghasilkan asumsi tidak aman bukanlah optimasi yang valid.Gunakan Event sebagai Pengganti Storage jika Sesuai
Log event sering kali lebih murah daripada storage persisten untuk informasi yang hanya digunakan aplikasi off-chain.Event dapat mendukung riwayat transaksi, analitik, feed aktivitas, dan notifikasi antarmuka pengguna.Eksekusi smart contract di masa mendatang umumnya tidak dapat mencari log event historis.Karena itu, saldo, izin, kepemilikan, agunan, dan state lain yang perlu ditegakkan harus tetap dapat diakses kontrak.Gas golfing dengan event hanya tepat jika nilai storage yang dihapus tidak diperlukan untuk keputusan on-chain di masa mendatang.Developer juga sebaiknya mempertimbangkan biaya topik event terindeks dan data log saat merancang event.Kurangi Ukuran Bytecode Deployment
Ethereum mengenakan gas ketika bytecode runtime kontrak disimpan saat deployment.Menghapus fungsi yang tidak digunakan, logika duplikat, string revert panjang, dan data tertanam yang tidak diperlukan dapat menurunkan biaya deployment.Custom error, library internal, implementasi bersama, dan konfigurasi optimasi compiler yang cermat dapat mengurangi ukuran kode.Ethereum membatasi ukuran kode runtime normal yang di-deploy berdasarkan EIP-170.
Biaya dan batas kode inisialisasi dihitung secara terpisah berdasarkan EIP-3860.
Kontrak yang lebih kecil tidak otomatis lebih murah sepanjang masa pakainya karena memisahkan kode ke beberapa kontrak dapat menambah biaya pemanggilan eksternal berulang.Developer sebaiknya mengevaluasi biaya deployment dan biaya eksekusi berulang secara bersamaan.Pahami Batasan Gas Refund
Strategi gas golfing Ethereum lama terkadang sangat bergantung pada pembuatan lalu penghapusan storage.Aturan Ethereum saat ini sangat membatasi pendekatan tersebut.EIP-3529 mengurangi refund untuk penghapusan storage, menghapus refund
Calldata Golfing dan EIP-7623
Developer terkadang melakukan gas golfing pada input transaksi dengan menggunakan tipe ringkas, bit packing, encoding khusus, atau representasi yang lebih pendek.Mengurangi byte transaksi dapat menurunkan gas intrinsik, terutama jika banyak nilai berulang dihilangkan.Namun, Pectra mengaktifkan EIP-7623, yang memperkenalkan batas minimum gas lebih tinggi untuk transaksi dengan banyak data tetapi eksekusi yang relatif sedikit.
Operasi decoding yang diperlukan oleh format ringkas juga mengonsumsi gas.Encoding khusus dapat mengurangi biaya untuk beban kerja besar yang berulang, tetapi mungkin tidak memberi manfaat untuk transaksi kecil.Encoding nonstandar dapat menyulitkan wallet, audit, integrasi, dan debugging.Developer sebaiknya menguji performa seluruh proses encoding dan decoding berdasarkan aturan protokol terkini.Kapan Inline Assembly Tepat Digunakan
Inline assembly memberi developer kendali langsung atas instruksi EVM, memori, storage, pemanggilan, dan data return.Inline assembly dapat menghemat gas ketika Solidity tingkat tinggi tidak dapat mengekspresikan operasi khusus secara efisien.Assembly biasanya dipertimbangkan untuk rutinitas kriptografi, penguraian data ringkas, operasi memori yang tidak biasa, dan fungsi tingkat rendah yang sering diulang.Namun, assembly juga melewati banyak perlindungan tipe, memori, dan keamanan yang disediakan Solidity.Kesalahan assembly dapat merusak memori, mengodekan data secara keliru, salah menangani nilai return, atau membuat mata uang kripto rentan dicuri.Setiap implementasi assembly harus dibandingkan dengan implementasi referensi tingkat tinggi yang jelas.Pengujian harus memastikan perilaku yang identik untuk input normal, input batas, input berbahaya, dan kondisi revert.Kapan Gas Golfing Menjadi Berbahaya
Gas golfing menjadi berbahaya ketika biaya gas lebih diprioritaskan daripada keamanan dan kejelasan kontrak.Menghapus pemeriksaan kontrol akses untuk menghemat gas dapat membuat pengguna tanpa izin mengendalikan kontrak.Menghapus reentrancy guard dapat membuat saldo rentan terhadap pemanggilan eksternal berulang.Menghapus batas slippage atau tenggat waktu dapat membuat pengguna terekspos pada eksekusi mata uang kripto yang tidak menguntungkan.Menggabungkan banyak nilai ke dalam satu word yang dikemas dapat menimbulkan kesalahan masking bit dan konversi.Mengganti encoding standar dengan format khusus dapat menimbulkan kerentanan tanda tangan, replay, atau parsing.Optimasi yang menghemat 100 gas tetapi menimbulkan kemungkinan kehilangan dana pengguna memiliki nilai praktis negatif.Saran Gas Golfing yang Sudah Kedaluwarsa
Saran gas golfing dapat menjadi kedaluwarsa saat Solidity dan EVM berubah.Compiler mungkin mulai mengoptimalkan pola yang sebelumnya memerlukan penulisan ulang manual.Upgrade jaringan dapat mengubah biaya opcode atau menambahkan instruksi yang lebih efisien.Saran lama untuk menggunakan
Cara Mengevaluasi Perubahan Gas Golfing
Implementasi yang dioptimalkan terlebih dahulu harus menghasilkan perilaku yang sama dengan implementasi awal.Developer sebaiknya membandingkan gas deployment, gas saat runtime berhasil, gas pada jalur kegagalan, dan total biaya selama perkiraan masa pakai.Developer harus mencatat compiler, pengaturan optimizer, versi EVM, dan state blockchain yang digunakan dalam pengujian.Unit test harus memverifikasi perilaku fungsi normal.Fuzz testing harus mengeksplorasi input tak terduga dan kondisi batas.Invariant testing harus memastikan bahwa properti akuntansi dan keamanan yang penting tetap benar.Execution trace harus memastikan bahwa penghematan berasal dari operasi yang diharapkan, bukan karena persyaratan tertentu terlewati tanpa sengaja.Peninjau manusia harus menilai apakah perubahan tetap mudah dipahami dan dipelihara.Gas Golfing pada Kontrak Produksi
Gas golfing untuk produksi sebaiknya berfokus pada fungsi yang sering digunakan dan bottleneck yang sudah diukur dengan baik.Penghematan kecil pada fungsi yang dijalankan jutaan kali dapat membenarkan upaya implementasi yang cermat.Penghematan serupa pada fungsi administratif yang hanya digunakan sekali mungkin tidak sepadan dengan kompleksitas tambahan.Antarmuka publik dan perilaku yang diharapkan harus tetap stabil kecuali optimasi merupakan bagian dari upgrade protokol yang direncanakan.Kontrak upgradeable harus mempertahankan tata letak storage dan model otorisasinya.Kontrak bernilai tinggi sebaiknya menjalani peninjauan keamanan independen setelah optimasi tingkat rendah yang signifikan.Bytecode yang di-deploy harus dapat direproduksi dari kode sumber yang dipublikasikan dan konfigurasi build.Kesalahan Umum dalam Gas Golfing
Kesalahan umum adalah membandingkan panjang kode sumber, bukan penggunaan gas pada hasil kompilasi.Kesalahan lain adalah menguji tanpa mengaktifkan pengaturan optimizer yang sama dengan yang digunakan untuk produksi.Developer mungkin hanya mengukur transaksi yang berhasil dan mengabaikan jalur revert yang sangat mahal.Developer mungkin mengoptimalkan fungsi yang jarang digunakan sambil mengabaikan penulisan storage berulang di setiap transaksi.Developer mungkin menggunakan tipe integer yang lebih kecil tanpa memperoleh manfaat pengemasan storage.Developer mungkin mengganti Solidity yang jelas dengan assembly sebelum memastikan bahwa kode yang dihasilkan compiler memang mahal.Developer mungkin mengandalkan jadwal gas lama yang tidak lagi mencerminkan EVM saat ini.Kesalahan paling serius adalah menerima hasil gas yang lebih rendah tanpa membuktikan bahwa versi yang dioptimalkan memiliki perilaku aman yang identik.FAQ
Apa itu gas golfing secara sederhana?
Gas golfing berarti melakukan perubahan kecil pada level kode untuk mengurangi gas yang dikonsumsi smart contract tanpa mengubah perilaku yang dimaksud.Apakah gas golfing sama dengan optimasi gas?
Tidak. Gas golfing biasanya merupakan mikro-optimasi dengan cakupan sempit, sedangkan optimasi gas juga mencakup arsitektur, desain storage, komputasi off-chain, batching, dan pemilihan jaringan.Apakah gas golfing merupakan fitur protokol Ethereum?
Tidak. Ini adalah istilah informal di kalangan developer, bukan opcode, jenis transaksi, atau standar Ethereum resmi.Apakah kode Solidity yang lebih pendek selalu menggunakan lebih sedikit gas?
Tidak. Panjang kode sumber tidak secara andal menunjukkan ukuran atau biaya eksekusi bytecode EVM hasil kompilasi.Bisakah Solidity optimizer melakukan gas golfing secara otomatis?
Optimizer melakukan banyak transformasi serupa, tetapi developer tetap perlu merancang storage, aliran data, dan arsitektur kontrak secara efisien.Apa teknik gas golfing terbaik?
Teknik yang paling bermanfaat sering kali bergantung pada kontrak, meskipun mengurangi akses storage berulang biasanya memberi manfaat lebih besar daripada mengubah ekspresi aritmetika kecil.Apakah integer yang lebih kecil selalu lebih murah?
Tidak. Integer yang lebih kecil paling bermanfaat saat memungkinkan beberapa nilai berbagi satu slot storage.Apakah calldata selalu lebih murah daripada memory?
Calldata sering lebih murah untuk input eksternal hanya-baca karena tidak memerlukan penyalinan, tetapi lokasi yang tepat bergantung pada cara data digunakan.Mengapa custom error berguna untuk gas golfing?
Custom error menggunakan selector dan parameter ringkas, bukan menyematkan dan mengembalikan string revert yang panjang.Apakah menyimpan nilai storage di cache selalu menghemat gas?
Teknik ini dapat menghemat gas jika nilainya tetap valid, tetapi caching mungkin tidak aman jika pemanggilan eksternal dapat mengubah state.Apakah aritmetika unchecked merupakan optimasi yang aman?
Aritmetika ini hanya aman jika developer dapat membuktikan bahwa overflow atau underflow mustahil terjadi untuk setiap input yang mungkin dijangkau.Haruskah pelaku gas golfing menggunakan inline assembly?
Inline assembly sebaiknya dibatasi pada bottleneck yang telah diukur karena dapat menimbulkan kesalahan serius pada memori, encoding, dan keamanan.Apakah prefix increment selalu lebih murah daripada postfix increment?
Tidak. Optimasi compiler terkini mungkin menghasilkan kode yang setara, sehingga hasil pastinya harus diukur.Bisakah event menggantikan storage kontrak?
Event hanya dapat menggantikan storage untuk informasi yang tidak perlu dibaca atau ditegakkan oleh eksekusi smart contract di masa mendatang.Bisakah gas golfing membuat transaksi menjadi gratis?
Tidak. Setiap transaksi tetap membayar eksekusi, data, dan penggunaan state yang diperlukan berdasarkan aturan biaya jaringan.Apakah gas golfing mengurangi harga gas?
Tidak. Gas golfing mengurangi penggunaan gas, sedangkan harga gas berubah mengikuti permintaan jaringan dan pengaturan biaya transaksi.Apakah gas refund merupakan metode gas golfing?
Penghapusan storage yang memenuhi syarat dapat memberikan refund terbatas, tetapi aturan saat ini membatasi refund dan tidak lagi mendukung strategi lama yang sangat bergantung pada refund.Bisakah gas golfing menimbulkan risiko keamanan?
Ya. Kompresi agresif, aritmetika unchecked, assembly, dan penghapusan validasi dapat menimbulkan kerentanan jika tidak ditinjau dengan cermat.Bagaimana cara menguji hasil gas golfing?
Uji dengan pengaturan compiler tetap, input realistis, execution trace, fuzz test, invariant, dan peninjauan keamanan.Kapan gas golfing bermanfaat?
Gas golfing paling bermanfaat ketika perubahan yang aman mengurangi biaya fungsi yang sering dijalankan pengguna atau sistem otomatis.Kesimpulan
Gas golfing adalah praktik melakukan perubahan terarah pada smart contract untuk mengurangi gas deployment atau eksekusi.Praktik ini berkaitan dengan optimasi gas, tetapi biasanya berfokus pada perbaikan kecil di level kode alih-alih merancang ulang aplikasi secara menyeluruh.Metode gas golfing yang umum mencakup menyimpan hasil pembacaan storage di cache, mengurangi penulisan storage, mengemas variabel, menggunakan calldata, memilih custom error, menyederhanakan loop, dan memanfaatkan fitur EVM modern.Dampak setiap metode bergantung pada versi compiler, pengaturan optimizer, target EVM, nilai input, dan state blockchain.Saran yang dahulu menghasilkan penghematan pada lingkungan Ethereum lama mungkin tidak lagi efektif berdasarkan aturan compiler dan protokol saat ini.Developer sebaiknya mengukur bytecode hasil kompilasi, bukan menilai efisiensi berdasarkan tampilan atau panjang kode sumber Solidity.Perbaikan arsitektur umumnya perlu dipertimbangkan sebelum mikro-optimasi tingkat rendah.Inline assembly dan operasi unchecked sebaiknya dibatasi pada situasi ketika penghematannya dapat diukur dan keamanannya dapat dibuktikan.Setiap perubahan gas golfing harus mempertahankan perilaku, keamanan, keterbacaan, dan kompatibilitas kontrak.Hasil gas golfing terbaik bukan sekadar angka gas terkecil, melainkan biaya terendah yang tetap aman untuk menyediakan fungsi mata uang kripto yang dibutuhkan.Anda Mungkin Juga Menyukai
ZK-Rollup
ZK-Rollup-as-a-Service
zk-SNARK
POPULER
Mata uang kripto yang sedang tren saat ini dan menarik perhatian pasar yang signifikan
Volume TERATAS
Mata uang kripto dengan volume trading tertinggi
Baru Ditambahkan
Mata uang kripto yang baru saja masuk listing dan tersedia untuk trading

