Ethereum akıllı sözleşmeler Gas optimizasyon rehberi: İşlem Maliyeti düşüşü ve verimliliği artırma

Ethereum akıllı sözleşmeler Gas optimizasyon rehberi

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 genellikle pahalı işlem ücretleri ödemek zorunda kalır. Bu nedenle, akıllı sözleşme geliştirme aşamasında Gas ücreti optimizasyonu yapmak 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 etkili bir blok zinciri deneyimi sunar.

Bu yazıda 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 açıklanacaktır. Bu içeriklerin geliştiricilere ilham ve pratik yardım sağlaması, aynı zamanda sıradan kullanıcıların EVM'in Gas ücretleri çalışma şekmini 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 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ü ölçen bir birimdir.

EVM yapısında, Gas tüketimi esasen üç parçaya 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 kaynakları 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 ücret "Gas ücreti" olarak adlandırılır.

EIP-1559( Londra hard fork'u )'den itibaren yürürlüğe girdiğinden beri, Gas ücreti aşağıdaki formül ile hesaplanmaktadır:

Gas ücreti = Kullanılan Gas birimi * ( temel ücret + öncelik ücreti )

Temel ücret yok edilecek, öncelik ücreti 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 öncelik ücreti ayarlamak, işlemin bir sonraki bloğa dahil edilme olasılığını artırabilir. Bu, kullanıcıların doğrulayıcılara ödediği bir "bahşiş"e benzer.

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

EVM'deki Gas optimizasyonunu anlama

Solidity ile akıllı sözleşmeleri derlediğinizde, 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 yürütme ) 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 Gas maliyetleri ayarlandı ve bu, sarı kitabın içeriğiyle farklılık 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şlemler düşük maliyetlidir:

  • Bellek değişkenlerini okuyun ve yazın
  • 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ısı
  • İç fonksiyon çağrısı

Maliyetli işlemler şunlardır:

  • Sözleşme depolamasında saklanan durum değişkenlerini okuma ve yazma
  • Harici 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 uygulama listesini 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.

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

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 oluşur.

Ethereum sarı kitabının tanımı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, depolama işlemleri gibi sload ve sstore, en ideal koşullarda bile en az 100 birim maliyet gerektirir.

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

  • Geçici verileri bellekte sakla
  • 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şmelerinin Gaz optimizasyonu için en iyi on 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 slotunu değişkenlerin depolanması için temel birim olarak kullanır. Değişkenlerin paketlenmesi, birden fazla değişkenin tek bir depolama slotuna uyacak şekilde akıllıca düzenlenmesi anlamına gelir.

Bu ayrıntı ayarlaması sayesinde, geliştiriciler 20.000 Gas birimi tasarruf edebilir. Kullanılmamış bir depolama alanı saklamak 20.000 Gas( gerektiriyordu, ancak şimdi yalnızca iki depolama alanı gerekmektedir.

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

![Ethereum akıllı sözleşmelerin 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ü 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 tam sayı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, 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ın toplam maliyeti dört uint256 değişkeninden daha düşük olacaktır. Bu şekilde, akıllı sözleşme bir depolama slotunu bir kez okuyup yazabilir ve tek bir işlemde dört uint8 değişkenini bellek/depolama alanına koyabilir.

![Ethereum akıllı sözleşmelerinin Gas optimizasyonunda en iyi 10 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 byte 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şkenlerden daha az Gas tüketmektedir. Byte uzunluğu sınırlanabiliyorsa, mümkünse bytes1'den bytes32'ye kadar en küçük uzunluğu seçin.

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

) 5. Haritalar ve Diziler

Solidity veri listesi iki veri türüyle temsil edilebilir: diziler ###Arrays( ve haritalar )Mappings(, ancak söz dizimi ve yapıları tamamen farklıdır.

Haritalar çoğu durumda daha verimli ve daha düşük maliyetlidir, ancak diziler yine de yineleyebilirlik sunar ve veri türü paketlemeyi destekler. Bu nedenle, veri listelerini yönetirken haritaları öncelikli olarak kullanmanız önerilir, eğer yineleme gerekmiyorsa veya veri türü paketlemesiyle Gas tüketimini optimize edilemiyorsa.

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

) 6. calldata yerine memory kullanın

Fonksiyon parametrelerinde tanımlanan değişkenler calldata veya memory içinde depolanabilir. İ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 yalnızca okunuyorsa, öncelikle calldata kullanılmalı, memory yerine. Bu, fonksiyonun calldata'sından memory'ye gereksiz kopyalama işlemlerinin önüne geçebilir.

![Ethereum akıllı sözleşmelerinin Gas optimizasyonu için en iyi on uygulama]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.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, bu nedenle mümkün olduğunca Constant veya Immutable anahtar kelimelerinin kullanılmasını öneririz.

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

) 8. Taşma/alt taşma olmayacağından emin olunarak Unchecked kullanın

