paint-brush
Blockchain ❤️'in WASM'si: Bölüm Kararıile@glaze
1,445 okumalar
1,445 okumalar

Blockchain ❤️'in WASM'si: Bölüm Kararı

ile Glaze8m2023/11/06
Read on Terminal Reader

Çok uzun; Okumak

Arbitrum yakın zamanda WebAssembly (WASM) tabanlı akıllı sözleşme VM'si Stylus'u piyasaya sürdü. Bu, genişletilmiş dil desteği, daha düşük maliyetler, özelleştirilebilir ön derleyiciler ve EVM ile birlikte çalışabilirlik gibi çeşitli avantajlar sağlar. WASM performansı, kompakt boyutu, taşınabilirliği ve dil desteği nedeniyle popülerlik kazanıyor. Polkadot ve Cosmos gibi diğer zincirler de bunu kullanıyor. Ancak Stylus'un şu anda bazı sınırlamaları var. Yalnızca C++ ve Rust'u destekler, JavaScript/Python desteği yoktur. SDK'lar henüz gelişme aşamasındadır. Henüz yerel bir test ağı veya sözleşme doğrulaması yok. Doğru dili seçmek çok önemlidir; JavaScript/Python eDSL daha fazla geliştiricinin ilgisini çekebilir. Performans kıyaslamaları WASM'nin EVM'den 4-8 kat daha hızlı olabileceğini gösteriyor. Ancak 128 KB'lık bir sözleşme boyutu sınırı vardır. EVM-WASM birlikte çalışabilirliği oldukça kapsamlıdır. Özel ön derlemeler henüz uygulanmadı. Yeniden giriş isteğe bağlıdır ancak varsayılan olarak devre dışıdır. Genel olarak WASM, zk toplamalarına karşı Arbitrum için bir performans artışı sağlıyor. Ancak EVM, şimdilik bir "EVM+" takviyesi olarak WASM ile birlikte temel olmaya devam ediyor.
featured image - Blockchain ❤️'in WASM'si: Bölüm Kararı
Glaze HackerNoon profile picture
0-item

Arbitrum'a yapılan son güncelleme, çeşitli iyileştirmeler içeren Stylus VM yükseltmesini içeriyor:


  • Genişletilmiş dil desteği
  • Daha az maliyet ve bellek kullanımı
  • Özelleştirilebilir ön derleyiciler
  • EVM uyumluluğu


Bu iyileştirmeler, bulut tabanlı ortamlardaki sayısız avantajlarıyla tanınan WASM'nin entegre edilmesinden kaynaklanmaktadır. WASM'nin rolüne ilişkin daha fazla ayrıntı sonraki bölümlerde ele alınacaktır.

Öncüler

Arbitrum, zincirine WASM'yi ekledi ancak bunu yapacak ilk platform bu değil. Polkadot daha önce WASM akıllı sözleşmelerinin oluşturulmasına izin veriyordu. Bunun için iki dil sunar: yerleşik DSL'e benzer bir derleme komut dosyası ve mürekkep adı verilen, Rust'tan ilham alan bir dil!


Benzer şekilde Cosmos, akıllı sözleşme uygulaması için CosmWasm'ı kullanıyor. Geliştiriciler burada Rust'u kullanarak akıllı sözleşmeler oluşturabilirler.


Blockchain'in WASM'ye olan benzerliğini keşfetmeden önce, Cosmos ve Polkadot'un WASM'yi seçme gerekçelerini gözden geçirelim.


Cosmos, WASM'nin şu avantajlarından söz ediyor:

  • Rust kitaplığı uyumluluğu
  • Geniş bir geliştirici topluluğu
  • Yeniden giriş saldırılarının önlenmesi de dahil olmak üzere gelişmiş güvenlik
  • Basitleştirilmiş test prosedürleri
  • Üstün performans


Polkadot'un WASM çalışma zamanı aşağıdaki gibi özellikleri sergiliyor:

  • Olağanüstü performans
  • EVM birlikte çalışabilirliği
  • Donanım ve yazılım platformu bağımsızlığı
  • Kompakt boyut
  • TypeScript'e benzer Rust ve Montaj Komut Dosyası desteği


Polkadot, Cosmos ve Arbitrum, WASM kaynaklı birçok avantajı paylaşıyor. Ancak Arbitrum'un, Cosmos ayrıntılarının yanı sıra daha sonra tartışacağımız farklı teklifleri de var.

WASM

WASM'nin ne olduğunu ve arkasındaki motivasyonları inceleyelim.

WASM nedir?

WebAssembly (WASM) ikili bir talimat formatıdır. Kodun, özellikle web tarayıcılarında yerel uygulamalarla karşılaştırılabilir hızlarda yürütülmesini sağlar. C ve Rust gibi diller için bir derleme hedefi olarak hız, verimlilik ve güvenlik açısından optimize edilmiştir. WASM, web performansını önemli ölçüde artırır ve web işlevlerini genişletir.


