8 Temmuz 2017 Cumartesi

Ethereum'un Temel Konseptleri: Hesap, İşlem, Gaz ve Blok Gaz Limiti

Bu makalenin İngilizce orijinalini buradan da okuyabilirsiniz? Biz elimizden geldiğince Türkçe’ye çevirmeye çalıştık.



Bu makale, Ethereum'da blok boyutunun belirlenmesinde hesapların(accounts), işlemlerin(transactions), gazın(gas) ve madencilerin(miners) oynadığı rolün temel mekanizmasını açıklamak için hazırlanmıştır. Düzeltmeler ile ilgili önerilerinizi memnuniyetle değerlendirebiliriz.


Hesap nedir?

EOA(Externally owned accounts) vs Sözleşme hesapları

Ethereum'da iki tür hesap vardır
       Externally Owned Accounts: Harici olarak Sahip Olunan Hesaplar
       Sözleşme Hesapları


1_) Harici olarak sahip olunan hesaplar (EAO):

Harici olarak kontrol edilen bir hesap:
       Bir ether hesabına sahiptir,
       Alma gönderme yapabilir (ether aktarımı yapabilir veya sözleşme kodunu tetikleyebilir),
       Özel anahtarlar(private keys) tarafından kontrol edilir,
       Ilişkili bir kodu yoktur.

2_) Sözleşme(Contrat) hesapları:

Bir sözleşme:
       Bir ether hesabına(balance),
       Ilişkili bir koda sahiptir.
       Sözleşme kodunun yürütülmesi, diğer sözleşmelerden alınan işlemler veya mesajlar (çağrılar) tarafından tetiklenir.
        Sözleşme yürtüldüğünde - rastgele karmaşık Turing Complete operasyonları gerçekleştirir- kendi kalıcı depolama birimini idare eder, yani kendi kalıcı durumuna sahip olabilir ve diğer sözleşmeleri çağırabilir.

Ethereum blok zincirindeki tüm işlemler, hesaplardan yapılan işlemlerle harekete geçirilir.  Bir sözleşme hesabı bir işlem çağrısı aldığı her sefer, kendi kodunu, işlemin bir parçası olarak gönderilen girdi parametreleryle ve talimat verilen şekilde yürütür. Sözleşme kodu Ethereum Sanal Makinesi (EVM) tarafından, ağdaki her düğümde, yeni blokların doğrulanması amacıyla yürütülür.


İşlem ve Mesaj nedir?

İşlemler(Transactions):

"İşlem" terimi, Ethereum'da, harici olarak sahip olunan bir hesaptan blokchain üzerindeki başka bir hesaba gönderilecek bir mesajı saklayan imzalı veri paketini belirtmek için kullanılır.

İşlemler şunları içerir:
       Mesajın alıcısı,
       Göndereni tanımlayan ve mesajı blockchain yoluyla alıcıya göndermek niyetini kanıtlayan,  bir imza,
       VALUE alanı:Gönderenden alıcıya aktarılacak wei miktarı,
       Bir sözleşmeye gönderilen mesajı içerebilecek isteğe bağlı bir veri alanı,
       Işlem yürütmesine izin verilen hesaplama adımlarının maksimum sayısını temsil eden bir GASLIMIT değeri,
       Gönderenin gaz için ödemek istediği ücreti temsil eden bir GASPRICE değeri. Bir gaz birimi, bir atomik komutun, yani bir hesaplama aşamasının yürütülmesine karşılık gelir.

Mesajlar:

Sözleşmelerin diğer sözleşmelere "mesaj" gönderme yeteneği vardır. Mesajlar serileştirilmemiş ve sadece Ethereum yürütme ortamında var olan sanal nesnelerdir. Fonksiyon çağrısı olarak düşünülebilirler.

Bir mesajda şunlar bulunur:
       Mesajın göndereni (örtülü),
       Mesajın alıcısı,
       VALUE alanı:İletinin yanında sözleşme adresine aktarılacak miktar,
       Isteğe bağlı bir veri alanı, sözleşmenin gerçek girdi verileri
       GASLIMIT değeri: tetiklediği kod yürütme işleminin maksimum gas miktarını sınırlayan bir GASLIMIT değeri olabilir.

