En iyi 10 akıllı sözleşmeler Gas ücreti optimizasyonu uygulamaları EVM geliştirme verimliliğini artırmaya yardımcı olur

Akıllı Sözleşmelerin Gas Ücretlerini Optimize Etmenin On En İyi Uygulaması

Ethereum ana ağındaki Gas ücretleri her zaman bir sorun olmuştur, özellikle de ağın tıkalı olduğu zamanlarda daha da belirgin hale gelir. Yoğun dönemlerde kullanıcılar genellikle yüksek işlem ücretleri ödemek zorunda kalırlar. Bu nedenle, akıllı sözleşmeler geliştirilirken Gas ücretlerinin optimize edilmesi son derece önemlidir. Gas tüketiminin optimize edilmesi sadece işlem maliyetlerini düşürmekle kalmaz, aynı zamanda işlem verimliliğini artırır ve kullanıcılara daha ekonomik ve verimli bir blok zinciri deneyimi sunar.

Bu makale, Ethereum sanal makinesi (EVM)'in Gas ücret mekanizmasını, Gas ücreti optimizasyonunun temel kavramlarını ve akıllı sözleşmeler geliştirirken Gas ücreti optimizasyonu için en iyi uygulamaları özetleyecektir. Bu içeriklerin geliştiricilere ilham ve pratik yardımcı olmasını umuyoruz, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretlerinin nasıl çalıştığını daha iyi anlamalarına yardımcı olmasını ve blockchain ekosistemindeki zorluklarla birlikte başa çıkmalarını sağlıyor.

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

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çü birimidir.

EVM'nin yapı düzeninde, Gas tüketimi üç kısma 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 gereken hesaplama kaynakları nedeniyle, sonsuz döngüleri ve hizmet reddi ( DoS ) saldırılarını önlemek için belirli bir ücret alınır. Bir işlemin tamamlanması için gereken ücret "Gas ücreti" olarak adlandırılır.

EIP-1559'un yürürlüğe girmesinden bu yana, Gas ücreti aşağıdaki formülle hesaplanmaktadır:

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

Temel ücret yok edilecektir, ö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 belirlemek, işlemin bir sonraki bloğa dahil olma olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara verdiği bir "bahşiş" gibidir.

Ethereum akıllı sözleşmelerin 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 koduna" yani opcodes'a dönüştürülür.

Herhangi bir işlem kodu ( örneğin akıllı sözleşmeler oluşturma, mesaj çağrısı yapma, hesap depolama erişimi 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ı işlem kodlarının Gas maliyetleri ayarlandı ve bu, sarı kitabın içeriğiyle farklılık gösterebilir.

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 daha düşüktür:

  • Bellek değişkenlerini oku ve yaz
  • Sabitleri ve değişmez değişkenleri oku
  • Yerel değişkenleri okuma/yazma
  • calldata değişkenini oku, örneğin calldata dizisi ve yapı
  • İç fonksiyon çağrısı

Maliyetli işlemler şunlardır:

  • Sözleşme depolamasında saklanan durum değişkenlerini okuyun ve yazın
  • Harici fonksiyon çağrısı
  • Döngü işlemi

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

EVM Gaz Ücretleri Optimizasyon 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 geliştirebilir.

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. Akıllı sözleşmeler 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şlemleri en ideal koşullarda bile en az 100 birim maliyet gerektirir.

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

  • Geçici verileri bellek içinde saklayın
  • 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 atama.

Ethereum akıllı sözleşmelerin Gas optimizasyonu için 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 alanını değişkenlerin depolandığı 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 alanına sığmasını sağlamak 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 ) tüketilmesi gerekiyor, ancak şimdi yalnızca iki depolama alanına ihtiyaç var.

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 Gaz optimizasyonu için en iyi 10 uygulama

3. Veri türlerini optimize et

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'nin 256 bit biriminde 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 kullanıldığında durum farklıdır. Geliştiriciler dört uint8 değişkenini bir depolama alanına paketleyebiliyorsa, bunları yinelemenin toplam maliyeti dört uint256 değişkenine göre daha düşük olacaktır. Böylece, akıllı sözleşmeler bir depolama alanını bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini belleğe/depolamaya koyabilir.

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

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

Eğer veriler 32 bayt içinde kontrol edilebiliyorsa, bytes veya strings yerine bytes32 veri türünün kullanılmasını öneririz. 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 kadar en küçük uzunluğu seçin.

5. Haritalar ve diziler

Solidity veri listeleri iki veri türü ile temsil edilebilir: diziler (Arrays) ve haritalar (Mappings), ancak sözdizimi ve yapıları tamamen farklıdır.

