Ethereum akıllı sözleşmeler Gas optimizasyonu pratik rehberi
Ethereum ağı üzerindeki Gas ücretleri, geliştiriciler ve kullanıcıların ortak bir sorun olarak karşılaştığı bir mesele olmuştur, özellikle ağın yoğun olduğu zamanlarda daha belirgin hale gelmektedir. Yoğun dönemlerde, kullanıcılar genellikle son derece yüksek işlem ücretleri ödemek zorunda kalmaktadır. Bu nedenle, akıllı sözleşme 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ırır ve kullanıcılara daha ekonomik, verimli bir blockchain kullanım deneyimi sunar.
Bu makale, Ethereum sanal makinesi (EVM)'in Gas ücret mekanizmasını, Gas ücreti optimizasyonu ile ilgili temel kavramları ve akıllı sözleşmeler geliştirilirken Gas ücreti optimizasyonu için en iyi uygulamaları özetleyecektir. Bu içeriklerin geliştiricilere ilham ve pratik yardım sağlamasını umuyoruz, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretlerinin işleyişini daha iyi anlamalarına yardımcı olarak blok zinciri ekosistemindeki zorluklarla birlikte başa çıkmalarını sağlıyor.
EVM'nin Gas Ücreti Mekanizması Hakkında Kısa Bilgi
EVM uyumlu ağlarda, "Gas", belirli işlemleri gerçekleştirmek için gereken hesaplama gücünü ölçen birimdir.
EVM'nin yapı düzeninde, Gas tüketimi üç bölüme ayrılır: işlem yürütme, dış mesaj çağrıları ve bellek ile depolamanın okuma/yazma işlemleri.
Her bir işlemin gerçekleştirilmesi için hesaplama kaynağı 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 * ( taban ücreti + öncelik ücreti )
Temel ücret yok edilecek, öncelikli ücret ise teşvik olarak kullanılacak, 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 tür "bahşiş" gibidir.
1. EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeleri derlediğinizde, sözleşme bir dizi "işlem koduna" yani opcodes'a dönüştürülür.
Herhangi bir opcode ( örneğin akıllı sözleşme oluşturma, mesaj çağırma, hesap depolamasına erişim ve sanal makinede işlem yürütme ) için kabul görmüş bir Gas tüketim maliyeti vardır, bu maliyetler Ethereum sarı kitabında kaydedilmiştir.
Birçok EIP değişikliğinden sonra, bazı işlem kodlarının Gas maliyetleri ayarlandı ve bu, sarı kitapta belirtilenlerden farklı olabilir.
2.Gas optimizasyonunun temel kavramları
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 okumak ve yazmak
Sabitler ve değiştirilemez değişkenler oku
Yerel değişkenleri okuma ve yazma
calldata değişkenlerini oku, örneğin calldata dizileri ve yapıları
İç fonksiyon çağrısı
Yüksek maliyetli işlemler şunlardır:
Sözleşme depolamasında saklanan durum değişkenlerini okumak ve yazmak
Dış fonksiyon çağrısı
Döngü işlemi
EVM Gaz Ücretleri Optimizasyonu En İyi Uygulamaları
Yukarıda belirtilen temel kavramlara dayanarak, geliştirici topluluğu için bir Gas ücreti optimizasyonu en iyi uygulamalar listesi derledik. Bu uygulamaları takip ederek, 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( hafıza)'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ının tanımına göre, depolama işlemlerinin maliyeti bellek işlemlerinin maliyetinin 100 katından fazla. Örneğin, OPcodesmload ve mstore komutları yalnızca 3 Gas birimi tüketirken, sload ve sstore gibi depolama işlemleri en ideal koşullarda 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.
2.Değişken paketleme
akıllı sözleşmelerde kullanılan Storage slot( depolama alanı) sayısı ve geliştiricilerin veriyi ifade etme şekli, Gas ücretlerinin harcanmasını 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şkenlerin depolanması için 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 yuvasına sığabilmesini ifade eder.
Bu ayrıntıdaki ayarlama sayesinde, geliştiriciler 20.000 Gas birimini tasarruf edebilir. Kullanılmamış bir depolama alanını depolamak 20.000 Gas( gerektirirken, artık yalnızca iki depolama alanı gerekmektedir.
Her depolama yuvasının Gas tüketmesi nedeniyle, değişken paketleme gerekli depolama yuvası sayısını azaltarak Gas kullanımını optimize eder.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Veri türünü optimize et
Bir değişken birden fazla veri türü ile temsil edilebilir, ancak farklı veri türlerinin karşılık geldiği işlem maliyetleri de farklıdır. Uygun veri türünü seçmek, Gas kullanımını optimize etmeye yardımcı olur.
Örneğin, Solidity'de tamsayı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 ekstra Gas tüketir.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, değişken paketleme optimizasyonu kullanıldığında durum farklıdır. Geliştiriciler dört uint8 değişkenini bir depolama slotuna paketleyebilirlerse, bunları yinelemek için toplam maliyet dört uint256 değişkeninden daha düşük olacaktır. Böylece, akıllı sözleşmeler bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemle 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 Gaz harcar. Bayt uzunluğu sınırlanabiliyorsa, mümkün olduğunca bytes1'den bytes32'ye kadar en küçük boyutu seçin.
5. Haritalama ve Diziler
Solidity verilerinin listesi iki veri türü ile temsil edilebilir: dizi ###Arrays ( ve harita )Mappings (, ancak bunların sözdizimi ve yapısı tamamen farklıdır.
Haritalama, çoğu durumda daha verimli ve daha düşük maliyetlidir, ancak diziler yine de yinelemeye sahip olup veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamanın tercih edilmesi önerilir, sadece yinelemeye ihtiyaç duyuluyorsa veya veri türü paketlemesi ile Gas tüketimini optimize edebiliyorsanız.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. calldata yerine memory kullanımı
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki en önemli fark, memory'nin fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın değiştirilemez olmasıdır.
Bu prensibi hatırlayın: Eğer fonksiyon parametreleri salt okunur ise, öncelikle calldata kullanmalısınız, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.
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 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 kelimelerini kullanmanız önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
Geliştiriciler, aritmetik işlemlerin taşma veya alt taşma yaratmayacağından emin olduklarında, 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 maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerde derleyicinin SafeMath kütüphanesini kullanmasına artık gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak sunmaktadır.
9. Optimize Edici
Değiştirici kodu, değiştirilmiş işlevlere gömülmüştür; her değiştirme kullanıldığında, bu kod kopyalanır. Bu, bytecode'un boyutunu artırır ve Gas tüketimini artırır. Optimizasyon yöntemi, mantığı iç işlevler olarak yeniden yapılandırmak ve değiştirmede bu iç işlevin tekrar kullanılmasına izin vermektir; bu, bytecode boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.
![Ethereum akıllı sözleşmelerinin 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 belirliyorsa, ikinci koşul değerlendirilmez.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük koşulları öne almak gerekir, böylece maliyeti yüksek hesaplamaları atlama olasılığı doğar.
![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 Tavsiyeler
) 1. Gereksiz kodu 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.
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 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 alabilirler. Eğer bir değişkene artık ihtiyaç yoksa, onu silmek için delete anahtar kelimesini kullanmalı veya varsayılan değerine 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 çıkarın.
2. Önceden derlenmiş akıllı sözleşmeler kullanma
Önceden derlenmiş akıllı sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane fonksiyonları sağlar. Kod, EVM üzerinde 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ş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 azaltabilir ve uygulamaların çalışma verimliliğini artırabilir.
![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. Satır içi montaj kodu kullanma
İç içe montaj ### in-line assembly ( geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ancak verimli kodlar yazmasına olanak tanır, pahalı Solidity opcode'ları kullanmadan. İç içe montaj ayrıca bellek ve depolama kullanımını daha hassas bir şekilde kontrol etme imkanı sunarak Gas ücretlerini daha da azaltır. Ayrıca, iç içe montaj, yalnızca Solidity kullanarak zor bir şekilde gerçekleştirilebilen bazı karmaşık işlemleri yerine getirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe derleme kullanmak da riskler getirebilir ve hata yapma olasılığını artırabilir. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin kullanması için sınırlı olmalıdır.
) 4.Layer 2 çözümleri kullanma
Layer 2 çözümü kullanarak Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilirsiniz.
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.
14 Likes
Reward
14
4
Share
Comment
0/400
BlockchainBouncer
· 21h ago
Gas ücretlerini düşürmek çok gerekli.
View OriginalReply0
WalletAnxietyPatient
· 21h ago
Gas tasarrufu sağlayan geliştiriciler gerçekten harika
Ethereum akıllı sözleşmeler Gas optimizasyonu uygulama rehberi
Ethereum akıllı sözleşmeler Gas optimizasyonu pratik rehberi
Ethereum ağı üzerindeki Gas ücretleri, geliştiriciler ve kullanıcıların ortak bir sorun olarak karşılaştığı bir mesele olmuştur, özellikle ağın yoğun olduğu zamanlarda daha belirgin hale gelmektedir. Yoğun dönemlerde, kullanıcılar genellikle son derece yüksek işlem ücretleri ödemek zorunda kalmaktadır. Bu nedenle, akıllı sözleşme 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ırır ve kullanıcılara daha ekonomik, verimli bir blockchain kullanım deneyimi sunar.
Bu makale, Ethereum sanal makinesi (EVM)'in Gas ücret mekanizmasını, Gas ücreti optimizasyonu ile ilgili temel kavramları ve akıllı sözleşmeler geliştirilirken Gas ücreti optimizasyonu için en iyi uygulamaları özetleyecektir. Bu içeriklerin geliştiricilere ilham ve pratik yardım sağlamasını umuyoruz, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretlerinin işleyişini daha iyi anlamalarına yardımcı olarak blok zinciri ekosistemindeki zorluklarla birlikte başa çıkmalarını sağlıyor.
EVM'nin Gas Ücreti Mekanizması Hakkında Kısa Bilgi
EVM uyumlu ağlarda, "Gas", belirli işlemleri gerçekleştirmek için gereken hesaplama gücünü ölçen birimdir.
EVM'nin yapı düzeninde, Gas tüketimi üç bölüme ayrılır: işlem yürütme, dış mesaj çağrıları ve bellek ile depolamanın okuma/yazma işlemleri.
Her bir işlemin gerçekleştirilmesi için hesaplama kaynağı 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 * ( taban ücreti + öncelik ücreti )
Temel ücret yok edilecek, öncelikli ücret ise teşvik olarak kullanılacak, 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 tür "bahşiş" gibidir.
1. EVM'deki Gas optimizasyonunu anlama
Solidity ile akıllı sözleşmeleri derlediğinizde, sözleşme bir dizi "işlem koduna" yani opcodes'a dönüştürülür.
Herhangi bir opcode ( örneğin akıllı sözleşme oluşturma, mesaj çağırma, hesap depolamasına erişim ve sanal makinede işlem yürütme ) için kabul görmüş bir Gas tüketim maliyeti vardır, bu maliyetler Ethereum sarı kitabında kaydedilmiştir.
Birçok EIP değişikliğinden sonra, bazı işlem kodlarının Gas maliyetleri ayarlandı ve bu, sarı kitapta belirtilenlerden farklı olabilir.
2.Gas optimizasyonunun temel kavramları
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:
Yüksek maliyetli işlemler şunlardır:
EVM Gaz Ücretleri Optimizasyonu En İyi Uygulamaları
Yukarıda belirtilen temel kavramlara dayanarak, geliştirici topluluğu için bir Gas ücreti optimizasyonu en iyi uygulamalar listesi derledik. Bu uygulamaları takip ederek, 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( hafıza)'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ının tanımına göre, depolama işlemlerinin maliyeti bellek işlemlerinin maliyetinin 100 katından fazla. Örneğin, OPcodesmload ve mstore komutları yalnızca 3 Gas birimi tüketirken, sload ve sstore gibi depolama işlemleri en ideal koşullarda 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ı) sayısı ve geliştiricilerin veriyi ifade etme şekli, Gas ücretlerinin harcanmasını 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şkenlerin depolanması için 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 yuvasına sığabilmesini ifade eder.
Bu ayrıntıdaki ayarlama sayesinde, geliştiriciler 20.000 Gas birimini tasarruf edebilir. Kullanılmamış bir depolama alanını depolamak 20.000 Gas( gerektirirken, artık yalnızca iki depolama alanı gerekmektedir.
Her depolama yuvasının Gas tüketmesi nedeniyle, değişken paketleme gerekli depolama yuvası sayısını azaltarak Gas kullanımını optimize eder.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Veri türünü optimize et
Bir değişken birden fazla veri türü ile temsil edilebilir, ancak farklı veri türlerinin karşılık geldiği işlem maliyetleri de farklıdır. Uygun veri türünü seçmek, Gas kullanımını optimize etmeye yardımcı olur.
Örneğin, Solidity'de tamsayı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 ekstra Gas tüketir.
Tek başına bakıldığında, uint256 kullanmak uint8'den daha ucuzdur. Ancak, değişken paketleme optimizasyonu kullanıldığında durum farklıdır. Geliştiriciler dört uint8 değişkenini bir depolama slotuna paketleyebilirlerse, bunları yinelemek için toplam maliyet dört uint256 değişkeninden daha düşük olacaktır. Böylece, akıllı sözleşmeler bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemle 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 Gaz harcar. Bayt uzunluğu sınırlanabiliyorsa, mümkün olduğunca bytes1'den bytes32'ye kadar en küçük boyutu seçin.
5. Haritalama ve Diziler
Solidity verilerinin listesi iki veri türü ile temsil edilebilir: dizi ###Arrays ( ve harita )Mappings (, ancak bunların sözdizimi ve yapısı tamamen farklıdır.
Haritalama, çoğu durumda daha verimli ve daha düşük maliyetlidir, ancak diziler yine de yinelemeye sahip olup veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamanın tercih edilmesi önerilir, sadece yinelemeye ihtiyaç duyuluyorsa veya veri türü paketlemesi ile Gas tüketimini optimize edebiliyorsanız.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. calldata yerine memory kullanımı
Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory'de saklanabilir. İkisi arasındaki en önemli fark, memory'nin fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın değiştirilemez olmasıdır.
Bu prensibi hatırlayın: Eğer fonksiyon parametreleri salt okunur ise, öncelikle calldata kullanmalısınız, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.
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 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 kelimelerini kullanmanız önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on 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 taşma yaratmayacağından emin olduklarında, 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 maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerde derleyicinin SafeMath kütüphanesini kullanmasına artık gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak sunmaktadır.
9. Optimize Edici
Değiştirici kodu, değiştirilmiş işlevlere gömülmüştür; her değiştirme kullanıldığında, bu kod kopyalanır. Bu, bytecode'un boyutunu artırır ve Gas tüketimini artırır. Optimizasyon yöntemi, mantığı iç işlevler olarak yeniden yapılandırmak ve değiştirmede bu iç işlevin tekrar kullanılmasına izin vermektir; bu, bytecode boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.
![Ethereum akıllı sözleşmelerinin 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 belirliyorsa, ikinci koşul değerlendirilmez.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük koşulları öne almak gerekir, böylece maliyeti yüksek hesaplamaları atlama olasılığı doğar.
![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 Tavsiyeler
) 1. Gereksiz kodu 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.
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 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 alabilirler. Eğer bir değişkene artık ihtiyaç yoksa, onu silmek için delete anahtar kelimesini kullanmalı veya varsayılan değerine 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 çıkarın.
2. Önceden derlenmiş akıllı sözleşmeler kullanma
Önceden derlenmiş akıllı sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane fonksiyonları sağlar. Kod, EVM üzerinde 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ş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 azaltabilir ve uygulamaların çalışma verimliliğini artırabilir.
![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. Satır içi montaj kodu kullanma
İç içe montaj ### in-line assembly ( geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ancak verimli kodlar yazmasına olanak tanır, pahalı Solidity opcode'ları kullanmadan. İç içe montaj ayrıca bellek ve depolama kullanımını daha hassas bir şekilde kontrol etme imkanı sunarak Gas ücretlerini daha da azaltır. Ayrıca, iç içe montaj, yalnızca Solidity kullanarak zor bir şekilde gerçekleştirilebilen bazı karmaşık işlemleri yerine getirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe derleme kullanmak da riskler getirebilir ve hata yapma olasılığını artırabilir. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin kullanması için sınırlı olmalıdır.
) 4.Layer 2 çözümleri kullanma
Layer 2 çözümü kullanarak Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilirsiniz.
rollup'lar, yan zincirler