Ethereum akıllı sözleşmelerinin Gas ücretlerini optimize etmenin en iyi uygulamaları
Ethereum ana ağındaki Gas ücretleri, geliştiricilerin ve kullanıcıların karşılaştığı en büyük zorluklardan biri olmaya devam ediyor, özellikle de ağın yoğun olduğu zamanlarda daha belirgin hale geliyor. İşlem yoğunluğu dönemlerinde, kullanıcılar genellikle yüksek ücretler ödemek zorunda kalıyor. Bu nedenle, akıllı sözleşme geliştirme aşamasında Gas ücreti optimizasyonu son derece önemlidir. Gas tüketimini optimize etmek, sadece işlem maliyetlerini etkili bir şekilde düşürmekle 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şme geliştirirken Gas ücreti optimizasyonu için en iyi uygulamaları ö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 ücretleri 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çüm birimidir.
EVM yapısında, Gas tüketimi esasen üç bölüme ayrılır: işlem yürütme, dış mesaj çağrısı ve bellek ile depolamanın okuma-yazma işlemleri.
Her işlem gerçekleştirmek için hesaplama kaynakları gerektiğinden, sonsuz döngüleri ve hizmet reddi ( DoS ) saldırılarını önlemek amacıyla belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücrete "Gas ücreti" denir.
EIP-1559( Londra hard fork'undan ) itibaren, Gas ücreti aşağıdaki formülle hesaplanmaktadır:
Gas ücreti = kullanılan gaz birimleri * ( temel ücret + öncelik ücreti )
Temel ücret yok edilecektir, öncelikli ücret ise 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 öncelikli ücret ayarlamak, işlemin bir sonraki blokta yer alma olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara ödedikleri bir "bahşiş" gibidir.
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.
Her bir operasyon kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişim ve sanal makinede işlem gerçekleştirme, bir kabul görmüş Gas tüketim maliyetine sahiptir. Bu maliyetler Ethereum sarı kitapçığında kayıtlıdır.
Birçok EIP değişikliğinden sonra, bazı opcode'ların Gas maliyetleri ayarlandı ve bu, sarı kitapta belirtilenlerden farklı olabilir.
) Gaz optimizasyonunun temel kavramı
Gas optimizasyonunun temel prensibi, EVM blockchain üzerinde maliyet etkinliğ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 okuyun ve yazın
calldata değişkenlerini oku, örneğin calldata dizileri ve yapıları
İç fonksiyon çağrısı
Maliyeti yüksek olan işlemler şunlardır:
Akıllı sözleşmelerde saklanan durum değişkenlerini okumak ve yazmak
Harici fonksiyon çağrısı
Döngü işlemi
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
EVM Gaz Ücretleri Optimizasyonu En İyi Uygulamaları
Yukarıdaki temel kavramlara dayalı olarak, aşağıda Gas ücretlerini optimize etme için en iyi uygulamalar listesi bulunmaktadır. Bu uygulamalara uyarak, geliştiriciler akıllı sözleşmelerin Gas ücretlerini azaltabilir, işlem maliyetlerini düşürebilir ve daha verimli ve kullanıcı dostu uygulamalar oluşturabilir.
) 1. Depolama kullanımını mümkün olduğunca azaltın
Solidity'de, Storage### depolama( sınırlı bir kaynaktır ve Gaz tüketimi Memory) bellek('den çok daha yüksektir. Her seferinde akıllı sözleşmeler depolamadan veri okuduğunda veya yazdığında yüksek Gaz maliyetleri oluşur.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinin maliyetinin 100 katından fazla. Örneğin, OPcodesmload ve mstore talimatları yalnızca 3 Gas birimi tüketirken, sload ve sstore gibi depolama işlemleri en ideal durumda 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 atayın.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Değişken paketleme
akıllı sözleşmelerde kullanılan Storage slot### depolama alanı( sayısı ve geliştiricilerin verileri ifade etme şekli, Gas ücretlerinin tüketimini büyük ölçüde etkileyecektir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık depolama yuvasını değişken depolamanın temel birimi olarak kullanır. Değişken paketleme, değişkenleri mantıklı bir şekilde düzenleyerek birden fazla değişkenin tek bir depolama yuvasına sığmasını sağlamaktır.
Bu ayrıntı ayarı ile geliştiriciler 20.000 Gas birimi tasarruf edebilir. Kullanılmamış bir depolama alanı depolamak 20.000 Gas) gerektirirken, şimdi yalnızca iki depolama alanına ihtiyaç vardır.
Her depolama alanı Gaz tükettiği için, değişkenlerin paketlenmesi Gaz kullanımını optimize etmek amacıyla gerekli depolama alanı sayısını azaltır.
( 3. Veri türlerini optimize etme
Bir değişken birden fazla veri tipi ile temsil edilebilir, ancak farklı veri tiplerinin karşılık geldiği işlem maliyetleri de farklıdır. 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 Gas tüketir.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonu söz konusu olduğunda durum farklıdır. Geliştiriciler, dört uint8 değişkenini bir depolama slotuna paketleyebilirse, o zaman bunları yinelemenin toplam maliyeti dört uint256 değişkenine göre daha düşük olacaktır. Böylece, akıllı sözleşme bir depolama slotunu bir kez okuyup yazabilir ve 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 tipinin kullanılmasını öneririm. 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ünse bytes1'den bytes32'ye kadar en küçük uzunluğu seçin.
) 5. Haritalama ve Diziler
Solidity verileri listesi iki veri tipi ile temsil edilebilir: diziler ### Arrays ### ve haritalar ( Mappings ), ancak sözdizimi ve yapıları tamamen farklıdır.
Çoğu durumda haritalamanın verimliliği daha yüksektir ve maliyeti daha düşüktür, ancak diziler yineleme yeteneğine sahiptir ve veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yalnızca yinelemeye ihtiyaç duyuluyorsa veya veri türü paketlemesi ile Gas tüketimi optimize edilebiliyorsa.
( 6. calldata yerine memory kullanımı
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki temel fark, memory'nin fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın değiştirilemez olmasıdır.
Bu ilkeleri unutmayın: Eğer fonksiyon parametreleri yalnızca okunabilir ise, öncelikle calldata kullanmalısınız, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önleyebilir.
) 7. Mümkün olduğunca 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 alanına kıyasla erişim maliyetleri çok daha düşüktür, bu yüzden mümkünse Constant veya Immutable anahtar kelimelerinin kullanılmasını öneririz.
![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 sınırın aşılması ile sonuçlanmayacağını belirleyebildiğinde, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt sınır kontrolünü önleyebilir ve böylece Gas maliyetlerini tasarruf edebilir.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyiciler artık SafeMath kütüphanesini kullanmayı gerektirmiyor, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini içermektedir.
) 9. Optimizasyon Değiştirici
Değiştiricinin kodu, değiştirilmiş olan işlevin içine gömülmüştür; her değiştirici kullanıldığında, bu kod kopyalanır. Bu, bayt kodunun boyutunu artırır ve Gas tüketimini yükseltir.
Mantığı iç fonksiyonlara yeniden yapılandırarak, değiştiricilerde bu iç fonksiyonun tekrar kullanımına izin vermek, byte kodu boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 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 birinci koşul mantıksal ifadenin sonucunu belirleyebiliyorsa, ikinci koşul değerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulların öncelikli olarak yer alması gerekir, böylece maliyeti yüksek hesaplamaların atlanma olasılığı artar.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
Ek Genel Öneriler
( 1. Gereksiz kodları silin
Eğer sözleşmede kullanılmamış 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.
Aşağıda bazı yararlı ö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 ortadan kaldırılmalıdır. Temelde, kullanılmayan herhangi bir hesaplama silinmelidir.
Ethereum'da, geliştiriciler depolama alanını serbest bırakarak Gas ödülleri 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çının, döngüleri mümkün olduğunca birleştirin ve tekrarlanan hesaplamaları döngü gövdesinin dışına taşıyın.
) 2. Önceden derlenmiş akıllı sözleşmeler kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane işlevleri sağlar. Kod EVM üzerinde değil, istemci düğümü yerelinde çalıştığı için gerekli olan Gas daha azdır. Önceden derlenmiş sözleşmeleri kullanarak, akıllı sözleşmelerin yürütülmesi için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlanabilir.
Önceden derlenmiş sözleşmelerin örnekleri arasında eliptik eğri dijital imza algoritması ###ECDSA### ve SHA2-256 hash algoritması bulunmaktadır. Akıllı sözleşmelerde bu önceden derlenmiş sözleşmeleri kullanarak, geliştiriciler Gas maliyetlerini düşürebilir ve uygulamaların çalışma verimliliğini artırabilir.
( 3. İç içe montaj kodu kullanımı
İç içe derleme ) in-line assembly ### geliştiricilerin EVM tarafından doğrudan yürütülebilecek düşük seviyeli ancak verimli kod yazmalarına olanak tanır ve pahalı Solidity opcode'larını kullanmalarına gerek kalmaz. İç içe derleme ayrıca bellek ve depolamanın 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 bazı karmaşık işlemleri yalnızca Solidity kullanarak gerçekleştirilmesinin zor olduğu şekillerde gerçekleştirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanımı da riskler taşıyabilir ve hata yapmaya açıktır. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin kullanması önerilir.
( 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.
16 Likes
Reward
16
4
Share
Comment
0/400
MEV_Whisperer
· 08-02 05:53
gas yine yükseldi, kontrat ticareti çok zor
View OriginalReply0
fomo_fighter
· 08-02 05:46
gas ücreti o kadar yüksek ki, neresi serinse oraya git!
View OriginalReply0
ApeWithAPlan
· 08-02 05:39
gas ne kadar pahalı olursa olsun, ETH en cazibeli olanıdır.
Ethereum akıllı sözleşmeler Gas ücreti optimizasyonu için en iyi 10 uygulama
Ethereum akıllı sözleşmelerinin Gas ücretlerini optimize etmenin en iyi uygulamaları
Ethereum ana ağındaki Gas ücretleri, geliştiricilerin ve kullanıcıların karşılaştığı en büyük zorluklardan biri olmaya devam ediyor, özellikle de ağın yoğun olduğu zamanlarda daha belirgin hale geliyor. İşlem yoğunluğu dönemlerinde, kullanıcılar genellikle yüksek ücretler ödemek zorunda kalıyor. Bu nedenle, akıllı sözleşme geliştirme aşamasında Gas ücreti optimizasyonu son derece önemlidir. Gas tüketimini optimize etmek, sadece işlem maliyetlerini etkili bir şekilde düşürmekle 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şme geliştirirken Gas ücreti optimizasyonu için en iyi uygulamaları ö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 ücretleri 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çüm birimidir.
EVM yapısında, Gas tüketimi esasen üç bölüme ayrılır: işlem yürütme, dış mesaj çağrısı ve bellek ile depolamanın okuma-yazma işlemleri.
Her işlem gerçekleştirmek için hesaplama kaynakları gerektiğinden, sonsuz döngüleri ve hizmet reddi ( DoS ) saldırılarını önlemek amacıyla belirli bir ücret alınır. Bir işlemi tamamlamak için gereken ücrete "Gas ücreti" denir.
EIP-1559( Londra hard fork'undan ) itibaren, Gas ücreti aşağıdaki formülle hesaplanmaktadır:
Gas ücreti = kullanılan gaz birimleri * ( temel ücret + öncelik ücreti )
Temel ücret yok edilecektir, öncelikli ücret ise 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 öncelikli ücret ayarlamak, işlemin bir sonraki blokta yer alma olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara ödedikleri bir "bahşiş" gibidir.
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.
Her bir operasyon kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişim ve sanal makinede işlem gerçekleştirme, bir kabul görmüş Gas tüketim maliyetine sahiptir. Bu maliyetler Ethereum sarı kitapçığında kayıtlıdır.
Birçok EIP değişikliğinden sonra, bazı opcode'ların Gas maliyetleri ayarlandı ve bu, sarı kitapta belirtilenlerden farklı olabilir.
) Gaz optimizasyonunun temel kavramı
Gas optimizasyonunun temel prensibi, EVM blockchain üzerinde maliyet etkinliğ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:
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
EVM Gaz Ücretleri Optimizasyonu En İyi Uygulamaları
Yukarıdaki temel kavramlara dayalı olarak, aşağıda Gas ücretlerini optimize etme için en iyi uygulamalar listesi bulunmaktadır. Bu uygulamalara uyarak, geliştiriciler akıllı sözleşmelerin Gas ücretlerini azaltabilir, işlem maliyetlerini düşürebilir ve daha verimli ve kullanıcı dostu uygulamalar oluşturabilir.
) 1. Depolama kullanımını mümkün olduğunca azaltın
Solidity'de, Storage### depolama( sınırlı bir kaynaktır ve Gaz tüketimi Memory) bellek('den çok daha yüksektir. Her seferinde akıllı sözleşmeler depolamadan veri okuduğunda veya yazdığında yüksek Gaz maliyetleri oluşur.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinin maliyetinin 100 katından fazla. Örneğin, OPcodesmload ve mstore talimatları yalnızca 3 Gas birimi tüketirken, sload ve sstore gibi depolama işlemleri en ideal durumda bile en az 100 birim maliyet gerektirir.
Depolama kullanımını sınırlamanın yöntemleri şunlardır:
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Değişken paketleme
akıllı sözleşmelerde kullanılan Storage slot### depolama alanı( sayısı ve geliştiricilerin verileri ifade etme şekli, Gas ücretlerinin tüketimini büyük ölçüde etkileyecektir.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık depolama yuvasını değişken depolamanın temel birimi olarak kullanır. Değişken paketleme, değişkenleri mantıklı bir şekilde düzenleyerek birden fazla değişkenin tek bir depolama yuvasına sığmasını sağlamaktır.
Bu ayrıntı ayarı ile geliştiriciler 20.000 Gas birimi tasarruf edebilir. Kullanılmamış bir depolama alanı depolamak 20.000 Gas) gerektirirken, şimdi yalnızca iki depolama alanına ihtiyaç vardır.
Her depolama alanı Gaz tükettiği için, değişkenlerin paketlenmesi Gaz kullanımını optimize etmek amacıyla gerekli depolama alanı sayısını azaltır.
( 3. Veri türlerini optimize etme
Bir değişken birden fazla veri tipi ile temsil edilebilir, ancak farklı veri tiplerinin karşılık geldiği işlem maliyetleri de farklıdır. 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 Gas tüketir.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonu söz konusu olduğunda durum farklıdır. Geliştiriciler, dört uint8 değişkenini bir depolama slotuna paketleyebilirse, o zaman bunları yinelemenin toplam maliyeti dört uint256 değişkenine göre daha düşük olacaktır. Böylece, akıllı sözleşme bir depolama slotunu bir kez okuyup yazabilir ve 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 tipinin kullanılmasını öneririm. 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ünse bytes1'den bytes32'ye kadar en küçük uzunluğu seçin.
) 5. Haritalama ve Diziler
Solidity verileri listesi iki veri tipi ile temsil edilebilir: diziler ### Arrays ### ve haritalar ( Mappings ), ancak sözdizimi ve yapıları tamamen farklıdır.
Çoğu durumda haritalamanın verimliliği daha yüksektir ve maliyeti daha düşüktür, ancak diziler yineleme yeteneğine sahiptir ve veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yalnızca yinelemeye ihtiyaç duyuluyorsa veya veri türü paketlemesi ile Gas tüketimi optimize edilebiliyorsa.
( 6. calldata yerine memory kullanımı
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki temel fark, memory'nin fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın değiştirilemez olmasıdır.
Bu ilkeleri unutmayın: Eğer fonksiyon parametreleri yalnızca okunabilir ise, öncelikle calldata kullanmalısınız, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önleyebilir.
) 7. Mümkün olduğunca 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 alanına kıyasla erişim maliyetleri çok daha düşüktür, bu yüzden mümkünse Constant veya Immutable anahtar kelimelerinin kullanılmasını öneririz.
![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 olurken Unchecked kullanın
Geliştiriciler, aritmetik işlemlerin taşma veya alt sınırın aşılması ile sonuçlanmayacağını belirleyebildiğinde, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt sınır kontrolünü önleyebilir ve böylece Gas maliyetlerini tasarruf edebilir.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyiciler artık SafeMath kütüphanesini kullanmayı gerektirmiyor, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini içermektedir.
) 9. Optimizasyon Değiştirici
Değiştiricinin kodu, değiştirilmiş olan işlevin içine gömülmüştür; her değiştirici kullanıldığında, bu kod kopyalanır. Bu, bayt kodunun boyutunu artırır ve Gas tüketimini yükseltir.
Mantığı iç fonksiyonlara yeniden yapılandırarak, değiştiricilerde bu iç fonksiyonun tekrar kullanımına izin vermek, byte kodu boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 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 birinci koşul mantıksal ifadenin sonucunu belirleyebiliyorsa, ikinci koşul değerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulların öncelikli olarak yer alması gerekir, böylece maliyeti yüksek hesaplamaların atlanma olasılığı artar.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
Ek Genel Öneriler
( 1. Gereksiz kodları silin
Eğer sözleşmede kullanılmamış 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.
Aşağıda bazı yararlı ö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 ortadan kaldırılmalıdır. Temelde, kullanılmayan herhangi bir hesaplama silinmelidir.
Ethereum'da, geliştiriciler depolama alanını serbest bırakarak Gas ödülleri 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çının, döngüleri mümkün olduğunca birleştirin ve tekrarlanan hesaplamaları döngü gövdesinin dışına taşıyın.
) 2. Önceden derlenmiş akıllı sözleşmeler kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane işlevleri sağlar. Kod EVM üzerinde değil, istemci düğümü yerelinde çalıştığı için gerekli olan Gas daha azdır. Önceden derlenmiş sözleşmeleri kullanarak, akıllı sözleşmelerin yürütülmesi için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlanabilir.
Önceden derlenmiş sözleşmelerin örnekleri arasında eliptik eğri dijital imza algoritması ###ECDSA### ve SHA2-256 hash algoritması bulunmaktadır. Akıllı sözleşmelerde bu önceden derlenmiş sözleşmeleri kullanarak, geliştiriciler Gas maliyetlerini düşürebilir ve uygulamaların çalışma verimliliğini artırabilir.
( 3. İç içe montaj kodu kullanımı
İç içe derleme ) in-line assembly ### geliştiricilerin EVM tarafından doğrudan yürütülebilecek düşük seviyeli ancak verimli kod yazmalarına olanak tanır ve pahalı Solidity opcode'larını kullanmalarına gerek kalmaz. İç içe derleme ayrıca bellek ve depolamanın 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 bazı karmaşık işlemleri yalnızca Solidity kullanarak gerçekleştirilmesinin zor olduğu şekillerde gerçekleştirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanımı da riskler taşıyabilir ve hata yapmaya açıktır. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin kullanması önerilir.
( 4. Layer 2 çözümleri kullanma
Layer 2 çözümleri kullanmak, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.