Geliştiriciler aritmetik işlemlerin taşma veya alt sınır aşımına neden olmayacağını kesinleştirdiğinde, Solidity v0.8.0 ile tanıtılan unchecked anahtar kelimesini kullanarak gereksiz taşma veya alt sınır aşım kontrollerinden kaçınabilir ve böylece Gas maliyetlerini azaltabilir.

Ayrıca, 0.8.0 ve üzeri sürümlerde derleyicinin SafeMath kütüphanesine ihtiyaç duymadığı, çünkü derleyicinin kendisinin taşma ve alt taşma koruma işlevlerini yerleşik olarak barındırdığı belirtilmektedir.

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

) 9. Optimizasyon Değiştirici

Değiştirici kodu, değiştirilmiş olan işlevin içine gömülür, her değiştirici kullanıldığında, kodu kopyalanır. Bu, bytecode boyutunu artırır ve Gas tüketimini yükseltir.

İç fonksiyonu _checkOwner###( olarak yeniden yapılandırarak, bu iç fonksiyonun değiştiricilerde yeniden kullanılmasına izin vermek, bytecode boyutunu azaltabilir ve Gas maliyetlerini düşürebilir.

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

) 10. Kısa Devre Optimizasyonu

|| ve && operatörleri için, mantıksal işlemlerde 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 hesaplama koşullarını öne almak gerekir, böylece yüksek maliyetli hesaplamaların atlanması mümkün olabilir.

Ek Genel Tavsiyeler

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şme boyutunu küçük tutmanın en doğrudan yoludur.

Aşağıda bazı pratik öneriler bulunmaktadır:

  • En verimli algoritmalar kullanarak hesaplamalar yapın. Eğer sözleşmede bazı hesaplamaların sonuçları doğrudan kullanılıyorsa, bu gereksiz hesaplama süreçlerinin kaldırılması gerekir. Özünde, kullanılmayan her 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 delete anahtar kelimesi ile 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 çıkarın.

2. Önceden derlenmiş akıllı sözleşmeleri 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 miktarı 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ş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.

) 3. İç içe montaj kodu kullanımı

İç içe montaj ### in-line assembly ( geliştiricilerin EVM tarafından doğrudan çalıştırılabilen düşük seviyeli ama verimli kod yazmaları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 etmeye olanak tanır, böylece Gas ücretlerini daha da azaltır. Ayrıca, iç içe montaj bazı karmaşık işlemleri yalnızca Solidity kullanarak gerçekleştirilmesi zor olanları gerçekleştirebilir ve Gas tüketimini optimize etmek için daha fazla esneklik sağlar.

Ancak, iç içe montaj kullanmak da rüzgar getirebilir.

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
  • 3
  • Share
Comment
0/400
Deconstructionistvip
· 18h ago
Bu gas ücreti çok pahalı, dayanılacak gibi değil.
View OriginalReply0
MissedTheBoatvip
· 18h ago
Makarna yerken iki damla yağ tasarrufu sağlıyorsun, daha neyi tasarruf ediyorsun gas
View OriginalReply0
OnchainGossipervip
· 18h ago
gas ücreti gerçekten çok pahalı ah ah ah
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)