WASM, tarayıcılar gibi JavaScript ortamlarında çalıştığı için web ile yakından bağlantılıdır. Bu ortamlarda geliştiriciler, WASM API'lerine tam erişimin yanı sıra eksiksiz Web API desteğine de sahiptir. Bu kontrol, geliştiricilerin web etkileşimlerinde ince ayar yapmasına olanak tanır.

WASM'nin Evrimi

WASM kavramı, kodu herhangi bir yerde çalıştırmak için bir kez yazma ideali etrafında döner.


2016 yılında programlar, Etki Alanına Özel Diller (DSL'ler) aracılığıyla sık sık yeni özellikler sunmaya başladı. Bir DSL oluşturmak bakım, verimlilik ve güvenliğin dengelenmesini içeriyordu. Sektör, bu yönlerden ödün vermeden işlevleri çok sayıda sunucuya dağıtmak için bir yöntem arıyordu.


Her biri kendine özgü zorluklara sahip olan çeşitli çözümler incelendi:

  • Sistem Sanal Makineleri genel giderlerle, güvenlik açısından kod görünürlüğünün eksikliğiyle boğuşuyordu ve yüksek performans için fazla soyuttu.
  • Kapsayıcılar da kod görünürlüğünden yoksundu ve benzer şekilde soyuttu ve önemli miktarda ek yüke neden oluyordu.
  • Dil düzeyindeki Sanal Makineler, güvenlik için sık sık değişiklik yapılmasını gerektiriyordu, V8 gibi yerleşik VM'lerden kaynaklanan ek yüke neden oluyordu ve güvenlik modellerine uyacak yeni dilleri benimsemekte yavaş kalıyordu.
  • Komut Seti Mimarilerinin (ISA'lar) etkili bir sanal alan oluşturma için değiştirilmesi zordu ve olgun uygulamalardan yoksundu.


WASM bir çözüm olarak ortaya çıktı. WASM derleyicilerinin geliştirilmesine başlandı ve 2018 yılına kadar çeşitli mimariler ve cihazlar arasında evrensel kod uyumluluğu kavramı genişletildi. Java'nın aksine amaç güvenlikten ödün vermek değildi.


2019'da, WASM modüllerini diller arası birlikte çalışabilirlik açısından geliştiren bileşen modeli tanıtıldı. Bu yenilik, örneğin, farklı dillerde uygulanabilen ve karmaşık sorunları yenilikçi bir şekilde ele alan evrensel bir HTTP kitaplığının oluşturulmasını mümkün kıldı.

Bugün WASM

WASM bir dizi etkileyici özelliğe sahiptir:


  • Yüksek Performans : WASM kodu verimli ve hızlı bir şekilde çalışır.
  • Kompakt Boyut : WASM'nin ikili formatı küçük bir ayak izi sağlar.
  • Taşınabilirlik : Aynı bayt kodunun herhangi bir WASM uyumlu çalışma zamanında çalışmasına olanak tanır.
  • Dil Desteği : WASM, diğerlerinin yanı sıra C/C++ ve Rust'tan Go ve Swift'e kadar çok çeşitli dilleri destekler.
  • JavaScript Motor Uyumluluğu : WASM, JS motorlarında sorunsuz bir şekilde çalışır.
  • Korumalı alan oluşturma : Güçlü bir varsayılan sanal alan, harici müdahaleyi önlemek için belleği ve CPU erişimini kısıtlar.
  • Hızlı Başlangıç : WASM modülleri genellikle milisaniyeler içinde açılır.


WASM topluluğu, farklı programlama dilleri arasında entegrasyonu ve performansı aktif olarak geliştiriyor.

Kalem

WASM'nin potansiyelini ve blok zincirlerdeki kullanımını keşfetmek bizi Arbitrum Stylus'un sınırlamalarına geri götürüyor.

Kalemin İşleyişi

Stylus'un nasıl çalıştığına dair basitleştirilmiş bir dökümü burada bulabilirsiniz:


  1. Geliştiriciler, akıllı sözleşmelerini WASM'ye derlemek için Clang veya Rustc gibi standart WASM derleyicilerini kullanır.
  2. Ortaya çıkan WASM bayt kodu daha sonra sıkıştırılmış bir durumda Arbitrum zincirine yüklenir.
  3. ArbWasm ön derlemesinin compileProgram yöntemi aracılığıyla, bayt kodu güvenlik ve gaz ölçümü için enstrümantasyona tabi tutulur ve doğrulayıcının donanımı için özel olarak hazırlanmış yerel kod halinde derlenir. Bu adım performansı ve güvenliği artırmak için çok önemlidir.
  4. Çağrı üzerine sözleşme, EVM'den çok daha hızlı ve gaz açısından daha verimli olan Wasmer gibi bir WASM çalışma zamanında çalışır.


Görünüşte ek olan üçüncü adım aslında hayati öneme sahiptir. WASM kodunu yerel makine koduna dönüştürmek, yürütme hızlarını artırır. Üstelik bu eklenen derleme aşaması "derleme bombalarının" önlenmesine yardımcı olur.


"Derleme bombası", derleme sırasında sistem kaynaklarını tüketmek ve potansiyel olarak derleyiciyi çökertmek veya durdurmak için tasarlanmış kötü amaçlı koddur. Bu, yazılım geliştirme sürecini engellemeyi amaçlayan bir hizmet reddi saldırısı görevi görür.

Ekran Kalemi Hakkında Endişeler

Dil desteği

Stylus, Arbitrum'un geliştirici topluluğunu C++ ve Rust'u da içerecek şekilde genişletti. Ancak günümüzün en yaygın geliştirici topluluklarını henüz kapsamamıştır. Tarayıcılarda akıllı sözleşmelerin yürütülmesini kolaylaştırır ancak henüz JavaScript ve Python'u desteklememektedir.


Programlama Dili Kullanıcıları


Python ve JavaScript'i WASM'ye bağlamaya çalışan erken aşamalardaki projeler var. Ancak çöp toplama ve performans kaygılarıyla ilgili karmaşıklıklar nedeniyle bunlar yaygın olarak benimsenmeye hazır değil.

Dil Uyumluluğu

Stylus şu anda SDK'ları aracılığıyla C/C++ ve Rust'u desteklemektedir. Bu SDK'lar ilgili dillerin araçlarıyla uyumludur. Ayrıca yerel şifreleme gibi üçüncü taraf kitaplıkların entegrasyonuna da izin verirler. Ana kısıtlama, bu kütüphanelerle ilişkili gaz maliyetidir.


Rust SDK henüz başlangıç aşamasındadır ve bazı işlevlerden yoksundur. C SDK, ABI ile dışa aktarma işlevlerini desteklemez. Ayrıca her iki SDK da değiştiricilerin kullanımını desteklemez.


Şu an itibariyle Stylus'un yerel bir test ortamı yoktur. Geliştiricilerin SDK'lar içerisinde testler yapması teşvik edilir. Test ağı, Stylus'ta akıllı sözleşmeler yürütmek için tek seçenektir. Ancak test ağı henüz akıllı sözleşme doğrulamasını uygulamadı.


Uniswap V2 gibi çeşitli ERC tokenlarını ve platformlarını Stylus'a taşımak için devam eden çalışmalar var.

Dil Seçimi

Etki Alanına Özel Dil (DSL), yerleşik DSL (eDSL) veya genel programlama dili arasında seçim yapmak zordur. Geliştiricilerin, kontrol için "metale yakın" çalışmanın faydalarını, esnekliği sınırlayabilecek daha üst düzey soyutlamaların sunduğu kullanım kolaylığına karşı tartmaları gerekir.


Yeni bir DSL oluşturmak, araç zincirlerini ve ekosistemini geliştirmek için zaman gerektirir. Genel programlama dilinin bir alt kümesi olan eDSL, aynı semantiği ve sözdizimini korur. Geliştiricilerin, öğrenme sürecini basitleştirebilecek mevcut dilleri ve araçları kullanmalarına olanak tanır. eDSL ayrıca genel amaçlı kodla daha iyi birlikte çalışabilirlik sunar. Örneğin, JavaScript veya Python için bir eDSL, en büyük geliştirici topluluklarının katılımını sağlamak açısından stratejik olacaktır.


Genel programlama dilleri, geliştirme için bir SDK'nın kullanılmasını gerektirir. Bu, araç katmanları ekler, ayrıntı düzeyini artırır ve ifade gücünü azaltır. Ayrıca uzun API çağrılarına ve karmaşık nesne işlemlerine neden olabilir.


Doğru dili seçmek ve bir eDSL oluşturmak ideal bir uzlaşma olabilir. Popüler topluluklardan geliştiricilerin ilgisini çekebilir ve kullanıcı dostu araçlar sunabilir. Mevcut veriler, Ethereum topluluğunun kripto geliştiricileri arasında en büyük topluluk olmaya devam ettiğini gösteriyor. Ancak Rust'u akıllı sözleşmeler için kullanan Polkadot, Cosmos ve Solana gibi ekosistemler de önemli sayıda geliştiricinin ilgisini çekiyor ve hızlı bir büyüme yaşıyor. Tam Zamanlı Geliştiriciler



Toplam Geliştiriciler


Verim

WASM, yürütme hızını önemli ölçüde artırma ve paket boyutunu azaltma potansiyeline sahiptir. Stylus ana ağa dağıtılmamış olsa da diğer ağlardan alınan kıyaslamalar faydalı bir referans görevi görüyor.


Bu kriterler, yürütme sürelerinin 4 ila 8 kat azaltılabileceğini ve derlenen boyutun yarıya indirilebileceğini göstermektedir.

WASM Yürütme Süresi


WASM sözleşmesinin büyüklüğü


Stylus, sözleşme boyutlarına sıkıştırılmamış yaklaşık 128 KB olan bir sınır uygular. Bu kısıtlama, çok büyük akıllı sözleşmelerin Solidity gibi dillerden Stylus'a geçişini zorlaştırıyor. Bu sınırlama Stylus kod tabanında açıkça görülmektedir:


 // arbos/programs/programs.go const MaxWasmSize = 128 * 1024 // Maximum WASM size allowed const initialFreePages = 2 // Number of initial free pages const initialPageGas = 1000 // Gas cost for an initial page const initialPageRamp = 620674314 // Adjusts for a target size cost const initialPageLimit = 128 // Maximum number of pages allowed const initialInkPrice = 10000 // Ink price per EVM gas const initialCallScalar = 8 // Scalar for call cost


WASM'nin başlatma ve kapatma sırasında bir miktar ek yüke neden olduğunu unutmamak önemlidir. Çok hafif işlemler için EVM, WASM'den daha uygun maliyetli olabilir.

EVM-WASM Birlikte Çalışabilirliği

EVM ve WASM aynı depolama yuvalarını ve durum ağacını kullanır. Stylus, WASM içerisinde EVM API'lerini uygulayarak EVM ile birlikte çalışabilirliği elde eder. Bu entegrasyon, WASM'de yaygın olarak benimsenen Ana Bilgisayar G/Ç modunu kullanır. Kapsamlı birlikte çalışabilirlik desteğini gösteren, WASM'de desteklenen EVM API'lerinin tam listesi aşağıdadır.


 read_args write_result storage_load_bytes32 storage_store_bytes32 call_contract delegate_call_contract static_call_contract do_call create1 create2 do_create read_return_data return_data_size emit_log account_balance account_codehash evm_gas_left evm_ink_left block_basefee block_coinbase block_gas_limit block_number block_timestamp chainid contract_address msg_reentrant msg_sender msg_value native_keccak256 tx_gas_price tx_ink_price tx_prigin memoery_grow console_log_text console_log console_tee

Özel Ön Derlemeler

Özel ön derlemeler yenilikçi bir kavramdır. Gelişmiş kripto ilkellerini daha düşük yürütme maliyetleriyle zincire entegre etme potansiyeline sahipler. Örneğin, zincir üstü makine öğrenimi maliyetlerini azaltmak için tensör hesaplamaları önceden derlenebilir. Ancak mevcut kod tabanında özel ön derleme işlevselliğine dair hiçbir kanıt yoktur. EVM için ön derlemeler mevcut olsa da bunlar değiştirilebilir şekilde tasarlanmamıştır.


Bu özelliklerin WASM'nin yeteneklerinden yararlanılarak hala geliştirilme aşamasında olması muhtemeldir. Bu, EVM'nin daha sonra makine koduna derlenen WASM tarafından yazılan işlevleri çağırmasına olanak tanır.

Yeniden giriş

CosmWasm'ın yeniden girişi desteklemeyen aktör modelinin aksine, Stylus'un Rust SDK'sı isteğe bağlı bir özellik olarak yeniden girişi içerir. Varsayılan olarak bu özellik kapalıdır. Geliştiriciler, sözleşmelerinde yeniden girişi etkinleştirme seçeneğine sahiptir.


Geliştiricilerin aramalar sırasında depolama önbelleğini temizlediğinden emin olmaları ve diğer güvenlik önlemlerini dikkate almaları gerektiğinden, yeniden girişin etkinleştirilmesi API'yi etkiler. Bu önlem, yeniden giriş çağrılarıyla ilişkili olası güvenlik açıklarını önlemek için gereklidir.


Yeniden giriş

Çözüm

WASM, bulut tabanlı alanda popülerlik kazanıyor ve birçok blockchain bunu akıllı sözleşmelerin yürütülmesi için benimsiyor. Arbitrum bu entegrasyonun öncüsü olmasa da uygulanması oldukça etkili olabilir. WASM, blockchain ortamını tamamen elden geçirecek veya EVM'nin yerini alacak konumda değil. Ancak bu, Arbitrum'un ortaya çıkan zk toplamalarına karşı üstünlüğünü artırabilir. Arbitrum'un "EVM+" terimi bu senaryoyu çok iyi tanımlıyor. EVM, akıllı sözleşme platformlarının temelini oluşturuyor ve WASM, Arbitrum için ek bir performans artışı sağlayabilir.