13 Ethereum akıllı sözleşmeler Gas ücreti optimizasyonu uygulamaları

Ethereum akıllı sözleşmelerinin Gas ücretlerini optimize etmenin en iyi uygulamaları

Ethereum ana ağındaki Gas ücretleri her zaman zor bir sorun olmuştur, özellikle de ağın yoğun olduğu zamanlarda daha belirgin hale gelir. Zirve dönemlerinde kullanıcılar yüksek işlem ücretleri ödemek zorundadır. Bu nedenle, akıllı sözleşme 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 düşürmekle kalmaz, aynı zamanda işlem verimliliğini artırarak kullanıcılara daha ekonomik ve etkili bir blok zinciri deneyimi sunar.

Bu makalede Ethereum sanal makinesi (EVM)'in Gas ücreti mekanizması, Gas ücreti optimizasyonunun temel kavramları ve akıllı sözleşmeler geliştirilirken Gas ücreti optimizasyonu için en iyi uygulamalar ele alınacaktır. Umarız bu içerikler geliştiricilere ilham ve pratik yardımcı olurken, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretleri işleyişini daha iyi anlamalarına yardımcı olur ve birlikte blockchain ekosistemindeki zorluklarla başa çıkmalarına katkıda bulunur.

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

EVM'nin Gas Ücreti Mekanizması Hakkında

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

EVM'nin yapı düzeninde, Gas tüketimi üç bölüme ayrılır: işlem yürütme, dış mesaj çağrısı ve bellek ile depolamanın okuma/yazma işlemleri.

Her bir işlemin gerçekleştirilmesi için hesaplama kaynağı gerektiğinden, sonsuz döngü 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'u ) tarihinden itibaren geçerli olduğundan beri, Gas ücreti aşağıdaki formülle hesaplanmaktadır:

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

Temel ücret yok edilecek, öncelikli ücret ise 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.

1. EVM'deki Gas optimizasyonunu anlama

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

