Ana içeriğe atla
Change page

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.

A diagram showing the make up of the EVM 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.

A diagram showing where gas is needed for EVM operations 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:

Daha Fazla Okuma

Eğitimler: Ethereum Sanal Makinesi (EVM) / Ethereum'daki İşlem Kodları