Çoğu durumda haritalama daha verimli ve maliyet açısından daha düşüktür, ancak diziler yine de yinelemeye sahip olup veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritalamayı öncelikli olarak kullanmanız önerilir, yalnızca yineleme gerekiyorsa veya veri türü paketlemesi ile Gas tüketimini optimize edebiliyorsanız.

Ethereum akıllı sözleşmelerin Gaz optimizasyonu için en iyi on 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, bu durumda memory yerine öncelikle calldata kullanılmalıdır. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerini önlemeye yardımcı olur.

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üşük olup, mümkün olduğunca Constant veya Immutable anahtar kelimelerinin kullanılması önerilir.

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

8. Taşma/alt aşımın olmayacağından emin olurken 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 kelimesi kullanılabilir, böylece gereksiz taşma veya alt taşma kontrollerinden kaçınılarak Gas maliyetinden tasarruf edilebilir.

Ayrıca, 0.8.0 ve üzeri sürümlerin derleyicileri artık SafeMath kütüphanesini kullanmayı gerektirmiyor, çünkü derleyici kendisi taşma ve alt taşma koruma özelliklerini yerleşik olarak sunuyor.

9. Optimizasyon Değiştirici

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

İç fonksiyon _checkOwner() olarak mantığı yeniden yapılandırarak, modülatör içinde bu iç fonksiyonun tekrar kullanılmasına izin vermek, bytecode boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.

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

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 belirlemede yeterliyse, ikinci koşul değerlendirilmez.

Gas tüketimini optimize etmek için, hesaplama maliyeti düşük olan koşulları öne almak gerekir, böylece yüksek maliyetli hesaplamaları atlama olanağı doğar.

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

Ek Genel Öneriler

1. Gereksiz kodları silin

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şmenin 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 doğrudan bazı hesaplamaların sonuçları kullanılıyorsa, bu gereksiz hesaplama süreçlerinin ortadan kaldırılması gerekir. Temelde, kullanılmayan her hesaplama silinmelidir.

  • Ethereum'da geliştiriciler, depolama alanı serbest bırakarak Gas ödülleri kazanabilirler. Eğer bir değişkene artık ihtiyaç duyulmuyorsa, 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 tekrar eden 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 işlevleri sunar. Kod EVM üzerinde değil, düğüm yerelinde ç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ğlayabilir.

Önceden derlenmiş sözleşmelerin örnekleri 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 azaltabilir ve uygulamaların çalışma verimliliğini artırabilir.

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

3. Inline montaj kodu kullanma

İç içe derleme, geliştiricilerin EVM tarafından doğrudan yürütülebilen düşük seviyeli ancak verimli kodlar yazmalarına olanak tanır, pahalı Solidity işlem kodları kullanmadan. İç içe derleme, bellek ve depolamanın kullanımını daha hassas bir şekilde kontrol etmeye de imkan tanır ve böylece Gas ücretlerini daha da azaltır. Ayrıca, iç içe derleme, yalnızca Solidity kullanarak gerçekleştirilmesi zor olan bazı karmaşık işlemleri yerine getirebilir, Gas tüketimini optimize etmek için daha fazla esneklik sağlar.

Ancak, yerleşik derleme kullanmak da riskler taşıyabilir ve hatalara neden olabilir. Bu nedenle, dikkatli kullanılmalı ve yalnızca deneyimli geliştiriciler tarafından uygulanmalıdır.

4. Layer 2 çözümleri kullanma

Layer 2 çözümlerinin kullanılması, Ethereum ana ağında depolanması ve hesaplanması gereken veri miktarını azaltabilir.

rollups, yan zincirler ve durum kanalları gibi Layer 2 çözümleri

GAS-0.42%
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
AirdropATMvip
· 07-17 09:37
gas ücreti daha da düşebilir, cex batabilir.
View OriginalReply0
CommunityJanitorvip
· 07-17 02:30
Artık bir eski enayiyim, bu gas ücreti gerçekten insanı yiyor.
View OriginalReply0
GhostWalletSleuthvip
· 07-15 15:28
gas ücretindeki düşüşün de pek bir anlamı yok, V神 sadece enayileri oyuna getirmek istiyor.
View OriginalReply0
GasFeeNightmarevip
· 07-15 07:31
gas gerçekten ölümcül~
View OriginalReply0
BrokenDAOvip
· 07-15 07:23
Yönetim alışkanlığının bir başka örneği. On-chain ücretlerini optimize ederken teşvik çarpıtmalarını göz önünde bulundurdunuz mu? Sık sık işlem yapan sıradan kullanıcılar her zaman ödeyenlerdir.
View OriginalReply0
DoomCanistervip
· 07-15 07:12
gas'ı harcama, yok edici hisleri.
View OriginalReply0
PumpBeforeRugvip
· 07-15 07:07
gas parasıyla bir şişe Maotai alınabilir.
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)