Herhangi bir işlem kodu (, örneğin sözleşme oluşturma, mesaj çağrıları yapma, hesap depolama alanına erişim sağlama 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ğinden sonra, bazı opcode'ların Gaz maliyetleri ayarlandı ve bunlar, sarı kitabın içeriğinden farklılık gösterebilir.

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

2.Gas optimizasyonunun temel kavramı

Gas optimizasyonunun temel prensibi, EVM blok zincirinde maliyet verimliliği yüksek işlemleri öncelikli olarak seçmek, pahalı Gas maliyetine sahip işlemlerden kaçınmaktır.

EVM'de, aşağıdaki işlemlerin maliyeti düşüktür:

  • Bellek değişkenlerini okumak ve yazmak
  • Sabitleri ve değişmez değişkenleri oku
  • Yerel değişkenleri okumak ve yazmak
  • calldata değişkenini oku, örneğin calldata dizisi ve yapısı
  • Dahili fonksiyon çağrısı

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

  • Sözleşme deposunda saklanan durum değişkenlerini oku ve yaz.
  • Harici fonksiyon çağrısı
  • Döngüsel işlem

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 uygulama listesi derledik. Bu uygulamalara uyarak, geliştiriciler akıllı sözleşmelerin Gas ücreti tüketimini azaltabilir, işlem maliyetlerini düşürebilir ve daha verimli ve kullanıcı dostu uygulamalar oluşturabilir.

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

1.Depolama kullanımını mümkün olduğunca azaltın

Solidity'de, Storage( depolama) sınırlı bir kaynaktır ve Gas tüketimi Memory( belle)'den çok daha yüksektir. 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şleminin 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şlemleri en ideal durumlarda bile en az 100 birim maliyet gerektirir.

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

  • Geçici verileri bellek içinde saklamak
  • Depolama değişiklik sayısını azaltma: Ara sonuçları bellekte tutarak, tüm hesaplamalar tamamlandıktan sonra sonuçları depolama değişkenlerine atama.

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

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 etkileyebilir.

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, birden fazla değişkenin tek bir depolama yuvasına sığacak şekilde mantıklı bir şekilde düzenlenmesi anlamına gelir.

Bu ayrıntı ayarı sayesinde, geliştiriciler 20.000 Gas birimi tasarruf edebilir. ( kullanılmamış bir depolama alanı depolamak için 20.000 Gas ) harcamak gerekmekteydi, ancak artık yalnızca iki depolama alanına ihtiyaç var.

Her depolama alanı Gas tükettiği için, değişkenlerin paketlenmesi gerekli depolama alanı sayısını azaltarak Gas kullanımını optimize eder.

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

3. Veri türlerini optimize et

Bir değişken birden fazla veri türü ile temsil edilebilir, ancak farklı veri türlerinin karşılık gelen işlem maliyetleri de farklıdır. Uygun veri türünü seçmek, 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şlemleri yerine getirdiğinden, 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 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. Geliştirici dört uint8 değişkenini bir depolama slotuna paketleyebilirse, 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şlemde dört uint8 değişkenini belleğe/depoya yerleştirebilir.

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

4. Sabit boyutlu değişkenler kullanarak dinamik değişkenleri değiştirme

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 harcar. Bayt uzunluğu sınırlanabiliyorsa, mümkünse bytes1'den bytes32'ye kadar en küçük boyutu seçin.

Ethereum akıllı sözleşmelerinin Gas optimizasyonundaki en iyi on uygulama

5. Haritalama ve Diziler

Solidity verileri iki veri türü 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 maliyetlidir, ancak diziler yine de yinelemeyi destekler ve veri türü paketlemesini destekler. Bu nedenle, veri listelerini yönetirken haritalamanın öncelikli olarak kullanılması önerilir, sadece yineleme gerekiyorsa veya veri türü paketlemesi ile Gas tüketimi optimize edilebiliyorsa.

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

6. calldata yerine memory kullanın

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, calldata'nın ise değiştirilemez olmasıdır.

Bu prensibi unutmayın: Eğer fonksiyon parametreleri yalnızca okunuyorsa, öncelikle calldata yerine memory kullanmalısınız. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önleyebilir.

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

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, depolama ile karşılaştırıldığında erişim maliyeti ç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

8. Taşma/alt taşma olmayacağından eminken 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ümlerde derleyici artık SafeMath kütüphanesini kullanmayı gerektirmiyor çünkü derleyici kendisi taşma ve alt taşma koruma işlevlerini yerleşik olarak barındırıyor.

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

9. Optimizasyon Değiştirici

Değiştiricinin kodu, değiştirilmiş fonksiyona gömülmüştür, her seferinde değiştirici kullanıldığında, kodu kopyalanır. Bu, bytecode boyutunu artırır ve Gas tüketimini yükseltir.

_checkOwner() iç işlevine dönüştürerek, bu iç işlevin modülatör içinde tekrar kullanılmasına izin vererek, bytecode boyutunu azaltabilir ve Gas maliyetini düşürebilirsiniz.

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

10. Kısa devre optimizasyonu

|| ve && operatörleri için, mantıksal işlemler kısa devre değerlendirmesi yapar; yani, eğer ilk koşul mantıksal ifadenin sonucunu belirlemek için yeterliyse, ikinci koşul değerlendirilmeyecek.

Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öne almak gerekir, böylece yüksek maliyetli hesaplamalardan atlanma olasılığı olabilir.

Ek Genel Tavsiyeler

1. Gereksiz kodları silin

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 algoritmayı kullanarak hesaplama yapın. Eğer sözleşmede bazı hesaplamaların sonuçları doğrudan kullanılıyorsa, o zaman 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ı serbest bırakarak Gas ödülü kazanabilirler. Eğer bir değişkene artık ihtiyaç yoksa, onu silmek için delete anahtar kelimesini kullanmalı veya varsayılan değere ayarlamalıdır.

Döngü optimizasyonu: Yüksek maliyetli döngü işlemlerinden kaçının, döngüleri mümkün olduğunca birleştirin ve tekrar eden hesaplamaları döngü gövdesinin dışına çıkarın.

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

2. Önceden derlenmiş 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 çalışmadığı, yerel istemci düğümünde çalıştığı için gereken Gas daha azdır. Önceden derlenmiş sözleşmeler, akıllı sözleşmelerin yürütülmesi için gereken hesaplama yükünü azaltarak Gas tasarrufu sağlar.

Önceden derlenmiş sözleşme örnekleri arasında Eliptik Eğri Dijital İmza Algoritması (ECDSA) ve SHA2-256 hash algoritması bulunmaktadır. Bu önceden derlenmiş sözleşmeleri akıllı sözleşmelerde 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 montaj ( in-line assembly ) geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ama etkili kodlar yazmalarını sağlar, pahalı Solidity işlem kodları kullanmadan. İç içe montaj, ayrıca bellek ve depolamanın kullanımını daha hassas bir şekilde kontrol etmeye olanak tanır, böylece Gaz ücretlerini daha da azaltır. Ayrıca, iç içe montaj şunları yapabilir

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
AlgoAlchemistvip
· 4h ago
gas beni öldürecek
View OriginalReply0
BearEatsAllvip
· 15h ago
gas ücreti yüksek değil mi, bu sadece koyun yününü çekmek isteyenler için bir çıkmaz sokak.
View OriginalReply0
MEVHunterWangvip
· 07-11 05:59
gas yine yükseldi, izlemek acıtıyor.
View OriginalReply0
CoffeeNFTradervip
· 07-11 05:55
gas tekrar optimize edilse de bir boşuna, layer2'ye gitmek daha iyi.
View OriginalReply0
StrawberryIcevip
· 07-11 05:54
Yüksek gazda sıkıştım, hadi hadi!
View OriginalReply0
OffchainWinnervip
· 07-11 05:50
L2 kullanmak istemiyorum...
View OriginalReply0
HalfBuddhaMoneyvip
· 07-11 05:31
gas ücreti ne kadar yüksek olursa olsun yüklemeliyiz kardeşim
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)