Ethereum en popüler kripto para birimlerinden birinin arkasında yer alıyor – ancak bundan çok daha fazlası. Algoritmalar sayesinde kripto para birimi tamamen otonom olarak yönetilebiliyor. Peki ama “akıllı sözleşmeler” nasıl çalışıyor ve bu yolda ne kadar ilerledik?
Ethereum'da akıllı sözleşmeler nasıl çalışır?
Ethereum'daki akıllı sözleşmelerin prensibini anlamak için öncelikle programlama dilleri dünyasına küçük bir yolculuk yapmamız gerekiyor. Mevcut programlama dilleri temelde iki gruba ayrılır: yorumlanan diller ve derlenen diller. İlk grupta, programlar yüksek seviyeli bir dilde yazılır ve daha sonra bir yorumlayıcı tarafından çalıştırılır. İki popüler örnek Python ve JavaScript'tir. Yorumlanan diller birçok uygulama alanında (web gibi) yaygındır çünkü hemen başlamanıza izin verirler. Ayrıca çok evrenseldirler ve ek araçlara ihtiyaç duymadan farklı platformlarda kullanılabilirler.
Buna karşılık, bir derleyicinin önce program metnini başka bir dile – genellikle ikili makine koduna – dönüştürdüğü derlenmiş diller vardır. Bu ikili kod platforma bağımlıdır ve doğrudan bir işlemci üzerinde çalıştırılır. Derleyici, örneğin ARM veya Intel uyumlu CPU'lar için işlemci komut seti için özel kod üretebilir (ve üretmelidir). Bu türün iyi bilinen temsilcileri C ve Rust'tır.
Ancak gerçek, her zaman olduğu gibi, bu basit kategorilerin önerdiğinden daha karmaşıktır. Bir süredir Java gibi hibrit formlar bulunmaktadır. Java derleyicisi Java kodunu doğrudan 'gerçek' makine koduna değil, özel bir ara biçime çevirir. Bu ara format da daha sonra bir yorumlayıcı – Java sanal makinesi – tarafından işlemcinin somut mimarisi üzerinde çalıştırılır.
Ethereum'un akıllı sözleşmeleri de benzer bir şekilde çalışır. Ethereum'da işlemleri doğrulayan ve yeni para birimi çıkaran tüm düğümler Ethereum Sanal Makinesi'nin (EVM) bir örneğini içerir. Ethereum'un teknik spesifikasyonu olan Sarı Kitap, EVM'yi destekleyen talimatları ve bunların nasıl yürütülmesi gerektiğini ayrıntılı olarak tanımlar.
Bu, bir dizi özel özelliğe sahip tescilli bir gelişmedir:
Dış dünya ile etkileşim mümkün değildir: tüm algoritmik kararlar blok zincirinden ve işlemlerinden kaynaklanmalıdır.
Aritmetik, daha büyük adreslerin ve miktarların işlenmesini kolaylaştırmak için 256 bitlik değerlere dayanmaktadır.
Performansı artırmak için hash fonksiyonları gibi özel işlemler entegre edilmiştir.
Tüm talimatlara, yaklaşık olarak gereken yürütme süresine ve gereken bellek miktarına karşılık gelen bir maliyet işlevi (yakıt) atanır. Ölçüm terimi İngilizce'de yaygın olarak kullanılmaktadır.
EVM üzerinde programlama
Java ekosisteminde olduğu gibi, EVM derleyicilerinin mevcut olduğu birkaç programlama dili vardır. En yaygın dil, yüzeysel olarak (sözdizimsel olarak) JavaScript'e benzeyen Solidity'dir. 2020'nin sonunda Ethereum'un belgelerinde iki dil daha listelenmiştir: Python'a dayanan Vyper ve tamamen bağımsız bir geliştirme olan Yul Plus.
Tüm bu dillerin ortak noktası, alana özgü olmalarıdır, çünkü genel amaçlı dillerin aksine, belirli özelliklere ve özellikle de özel bir yürütme motoruna sahip bir niş işgal ederler: EVM. Elbette, bu alana özgü diller (DSL'ler) temelde uygulamaların karmaşıklığını azaltmak için iyi bir fikirdir.
Ancak EVM söz konusu olduğunda, bu pek mantıklı görünmüyor. Sonuçta, – blok zinciri dışındaki dünyayla etkileşime girme yeteneğinin olmamasına bakılmaksızın – rastgele algoritmalar yürütebilir, bu nedenle (basitçe söylemek gerekirse) Turing-tamdır.
Neden mevcut bir dil ve yürütme ortamı kullanılmasın?
Gerekirse, bazı işlevlerin kaldırılması gerekebilir, ancak daha uzun deneyime, daha istikrarlı araçlara ve – çok daha önemlisi – daha geniş bir programcı tabanına sahip olabiliriz. Gerçekten de günümüzde bir programlama dilinin popülaritesini sadece özlü, tip güvenli ya da dinamik olup olmadığının değil, aynı zamanda mevcut birçok kütüphane ve pakete erişimin ne kadar kolay olduğunun belirlediği herkes tarafından bilinmektedir. Bu dönem değişikliği en iyi, kaba semantiği nedeniyle sık sık eleştirilen, ancak en son milyonuncu NPM paketinden bu yana en popüler programlama dili olarak kabul edilmesi gereken JavaScript ile gösterilebilir.
Webassembly, evrensel bir ara dil
Ethereum spesifikasyonunun arkasındaki insanlar, evrensel bir dil lehine özel geliştirmeden vazgeçerek bazı sorunların çözülebileceği sonucuna vardılar. Büyük köpek JavaScript'e bir alternatif oluşturmak için web üzerinde geliştirmelerin devam ediyor olması ne kadar da uygun: Webassembly (WASM). Bu hem evrensel bir ara dil hem de yorumlayıcılar için bir spesifikasyonla birlikte ikili bir formattır. Adından da anlaşılacağı gibi, bu açık standart aslında web için tasarlanmıştır. Bu arada diğer uygulama alanları da (örneğin akıllı telefon uygulamaları) incelenmiştir.
WASM'ın geliştirilmesine Microsoft, Google ve Apple gibi endüstri devleri öncülük etmektedir. Dilin önemli bir özelliği, en başından itibaren taşınabilirlik için tasarlanmış olmasıdır. Bu, Rust, C++ veya Go gibi mevcut birçok programlama dilinin web assembly için zaten derlenebildiği gerçeğinden görülebilir.