EVM akıllı sözleşmeler Gas ücret optimizasyon rehberi
Ethereum ağı üzerinde, Gas ücretleri kullanıcılar için her zaman can sıkıcı bir sorun olmuştur, özellikle de ağın yoğun olduğu dönemlerde. İşlem yoğunluğu dönemlerinde, kullanıcılar genellikle işlemi tamamlamak için yüksek ücretler ödemek zorunda kalmaktadır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücreti optimizasyonu özellikle önemlidir. Gas tüketimini optimize etmek yalnızca işlem maliyetlerini etkili bir şekilde azaltmakla kalmaz, aynı zamanda işlem verimliliğini artırarak kullanıcılara daha ekonomik ve verimli bir blockchain deneyimi sunar.
Bu makale, Ethereum Sanal Makinesi (EVM)'in Gas ücreti mekanizmasını, Gas ücreti optimizasyonunun temel kavramlarını ve akıllı sözleşmeler geliştirme sürecinde Gas ücreti optimizasyonunun en iyi uygulamalarını özetleyecektir. Bu bilgilerin geliştiricilere faydalı bir referans sağlamasını ve aynı zamanda sıradan kullanıcıların EVM'in Gas ücretleri çalışma şekmini daha iyi anlamalarına yardımcı olmasını umuyoruz, böylece blockchain ekosistemindeki zorluklarla birlikte başa çıkabiliriz.
EVM'nin Gas Ücreti Mekanizması Hakkında Kısa Bilgi
EVM uyumlu ağlarda, Gas belirli bir işlemi gerçekleştirmek için gereken hesaplama gücünün ölçü birimidir.
EVM'nin yapı düzeninde, Gas tüketimi esasen üç parçaya ayrılır: işlem yürütme, dış mesaj çağrısı ve bellek ile depolama okuma/yazma.
Her işlem için gerçekleştirilmesi gereken hesaplama kaynakları tüketilir, bu nedenle sonsuz döngüleri ve hizmet reddi ( DoS ) saldırılarını önlemek için belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücret, gaz ücreti olarak adlandırılır.
EIP-1559'un uygulanmasından bu yana, Gas ücretleri aşağıdaki formülle hesaplanmaktadır:
Gaz ücreti = Kullanılan Gaz birimi * ( temel ücret + öncelik ücreti )
Bu arada, temel ücret yok edilecek, öncelik ücreti ise teşvik olarak kullanılacak ve doğrulayıcıların işlemleri blok zincirine eklemelerini teşvik edecektir. Daha yüksek bir öncelik ücreti belirlemek, işlemin bir sonraki bloğa paketlenme olasılığını artırabilir.
EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeler derlendiğinde, sözleşme bir dizi (işlem koduna) dönüştürülür.
Her opcode (, sözleşme oluşturma, mesaj çağrısı yapma, hesap depolama erişimi gibi işlemler için ) sabit bir Gas tüketim maliyetine sahiptir. Bu maliyetler Ethereum sarı kitabında kaydedilmiştir, ancak birçok EIP değişikliği ile bazı opcode'ların Gas maliyetleri ayarlanmıştır.
Gaz optimizasyonunun temel kavramı
Gas optimizasyonunun temel ilkesi, EVM blok zincirinde maliyet verimliliği yüksek işlemleri öncelikli olarak seçmek ve Gas maliyeti yüksek işlemlerden kaçınmaktır.
EVM'de, aşağıdaki işlemlerin maliyeti düşüktür:
Bellek değişkenlerini okuma/yazma
Sabitler ve değişmez değişkenler okumak
Yerel değişkenleri oku/yaz
calldata değişkenini oku
İç fonksiyon çağrısı
Maliyeti yüksek olan işlemler şunlardır:
Sözleşme depolamasında saklanan durum değişkenlerini okuyun ve yazın
Harici fonksiyon çağrısı
Döngüsel işlem
EVM Gas ücreti optimizasyonu için en iyi uygulamalar
1. Depolama kullanımını mümkün olduğunca azaltın
Solidity'de, Storage( depolama) sınırlı bir kaynak olup, Gaz tüketimi Memory( bellek)'den çok daha yüksektir. Her akıllı sözleşme depolamadan veri okuduğunda veya yazdığında, yüksek Gaz maliyetleri ortaya çıkar.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinden 100 kat daha fazladır. Örneğin, mload ve mstore talimatları yalnızca 3 Gas birimi harcarken, sload ve sstore en ideal durumlarda bile en az 100 birim maliyet gerektirir.
Depolama değişiklik sayısını azaltma: Ara sonuçları bellekte saklayarak, tüm hesaplamalar tamamlandıktan sonra sonuçları depolama değişkenine atayın.
2. Değişken paketleme
akıllı sözleşmelerde Storage slot( depolama slotu)'ün sayısı ve veri gösterim şekli Gas ücret tüketimini büyük ölçüde etkileyecektir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini 32 baytlık depolama yuvası olarak değişken depolamanın temel birimi olarak paketler. Değişken paketleme, değişkenlerin mantıklı bir şekilde düzenlenmesiyle, birden fazla değişkenin tek bir depolama yuvasına uyum sağlamasını ifade eder.
Bu ayarlama sayesinde, geliştiriciler büyük miktarda Gas birimi tasarrufu yapabilirler. Her depolama alanının Gas tüketmesi nedeniyle, değişkenlerin paketlenmesi, gerekli depolama alanlarının sayısını azaltarak Gas kullanımını optimize eder.
3. Veri türlerini optimize etme
Uygun veri tipini seçmek, Gas kullanımını optimize etmeye yardımcı olur.
Örneğin, Solidity'de tam sayılar farklı boyutlara ayrılabilir: uint8, uint16, uint32 vb. EVM 256 bitlik birimlerle işlem yaptığı için uint8 kullanmak, EVM'nin önce bunu uint256'ya dönüştürmesi gerektiği anlamına gelir ve bu dönüşüm ek Gaz tüketir.
Ancak, dört uint8 değişkenini bir depolama alanına yerleştirebilirsek, bunların toplam maliyeti dört uint256 değişkenine göre daha düşük olacaktır. Bu şekilde, akıllı sözleşmeler bir depolama alanını bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini bellek/depolama alanına yerleştirebilir.
4. Sabit boyutlu değişkenler kullanarak dinamik değişkenleri değiştirin
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri tipinin kullanılması önerilir. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlerden daha az Gas tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkün olduğunca bytes1'den bytes32'ye kadar en küçük uzunluğu seçin.
5. Haritalar ve diziler
Solidity'nin veri listesi iki veri türü ile temsil edilebilir: diziler (Arrays ) ve haritalar (Mappings ).
Çoğu durumda haritalama daha verimlidir ve maliyeti daha düşüktür, ancak diziler yine de yinelemeye açıktır ve veri türü paketlemeyi destekler. Bu nedenle, veri listesini yönetirken haritalamanın öncelikli olarak kullanılması önerilir, yalnızca yinelemeye ihtiyaç varsa veya veri türü paketlenmesiyle Gas tüketimi optimize edilebiliyorsa.
6. calldata yerine memory kullanın
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory içinde depolanabilir. İkisi arasındaki ana fark, memory'nin fonksiyon tarafından değiştirilebilmesi, calldata'nın ise değiştirilemez olmasıdır.
Eğer fonksiyon parametreleri sadece okunabilir ise, memory yerine öncelikle calldata kullanılmalıdır. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.
Constant/Immutable değişkenler sözleşmenin depolarında saklanmaz. Bu değişkenler derleme zamanında hesaplanır ve sözleşmenin bayt kodunda saklanır. Bu nedenle, depolamaya kıyasla erişim maliyetleri çok daha düşüktür, bu yüzden mümkün olduğunca Constant veya Immutable anahtar kelimelerinin kullanılmasını öneririz.
Geliştiriciler, aritmetik işlemlerin taşmaya veya alt sınıra yol açmayacağından emin olduklarında, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt sınıra kontrolünü önleyebilir ve böylece Gas maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyici artık SafeMath kütüphanesini kullanmayı gerektirmiyor, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak içeriyor.
9. Optimizasyon Değiştiricisi
Değiştirici kodu, değiştirilmiş fonksiyonun içine yerleştirilir; her değiştirici kullanıldığında, kod kopyalanır. Bu, bytecode'un boyutunu artırır ve Gas tüketimini yükseltir.
Mantığı iç fonksiyonlar olarak yeniden yapılandırarak, bu iç fonksiyonun modülatör içinde tekrar kullanılmasına izin vermek, bytecode boyutunu azaltabilir ve Gas maliyetini düşürebilir.
10. Kısa yol optimizasyonu
|| ve && operatörleri için, mantıksal işlemler kısa devre değerlendirmesi yapar; yani, eğer birinci koşul mantıksal ifadenin sonucunu belirleyebiliyorsa, ikinci koşul değerlendirilmez.
Gas tüketimini optimize etmek için, düşük maliyetli hesaplama koşullarını öncelikli hale getirmeli, böylece yüksek maliyetli hesaplamaları atlama olasılığı artırılmalıdır.
Ek Genel Tavsiyeler
1. Gereksiz kodları sil
Eğer sözleşmede kullanılmayan fonksiyonlar veya değişkenler varsa, bunların silinmesi önerilir. Bu, sözleşme dağıtım maliyetlerini azaltmanın ve sözleşme boyutunu küçük tutmanın en doğrudan yoludur.
Bazı pratik öneriler:
En verimli algoritmaları kullanarak hesaplama yapın.
Kullanılmayan hesaplama süreçlerini sil.
Artık gerekli olmayan değişkenleri silmek için delete anahtar kelimesini kullanın veya bunları varsayılan değere ayarlayın.
Döngü optimizasyonu: Yüksek maliyetli döngü işlemlerinden kaçının, döngüleri mümkün olduğunca birleştirin ve tekrar eden hesaplamaları döngü gövdesinin dışına çıkarın.
2. Önyazılı sözleşmeleri kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve karma işlemleri gibi karmaşık kütüphane işlevleri sunar. Kod EVM üzerinde çalışmadığı, bunun yerine istemci düğümünün yerelinde çalıştığı için gereken Gaz daha azdır. Önceden derlenmiş sözleşmeler, akıllı sözleşmenin yürütülmesi için gereken hesaplama yükünü azaltarak Gaz tasarrufu yapmayı sağlar.
Önceden derlenmiş sözleşmelerin örnekleri arasında Eliptik Eğri Dijital İmza Algoritması (ECDSA) ve SHA2-256 hash algoritması bulunmaktadır.
3. İç içe montaj kodu kullanma
İç içe montaj, geliştiricilerin EVM tarafından doğrudan yürütülebilecek düşük seviyeli ancak verimli kod yazmalarına olanak tanır, pahalı Solidity işlem kodlarını kullanmadan. İç içe montaj ayrıca bellek ve depolamanın kullanımını daha hassas bir şekilde kontrol etmeye olanak tanır, böylece Gaz ücretlerini daha da azaltır. Ayrıca, iç içe montaj, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri gerçekleştirebilir ve Gaz tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe derleme kullanmak da riskler taşıyabilir ve hata yapma olasılığını artırabilir. Bu nedenle dikkatli kullanılmalı, yalnızca deneyimli geliştiricilerin işlemesi gereken bir durumdur.
4. Layer 2 çözümleri kullanma
Layer 2 çözümleri kullanmak, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.
Rolluplar, yan zincirler ve durum kanalları gibi Layer 2 çözümleri, işlem işlemesini ana Ethereum zincirinden yükten çıkararak daha hızlı ve daha ucuz işlemler gerçekleştirmeyi sağlar.
Bu çözümler, büyük miktarda işlemi bir araya getirerek, zincir üstü işlem sayısını azaltır ve böylece Gas ücretlerini düşürür. Layer 2 çözümlerinin kullanılması, Ethereum'un ölçeklenebilirliğini artırabilir ve daha fazla kullanıcının ve uygulamanın ağa katılmasını sağlar, bu da ağın aşırı yüklenmesinden kaynaklanan tıkanıklığı önler.
5. Optimize araçları ve kütüphaneleri kullanma
Birden fazla optimizasyon aracı mevcuttur, örneğin solc optimizasyon aracı, Truffle'ın yapı optimizasyon aracı ve Remix'in Solidity derleyicisi.
Bu araçlar, bytecode'un boyutunu en aza indirmeye, gereksiz kodları silmeye ve akıllı sözleşmelerin yürütülmesi için gereken işlem sayısını azaltmaya yardımcı olabilir. Diğer Gas optimizasyon kütüphaneleriyle, örneğin "solmate", geliştiriciler Gas maliyetlerini etkili bir şekilde azaltabilir ve akıllı sözleşmelerin verimliliğini artırabilir.
Sonuç
Gas tüketimini optimize etmek, geliştiriciler için önemli bir adımdır.
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.
15 Likes
Reward
15
9
Share
Comment
0/400
NotGonnaMakeIt
· 07-13 18:50
Beyaz su Blok Zinciri Topluluğu anlar, çekirdek sadece gas satmaktır.
View OriginalReply0
DeFiGrayling
· 07-13 18:26
gas çok pahalı, neredeyse iflas ediyordum.
View OriginalReply0
BearMarketSurvivor
· 07-13 13:49
gas ücreti yine fakir halkı kandırdı, üzücü
View OriginalReply0
WalletManager
· 07-12 02:38
gas çok pahalı, L2'de işlem yapmak daha iyi.
View OriginalReply0
RugDocDetective
· 07-12 02:36
Artık abartmayı bırak, gas ücreti en büyük sorun.
View OriginalReply0
BearMarketGardener
· 07-12 02:21
pro yine iş yapıyor, ne alınmalı Kesinti Kaybı işlemleri geldi.
View OriginalReply0
DataChief
· 07-12 02:18
Aman Tanrım, yine su gaz ücreti. Yeni bir şeyler söyleyebilir misin?
View OriginalReply0
RektCoaster
· 07-12 02:16
Bana cüzdanımı nasıl kurtarabileceğimi kim söyleyebilir? gas ücretleri gerçekten çok yüksek.
View OriginalReply0
MaticHoleFiller
· 07-12 02:10
gas ücreti gerçekten harika, bir de V神'i çok para kazandırdı.
EVM akıllı sözleşmeler Gas ücreti optimizasyon rehberi 10 pratik ipucu
EVM akıllı sözleşmeler Gas ücret optimizasyon rehberi
Ethereum ağı üzerinde, Gas ücretleri kullanıcılar için her zaman can sıkıcı bir sorun olmuştur, özellikle de ağın yoğun olduğu dönemlerde. İşlem yoğunluğu dönemlerinde, kullanıcılar genellikle işlemi tamamlamak için yüksek ücretler ödemek zorunda kalmaktadır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücreti optimizasyonu özellikle önemlidir. Gas tüketimini optimize etmek yalnızca işlem maliyetlerini etkili bir şekilde azaltmakla kalmaz, aynı zamanda işlem verimliliğini artırarak kullanıcılara daha ekonomik ve verimli bir blockchain deneyimi sunar.
Bu makale, Ethereum Sanal Makinesi (EVM)'in Gas ücreti mekanizmasını, Gas ücreti optimizasyonunun temel kavramlarını ve akıllı sözleşmeler geliştirme sürecinde Gas ücreti optimizasyonunun en iyi uygulamalarını özetleyecektir. Bu bilgilerin geliştiricilere faydalı bir referans sağlamasını ve aynı zamanda sıradan kullanıcıların EVM'in Gas ücretleri çalışma şekmini daha iyi anlamalarına yardımcı olmasını umuyoruz, böylece blockchain ekosistemindeki zorluklarla birlikte başa çıkabiliriz.
EVM'nin Gas Ücreti Mekanizması Hakkında Kısa Bilgi
EVM uyumlu ağlarda, Gas belirli bir işlemi gerçekleştirmek için gereken hesaplama gücünün ölçü birimidir.
EVM'nin yapı düzeninde, Gas tüketimi esasen üç parçaya ayrılır: işlem yürütme, dış mesaj çağrısı ve bellek ile depolama okuma/yazma.
Her işlem için gerçekleştirilmesi gereken hesaplama kaynakları tüketilir, bu nedenle sonsuz döngüleri ve hizmet reddi ( DoS ) saldırılarını önlemek için belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücret, gaz ücreti olarak adlandırılır.
EIP-1559'un uygulanmasından bu yana, Gas ücretleri aşağıdaki formülle hesaplanmaktadır:
Gaz ücreti = Kullanılan Gaz birimi * ( temel ücret + öncelik ücreti )
Bu arada, temel ücret yok edilecek, öncelik ücreti ise teşvik olarak kullanılacak ve doğrulayıcıların işlemleri blok zincirine eklemelerini teşvik edecektir. Daha yüksek bir öncelik ücreti belirlemek, işlemin bir sonraki bloğa paketlenme olasılığını artırabilir.
EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeler derlendiğinde, sözleşme bir dizi (işlem koduna) dönüştürülür.
Her opcode (, sözleşme oluşturma, mesaj çağrısı yapma, hesap depolama erişimi gibi işlemler için ) sabit bir Gas tüketim maliyetine sahiptir. Bu maliyetler Ethereum sarı kitabında kaydedilmiştir, ancak birçok EIP değişikliği ile bazı opcode'ların Gas maliyetleri ayarlanmıştır.
Gaz optimizasyonunun temel kavramı
Gas optimizasyonunun temel ilkesi, EVM blok zincirinde maliyet verimliliği yüksek işlemleri öncelikli olarak seçmek ve Gas maliyeti yüksek işlemlerden kaçınmaktır.
EVM'de, aşağıdaki işlemlerin maliyeti düşüktür:
Maliyeti yüksek olan işlemler şunlardır:
EVM Gas ücreti optimizasyonu için en iyi uygulamalar
1. Depolama kullanımını mümkün olduğunca azaltın
Solidity'de, Storage( depolama) sınırlı bir kaynak olup, Gaz tüketimi Memory( bellek)'den çok daha yüksektir. Her akıllı sözleşme depolamadan veri okuduğunda veya yazdığında, yüksek Gaz maliyetleri ortaya çıkar.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinden 100 kat daha fazladır. Örneğin, mload ve mstore talimatları yalnızca 3 Gas birimi harcarken, sload ve sstore en ideal durumlarda bile en az 100 birim maliyet gerektirir.
Saklama kullanımını sınırlama yöntemleri şunlardır:
2. Değişken paketleme
akıllı sözleşmelerde Storage slot( depolama slotu)'ün sayısı ve veri gösterim şekli Gas ücret tüketimini büyük ölçüde etkileyecektir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini 32 baytlık depolama yuvası olarak değişken depolamanın temel birimi olarak paketler. Değişken paketleme, değişkenlerin mantıklı bir şekilde düzenlenmesiyle, birden fazla değişkenin tek bir depolama yuvasına uyum sağlamasını ifade eder.
Bu ayarlama sayesinde, geliştiriciler büyük miktarda Gas birimi tasarrufu yapabilirler. Her depolama alanının Gas tüketmesi nedeniyle, değişkenlerin paketlenmesi, gerekli depolama alanlarının sayısını azaltarak Gas kullanımını optimize eder.
3. Veri türlerini optimize etme
Uygun veri tipini seçmek, Gas kullanımını optimize etmeye yardımcı olur.
Örneğin, Solidity'de tam sayılar farklı boyutlara ayrılabilir: uint8, uint16, uint32 vb. EVM 256 bitlik birimlerle işlem yaptığı için uint8 kullanmak, EVM'nin önce bunu uint256'ya dönüştürmesi gerektiği anlamına gelir ve bu dönüşüm ek Gaz tüketir.
Ancak, dört uint8 değişkenini bir depolama alanına yerleştirebilirsek, bunların toplam maliyeti dört uint256 değişkenine göre daha düşük olacaktır. Bu şekilde, akıllı sözleşmeler bir depolama alanını bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini bellek/depolama alanına yerleştirebilir.
4. Sabit boyutlu değişkenler kullanarak dinamik değişkenleri değiştirin
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri tipinin kullanılması önerilir. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlerden daha az Gas tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkün olduğunca bytes1'den bytes32'ye kadar en küçük uzunluğu seçin.
5. Haritalar ve diziler
Solidity'nin veri listesi iki veri türü ile temsil edilebilir: diziler (Arrays ) ve haritalar (Mappings ).
Çoğu durumda haritalama daha verimlidir ve maliyeti daha düşüktür, ancak diziler yine de yinelemeye açıktır ve veri türü paketlemeyi destekler. Bu nedenle, veri listesini yönetirken haritalamanın öncelikli olarak kullanılması önerilir, yalnızca yinelemeye ihtiyaç varsa veya veri türü paketlenmesiyle Gas tüketimi optimize edilebiliyorsa.
6. calldata yerine memory kullanın
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory içinde depolanabilir. İkisi arasındaki ana fark, memory'nin fonksiyon tarafından değiştirilebilmesi, calldata'nın ise değiştirilemez olmasıdır.
Eğer fonksiyon parametreleri sadece okunabilir ise, memory yerine öncelikle calldata kullanılmalıdır. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.
7. Mümkünse Constant/Immutable anahtar kelimelerini kullanın
Constant/Immutable değişkenler sözleşmenin depolarında saklanmaz. Bu değişkenler derleme zamanında hesaplanır ve sözleşmenin bayt kodunda saklanır. Bu nedenle, depolamaya kıyasla erişim maliyetleri çok daha düşüktür, bu yüzden mümkün olduğunca Constant veya Immutable anahtar kelimelerinin kullanılmasını öneririz.
8. Taşma/alt taşma olmaması sağlanırken Unchecked kullanın
Geliştiriciler, aritmetik işlemlerin taşmaya veya alt sınıra yol açmayacağından emin olduklarında, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt sınıra kontrolünü önleyebilir ve böylece Gas maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyici artık SafeMath kütüphanesini kullanmayı gerektirmiyor, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak içeriyor.
9. Optimizasyon Değiştiricisi
Değiştirici kodu, değiştirilmiş fonksiyonun içine yerleştirilir; her değiştirici kullanıldığında, kod kopyalanır. Bu, bytecode'un boyutunu artırır ve Gas tüketimini yükseltir.
Mantığı iç fonksiyonlar olarak yeniden yapılandırarak, bu iç fonksiyonun modülatör içinde tekrar kullanılmasına izin vermek, bytecode boyutunu azaltabilir ve Gas maliyetini düşürebilir.
10. Kısa yol optimizasyonu
|| ve && operatörleri için, mantıksal işlemler kısa devre değerlendirmesi yapar; yani, eğer birinci koşul mantıksal ifadenin sonucunu belirleyebiliyorsa, ikinci koşul değerlendirilmez.
Gas tüketimini optimize etmek için, düşük maliyetli hesaplama koşullarını öncelikli hale getirmeli, böylece yüksek maliyetli hesaplamaları atlama olasılığı artırılmalıdır.
Ek Genel Tavsiyeler
1. Gereksiz kodları sil
Eğer sözleşmede kullanılmayan fonksiyonlar veya değişkenler varsa, bunların silinmesi önerilir. Bu, sözleşme dağıtım maliyetlerini azaltmanın ve sözleşme boyutunu küçük tutmanın en doğrudan yoludur.
Bazı pratik öneriler:
2. Önyazılı sözleşmeleri kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve karma işlemleri gibi karmaşık kütüphane işlevleri sunar. Kod EVM üzerinde çalışmadığı, bunun yerine istemci düğümünün yerelinde çalıştığı için gereken Gaz daha azdır. Önceden derlenmiş sözleşmeler, akıllı sözleşmenin yürütülmesi için gereken hesaplama yükünü azaltarak Gaz tasarrufu yapmayı sağlar.
Önceden derlenmiş sözleşmelerin örnekleri arasında Eliptik Eğri Dijital İmza Algoritması (ECDSA) ve SHA2-256 hash algoritması bulunmaktadır.
3. İç içe montaj kodu kullanma
İç içe montaj, geliştiricilerin EVM tarafından doğrudan yürütülebilecek düşük seviyeli ancak verimli kod yazmalarına olanak tanır, pahalı Solidity işlem kodlarını kullanmadan. İç içe montaj ayrıca bellek ve depolamanın kullanımını daha hassas bir şekilde kontrol etmeye olanak tanır, böylece Gaz ücretlerini daha da azaltır. Ayrıca, iç içe montaj, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri gerçekleştirebilir ve Gaz tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe derleme kullanmak da riskler taşıyabilir ve hata yapma olasılığını artırabilir. Bu nedenle dikkatli kullanılmalı, yalnızca deneyimli geliştiricilerin işlemesi gereken bir durumdur.
4. Layer 2 çözümleri kullanma
Layer 2 çözümleri kullanmak, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.
Rolluplar, yan zincirler ve durum kanalları gibi Layer 2 çözümleri, işlem işlemesini ana Ethereum zincirinden yükten çıkararak daha hızlı ve daha ucuz işlemler gerçekleştirmeyi sağlar.
Bu çözümler, büyük miktarda işlemi bir araya getirerek, zincir üstü işlem sayısını azaltır ve böylece Gas ücretlerini düşürür. Layer 2 çözümlerinin kullanılması, Ethereum'un ölçeklenebilirliğini artırabilir ve daha fazla kullanıcının ve uygulamanın ağa katılmasını sağlar, bu da ağın aşırı yüklenmesinden kaynaklanan tıkanıklığı önler.
5. Optimize araçları ve kütüphaneleri kullanma
Birden fazla optimizasyon aracı mevcuttur, örneğin solc optimizasyon aracı, Truffle'ın yapı optimizasyon aracı ve Remix'in Solidity derleyicisi.
Bu araçlar, bytecode'un boyutunu en aza indirmeye, gereksiz kodları silmeye ve akıllı sözleşmelerin yürütülmesi için gereken işlem sayısını azaltmaya yardımcı olabilir. Diğer Gas optimizasyon kütüphaneleriyle, örneğin "solmate", geliştiriciler Gas maliyetlerini etkili bir şekilde azaltabilir ve akıllı sözleşmelerin verimliliğini artırabilir.
Sonuç
Gas tüketimini optimize etmek, geliştiriciler için önemli bir adımdır.