Esasen, bir mesaj, bir işlem gibidir. Ancak mesaj  harici bir hesap tarafından değil, bir sözleşme tarafından üretilir. Bir sözleşme, çalışırken CALL veya DELEGATECALL komutlarını yürüttüğünde bir mesaj üretilir.  Mesajlara bazen "dahili işlem" adı da verilir. Bir işlem gibi, bir mesaj da alıcıya gönderildiğinde alıcı hesabın kodunu çalıştırır. Böylece sözleşmeler, harici olarak sahip olunan hesapların yapabileceği şekilde diğer sözleşmelerle de ilişkilere sahip olabilir. Çoğu zaman insanlar, bir mesaja atıfta bulunduklarında da işlem terimini kullanır; bu nedenle, bu terimin, topluluk uzlaşması yoluyla kullanılmamasıyla ortadan kaldırılması mümkündür.

Gaz nedir?

Ethereum, Ethereum Sanal Makinesi (EVM) adı verilen blok zincirinde bir yürütme ortamı oluşturur.   Ağa katılan her düğüm, blok doğrulama protokolünün bir parçası olarak EVM'yi çalıştırır.  Doğrulanmakta olan blokta listelenen işlemlerin üzerinde geçer ve işlemin tetiklediği şekilde kodu  EVM içinde çalıştırırlar. Ağdaki her düğüm aynı hesaplamaları yapar ve aynı değerleri depolar. Sözleşmeyle yapılan işlemlerin bütün düğümler boyunca çoğaltılıp tekrarlanması, doğal olarak onları pahalı yapar. Bu da genelde zincir dışında kolaylıkla yapılabilecek hesaplamaların blockchain içinde yapılmamasına teşvik eder. Yapılan her işlem için,  gaz birimi olarak ifade edilen belirli bir maliyet vardır. Bir sözleşmenin kullanabileceği her işlem ile ilgili bir gaz değeri vardır.  Mesela, burada operasyon kodu başına eski gaz maliyetleri listesi (opcode) verilmiştir .

Gaz ve işlem maliyetleri:

Her işlem için bir gaz limiti ( bazen startGas denir ) ve gaz başına ödemeyi kabul ettiği bir ücret vardır. Madenciler işlemi kabul etmeyi ve ücreti alıp-almamayı seçebilirler. Aslında, bugün tüm işlemler madenciler tarafından bir şekilde yapılıyorlar, ancak bir kullanıcının göndermeyi seçtiği işlem ücreti miktarı, işlemin kadar ne kadar süreceğini etkiliyor. Orijinal mesaj ve tetiklenebilecek alt mesajlar da dahil olmak üzere, işlem tarafından ortaya çıkarılan hesaplama aşamaları tarafından kullanılan toplam gaz miktarı, gaz limitinden düşük veya bu gaz limitine eşitse, işlem yürütülüyor. Eğer toplam tüketilecek gaz, belirtilen gaz sınırını aşarsa, işlemler hala geçerli sayılır ve ücret hala madenci tarafından   alınarak tüm değişiklikler geri alınır.  Blokchain, bir işlem başlatıldığını ancak ancak yeterli miktarda gaz sağlanamadığı için işlemlerin geri alındığını gösterir. İşlem yürütülürken kullanılmayan tüm fazla gaz işlemi gönderene, Ether olarak geri ödenir. Bu nedenle gaz maliyeti tahminleri sadece yaklaşık olduğundan, birçok kullanıcı, işlemlerinin kabul edildiğini garanti etmek için fazla miktarda gaz ödemektedir, çünkü fazladan gaz size iade edilir.

İşlem maliyetlerini tahmin etme:

Bir işlemin toplam ether maliyeti 2 faktöre dayanır:
        gasUsed : işlem tarafından tüketilen toplam gaz
       gasPrice : işlemde belirtilen bir gaz biriminin fiyatı (ether cinsinden)
Toplam maliyet = gasUsed * gasPrice

gasUsed(Kullanılan Gaz):

 EVM'deki her operasyonunun, ne kadar gaz tükettiği belirlenmiştir. GasUsed, gerçekleştirilen tüm işlemler için tüm kullanılan gazın toplamıdır.
GasUsed'i tahmin etmek için, kullanılabilen ancak bazı uyarılara sahip bir tahmini Gas API'si vardır.

gasPrice(Gaz Ücreti):

Bir kullanıcı bir işlem için istediği gaz ücretini 0 da dahil olmak belirtebilir.  Fakat, Ethereum için, varsayılan gaz ücreti 0.05E12 wei'dir. Madenciler gelirlerini optimize etmek istediklerinden, onları daha düşük veya sıfır olan bir gasPrice belirten bir işlemi kabul etmeye ikna etmek zor olacaktır.

Örnek işlem maliyeti:

