Ethereum akıllı sözleşmeler Gas optimizasyonu pratik kılavuzu
Ethereum ana ağındaki Gas ücretleri her zaman zorlu bir sorun olmuştur, özellikle ağın yoğun olduğu zamanlarda daha da belirgin hale gelir. Yoğun dönemlerde, kullanıcılar genellikle yüksek işlem ücretleri ödemek zorunda kalır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücretlerini optimize etmek 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 blok zinciri deneyimi sunar.
Bu makale, Ethereum sanal makinesi (EVM)'in Gas ücreti mekanizmasını, Gas ücreti optimizasyonuna ilişkin temel kavramları ve akıllı sözleşmeler geliştirirken Gas ücreti optimizasyonu için en iyi uygulamaları özetleyecektir. Umuyorum ki bu içerikler geliştiricilere ilham ve pratik yardım sağlayacak, aynı zamanda sıradan kullanıcıların EVM'in Gas ücreti işleyişini daha iyi anlamalarına yardımcı olacak ve blockchain ekosistemindeki zorluklarla birlikte başa çıkmalarını sağlayacaktır.
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ün ölçüm birimidir.
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 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'undan ) itibaren, Gas ücretleri aşağıdaki formüle göre hesaplanır:
Gas ücreti = Kullanılan Gas birimi * ( temel ücret + öncelik ücreti )
Temel ücret yakılacak, ö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 ödediği 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 opcodes'e dönüştürülür.
Her bir işlem kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişme ve sanal makinede işlem gerçekleştirme, Ethereum sarı kitabında kaydedilen kabul görmüş bir Gas tüketim maliyetine sahiptir.
Birçok EIP değişikliği sonrasında, bazı işlem kodlarının Gas maliyetleri ayarlandı ve bu, sarı kitabındaki değerlerden sapma gösterebilir.
) 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 ve yazma
Sabitler ve değişmez değişkenler okumak
Yerel değişkenleri okuma/yazma
calldata değişkenlerini oku, örneğin calldata dizileri ve yapıları
İç fonksiyon çağrısı
Maliyeti yüksek olan işlemler şunlardır:
Sözleşme depolamasında saklanan durum değişkenlerini yazma ve okuma
Harici fonksiyon çağrısı
Döngü işlemi
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
EVM Gaz Ücreti 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 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 oluşturabilir.
) 1. Depolama kullanımını en aza indirin.
Solidity'de, Storage### depolama( sınırlı bir kaynaktır ve Gas tüketimi Memory) bellek('den çok daha yüksektir. Her akıllı sözleşme depolamadan veri okuduğunda veya yazdığında yüksek Gas maliyetleri ortaya çıkar.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinden 100 kat daha fazladır. Örneğin, OPcodesmload ve mstore talimatları yalnızca 3 Gas birimi harcarken, depolama işlemleri olan sload ve sstore 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 atamak.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 2. Değişken paketleme
akıllı sözleşmelerde kullanılan Storage slot### depolama slotu( sayısı ve geliştiricilerin verileri ifade etme şekli Gas ücretlerinin tüketimini büyük ölçüde etkiler.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık bir depolama yuvasını değişkenlerin depolanması için temel birim olarak kullanır. Değişken paketi, değişkenlerin mantıklı bir şekilde düzenlenmesiyle birden fazla değişkenin tek bir depolama yuvasına sığabilmesi anlamına gelir.
Bu ayrıntıdaki ayarlama ile geliştiriciler 20.000 Gas birimi tasarruf edebilir. ) kullanılmamış bir depolama alanı saklamak için 20.000 Gas tüketmek gerekirken, şimdi yalnızca iki depolama alanı gerekmektedir.
Her depolama slotunun Gas tüketmesi nedeniyle, değişken paketleme, gereken depolama slotu sayısını azaltarak Gas kullanımını optimize eder.
( 3. Veri türlerini optimize et
Bir değişken birden fazla veri türüyle 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, tam sayılar farklı boyutlara ayrılabilir: uint8, uint16, uint32 vb. EVM, 256 bitlik birimlerle işlem yaptığı için, uint8 kullanmak EVM'nin bunu önce 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, burada uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonu kullanıldığında durum farklıdır. Eğer geliştirici dört uint8 değişkenini bir depolama slotuna paketleyebilirse, o zaman bunları yinelemenin toplam maliyeti dört uint256 değişkeninden daha düşük olacaktır. Bu şekilde, 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 alabilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp###
( 4. Sabit boyutlu değişkenler kullanarak dinamik değişkenlerin yerini alma
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri türünün kullanılmasını öneririm. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlere göre daha az Gaz tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkünse bytes1'den bytes32'ye en küçük uzunluğu seçmeye çalışın.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp###
( 5. Haritalama ve Diziler
Solidity veri listeleri iki veri tipi ile temsil edilebilir: diziler )Arrays ### ve haritalar (Mappings ), ancak sözdizimleri ve yapıları tamamen farklıdır.
Haritalama, çoğu durumda daha verimli ve daha düşük maliyetli olsa da, diziler yine de yinelemeli olup veri türü paketlemeyi destekler. Bu nedenle, veri listesini yönetirken haritalamanın öncelikli olarak kullanılması önerilir, yalnızca yineleme gereksinimi varsa veya veri türü paketlemesi ile Gas tüketimi optimize edilebiliyorsa.
( 6. calldata yerine memory kullanın
Fonksiyon parametreleri içinde tanımlanan değişkenler calldata veya bellek (memory) içinde saklanabilir. İkisi arasındaki temel fark, bellek (memory)'in fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın 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, fonksiyon calldata'sından memory'ye gereksiz kopyalama işlemlerini önleyebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
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, depolamaya kıyasla erişim maliyetleri çok daha düşüktür, mümkünse Constant veya Immutable anahtar kelimelerinin kullanılması önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###
( 8. Taşma/alt taşma olmayacağından emin olduktan sonra 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 maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyicinin artık SafeMath kütüphanesini kullanmasına gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak sunmaktadır.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
( 9. Optimizasyon Değiştiricisi
Değiştirici kodu, değiştirilmiş işlevin içine yerleştirilmiştir; her değiştirici kullanıldığında, kodu kopyalanır. Bu, byte kodunun boyutunu artırır ve Gas tüketimini yükseltir. Mantığı iç işlev olarak yeniden yapılandırarak, bu iç işlevin değiştirici içinde yeniden kullanılmasına izin vererek, byte kodu boyutunu azaltabilir ve Gas maliyetini düşürebilirsiniz.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
( 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ğerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öne almak gerekir, böylece yüksek maliyetli hesaplamaları atlama olasılığı doğar.
![Ethereum akıllı sözleşmelerin Gaz optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp###
Ek Genel Tavsiyeler
( 1. Gereksiz kodları kaldır
Eğer sözleşmede kullanılmayan işlevler 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şme içinde 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, delete anahtar kelimesini kullanarak silmeli 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. Önyargılı sözleşmeler kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane fonksiyonları sunar. Kod EVM üzerinde değil, istemci düğümünde yerel olarak çalıştığı için gereken Gas daha azdır. Önceden derlenmiş sözleşmeler 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şme örnekleri, eliptik eğri dijital imza algoritması ###ECDSA### ve SHA2-256 hash algoritmasını içerir. Geliştiriciler, bu önceden derlenmiş sözleşmeleri akıllı sözleşmelerde kullanarak Gas maliyetlerini düşürebilir ve uygulamaların çalışma verimliliğini artırabilir.
( 3. Satır içi derleme kodu kullanma
İç içe derleme ) in-line assembly ### geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ancak verimli kod yazmalarını sağlar, pahalı Solidity işlem kodları kullanmadan. İç 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 bazı karmaşık işlemleri gerçekleştirebilir, bu da yalnızca Solidity kullanarak zorlayıcı hale gelir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanmak da riskler ve uyumsuzluklar getirebilir.
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
DaoGovernanceOfficer
· 23h ago
*of* başka bir gas gönderisi l2 ölçekleme araştırmasını görmezden geliyor...
View OriginalReply0
ApeShotFirst
· 23h ago
gas ücreti o kadar yüksek ki iflas ettim gibi.
View OriginalReply0
BottomMisser
· 23h ago
Gas optimizasyonu? Ayı Piyasası'nın gelmesini beklemek daha iyi.
View OriginalReply0
Rekt_Recovery
· 23h ago
gaz ücretleri... hala 2021 travmasından kurtuluyorum, yalan söylemem.
Ethereum akıllı sözleşmeler Gas optimizasyonu tam kılavuzu düşüş İşlem Maliyeti artırmak verimlilik
Ethereum akıllı sözleşmeler Gas optimizasyonu pratik kılavuzu
Ethereum ana ağındaki Gas ücretleri her zaman zorlu bir sorun olmuştur, özellikle ağın yoğun olduğu zamanlarda daha da belirgin hale gelir. Yoğun dönemlerde, kullanıcılar genellikle yüksek işlem ücretleri ödemek zorunda kalır. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücretlerini optimize etmek 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 blok zinciri deneyimi sunar.
Bu makale, Ethereum sanal makinesi (EVM)'in Gas ücreti mekanizmasını, Gas ücreti optimizasyonuna ilişkin temel kavramları ve akıllı sözleşmeler geliştirirken Gas ücreti optimizasyonu için en iyi uygulamaları özetleyecektir. Umuyorum ki bu içerikler geliştiricilere ilham ve pratik yardım sağlayacak, aynı zamanda sıradan kullanıcıların EVM'in Gas ücreti işleyişini daha iyi anlamalarına yardımcı olacak ve blockchain ekosistemindeki zorluklarla birlikte başa çıkmalarını sağlayacaktır.
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ün ölçüm birimidir.
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 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'undan ) itibaren, Gas ücretleri aşağıdaki formüle göre hesaplanır:
Gas ücreti = Kullanılan Gas birimi * ( temel ücret + öncelik ücreti )
Temel ücret yakılacak, ö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 ödediği 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 opcodes'e dönüştürülür.
Her bir işlem kodu (, örneğin sözleşme oluşturma, mesaj çağrısı yapma, hesap depolamasına erişme ve sanal makinede işlem gerçekleştirme, Ethereum sarı kitabında kaydedilen kabul görmüş bir Gas tüketim maliyetine sahiptir.
Birçok EIP değişikliği sonrasında, bazı işlem kodlarının Gas maliyetleri ayarlandı ve bu, sarı kitabındaki değerlerden sapma gösterebilir.
) 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:
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
EVM Gaz Ücreti 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 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 oluşturabilir.
) 1. Depolama kullanımını en aza indirin.
Solidity'de, Storage### depolama( sınırlı bir kaynaktır ve Gas tüketimi Memory) bellek('den çok daha yüksektir. Her akıllı sözleşme depolamadan veri okuduğunda veya yazdığında yüksek Gas maliyetleri ortaya çıkar.
Ethereum sarı kitabına göre, depolama işlemlerinin maliyeti bellek işlemlerinden 100 kat daha fazladır. Örneğin, OPcodesmload ve mstore talimatları yalnızca 3 Gas birimi harcarken, depolama işlemleri olan sload ve sstore en ideal durumda bile en az 100 birim maliyet gerektirir.
Saklama kullanımını kısıtlama yöntemleri şunlardır:
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
) 2. Değişken paketleme
akıllı sözleşmelerde kullanılan Storage slot### depolama slotu( sayısı ve geliştiricilerin verileri ifade etme şekli Gas ücretlerinin tüketimini büyük ölçüde etkiler.
Solidity derleyicisi, derleme sürecinde ardışık depolama değişkenlerini paketler ve 32 baytlık bir depolama yuvasını değişkenlerin depolanması için temel birim olarak kullanır. Değişken paketi, değişkenlerin mantıklı bir şekilde düzenlenmesiyle birden fazla değişkenin tek bir depolama yuvasına sığabilmesi anlamına gelir.
Bu ayrıntıdaki ayarlama ile geliştiriciler 20.000 Gas birimi tasarruf edebilir. ) kullanılmamış bir depolama alanı saklamak için 20.000 Gas tüketmek gerekirken, şimdi yalnızca iki depolama alanı gerekmektedir.
Her depolama slotunun Gas tüketmesi nedeniyle, değişken paketleme, gereken depolama slotu sayısını azaltarak Gas kullanımını optimize eder.
( 3. Veri türlerini optimize et
Bir değişken birden fazla veri türüyle 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, tam sayılar farklı boyutlara ayrılabilir: uint8, uint16, uint32 vb. EVM, 256 bitlik birimlerle işlem yaptığı için, uint8 kullanmak EVM'nin bunu önce 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, burada uint256 kullanmak uint8'den daha ucuzdur. Ancak, daha önce önerdiğimiz değişken paketleme optimizasyonu kullanıldığında durum farklıdır. Eğer geliştirici dört uint8 değişkenini bir depolama slotuna paketleyebilirse, o zaman bunları yinelemenin toplam maliyeti dört uint256 değişkeninden daha düşük olacaktır. Bu şekilde, 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 alabilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp###
( 4. Sabit boyutlu değişkenler kullanarak dinamik değişkenlerin yerini alma
Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri türünün kullanılmasını öneririm. Genel olarak, sabit boyutlu değişkenler, değişken boyutlu değişkenlere göre daha az Gaz tüketir. Bayt uzunluğu sınırlanabiliyorsa, mümkünse bytes1'den bytes32'ye en küçük uzunluğu seçmeye çalışın.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp###
( 5. Haritalama ve Diziler
Solidity veri listeleri iki veri tipi ile temsil edilebilir: diziler )Arrays ### ve haritalar (Mappings ), ancak sözdizimleri ve yapıları tamamen farklıdır.
Haritalama, çoğu durumda daha verimli ve daha düşük maliyetli olsa da, diziler yine de yinelemeli olup veri türü paketlemeyi destekler. Bu nedenle, veri listesini yönetirken haritalamanın öncelikli olarak kullanılması önerilir, yalnızca yineleme gereksinimi varsa veya veri türü paketlemesi ile Gas tüketimi optimize edilebiliyorsa.
( 6. calldata yerine memory kullanın
Fonksiyon parametreleri içinde tanımlanan değişkenler calldata veya bellek (memory) içinde saklanabilir. İkisi arasındaki temel fark, bellek (memory)'in fonksiyon tarafından değiştirilebilmesi, oysa calldata'nın 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, fonksiyon calldata'sından memory'ye gereksiz kopyalama işlemlerini önleyebilir.
![Ethereum akıllı sözleşmelerin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###
( 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, depolamaya kıyasla erişim maliyetleri çok daha düşüktür, mümkünse Constant veya Immutable anahtar kelimelerinin kullanılması önerilir.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp###
( 8. Taşma/alt taşma olmayacağından emin olduktan sonra 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 maliyetlerinden tasarruf edebilirler.
Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyicinin artık SafeMath kütüphanesini kullanmasına gerek yoktur, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak sunmaktadır.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp###
( 9. Optimizasyon Değiştiricisi
Değiştirici kodu, değiştirilmiş işlevin içine yerleştirilmiştir; her değiştirici kullanıldığında, kodu kopyalanır. Bu, byte kodunun boyutunu artırır ve Gas tüketimini yükseltir. Mantığı iç işlev olarak yeniden yapılandırarak, bu iç işlevin değiştirici içinde yeniden kullanılmasına izin vererek, byte kodu boyutunu azaltabilir ve Gas maliyetini düşürebilirsiniz.
![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp###
( 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ğerlendirilmeyecektir.
Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öne almak gerekir, böylece yüksek maliyetli hesaplamaları atlama olasılığı doğar.
![Ethereum akıllı sözleşmelerin Gaz optimizasyonu için en iyi 10 uygulama])https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp###
Ek Genel Tavsiyeler
( 1. Gereksiz kodları kaldır
Eğer sözleşmede kullanılmayan işlevler 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şme içinde 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, delete anahtar kelimesini kullanarak silmeli 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. Önyargılı sözleşmeler kullanma
Önceden derlenmiş sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane fonksiyonları sunar. Kod EVM üzerinde değil, istemci düğümünde yerel olarak çalıştığı için gereken Gas daha azdır. Önceden derlenmiş sözleşmeler 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şme örnekleri, eliptik eğri dijital imza algoritması ###ECDSA### ve SHA2-256 hash algoritmasını içerir. Geliştiriciler, bu önceden derlenmiş sözleşmeleri akıllı sözleşmelerde kullanarak Gas maliyetlerini düşürebilir ve uygulamaların çalışma verimliliğini artırabilir.
( 3. Satır içi derleme kodu kullanma
İç içe derleme ) in-line assembly ### geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ancak verimli kod yazmalarını sağlar, pahalı Solidity işlem kodları kullanmadan. İç 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 bazı karmaşık işlemleri gerçekleştirebilir, bu da yalnızca Solidity kullanarak zorlayıcı hale gelir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.
Ancak, iç içe montaj kullanmak da riskler ve uyumsuzluklar getirebilir.