Ethereum Sanal Makinesi (EVM)
Ethereum Sanal Makinesi (EVM), tüm Ethereum düğümlerinde kodu tutarlı ve güvenli bir şekilde yürüten merkeziyetsiz bir sanal ortamdır. Düğümler, akıllı sözleşmeleri yürütmek için EVM'yi çalıştırır ve operasyonlar için gereken hesaplama çabasını ölçmek amacıyla "Gaz" kullanarak verimli kaynak tahsisi ve ağ güvenliği sağlar.
Ön Koşullar
EVM'yi anlamak için baytlar (opens in a new tab), bellek (opens in a new tab) ve yığın (stack) (opens in a new tab) gibi bilgisayar bilimlerindeki yaygın terminolojiye temel düzeyde aşina olmak gereklidir. Ayrıca hash fonksiyonları (opens in a new tab) ve Merkle ağacı (opens in a new tab) gibi kriptografi/blokzincir kavramlarına hakim olmak da faydalı olacaktır.
Defterden durum makinesine
'Dağıtık defter' analojisi, genellikle kriptografinin temel araçlarını kullanarak merkeziyetsiz bir para birimi sağlayan Bitcoin gibi blokzincirleri tanımlamak için kullanılır. Defter, birinin defteri değiştirmek için ne yapıp ne yapamayacağını yöneten bir dizi kurala uyması gereken bir aktivite kaydı tutar. Örneğin, bir Bitcoin adresi daha önce aldığından daha fazla Bitcoin harcayamaz. Bu kurallar, Bitcoin ve diğer birçok blokzincirdeki tüm işlemlerin temelini oluşturur.
Ethereum, neredeyse tamamen aynı sezgisel kuralları izleyen kendi yerel kripto parasına (Ether) sahip olsa da, çok daha güçlü bir işlevi de mümkün kılar: akıllı sözleşmeler. Bu daha karmaşık özellik için daha gelişmiş bir analoji gereklidir. Ethereum, dağıtık bir defter yerine dağıtık 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 rastgele makine kodunu yürütebilen bir makine durumunu da tutan büyük bir veri yapısıdır. Durumun bloktan bloğa değiştirilmesine ilişkin belirli kurallar EVM tarafından tanımlanır.
Diyagram Ethereum EVM illustrated (opens in a new tab) kaynağından uyarlanmıştır
Ethereum durum geçiş fonksiyonu
EVM tıpkı 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 resmi bir şekilde tanımlamak oldukça faydalıdır:
Y(S, T)= S'
Eski bir geçerli durum (S) ve yeni bir geçerli işlemler kümesi (T) verildiğinde, Ethereum durum geçiş fonksiyonu Y(S, T), yeni bir geçerli çıktı durumu S' üretir.
Durum
Ethereum bağlamında durum, tüm hesapları hash'ler ile birbirine bağlı tutan ve blokzincirde depolanan tek bir kök hash'e indirgenebilen, değiştirilmiş Merkle Patricia Ağacı adı verilen 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şturmayla sonuçlananlar.
Sözleşme oluşturma, derlenmiş akıllı sözleşme baytkodunu içeren yeni bir kontrat hesabının oluşturulmasıyla sonuçlanır. Başka bir hesap bu sözleşmeye ne zaman bir mesaj çağrısı yaparsa, sözleşme kendi baytkodunu yürütür.
EVM talimatları
EVM, 1024 öğe derinliğine sahip bir yığın makinesi (stack machine) (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ığı için seçilmiş olan 256 bitlik bir kelimedir (word).
Yürütme sırasında EVM, işlemler arasında kalıcı olmayan geçici bir bellek (kelime adresli bir bayt dizisi olarak) tutar.
Geçici depolama
Geçici depolama, TSTORE ve TLOAD işlem kodları aracılığıyla erişilen, işlem başına bir anahtar-değer deposudur. Aynı işlem sırasındaki tüm dahili çağrılar boyunca kalıcıdır ancak işlemin sonunda temizlenir. Belleğin aksine, geçici depolama yürütme çerçevesi yerine EVM durumunun bir parçası olarak modellenir, ancak küresel duruma işlenmez. Geçici depolama, bir işlem sırasındaki dahili çağrılar arasında Gaz açısından verimli geçici durum paylaşımına olanak tanır.
Depolama
Sözleşmeler, söz konusu hesapla ilişkili ve küresel durumun bir parçası olan bir Merkle Patricia depolama trie'si (kelime adreslenebilir bir kelime dizisi olarak) içerir. Bu kalıcı depolama, yalnızca tek bir işlemin süresi boyunca kullanılabilen ve hesabın kalıcı depolama trie'sinin bir parçasını oluşturmayan geçici depolamadan farklıdır.
İşlem kodları
Derlenmiş akıllı sözleşme baytkodu, XOR, AND, ADD, SUB vb. gibi standart yığın operasyonlarını gerçekleştiren bir dizi EVM işlem kodu olarak yürütülür. EVM ayrıca ADDRESS, BALANCE, BLOCKHASH vb. gibi blokzincire özgü bir dizi yığın operasyonunu da uygular. İşlem kodu seti ayrıca geçici depolamaya erişim sağlayan TSTORE ve TLOAD kodlarını da içerir.
Diyagramlar Ethereum EVM illustrated (opens in a new tab) kaynağından uyarlanmıştır
EVM uygulamaları
EVM'nin tüm uygulamaları, Ethereum Sarı Bülteni'nde açıklanan spesifikasyona uymak zorundadır.
Ethereum'un on yıllık tarihi boyunca EVM çeşitli revizyonlardan geçmiştir ve çeşitli programlama dillerinde EVM'nin birkaç uygulaması bulunmaktadır.
Ethereum yürütme istemcileri bir EVM uygulaması içerir. Ayrıca, aşağıdakiler de dahil olmak üzere birden fazla bağımsız uygulama vardır:
- Py-EVM (opens in a new tab) - Python
- evmone (opens in a new tab) - C++
- ethereumjs-vm (opens in a new tab) - JavaScript
- revm (opens in a new tab) - Rust
Daha Fazla Okuma
- Ethereum Sarı Bülteni (opens in a new tab)
- Jellopaper namıdiğer KEVM: K'de EVM'nin Semantiği (opens in a new tab)
- Bej Bülten (The Beigepaper) (opens in a new tab)
- Ethereum Sanal Makinesi İşlem Kodları (opens in a new tab)
- Ethereum Sanal Makinesi İşlem Kodları İnteraktif Referansı (opens in a new tab)
- Solidity belgelerinde kısa bir giriş (opens in a new tab)
- Mastering Ethereum - Ethereum Sanal Makinesi (opens in a new tab)
İlgili Konular
Eğitimler: Ethereum Sanal Makinesi (EVM) / Ethereum'daki İşlem Kodları
- Sarı Bülten'in EVM Spesifikasyonlarını Anlamak – Ethereum Sarı Bülteni'ndeki resmi EVM spesifikasyonunun rehberli bir incelemesi.
- Bir Sözleşmeye Tersine Mühendislik Uygulamak – EVM işlem kodlarını kullanarak derlenmiş bir akıllı sözleşmeye nasıl tersine mühendislik yapılacağı.