Bu örneği MyEtherWallet ekibinin izni ile ödünç alıyorum.  Gaz ile ilgili iyi yazılmış kılavuzlarını ziyaret edebilirsiniz .  Ayrıca ether miktarlarını alt birime dönüştürmenize izin veren mükemmel bir yardımcı program sayfasına da sahipler.

Gas limitini bir araba için gerekli litre / galon / gaz birimi miktarı gibi  düşünebilirsiniz. Gaz fiyatını ise  bu litre / galon / gaz birimi için birim başına ücret olarak düşünebilirsiniz.
Mesela bir araba için, galon(birim) başına $2.50 (fiyat) veya Ethereum için, gaz(birim) başına 20 GWEI (fiyat). 10 galonluk deponuzu doldurmak için litresi 2,50 dolardan 25 dolar harcarsınız. Benzer şekilde 21000 gazlık bir işlem için,gaz başına 20 GWEI'den toplam 0,00042 ETH harcarsınız(1 ether=10e9 gwei). Bu nedenle toplam TX ücreti 0.00042 Ether olacaktır.
Gönderiler genellikle ~ 50000 gaz ila ~ 100000 gaz arasında tutar, bu nedenle toplam TX ücreti 0,001 ETH - 0,002 ETH' arasındadır.

"Blok gaz limiti" nedir?

Blok gaz limiti, bir bloğa kaç işlemin sığabileceğini belirlemek için bir bloğun izin verdiği maksimum gaz miktarıdır. Örneğin, her işlemin 10, 20, 30, 40 ve 50 gaz limitine sahip olduğu 5 işlem yaptık diyelim. Blok gaz limiti 100 ise, ilk dört işlem bloğa sığabilir. Madenciler hangi işlemlerin bir bloğa dahil edileceğine karar verirler.  Farklı bir madenci bloğun son 2 işlemini (50 + 40) dahil etmeyi deneyebilir ve sadece ilk işlemi dahil etmek için yeterli alanı kalır(10).  Mevcut blok gaz limitinden daha fazla gazı kullanan bir işlemi dahil etmeye çalışırsanız, bu işlem  şebeke tarafından reddedilecek ve Ethereum istemcisi "İşlem blok gaz sınırını aşıyor" mesajı verecektir. Bunun için verilen örnek, Ethereum StackExchange "Ethers" yazısından alınabilir .

Bu yazının yazıldığı sıralarda blok gaz limiti  etstats.net'e göre 4.712.357 gazdır.Yani her biri 21000 işlem gaz limitine sahip yaklaşık 224 işlem, 1 bloğa(ortalama 15-20 saniyede bir üretilmektedir) sığabilir. Protokol, madencinin blok gaz limitini her iki yönde de 1/1024 oranında (% 0.0976) ayarlamasına izin verir .

Blok gaz limitine kim karar verir?
Blok gaz limitinin ne olduğuna ağdaki madenciler karar verirler. Ayarlanabilir protokol blokundan gaz limitinden ayrı olarak, çoğu istemci için 4.712.388 minimum blok gaz sınırı, varsayılan bir madencilik stratejisidir. Madenciler bunu değiştirmeyi seçebilir, ancak birçoğu varsayılanı kullanmayı tercih eder.

Blok gaz limiti nasıl değişir?
Ethereum'daki Madenciler, ethminer  vb. geth veya Parity Ethereum istemci düğümüne bağlanan bir madencilik programı kullanmaktadır. Geth ve Parity'in madencilerin değiştirebileceği seçenekleri vardır. Geth'in madencilik için komut satırı seçenekleri burada ve Parity'nin seçenekleri buradadır.

Ethereum ağı "DoS" nedir?

Son zamanlarda Ethereum ağının yavaşlaması, tıkanması ya da kullanılamaz hale gelmesiyle ilgili birçok şikayet gelmektdir. Bu yavaşlamayı Ethereum ağı "DoS" olarak tanımlayabiliriz. Ethereum ağında bir hizmet reddi (DoS) olayı, sürekli dolu bloklar ve ağda bekleyen birçok işlem olduğunda ortaya çıkar. Burada madencilerin iliştirilen işlem ücretine dayalı işlemleri yürütmeyi seçtiklerini hatırlayalım. DDoS olayları kötü amaçlı olabilir veya olmayabilir.

Kötü Niyetli DoS

