Ethereum akıllı sözleşmeler Gas optimizasyonu pratik kılavuzu: düşüş maliyet artırma verimlilik

Ethereum akıllı sözleşmeler Gas optimizasyonu uygulama kılavuzu

Ethereum ana ağındaki Gas ücretleri sürekli olarak baş ağrısı veren bir sorun olmuştur, özellikle ağın yoğun olduğu zamanlarda daha belirgin hale gelir. Yoğun dönemlerde, kullanıcılar genellikle yüksek işlem ücretleri ödemek zorunda kalıyorlar. Bu nedenle, akıllı sözleşmeler geliştirme aşamasında Gas ücretlerini optimize etmek 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 blockchain deneyimi sunar.

Bu makale, Ethereum sanal makinesi ( EVM )'in Gas ücreti mekanizmasını, Gas ücreti optimizasyonuna dair ilgili ana kavramları 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ı, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretleri işleyişini daha iyi anlamalarına yardımcı olması umulmaktadır; böylece blok zinciri ekosistemindeki zorluklarla birlikte başa çıkabiliriz.

Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama

EVM'nin Gas Ücreti Mekanizması Hakkında Kısa Bilgi

EVM ile uyumlu ağlarda, "Gas", belirli işlemleri gerçekleştirmek için gereken hesaplama gücünü ölçen bir birimdir.

EVM yapısında, 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ınacaktır. Bir işlemi tamamlamak için gereken ücret "Gas ücreti" olarak adlandırılır.

