Ethereum akıllı sözleşmelerinin Gas ücretlerini optimize etmenin en iyi 10 uygulaması
Ethereum ana ağındaki Gas ücretleri her zaman zor bir sorun olmuştur, özellikle de ağ yoğun olduğunda bu daha belirgin hale gelir. Yoğun saatlerde, kullanıcılar genellikle çok yüksek işlem ücretleri ödemek zorunda kalır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücreti optimizasyonu son derece ö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 blok zinciri deneyimi sunar.
Bu yazı, Ethereum sanal makinesi (EVM)'in Gas ücret mekanizmasını, Gas ücreti optimizasyonunun temel kavramlarını ve akıllı sözleşmeler geliştirirken Gas ücreti optimizasyonunun en iyi uygulamalarını özetleyecektir. Bu içeriklerin geliştiricilere ilham ve pratik yardım sağlamasını, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretlerinin işleyişini 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 üç bölüme ayrılır: işlem yürütme, dış mesaj çağrısı ve hafıza ile depolamanın okuma/yazma işlemleri.
Her işlem için yürütme, hesaplama kaynağı gerektirdiğinden, sonsuz döngü ve hizmet reddi ( DoS ) saldırılarını önlemek için belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücrete "Gas ücreti" denir.
EIP-1559( Londra hard fork'u )'den itibaren geçerli olduğundan beri, Gas ücreti aşağıdaki formülle hesaplanmaktadır:
Gaz ücreti = kullanılan gaz birimleri * ( temel ücret + öncelik ücreti )
Temel ücret yok edilecek, öncelik ücreti ise bir teşvik olarak kullanılacak ve doğrulayıcıları işlemleri blok zincirine eklemeye teşvik edecektir. İşlem gönderirken daha yüksek bir öncelik ücreti ayarlamak, işlemin bir sonraki blokta yer alma olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara ödedikleri bir tür "bahşiş" gibidir.
1. EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeler derlendiğinde, sözleşme bir dizi "işlem koduna" yani opcodlara dönüştürülür.
Herhangi bir işlem kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişim sağlama ve sanal makinede işlem gerçekleştirme ) için, Ethereum sarı kitabında kaydedilen kabul görmüş bir Gas tüketim maliyeti vardır.
Birçok EIP değişikliğinden sonra, bazı opcode'ların Gas maliyetleri ayarlandı ve bu, sarı kitabın içeriğiyle farklılık gösterebilir.
2.Gas optimizasyonunun temel kavramları
Gas optimizasyonunun temel ilkesi, EVM blok zinciri üzerinde maliyet verimliliği yüksek işlemleri önceliklendirmek ve Gas maliyeti yüksek işlemlerden kaçınmaktır.
EVM'de aşağıdaki işlemlerin maliyeti daha düşüktür:
Bellek değişkenlerini okuma ve yazma
Sabitler ve değiştirilemez değişkenler oku
Yerel değişkenleri oku ve yaz
calldata değişkenini oku, örneğin calldata dizileri ve yapıları
İç fonksiyon çağrısı
Yüksek maliyetli işlemler şunlardır:
Sözleşme depolamasında depolanan durum değişkenlerini okumak ve yazmak
Dış fonksiyon çağrısı
Döngü işlemi
EVM Gaz ücreti optimizasyonu için en iyi uygulamalar
Yukarıda belirtilen temel kavramlara dayanarak, geliştirici topluluğu için bir Gas ücreti optimizasyonu en iyi uygulama listesi derledik. Bu uygulamalara uyarak, geliştiriciler akıllı sözleşmelerin Gas ücreti tüketimini azaltabilir, işlem maliyetlerini düşürebilir ve daha verimli ve kullanıcı dostu uygulamalar geliştirebilir.
1. Depolama kullanımını azaltmaya çalışın
Solidity'de, Storage( depolama) sınırlı bir kaynaktır ve Gas tüketimi Memory( belleği)'den çok daha yüksektir. Her seferinde bir akıllı sözleşme depolamadan veri okuduğunda veya yazdığında yüksek Gas maliyetleri oluşur.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti, bellek işlemlerinin maliyetinden 100 kat daha fazladır. Örneğin, OPcodesmload ve mstore komutları yalnızca 3 Gas birimi tüketirken, depolama işlemleri olan 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şkenlerine atamak.
2.Değişken Paketleme
akıllı sözleşmelerde kullanılan Storage slot( depolama alanının) miktarı ve geliştiricilerin verileri ifade etme şekli Gas ücretlerinin tüketimini büyük ölçüde etkileyebilir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık depolama slotunu değişkenlerin depolandığı temel birim olarak kullanır. Değişken paketleme, değişkenlerin mantıklı bir şekilde düzenlenmesiyle birden fazla değişkenin tek bir depolama slotuna uyum sağlamasını ifade eder.
Bu ayrıntı ayarı sayesinde geliştiriciler 20.000 Gas birimini tasarruf edebilir. Kullanılmamış bir depolama alanı depolamak 20.000 Gas( gerektirirken, artık yalnızca iki depolama alanına ihtiyaç vardır.
Her depolama alanı Gas tüketeceğinden, değişken paketleme, gereken depolama alanı sayısını azaltarak Gas kullanımını optimize eder.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Veri türlerini optimize et
Bir değişken birden fazla veri türü ile temsil edilebilir, ancak farklı veri türlerinin karşılık gelen işlem maliyetleri de farklıdır. Uygun veri türünü seçmek, Gaz 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 gerçekleştirdiğinden, uint8 kullanmak EVM'nin önce bunu uint256'ya dönüştürmesi gerektiği anlamına gelir ve bu dönüşüm ek Gas tüketimine yol açar.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonunu kullanırsak durum farklıdır. Geliştirici dört uint8 değişkenini bir depolama slotuna pakete alabiliyorsa, bunları yinelemenin toplam maliyeti dört uint256 değişkeninden daha düşük olacaktır. Böylece, akıllı sözleşme bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini bellek/depolama alanına yerleştirebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Sabit boyutlu değişkenler kullanarak dinamik değişkenlerin yerine geçin.
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri türünü kullanmanız önerilir. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlere göre daha az Gas tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkün olan en küçük uzunluğu bytes1 ile bytes32 arasında seçmeye çalışın.
5. Haritalar ve Diziler
Solidity verileri iki tür veri tipi ile temsil edilebilir: diziler ###Arrays ( ve haritalar )Mappings (, ancak bunların sözdizimi ve yapısı tamamen farklıdır.
Çoğu durumda haritalama daha verimlidir ve maliyeti daha düşüktür, ancak diziler yineleyebilirlik sunar ve veri türlerinin paketlenmesini destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yalnızca yinelemeye ihtiyaç duyuluyorsa veya veri türlerinin paketlenmesi ile Gas tüketimi optimize edilebiliyorsa.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. calldata yerine memory kullanma
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki ana fark, memory'nin fonksiyon tarafından değiştirilebilmesi, calldata'nın ise değiştirilemez olmasıdır.
Bu prensibi unutmayın: Eğer fonksiyon parametreleri salt okunur ise, öncelikle calldata kullanılmalıdır, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.
Constant/Immutable değişkenler sözleşmenin depolama alanında saklanmaz. Bu değişkenler derleme zamanında hesaplanır ve sözleşmenin byte kodunda saklanır. Bu nedenle, depolama ile karşılaştırıldığında erişim maliyetleri çok daha düşüktür, mümkün olduğunca Constant veya Immutable anahtar kelimelerini kullanmanız önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
Geliştiriciler, aritmetik işlemlerin taşma veya alt taşma ile sonuçlanmayacağını belirleyebildiklerinde, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt taşma kontrollerinden kaçınabilir ve böylece Gas maliyetlerini azaltabilir.
Ayrıca, 0.8.0 ve üzeri sürümlerde derleyicinin artık SafeMath kütüphanesini kullanmasına gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini entegre etmiştir.
9. optimize edici
Değiştirici kodu, değiştirilmiş fonksiyon içine yerleştirilir, her değiştirici kullanıldığında, kodu kopyalanır. Bu, bytecode boyutunu artırır ve Gas tüketimini yükseltir.
İçsel fonksiyonu _checkOwner###( olarak yeniden yapılandırarak, bu içsel fonksiyonun modifier içinde tekrar kullanılmasına izin verilmesi, bytecode boyutunu azaltabilir ve Gas maliyetini düşürebilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Kısa devre optimizasyonu
|| ve && operatörleri için, mantıksal işlemler kısa devre değerlendirmesi yapar; yani, eğer ilk koşul mantıksal ifadenin sonucunu belirliyorsa, ikinci koşul değerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öncelikli hale getirmek gerekir; bu, maliyeti yüksek hesaplamaların atlanmasını mümkün kılabilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Ek Genel Öneriler
) 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şmenin boyutunu küçük tutmanın en doğrudan yoludur.
Aşağıda bazı pratik öneriler bulunmaktadır:
En verimli algoritmaları kullanarak hesaplama yapın. Eğer sözleşmede bazı hesaplamaların sonuçları doğrudan kullanılıyorsa, bu gereksiz hesaplama süreçleri kaldırılmalıdır. Özünde, kullanılmayan herhangi bir hesaplama silinmelidir.
Ethereum'da geliştiriciler, depolama alanını serbest bırakarak Gas ödülü kazanabilirler. Eğer bir değişkene artık ihtiyaç yoksa, onu silmek için delete anahtar kelimesini kullanmalı veya varsayılan değere ayarlamalıdır.
Döngü optimizasyonu: Yüksek maliyetli döngü işlemlerinden kaçınmak, döngüleri mümkün olduğunca birleştirmek ve tekrarlayan hesaplamaları döngü gövdesinin dışına taşımak.
2. Önyargılı sözleşmeler kullanma
Önceden derlenmiş akıllı sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane işlevleri sağlar. Kod EVM'de değil, istemci düğümünde yerel olarak çalıştığı için gereken Gas daha azdır. Önceden derlenmiş akıllı sözleşmeler, akıllı sözleşmelerin yürütülmesi için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlar.
Önceden derlenmiş sözleşme örnekleri arasında eliptik eğri dijital imza algoritması ###ECDSA( ve SHA2-256 hash algoritması bulunmaktadır. Geliştiriciler, bu önceden derlenmiş sözleşmeleri akıllı sözleşmelerde kullanarak Gas maliyetlerini azaltabilir ve uygulamaların çalışma verimliliğini artırabilirler.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 3. Inline Assembly Kodu Kullanma
İç içe derleme ### in-line assembly (, geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli fakat verimli kod yazmalarına izin verir ve pahalı Solidity opcode'larını kullanmalarına gerek bırakmaz. İç içe derleme ayrıca bellek ve depolama kullanımını daha hassas bir şekilde kontrol etmeye olanak tanır, böylece Gas ücretlerini daha da azaltır. Ayrıca, iç içe derleme, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri gerçekleştirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanmak riskler getirebilir ve hata yapma olasılığını artırabilir. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin işlemesiyle sınırlı olmalıdır.
) 4.Layer 2 çözümleri kullanma
Layer 2 çözümleri kullanmak, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.
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.
21 Likes
Reward
21
5
Repost
Share
Comment
0/400
LootboxPhobia
· 07-07 22:43
gas gerçekten güzel bir koku yok.
View OriginalReply0
OnChainSleuth
· 07-06 04:36
Yine enayilere oyuna getirilmek için Gas ücreti.
View OriginalReply0
TokenomicsTrapper
· 07-05 08:12
lmao başka bir "gas optimizasyonu" başlığı... bu "optimize edilmiş" sözleşmeler yük altında rekt olduğunda tasfiye - likidasyon zincirini görene kadar bekle
Ethereum akıllı sözleşmeleri için en iyi on uygulama Gas ücretlerini optimize etme
Ethereum akıllı sözleşmelerinin Gas ücretlerini optimize etmenin en iyi 10 uygulaması
Ethereum ana ağındaki Gas ücretleri her zaman zor bir sorun olmuştur, özellikle de ağ yoğun olduğunda bu daha belirgin hale gelir. Yoğun saatlerde, kullanıcılar genellikle çok yüksek işlem ücretleri ödemek zorunda kalır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücreti optimizasyonu son derece ö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 blok zinciri deneyimi sunar.
Bu yazı, Ethereum sanal makinesi (EVM)'in Gas ücret mekanizmasını, Gas ücreti optimizasyonunun temel kavramlarını ve akıllı sözleşmeler geliştirirken Gas ücreti optimizasyonunun en iyi uygulamalarını özetleyecektir. Bu içeriklerin geliştiricilere ilham ve pratik yardım sağlamasını, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretlerinin işleyişini 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 üç bölüme ayrılır: işlem yürütme, dış mesaj çağrısı ve hafıza ile depolamanın okuma/yazma işlemleri.
Her işlem için yürütme, hesaplama kaynağı gerektirdiğinden, sonsuz döngü ve hizmet reddi ( DoS ) saldırılarını önlemek için belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücrete "Gas ücreti" denir.
EIP-1559( Londra hard fork'u )'den itibaren geçerli olduğundan beri, Gas ücreti aşağıdaki formülle hesaplanmaktadır:
Gaz ücreti = kullanılan gaz birimleri * ( temel ücret + öncelik ücreti )
Temel ücret yok edilecek, öncelik ücreti ise bir teşvik olarak kullanılacak ve doğrulayıcıları işlemleri blok zincirine eklemeye teşvik edecektir. İşlem gönderirken daha yüksek bir öncelik ücreti ayarlamak, işlemin bir sonraki blokta yer alma olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara ödedikleri bir tür "bahşiş" gibidir.
1. EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeler derlendiğinde, sözleşme bir dizi "işlem koduna" yani opcodlara dönüştürülür.
Herhangi bir işlem kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişim sağlama ve sanal makinede işlem gerçekleştirme ) için, Ethereum sarı kitabında kaydedilen kabul görmüş bir Gas tüketim maliyeti vardır.
Birçok EIP değişikliğinden sonra, bazı opcode'ların Gas maliyetleri ayarlandı ve bu, sarı kitabın içeriğiyle farklılık gösterebilir.
2.Gas optimizasyonunun temel kavramları
Gas optimizasyonunun temel ilkesi, EVM blok zinciri üzerinde maliyet verimliliği yüksek işlemleri önceliklendirmek ve Gas maliyeti yüksek işlemlerden kaçınmaktır.
EVM'de aşağıdaki işlemlerin maliyeti daha düşüktür:
Yüksek maliyetli işlemler şunlardır:
EVM Gaz ücreti optimizasyonu için en iyi uygulamalar
Yukarıda belirtilen temel kavramlara dayanarak, geliştirici topluluğu için bir Gas ücreti optimizasyonu en iyi uygulama listesi derledik. Bu uygulamalara uyarak, geliştiriciler akıllı sözleşmelerin Gas ücreti tüketimini azaltabilir, işlem maliyetlerini düşürebilir ve daha verimli ve kullanıcı dostu uygulamalar geliştirebilir.
1. Depolama kullanımını azaltmaya çalışın
Solidity'de, Storage( depolama) sınırlı bir kaynaktır ve Gas tüketimi Memory( belleği)'den çok daha yüksektir. Her seferinde bir akıllı sözleşme depolamadan veri okuduğunda veya yazdığında yüksek Gas maliyetleri oluşur.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti, bellek işlemlerinin maliyetinden 100 kat daha fazladır. Örneğin, OPcodesmload ve mstore komutları yalnızca 3 Gas birimi tüketirken, depolama işlemleri olan 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 kullanılan Storage slot( depolama alanının) miktarı ve geliştiricilerin verileri ifade etme şekli Gas ücretlerinin tüketimini büyük ölçüde etkileyebilir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık depolama slotunu değişkenlerin depolandığı temel birim olarak kullanır. Değişken paketleme, değişkenlerin mantıklı bir şekilde düzenlenmesiyle birden fazla değişkenin tek bir depolama slotuna uyum sağlamasını ifade eder.
Bu ayrıntı ayarı sayesinde geliştiriciler 20.000 Gas birimini tasarruf edebilir. Kullanılmamış bir depolama alanı depolamak 20.000 Gas( gerektirirken, artık yalnızca iki depolama alanına ihtiyaç vardır.
Her depolama alanı Gas tüketeceğinden, değişken paketleme, gereken depolama alanı sayısını azaltarak Gas kullanımını optimize eder.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Veri türlerini optimize et
Bir değişken birden fazla veri türü ile temsil edilebilir, ancak farklı veri türlerinin karşılık gelen işlem maliyetleri de farklıdır. Uygun veri türünü seçmek, Gaz 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 gerçekleştirdiğinden, uint8 kullanmak EVM'nin önce bunu uint256'ya dönüştürmesi gerektiği anlamına gelir ve bu dönüşüm ek Gas tüketimine yol açar.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonunu kullanırsak durum farklıdır. Geliştirici dört uint8 değişkenini bir depolama slotuna pakete alabiliyorsa, bunları yinelemenin toplam maliyeti dört uint256 değişkeninden daha düşük olacaktır. Böylece, akıllı sözleşme bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini bellek/depolama alanına yerleştirebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Sabit boyutlu değişkenler kullanarak dinamik değişkenlerin yerine geçin.
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri türünü kullanmanız önerilir. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlere göre daha az Gas tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkün olan en küçük uzunluğu bytes1 ile bytes32 arasında seçmeye çalışın.
5. Haritalar ve Diziler
Solidity verileri iki tür veri tipi ile temsil edilebilir: diziler ###Arrays ( ve haritalar )Mappings (, ancak bunların sözdizimi ve yapısı tamamen farklıdır.
Çoğu durumda haritalama daha verimlidir ve maliyeti daha düşüktür, ancak diziler yineleyebilirlik sunar ve veri türlerinin paketlenmesini destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yalnızca yinelemeye ihtiyaç duyuluyorsa veya veri türlerinin paketlenmesi ile Gas tüketimi optimize edilebiliyorsa.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. calldata yerine memory kullanma
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki ana fark, memory'nin fonksiyon tarafından değiştirilebilmesi, calldata'nın ise değiştirilemez olmasıdır.
Bu prensibi unutmayın: Eğer fonksiyon parametreleri salt okunur ise, öncelikle calldata kullanılmalıdır, memory yerine. 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 depolama alanında saklanmaz. Bu değişkenler derleme zamanında hesaplanır ve sözleşmenin byte kodunda saklanır. Bu nedenle, depolama ile karşılaştırıldığında erişim maliyetleri çok daha düşüktür, mümkün olduğunca Constant veya Immutable anahtar kelimelerini kullanmanız önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Taşma/alt taşma olmayacağından emin olduğunuzda Unchecked kullanın
Geliştiriciler, aritmetik işlemlerin taşma veya alt taşma ile sonuçlanmayacağını belirleyebildiklerinde, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt taşma kontrollerinden kaçınabilir ve böylece Gas maliyetlerini azaltabilir.
Ayrıca, 0.8.0 ve üzeri sürümlerde derleyicinin artık SafeMath kütüphanesini kullanmasına gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini entegre etmiştir.
9. optimize edici
Değiştirici kodu, değiştirilmiş fonksiyon içine yerleştirilir, her değiştirici kullanıldığında, kodu kopyalanır. Bu, bytecode boyutunu artırır ve Gas tüketimini yükseltir.
İçsel fonksiyonu _checkOwner###( olarak yeniden yapılandırarak, bu içsel fonksiyonun modifier içinde tekrar kullanılmasına izin verilmesi, bytecode boyutunu azaltabilir ve Gas maliyetini düşürebilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Kısa devre optimizasyonu
|| ve && operatörleri için, mantıksal işlemler kısa devre değerlendirmesi yapar; yani, eğer ilk koşul mantıksal ifadenin sonucunu belirliyorsa, ikinci koşul değerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öncelikli hale getirmek gerekir; bu, maliyeti yüksek hesaplamaların atlanmasını mümkün kılabilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Ek Genel Öneriler
) 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şmenin boyutunu küçük tutmanın en doğrudan yoludur.
Aşağıda bazı pratik öneriler bulunmaktadır:
En verimli algoritmaları kullanarak hesaplama yapın. Eğer sözleşmede bazı hesaplamaların sonuçları doğrudan kullanılıyorsa, bu gereksiz hesaplama süreçleri kaldırılmalıdır. Özünde, kullanılmayan herhangi bir hesaplama silinmelidir.
Ethereum'da geliştiriciler, depolama alanını serbest bırakarak Gas ödülü kazanabilirler. Eğer bir değişkene artık ihtiyaç yoksa, onu silmek için delete anahtar kelimesini kullanmalı veya varsayılan değere ayarlamalıdır.
Döngü optimizasyonu: Yüksek maliyetli döngü işlemlerinden kaçınmak, döngüleri mümkün olduğunca birleştirmek ve tekrarlayan hesaplamaları döngü gövdesinin dışına taşımak.
2. Önyargılı sözleşmeler kullanma
Önceden derlenmiş akıllı sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane işlevleri sağlar. Kod EVM'de değil, istemci düğümünde yerel olarak çalıştığı için gereken Gas daha azdır. Önceden derlenmiş akıllı sözleşmeler, akıllı sözleşmelerin yürütülmesi için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlar.
Önceden derlenmiş sözleşme örnekleri arasında eliptik eğri dijital imza algoritması ###ECDSA( ve SHA2-256 hash algoritması bulunmaktadır. Geliştiriciler, bu önceden derlenmiş sözleşmeleri akıllı sözleşmelerde kullanarak Gas maliyetlerini azaltabilir ve uygulamaların çalışma verimliliğini artırabilirler.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 3. Inline Assembly Kodu Kullanma
İç içe derleme ### in-line assembly (, geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli fakat verimli kod yazmalarına izin verir ve pahalı Solidity opcode'larını kullanmalarına gerek bırakmaz. İç içe derleme ayrıca bellek ve depolama kullanımını daha hassas bir şekilde kontrol etmeye olanak tanır, böylece Gas ücretlerini daha da azaltır. Ayrıca, iç içe derleme, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri gerçekleştirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanmak riskler getirebilir ve hata yapma olasılığını artırabilir. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin işlemesiyle sınırlı olmalıdır.
) 4.Layer 2 çözümleri kullanma
Layer 2 çözümleri kullanmak, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.
gibi rolluplar,