Geçtiğimiz sonbaharda, Ethereum, bir işlem spami saldırısı olarak adlandırılan bir kişi veya grup tarafından saldırıya uğradı. Saldırı, bu blog yazısında açıklanmıştır. Saldırgan, akıllı sözleşmelerdeki hesaplanması zor ancak eklenmesi kolay fonksiyonları art arda işlenmesini isteyen bir DoS saldırısı gerçekleştirdi.Saldırı sırasında madencilerin blok gaz limitini 1,5 milyona , ardından 2 milyona düşürmeleri istendi. Ağlara yapılan saldırılar sırasında madencilere blok gaz limitini düşürme talebinin bulunduğu başka durumlar da olabilir.

Kötü Niyetli Olmayan DoS

Ağda çok fazla bekleyen işlem olduğu zaman, bir işlemin işlemesi alışılmadık bir şekilde uzun sürer.  Son zamanlarda, token dağıtım olaylarının popülerliği ve yaygınlığı (ilk para teklifleri (ICO'lar) veya token satışları), ağın işlemlerle yedeklenmesine neden oldu.  Infura'da olayın , teknik ayrıntılarıyla ilgili bir yazı var.

Bloklar dolduğunda bile blok gaz sınırı neden değişmiyor?

Birincil Sebep: Madenciler, uyarlanabilir gaz sınırı özelliğini kullanmıyor.
Ethereum protokolünde, madencilerin gaz limitini seçebilecekleri bir mekanizma vardır ve bu nedenle kapasite, hard fork ayarlamaya gerek kalmadan artırılabilir. Başlangıçta, bu mekanizma, madencilerin en az 4,7 milyon gaz sınırında olacak bir strateji ile birleştirildi, ancak bu miktar kullanılan son gazın (1024 bloğun üssel hareketli ortalaması) ortalama gazının 150%'sini hedef alacaktı.Bu mekanizma artan talebe paralel olarak anti-spam amaçlı tavanı bırakmadan kapasitenin organik olarak artmasına izin verir.Yukarıdaki "Kötü Niyetli DoS" bölümünde anlatıldığı gibi, geçmişte, madencilerin, düzeltmeler geliştirilene kadar saldırıları engellemeye yardım etmek için blok gaz sınırını varsayılan olmayan ayarlara getirmesi için ayarlarını değiştirmeleri önerildi. Sorun, bazı madencilik havuzlarının saldırıları yatıştırdıktan sonra bile ayarları asla değiştirmemesiydi. Yaklaşık bir ay önce, madencilere gaz limitini ve gaz fiyat ayarlarını, adaptif bir gaz sınırına değiştirmeleri istendi. Çünkü son ICOsatışları hızla blokları dolduruyor ve blockchain işlemlerinde tıkanıklığa neden oluyordu. ETH Gaz Istasyonu , madencilik havuzlarının ne tür gaz limitleri için oy kullanacaklarını araştıran insanlar için mükemmel bir kaynaktır.

Madencilerin bunu düzeltmek için ne yapmaları gerekiyor?

Madenciler adaptif gaz limitlerini yeniden etkinleştirmek için Geth veya Parite istemcisi ayarlarını  ayarlayabilirler. Not: Aşağıdaki değerler bu Reddit yazısından alınmıştır ve bu Reddit yayınında açıklandığı gibi aslında daha yüksek ayarlanabilir.

Geth:

Önerilen ayar
 --gasprice: 4000000000 
--targetgaslimit: 4712388
Açıklama
 --targetgaslimit: Çıkarılacak bloklar için yapay hedef gaz limitidir. (varsayılan: "4712388")
--gasprice: Bir işlem madenciliği için kabul  minimum gaz fiyatı. (varsayılan: "20000000000").  
Not: gasprice wei birimiyle  listelenmiştir.

Parite:

Önerilen ayar
 --gas floor target 4712388 
--gas-cap 9000000 
--gasprice 4000000000
Açıklama
-gas floor target: Yeni bir bloğu kapatırken hedeflenecek blok başına gaz miktarı (varsayılan: 4700000).
 --gas-cap: İşlem hacmine bağlı olarak blok başına gaz limitini ne kadar yükselttiğimizin üst sınırı (varsayılan: 6283184).
 --gasprice :Madencilik için kabul edilmek üzere bir işlem için ödenmesi gereken GAS başına minimum Wei miktarı.






Hiç yorum yok:

Yorum Gönder

Ethereum'un Temel Konseptleri: Hesap, İşlem, Gaz ve Blok Gaz Limiti

Bu makalenin İngilizce orijinalini  buradan   da okuyabilirsiniz? Biz elimizden geldiğince Türkçe’ye çevirmeye çalıştık. Bu makale, ...