EIP-1559( Londra hard fork'u )'den itibaren geçerli olduğu günden itibaren, Gas ücreti aşağıdaki formül ile hesaplanmaktadır:

Gaz ücreti = kullanılan gaz birimleri * ( temel ücret + öncelik ücreti )

Temel ücret yok edilecektir, öncelikli ücretler ise bir teşvik olarak kullanılacak, böylece 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.

Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama

1. EVM'deki Gas optimizasyonunu anlama

Solidity ile akıllı sözleşmeler derlendiğinde, sözleşme bir dizi "işlem kodu" yani opcodlara dönüştürülür.

Her bir işlem kodu ( örneğin sözleşme oluşturma, mesaj çağırma, hesap depolamasına erişim ve sanal makinede işlem gerçekleştirme ) için kabul edilen bir Gas tüketim maliyeti vardır, bu maliyetler Ethereum sarı kitabında kaydedilmiştir.

Birçok EIP değişikliği sonrasında, bazı opcode'ların Gas maliyetleri ayarlandı ve bu durum sarı kitabın içeriğiyle farklılık gösterebilir.

2.Gas optimizasyonunun temel kavramı

Gas optimizasyonunun temel prensibi, EVM blockchain'inde 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şlemler düşük maliyetlidir:

  • Bellek değişkenlerini okuma ve yazma
  • Sabitleri ve değiştirilemez değişkenleri oku
  • Yerel değişkenleri okuma ve yazma
  • calldata değişkenlerini oku, örneğin calldata dizileri ve yapıları
  • İç fonksiyon çağrısı

Maliyetleri yüksek olan işlemler şunlardır:

  • Akıllı sözleşmelerde depolanan durum değişkenlerini okumak ve yazmak
  • Dış fonksiyon çağrısı
  • Döngüsel işlem

Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi 10 uygulama

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 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( belleği)'ye göre çok daha yüksektir. Her 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şlemlerinden 100 kat daha fazladır. Örneğin, OPcodesmload ve mstore talimatları yalnızca 3 Gas birimi tüketirken, sload ve sstore gibi depolama işlemlerinin maliyeti en ideal durumda bile en az 100 birim gerekmektedir.

Depolama kullanımını sınırlama yöntemleri şunlardır:

  • Geçici verileri bellek içinde saklamak
  • Depolama değişikliklerini 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 optimizasyonunda en iyi 10 uygulama

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 ücretinin 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ı sayesinde, geliştiriciler 20.000 Gas birimi tasarruf edebilir. Kullanılmamış bir depolama alanı saklamak 20.000 Gas( gerektirirken, artık yalnızca iki depolama alanı gerekiyor.

Her depolama alanı Gas tüketeceği için, değişken paketleme, gereken depolama alanı 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ü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, tamsayılar farklı boyutlara ayrılabilir: uint8, uint16, uint32 vb. EVM 256 bitlik birimlerle işlem yaptığından, uint8 kullanmak EVM'nin önce bunu uint256'ya dönüştürmesi gerektiği anlamına gelir ve bu dönüşüm ek Gaz tüketir.

Tek başına incelendiğinde, 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. Böylece, akıllı sözleşmeler bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini belleğe/depoya alabilir.

![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(

) 4. Sabit boyutlu değişkenleri dinamik değişkenlerin yerine kullanın

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ünse bytes1'den bytes32'ye en küçük uzunluğu seçin.

5. Haritalama ve Diziler

Solidity veri 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 haritalama daha yüksek verimlilik ve daha düşük maliyet sağlar, ancak diziler yine de yinelemeyi destekler ve veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yineleme gerekiyorsa veya veri türü paketlemesi ile Gas tüketimini optimize edebiliyorsanız.

![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 kullanın

Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory içinde saklanabilir. İkisi arasındaki ana fark, memory'nin 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ı, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.

7. Constant/Immutable anahtar kelimelerini mümkün olduğunca 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, 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 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-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ğından emin olduklarında, gereksiz taşma veya alt taşma kontrollerinden kaçınmak için Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak Gas maliyetlerini azaltabilirler.

Ayrıca, 0.8.0 ve üzeri sürümlerdeki derleyiciler artık SafeMath kütüphanesini kullanmayı gerektirmemektedir, çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak sunmaktadır.

9. Optimizasyon Değiştirici

Değiştirici kodu, değiştirilmiş fonksiyona yerleştirilir ve her değiştirici kullanıldığında, kod kopyalanır. Bu, bytecode'un boyutunu artırır ve Gas tüketimini yükseltir.

Mantığı iç fonksiyonlara yeniden yapılandırarak, modülatör içinde bu iç fonksiyonun tekrar kullanılmasına izin verilir, bu da byte kodu boyutunu azaltır ve Gas maliyetlerini düşürür.

![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şlemde kısa devre değerlendirmesi gerçekleşir, yani eğer ilk koşul mantıksal ifadenin sonucunu belirleyebiliyorsa, ikinci koşul değerlendirilmez.

Gas tüketimini optimize etmek için, düşük maliyetli koşulları öncelikli hale getirmek gerekir, böylece yüksek maliyetli hesaplamaların atlanma olasılığı artar.

![Ethereum akıllı sözleşmelerin Gaz optimizasyonu için en iyi 10 uygulama]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(

Genel Tavsiyeler Ek

) 1. Gereksiz kodları sil

Eğer sözleşmede kullanılmayan bir fonksiyon veya değişken 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ülü kazanabilirler. 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ş sözleşmeler, şifreleme ve hash işlemleri gibi karmaşık kütüphane fonksiyonları sağlar. Kod EVM'de değil, istemci düğümünde yerel olarak çalıştığı için gereken Gas miktarı daha azdır. Önceden derlenmiş sözleşmeler, akıllı sözleşmelerin çalıştırılması için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlar.

Önceden derlenmiş sözleşmelere örnekler 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 düşürebilir ve uygulamanın çalışma verimliliğini artırabilir.

![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(

) 3. İç içe derleme kodu kullanma

İç içe montaj ### in-line assembly ( geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ama verimli kodlar yazmalarına olanak tanır, pahalı Solidity işletim kodlarını kullanmadan. İç içe montaj ayrıca hafıza ve depolama kullanımını daha hassas bir şekilde kontrol etmeyi sağlar, böylece Gas masraflarını daha da azaltır. Ayrıca, iç içe montaj, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri gerçekleştirebilir, Gas tüketimini optimize etmek için daha fazla esneklik sağlar.

Ancak, iç içe montaj kullanmak da riskler taşıyabilir ve hataya açıktır. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiricilerin uygulaması gerekmektedir.

) 4. Layer 2 çözümleri kullanma

Layer 2 çözümleri kullanmak, Ethereum ana ağı üzerinde depolama ve hesaplama gereksinimlerini azaltabilir.

ETH-4.38%
View Original
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.
  • Reward
  • 7
  • Share
Comment
0/400
PrivacyMaximalistvip
· 19h ago
gas bu kadar pahalı, yine de L2'ye gideyim.
View OriginalReply0
0xSherlockvip
· 07-30 09:26
Ne zaman gas ücretleri L2 gibi ucuz olacak?
View OriginalReply0
SnapshotBotvip
· 07-30 04:26
L2 oynamak daha iyi.
View OriginalReply0
MetaverseLandlordvip
· 07-30 04:18
O zaman pahalı gaz satmayı umuyoruz.
View OriginalReply0
BearMarketBuyervip
· 07-30 04:17
gas çok pahalı, insanları eziyor.
View OriginalReply0
LiquidityHuntervip
· 07-30 04:08
gas optimizasyonu 0.7 kat arbitraj alanı yeni üç slipaj ticareti yakaladım
View OriginalReply0
ContractFreelancervip
· 07-30 04:07
Optimizasyon iyi, çalıştırmak harika.
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)