Ethereum Sanal Makinası (EVM)
EVM'nin fiziksel varlığı, bir buluta veya bir okyanus dalgasına benzetilerek açıklanamaz ama EVM, bir Ethereum istemcisi çalıştıran binlerce bağlı bilgisayar tarafından sürdürülen tek bir varlık olarak var olmaktadır.
Ethereum protokolü sadece bu özel durum makinesinin devamlı, kesintisiz ve değiştirilemez işleyişini sürdürmek için vardır: EVM, tüm Ethereum hesaplarının ve akıllı sözleşmelerin yaşadığı ortamdır. Ethereum, zincirdeki tüm bloklarda sadece tek bir "kurallı" duruma sahiptir ve EVM, bloktan bloğa yeni geçerli bir durum hesaplama kurallarını belirler.
Ön koşullar
Bayt(opens in a new tab), bellek(opens in a new tab) ve yığın(opens in a new tab) gibi bilgisayar bilimlerindeki yaygın terminolojiyi temel seviyede kavramak, EVM'yi anlamak için zorunludur. Hash fonksiyonları(opens in a new tab), iş ispatı(opens in a new tab) ve Merkle ağacı(opens in a new tab) gibi kriptografi/blok zinciri konseptlerine aşina olmak da yardımcı olacaktır.
Defterden durum makinesine
“Dağıtılmış defter” analojisi, genellikle temel kriptografi araçlarını kullanarak merkeziyetsiz bir para birimini mümkün kılan Bitcoin gibi blok zincirlerini tanımlamak için kullanılır. Bir kripto para, defteri değiştirmek için ne yapıp ne yapamayacağını yöneten kurallar nedeniyle "normal" bir para birimi gibi davranır. Örneğin, bir Bitcoin adresi daha önce aldığından daha fazla Bitcoin harcayamaz. Bu kurallar, Bitcoin ve diğer birçok blok zincirindeki tüm işlemlerin temelini oluşturur.
Ethereum'un neredeyse tamamen aynı sezgisel kuralları takip eden kendi yerel kripto parası (Ether) olsa da, Ethereum çok daha güçlü bir fonksiyonu da mümkün kılar: akıllı sözleşmeler. Bu daha karmaşık olan özellik için daha karmaşık bir analoji gerekir. Ethereum, dağıtılmış bir defter değil de dağıtılmış bir durum makinesidir(opens in a new tab). Ethereum'un durumu, yalnızca tüm hesapları ve bakiyeleri değil, aynı zamanda önceden tanımlanmış bir dizi kurala göre bloktan bloğa değişebilen ve isteğe bağlı makine kodunu çalıştırabilen makine durumunu tutan büyük bir veri yapısıdır. Durumu bloktan bloğa değiştirmenin özel kuralları EVM tarafından tanımlanır.
(opens in a new tab)
Diyagram Ethereum EVM resmediciden(opens in a new tab) uyarlanmıştır
Ethereum durum geçiş fonksiyonu
EVM, matematiksel bir fonksiyon gibi davranır: Bir girdi verildiğinde, deterministik bir çıktı üretir. Bu nedenle, Ethereum'u bir durum geçiş fonksiyonuna sahip olarak daha belirgin bir şekilde tanımlamak oldukça yararlıdır:
1Y(S, T)= S'2
Eski (S)
geçerli durum ve yeni (T)
geçerli işlem grubu ele alındığında, Ethereum Y(S, T)
durum geçiş fonksiyonu, yeni S'
geçerli çıktı durumu üretir
Durum
Ethereum bağlamında durum, tüm hesapları hash değerleri ile bağlı tutabilen ve blok zincirinde saklanan tek bir kök hash değerine indirgenebilir hâle getirebilen değiştirilmiş Merkle Patricia Ağacı(opens in a new tab) adlı devasa bir veri yapısıdır.
İşlemler
İşlemler, hesaplardan gelen kriptografik olarak imzalanmış talimatlardır. İki tür işlem vardır: mesaj çağrılarıyla sonuçlananlar ve sözleşme oluşturulmasıyla sonuçlananlar.
Sözleşme oluşturma, derlenmiş akıllı sözleşme bayt kodunu içeren yeni bir sözleşme hesabının oluşturulmasıyla sonuçlanır. Başka bir hesap o sözleşmeye mesaj çağrısı yaptığında, sözleşme kendi bayt kodunu yürütür.
EVM talimatları
EVM, 1024 öğe derinliğinde bir yığın makinesi(opens in a new tab) olarak çalışır. Her öğe, 256 bitlik kriptografi (Keccak-256 hash'leri veya secp256k1 imzaları gibi) ile kullanım kolaylığı sağlamak için seçilmiş 256 bitlik bir kelimedir.
Yürütme sırasında EVM, işlemler arasında varlığını sürdürmeyen geçici bir bellek (kelime adresli bayt dizisi olarak) tutar.
Ancak sözleşmeler, söz konusu hesap ve küresel durumun bir parçası ile ilişkili bir Merkle Patricia depolama ağacı (kelime adreslenebilir bir kelime dizisi olarak) içerir.
Derlenmiş akıllı sözleşme bayt kodu, XOR
, AND
, ADD
, SUB
vb. gibi standart yığın işlemleri gerçekleştiren bir dizi EVM işlem kodları olarak yürütülür. EVM ayrıca, ADDRESS
, BALANCE
, BLOCKHASH
vb. gibi blok zincirine özgü bir dizi yığın işlemi uygular.
(opens in a new tab)
Diyagramlar Ethereum EVM resmediciden(opens in a new tab) uyarlanmıştır
EVM uygulamaları
EVM'nin tüm uygulamaları, Ethereum Sarı Kağıdında açıklanan şartnameye uymalıdır.
Ethereum'un 5 yıllık ge çmişinde, EVM birkaç revizyondan geçmiştir ve çeşitli programlama dillerinde birkaç uygulaması mevcuttur.
Tüm Ethereum istemcileri bir EVM uygulaması içerir. Ek olarak şunlar da dahil olmak üzere birden fazla bağımsız uygulaması bulunmaktadır:
- Py-EVM(opens in a new tab) - Python
- evmone(opens in a new tab) - C++
- ethereumjs-vm(opens in a new tab) - JavaScript
- eEVM(opens in a new tab) - C++
Daha Fazla Bilgi
- Ethereum Sarı Kağıdı(opens in a new tab)
- Jellopaper ya da diğer adıyla KEVM: K'de EVM Semantiği(opens in a new tab)
- Bej Kağıt(opens in a new tab)
- Ethereum Sanal Makinesi İşlem Kodları(opens in a new tab)
- Solidity'nin belgelerine kısa bir giriş(opens in a new tab)