EVM, kod ile ana makine arasında yer alan ve Ethereum’un sorunsuz çalışmasını garanti eden bir soyutlama katmanıdır. Peki EVM tam olarak nedir? EVM’nin prensipleri ve tipik kullanım alanları nelerdir? Gelin detaylıca inceleyelim.
Günümüzde en popüler blok zinciri olan Ethereum, kullanıcılara çeşitli merkeziyetsiz uygulamalar sunar. DeFi, NFT gibi konular gündeme geldiğinde en sık bahsedilen terimlerden biridir. Ethereum’un çekirdek bir parçası olan EVM de büyük ilgi görmektedir. Peki EVM ile Ethereum arasındaki ilişki nedir?
EVM, Ethereum Virtual Machine (Ethereum Sanal Makinesi) ifadesinin kısaltmasıdır. Ethereum’un tanımına göre EVM, tüm Ethereum hesaplarının ve akıllı sözleşmelerin Ethereum zinciri üzerinde yaşadığı çalışma ortamıdır. EVM, Ethereum istemcisi çalıştıran tüm bağlı bilgisayarlar tarafından sürdürülen tek bir varlık olarak bulunur. Bloktan bloğa yeni geçerli durumun nasıl hesaplanacağını tanımlayan kuralları belirler.
Bitcoin gibi dağıtılmış bir defter yerine Ethereum, dağıtılmış bir durum makinesidir. Bloklar arasındaki değişim, Ethereum üzerindeki tüm hesaplar ve bakiyelerin durumunun güncellenmesini ifade eder. Bu güncelleme, EVM tarafından sözleşme koduna göre hesaplanır.
Figür: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM, yığın tabanlı bir sanal makinedir ve tüm işlemlerini doğrudan yığında gerçekleştirir. Akıllı sözleşme bayt koduna derlendiğinde, EVM bu bayt koduna göre işlemler yapar; bellekteki değişkenleri alır, yığına ekler, yığındaki değişkenleri hesaplar ve değişkenleri belleğe kaydeder vb.
EVM’de iki ana veri depolama türü vardır: bellek ve depolama. Depolamadaki değişkenler, sözleşme yürütüldükten sonra Ethereum’da kalıcı olarak saklanır; bellekteki değişkenler ise kod EVM üzerinde yürütülürken geçici olarak bulunur.
Bir sözleşmeyi çağırma örneğini ele alalım. Solidity ile bir sözleşme yazdık, metadatasını bir derleyici ile derledik ve Ethereum’a yayınladık. Sözleşmenin durumunu güncellememiz gerektiğinde sözleşmeyi çağırmamız gerekir. Ancak ne bir işletim sistemi ne de Windows doğrudan akıllı sözleşmeleri çalıştırabilir. Akıllı sözleşmelerin çalışabileceği bir ortam sağlamak için EVM gereklidir. Belirli adımlar şu şekildedir: Öncelikle EVM, sözleşme adresi aracılığıyla Ethereum’da saklanan sözleşme kodunu bulur; ardından bir çalışma ortamı oluşturulur; son olarak sözleşme içeriği bayt koduna dönüştürülerek EVM’ye çalıştırılmak üzere yüklenir. İşlemden elde edilen sonuç, bir sonraki blokta en son durum olarak saklanır ve böylece durum güncelleme süreci tamamlanır.
Figür: https://cnodejs.org/topic/5aeecba802591040485bab2a
Şu anda tüm Ethereum istemcileri bir EVM uygulaması içerir. Ethereum, EVM işlevlerini uygulamak için Python, C++, js, Go vb. dahil olmak üzere çeşitli programlama dillerinde kaynak kod yayınlamıştır. Bu, kullanıcıların EVM’nin prensibini daha kolay anlamalarına yardımcı olur.
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone - C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ ethereumjs-monorepo
eEVM - C++: https://github.com/microsoft/eevm
Hyperledger Burrow - Başlangıç: https://github.com/hyperledger/burrow
Akıllı sözleşmeler yalnızca EVM üzerinde çalışan kodlardır. Bir kez dağıtıldıktan sonra değiştirilemezler. Ethereum, çeşitli merkeziyetsiz uygulamaları gerçekleştirmek için durumu akıllı sözleşmeler aracılığıyla tanımlar, değiştirir ve saklar. EVM, akıllı sözleşmelerin çalışabileceği bir ortam olarak görev yapar; bu, otoyol ile araba arasındaki ilişkiye benzer.
EVM üzerinde akıllı sözleşmeleri çalıştırmak için önemli miktarda işlem gücü gerekir ve bu işlem belirli miktarda gas tüketir. Bunu daha iyi anlamak için, otoyollarda geçiş ücreti ödemesi gereken araçları düşünebilirsiniz.
Gas ücretleri, dünya genelindeki madencilerin katılımını teşvik etmek ve işlem gücü sağlamalarını mümkün kılarak Ethereum’un daha merkeziyetsiz olmasına yardımcı olur. Ayrıca, kullanıcıların Ethereum ana ağı üzerinde tıkanıklığa neden olabilecek rastgele işlem taleplerinde bulunmasını engeller veya kötü niyetli saldırıları önleyerek Ethereum’un çökmesini engeller.
Ethereum akıllı sözleşmeleri Solidity ile yazılır ve EVM üzerinde çalıştırılmadan önce bayt koduna derlenir. Bayt kodu, opcode veya işlem kodlarını içerir. EVM, her biri belirli işlevlere sahip 144 opcode’a sahiptir ve bu da EVM’yi Turing-tam yapar. Her türlü hesaplama problemini çözebilir. Solidity ve Opcode’lar, karmaşık akıllı sözleşmeler yazmamıza ve EVM üzerinde çok çeşitli işlevleri uygulamamıza olanak tanır, böylece kullanıcılara çeşitli dApp’ler sunulur.
Aynı kod parçası, farklı EVM’lerde çalıştırıldığında aynı çıktıyı verir; bu durum, çalışma ortamı veya çalıştırma sayısı ile ilgili değildir. EVM’nin kesinliği, kodun güvenilirliğini sağlar ve beklenmedik sonuçların önüne geçer. Bu özellik, özellikle kullanıcılar Ethereum üzerinde büyük işlemler yaptığında çıkarlarını korumaya yardımcı olur.
EVM, kodun çalıştığı izole bir sandbox gibidir. Çalışma süreci, bilgisayarın yazılımına/donanımına zarar vermez ve Ethereum’un temel protokolünü etkilemez. EVM’nin izolasyonu, EVM çalıştıran makineye saldırılmasını önler ve Ethereum’un temel protokolünün değiştirilmesine karşı koruma sağlar. Bu, Ethereum’un güvenliğini sağlayan bir teminat görevi görür.
EVM’nin kod yürütme süreci durdurulabilir. Kullanıcı yanlış bir kod (ör. sonsuz döngü) çalıştırırsa, gas mekanizması devreye girerek bu kodun işlem gücünü süresiz olarak meşgul etmesini engellemek amacıyla yürütme süreci sonlandırılabilir. EVM üzerinde kod yürütülmeden önce gas üst limiti önceden belirlenmelidir. Gas tükendiğinde kod çalışmayı durdurur ve zincir üzerinde herhangi bir güncelleme olmadan durum geri alınır.
Kullanıcı sayısı arttıkça Ethereum ana ağı, ağ tıkanıklığı ve yüksek gas ücretleri gibi pek çok sorunla karşılaşır. Ethereum’un tasarımına bağlı olarak bu sorunlar köklü şekilde çözülemez.
Son yıllarda, daha düşük gas ücretleri ve daha hızlı ağlara sahip birçok yeni halka açık zincir ile Ethereum’u ölçeklendirmek için tasarlanmış Katman 2 zincirleri ortaya çıkmıştır. Bu zincirlerin hepsi akıllı sözleşme zincirleridir; daha iyi temel tasarımlara sahip oldukları söylenir ve çeşitli dApp’lerin geliştirilmesinde kullanılabilirler.
Bu zincirler, Ethereum ekosisteminin fazla taleplerini karşılar ve Ethereum’un baskın konumuna meydan okur. Ethereum muadillerinin EVM ile uyumlu olması gerekli midir? Bu farklı bakış açısına göre, zincirler EVM uyumlu zincirler ve EVM uyumlu olmayan zincirler olarak ikiye ayrılır.
Son zamanlarda Katman 1 halka açık zincirler art arda ortaya çıkmaktadır. Ethereum ile paralel çalışan zincir üstü bir ekosistemi yeniden inşa etmek mevcut eksiklikleri giderebilir, ancak sıfırdan tam bir ekosistem kurmak ve bir dApp geliştirmek önemli insan kaynağı gerektirir. Nitelikli programcı eksikliği, yeni halka açık zincir ekosistemlerinin büyümesini engeller. Gelişmemiş bir ekosisteme sahip halka açık zincirin kısa sürede Ethereum’dan kullanıcı çekmesi zordur.
Bunu göz önünde bulundurarak bazı halka açık zincirler EVM ile uyumlu olacak şekilde tasarlanmıştır. Başlangıçta Ethereum üzerinde çalışan dApp’ler, yalnızca küçük kaynak kodu değişiklikleriyle tamamen EVM uyumlu halka açık zincirlere aktarılabilir. Bu durum, geliştirme kaynaklarının kullanımını en üst düzeye çıkarırken kullanıcıların Ethereum’dan yeni bir zincire geçiş sürecinde daha iyi bir deneyim yaşamalarını sağlar.
Bununla birlikte, EVM uyumluluğu kaçınılmaz olarak bazı sorunları beraberinde getirir. EVM kurallarıyla sınırlı kalan birçok EVM uyumlu zincir, tek tipleşmeden yenilik yapma konusunda zorluk yaşar. EVM uyumlu olmayan zincirler ise bu kuralları yıkarak sıfırdan yeni bir kural seti geliştirebilir ve böylece köklü bir şekilde yenilik sağlayabilir.
Günümüzde, BSC, Avalanche, Fantom, Tron, Celo vb. gibi ana akım halka açık zincirlerin %70’inden fazlası EVM ile uyumludur. Bu zincirlerde daha yüksek performans ve daha düşük gas ücretleri için dApp geliştirmek veya Ethereum uygulamaları dağıtmak geliştiriciler için zor değildir; bu da kullanıcı deneyimini iyileştirir.
Bazı diğer halka açık zincirler EVM uyumlu değildir ancak kendi sanal makinelerini geliştirmiştir; örneğin Sol, Terra vb. EVM ile uyumlu olmamalarına rağmen, yenilikçi tasarımları ve mükemmel zincir üstü performansları sayesinde bu zincirler sadık bir kullanıcı ve kurum kitlesi çekmiştir. Örneğin, son zamanlarda dünya çapında popüler olan iki blok zincir oyunu Step N ve Let me speak, Sol zinciri üzerinde çalışmakta olup dünya genelinden coşkulu hayranların katılımını sağlamıştır.
Önemli olarak, EVM uyumlu zincirler EVM uyumlu olmayan zincirlerle birlikte var olabilir. Bazı EVM uyumlu olmayan zincirler de EVM ile uyumlu olmaya başlamıştır. Bunu başarma süreci zorlu olur çünkü kodun kapsamlı şekilde değiştirilmesini gerektirir. Buna örnek olarak, geliştiricilerin EVM üzerinde dApp geliştirmesine olanak tanıyan Neon’u başlatan Sol verilebilir.
Ethereum’un ölçeklendirme çözümü olarak Katman 2, Ethereum’un rakibi değil tamamlayıcısıdır. Katman 2 zincirlerinin hepsi EVM ile uyumludur ve Katman 1’e kıyasla daha yüksek uyumluluk seviyesine sahiptir. Katman 2’nin EVM ile uyumlu olması için iki çözüm vardır: EVM uyumluluğu ve EVM eşdeğerliği.
İlk Katman 2 zincirleri EVM uyumlu olup bu durum Katman 1 zincirlerinin EVM uyumluluğuna benzer. Ethereum Katman 1’deki akıllı sözleşmeler, bazı değişiklikler yapılarak Katman 2’ye dağıtılabilir. Örneğin, Optimism tarafından başlatılan Unipig tamamen Uniswap kodunun yeniden yapılandırılmış hâlidir. Bu, Katman 2’deki Uniswap olarak kabul edilir.
EVM uyumluluğunun bazı sınırlamaları vardır. EVM uyumlu bir zincirde akıllı sözleşme geliştirirken bazı EVM tabanlı geliştirme araçları ve framework’ler kullanılamayabilir. Ayrıca, başlangıçta Katman 1’de düzenlenen akıllı sözleşmelerin EVM uyumlu blok zincirde sorunsuz çalışabilmesi için geliştiricilerin hâlâ bazı ayarlamalar yapması gerekir.
EVM eşdeğerliği, geliştiricilere Katman 2’de akıllı sözleşme geliştirirken Ethereum Katman 1’deki ile tamamen aynı deneyimi sunmayı amaçlar. Bu durum, Katman 2 geliştiricilerine büyük fayda sağlamış, geliştirme verimliliğini artırmış ve EVM uyumluluğu temelinde geliştirme ve kod bakım maliyetlerinden tasarruf edilmesini sağlamıştır.
Günümüzde Artbitrum, Optimism ve Metis gibi ana akım Katman 2 çözümleri EVM eşdeğerliğine ulaşmıştır. EVM eşdeğerliği, Ethereum’un özelliklerini Katman 2’ye daha iyi şekilde aktarabilir ve ölçeklendirmeden kaynaklanan geliştirme ve geçiş maliyetlerini en aza indirmeyi hedefler. EVM eşdeğerliğinin gelecekte Katman 2’nin ana standart hâline gelmesi beklenmektedir ve birçok Katman 2 çözümü EVM eşdeğerliği konusunda yoğun bir rekabete girecektir.
EVM, Ethereum’un çalışmasını sağlayan çekirdektir. Ethereum’un hâkimiyetinin yerleşmesiyle, büyük halka açık zincirler ve Katman 2 zincirleri EVM’nin temel tasarım konseptini takip etmiş veya buna uyum sağlamıştır. Bu nedenle, EVM’nin tüm blok zincir üzerinde derin bir etkisi olmuştur. EVM’nin kendisi pek çok sorun barındırır, bu da yeni zincirlerin EVM ile uyumlu olmasını zorlaştırır. Buna rağmen, geliştiriciler iyileştirmeler yapmak için yoğun çaba göstermekte ve bu durum birçok başka halka açık zincirin ortaya çıkmasını büyük ölçüde kolaylaştırmıştır.


