Orijinal başlık: Zeth'i Duyuruyoruz: İlk Type Zero zkEVM
Oyuncular: Tim Cartens, Victor Graf, Rami Khalil, Steven Li, Parker Thompson, Wolfgang Welz, Zeth Collaboration
Yapı: bayemon.eth, ChainCatcher
25 Ağustos'ta, RISC Zero zkVM'yi temel alan Ethereum'un açık kaynaklı ZK blok doğrulayıcısı Zeth, halka açık olarak piyasaya sürüldü. Zeth, doğrulayıcılara veya senkronizasyon komitelerine güvenmeden zkVM'de yeni bloklar oluşturmak için gereken tüm işi yapar. Zeth, Ethereum ana ağının birden fazla gerçek bloğunda doğrulandı ve resmi Ethereum test paketinin ilgili tüm testlerini geçti. Zeth, zkVM tabanlı Rust desteğini ve revm, eterler ve alaşım dahil olmak üzere güçlü anakartları 4 hafta içinde uygulamaya koymayı başardı. zkVM'nin süreklilik ve Bonsai prova hizmetleri desteği sayesinde Zeth, bu provaları dakikalar içinde oluşturabilir. Zeth'in zincir üstü doğrulama desteği sayesinde herkes bu kanıtları zincir üzerinde düşük maliyetle doğrulayabilir. Bu yazıda daha fazla ayrıntıya gireceğiz ancak kodu daha derinlemesine incelemek istiyorsanız kaynak koduna göz atın ve RISC Zero geliştirici portalını ziyaret edin.
Özet
Yaklaşık bir yıl önce Vitalik, zkEVM'nin farklı türlerini detaylandırdı:
Ethereum başlangıçta ZK dostu olarak tasarlanmamıştır, bu nedenle Ethereum protokolünün ZK doğrulaması için hesaplama açısından yoğun olan birçok parçası vardır. Tip 1 EVM, Ethereum'u tamamen kopyalamayı hedefler, dolayısıyla bu verimsizlikleri gideremez. Şu anda Ethereum bloklarının kanıtlarının tamamlanması saatler alıyor.
Ethereum tarihinde bunun mümkün olduğu durumlar olsa da, bugün RISC Zero'nun zkVM ve Bonsai hizmetlerini kullanan Ethereum blok kanıtlarının saatler değil dakikalar sürdüğünü duyurmaktan heyecan duyuyoruz.
Zeth: Doğrulanabilir Ethereum blok üretimi
Bugün, RISC Zero zkVM'de Ethereum için açık kaynaklı bir ZK blok doğrulayıcısı olan Zeth'i piyasaya sürdük.
Zeth, belirli bir Ethereum bloğunun geçerli olduğunu doğrulayıcılara veya senkronizasyon komitelerine dayanmadan kanıtlayabilir. Bunun nedeni, Zeth'in zkVM'de yeni bloklar oluşturmak için gereken tüm işleri yapmasıdır:
İşlem imzasını doğrulayın
Hesap ve depolama durumunu ana bloğun durum köküne göre doğrulayın.
Başvuru işlemleri
Yazarları engellemek için ücret ödeyin.
durum kökünü güncelle
Blok oluşturmak için gereken diğer çalışmalar
Yeni bir blok oluşturulduktan sonra Zeth, karma değerini hesaplar ve çıktı olarak verir. Bu işlemi zkVM'de çalıştırarak yeni blokların geçerli olduğuna dair ZK kanıtları elde edebiliriz.
RISC Zero'nun zkVM'sinden ve revm, eter ve alaşım gibi popüler Rust kasalarından yararlanarak Zeth'in ilk versiyonunu 4 haftadan kısa bir sürede yazdık. zkVM'nin süreklilik desteği ve Bonsai prova hizmeti sayesinde prova üretimi sadece birkaç dakika içinde yapılabilir. Zincir üstü doğrulama desteğiyle, bu kanıtları zincir üzerinde düşük maliyetle doğrulayabiliriz.
Zeth, Ethereum ana ağının birden fazla gerçek bloğunda doğrulandı ve resmi Ethereum test paketinin ilgili tüm testlerini geçti.
Zeth standart Ethereum blokları oluşturduğu için tip 1 zkEVM olarak düşünülebilir. Ancak bundan çok daha fazlası var: Zeth, standart Rust kod tahtaları (Reth gibi popüler tam düğümler tarafından kullanılan aynı kod tahtaları) kullanılarak oluşturulduğundan, onu sınıf 0 zkEVM olarak düşünmeyi tercih ediyoruz: tam Protokol uyumluluğu ve çok sayıda kodun yeniden kullanımı . **
Bu dönüm noktası, ZK teknolojisi ve Ethereum ekosistemi için ileriye doğru atılmış büyük bir adımı temsil ediyor. Bu yazıda Zeth'in ilk versiyonunun birkaç hafta içinde nasıl yazılacağını, performansını, nasıl çalıştığını ve bunun ZK projesi için ne anlama geldiğini tartışacağız.
RISC Zero, zk toplamaları, zkEVM'ler, hafif istemciler ve köprüler oluşturmayı kolaylaştırır
Zeth'i iki nedenden dolayı yazdık:
Diğer ekiplerin kendi ZK destekli altyapılarını oluşturmalarını kolaylaştırın: ZK rollup, zkEVM, ZK hafif istemcisi, ZK köprüsü vb. Zeth, EVM tabanlı bloklara yönelik ZK kanıtları oluşturmak için gereken her şeyi sağlar. Bu, herhangi bir zkEVM veya köprünün kritik bir bileşenidir. Zeth, devir tabanlı açık kaynak olduğundan proje geliştiricileri onu kolayca değiştirebilir veya kullanabilir. Kanıtlar zincir üzerinde (köprüler ve L2 için harika) veya yerel bir uygulamada (tam düğümler ve hafif istemciler için harika) doğrulanabilir.
Zeth'in zkVM'sindeki EVM performansı, özellikle Ethereum ile ilgili görevler hakkında ilgili araştırma yapın. (Anket sonuçlarının analizi için aşağıya bakın).
zk toplaması ve zkEVM
Type 0 zkEVM olarak Zeth, geliştiricilerin tamamen yerel EVM ve Ethereum uyumluluğuyla zk toplamaları oluşturmasına olanak tanır. Zeth'in zincir üstü kanıt doğrulama desteğiyle birleştiğinde, ZK odaklı bir L2 genişletme çözümü oluşturmak son derece basit hale gelecektir.
Mevcut ZK toplamaları ve zkEVM devreleri tasarım gereği yekparedir ve ZK kriptografisi konusunda üst düzey anlayışa sahip bir geliştirici olmadan yükseltilemez. Buna karşılık zkVM tabanlı Zeth yaklaşımı, herhangi bir geliştiricinin bunu kendi ihtiyaçlarına göre özelleştirmesine ve değiştirmesine olanak tanır.
Zeth, devir tabanlı açık kaynaktır ve diğer zkEVM ve EVM uyumlu zincirleri desteklemek için ince ayar yapmak nispeten kolay bir iştir. Bu nedenle Zeth, gelecekteki EIP güncellemelerine nispeten daha hızlı yanıt verecektir. Ayrıca Zeth, geliştiricilerin kendi blok oluşturma mantığını oluşturmalarına olanak tanıyan modülerlik de sağlar.
zk odaklı L2 çözümlerinin daha önce yıllarca süren araştırma ve geliştirme ve çoğu projenin karşılayamayacağı bir tüketim olan 100 milyon ABD dolarından fazla finansman gerektirdiğini bildiğimizden, Zeth'in çabalarının zk rollup ve zkEVM'leri demokratikleştireceğini umuyoruz.
Hafif istemci ve köprü
Beacon zincirinin kullanıma sunulmasının hafif istemciler ve köprüler için bir nimet olduğuna şüphe yoktur. Bu teknikler, Ethereum'un artık olgunlaşmış PoS modelini temel alarak, herkesin kurallara uyması koşuluyla, hafif istemcilerin ve köprülerin, yeniden oluşturmadan son blokları kolayca doğrulamasına olanak tanıyor.
Elbette stake etmenin asıl amacı, düğümlerin kurallara uyması için ekonomik teşvikler sağlamaktır. Bununla birlikte, Slashing'in düğümlere uyguladığı tehdit, kötülüğü tamamen önleyemez; dış teşvikler, çıkarların "dengesini" her zaman kötülüğe doğru çevirecektir ve bu kötü niyetli davranışları uygun şekilde ele alabilecek bir hafif istemci veya köprü tasarlamak çok önemlidir. zor.
Zeth gibi araçlarla düğümlerin kötülük yapma riski büyük ölçüde azalır. Hafif istemciler, zkVM'ye birkaç açıklama ekleyerek Zeth ile entegre olabilir; köprüler gibi zincir üstü uygulamalar, zincir içi kanıt kanıtı doğrulama sözleşmemizi kullanarak Zeth ile entegre olabilir.
Yakın gelecekte, belirli bir bloğun geçerli olup olmadığını belirlemek için ZK kanıtlarını kullanan hafif istemcileri ve köprüleri hayal edebiliriz. Bu yaklaşım, blokları doğrulama maliyetini önemli ölçüde artırmadan riski büyük ölçüde azaltacaktır.
Bu özellikle uygulama zincirleri, modüler ekosistemler ve henüz Ethereum'un geniş tam düğüm topluluğunun sağladığı güvenlik düzeyine sahip olmayan yeni zincirler için önemlidir.
İyi bir temel, proje geliştirme sürecini basitleştirir
RISC Zero zkVM'yi temel alan ve RISC-V talimat seti mimarisiyle desteklenen Zeth, geliştiricilere tanıdık bir programlama deneyimi sağlayabilir. Ancak zkVM'miz bir RISC-V çekirdeğinden daha fazlasıdır. Ayrıca karma ve imza doğrulama gibi yaygın şifreleme görevleri için hızlandırma devrelerimiz de mevcuttur.
Bu hibrit yaklaşım (genel amaçlı CPU çekirdeklerinin hızlandırma devreleriyle birleşimi) bize her iki dünyanın da en iyisini sunar:
Sonuç olarak, revm, eter ve alaşımdan mevcut Rust kod paketlerini kullanarak Zeth'i hızlı bir şekilde oluşturmayı başardık. Mevcut panoları yeniden kullanarak Zeth'in ilk versiyonunu 4 haftadan kısa bir sürede tamamladık. Daha az olgunlaşmış ekosistemlerde bu tür bir hız mümkün değildir.
Performans açısından Zeth, ECDSA imza doğrulaması için hızlandırıcı devrelerimizin yanı sıra ZK çerçevemizin paralel çalışan (nVidia CUDA veya Apple Metal kullanarak) GPU kümelerini hızlı bir şekilde kanıtlamak için kullanmayı kolaylaştıran yeni bir özelliği olan Devamlılık'tan da yararlanıyor. hesaplamalar. Devamlılıkların kullanımı kolaydır: bu işlevsellik zkVM'de çalışan tüm konuk programlara şeffaf bir şekilde sağlanır, yani düzgün çalışması için hiçbir kod değişikliği gerekmez.
ZkVM'miz ile, Ethereum blok geçerliliğinin ZK kanıtlarını saatler değil dakikalar içinde hızlı bir şekilde oluşturabiliyoruz.
Verim
Zeth blok oluşturucunun performansını ele alacağız. Zeth hâlâ yeni bir ürün olduğundan bu rakamlar değişebilir; ancak gelecekteki çalışmalara temel oluşturacak bazı somut rakamlar sunmak istedik.
Performans söz konusu olduğunda dikkate alınması gereken birkaç faktör vardır:
Kanıtlar oluşturmak için gerekli hesaplama kaynakları.
Kanıtı oluşturmak için gereken "duvar süresi" (yani kullanıcının kanıtın mevcut olması için ne kadar beklemesi gerektiği).
Kanıt oluşturmanın toplam maliyeti (USD).
Süreklilik
Zeth'in zkVM'si sürekli çalışma kullanılarak performansa göre ayarlanabilir. O halde biraz durup "sürekli çalışma"nın nasıl çalıştığını tartışmamız gerekiyor.
zkVM'miz standart RISC-V işlemcilerini uygular. Bu nedenle yürütme döngülerle ölçülür. (Devremizde, istisnalar olmasına rağmen çoğu RISC-V talimatı 1 döngüde yürütülür). Basit programların yürütülmesi genellikle yalnızca birkaç yüz bin döngü gerektirir, ancak daha karmaşık programlar milyarlarca döngü gerektirebilir.
Tipik bir ZK sisteminde, bu yürütme döngüleri bir kanıtta toplanır; döngü sayısı arttıkça kanıtı oluşturmak için gereken zaman ve bellek de artar. Ancak zkVM'miz bu stereotipleri takip etmiyor ve bu yılın başlarında geleneksel kanıt şeması oluşturmanın dezavantajlarını iyileştiren yeni bir süreklilik özelliğine öncülük ettik.
Süreklilik açısından ispat süreci üç aşamaya ayrılır:
Gerekli hesaplamaları provasız bir simülatörde yapıyoruz. Yol boyunca döngünün o ana kadar kaç kez çalıştığını sayarız. Yapılandırılabilir aralıklarla programın durumunun anlık görüntülerini alırız. Bu, yürütmeyi etkili bir şekilde birden fazla parçaya böler. Her bölüm küçüktür ve tipik olarak 1 milyon veya daha az döngüyü temsil eder.
Bu parçalar bir dizi kanıt oluşturma çalışanına atanır. Verilen program bölümleri için ZK kanıtları üretirler. Önemli olan bunu paralel olarak yapabilmeleridir. Yeterli çalışan olduğu sürece, bir program segmentini kanıtlamak için gereken sürede tüm program segmentleri kanıtlanabilir. Ağ segmentinin küçük boyutundan dolayı gereken süre genellikle kısadır (onlarca saniye).
Segmentlerin kanıtları oluşturulduğunda, bunlar eninde sonunda toplanacaktır. Her "toplama" işlemi bir çift ardışık bölümlenmiş kanıt alır ve bu bölümlerin birleşimi için yeni bir kanıt üretir. Örneğin, bölüm 1 programın A durumundan B durumuna geçiş yaptığını kanıtlarsa ve bölüm 2, programın B durumundan C durumuna geçiş yaptığını kanıtlarsa toplama, programın A durumundan C durumuna geçiş yaptığını kanıtlar. Yeterli çalışanla bu, N'nin parça sayısı olduğu log(N) zamanda yapılabilir.
Rakamları incelediğimizde bu aşamaları çalışırken göreceğiz.
**Ethereum bloğu oluşturmak ne kadar zor? **
Öncelikle bir Ethereum bloğu oluşturmanın karmaşıklığına bakalım. Aşağıdaki tabloda, bazı gerçek dünyadaki Ethereum bloklarını alıp bunları zkVM'de Zeth kullanarak yeniden yapılandırıyoruz.
Örneğin, 17606771 bloğu 2131 kapsam üretir. Her bölüm en fazla 2^20 yürütme döngüsünü temsil eder, dolayısıyla tüm hesaplama en fazla 2.234.515.456 yürütme döngüsü alır.
Genel olarak, tipik bir Ethereum bloğunun oluşturulmasının 2 ila 400 milyon döngü sürdüğünü, ancak bazen 9,5 milyar döngüye kadar çıktığını görüyoruz. (İlk başta, bu farklılıkların işlemin gazına yansımadığını görmek bizi şaşırttı. Ancak daha fazla düşündükten sonra mantıklı geldi: gaz sistemi, ZK kanıtları değil, düzenli yürütme göz önünde bulundurularak tasarlandı).
Süreklilik sayesinde bu ölçeğin yönetilmesi kolaydır. Bu rakamlara göre, zkVM doğrulayıcılarını çalıştıran 10.000 düğümden oluşan eşler arası bir ağ, en büyük bloklar için en yüksek paralel doğrulama performansını elde etmek için yeterlidir; bu, Ethereum'un şu anda sahip olduğu 700.000 doğrulayıcının bir kısmıdır.
**Kanıtın oluşturulması ne kadar sürer? **
Bazı temel performans verilerini toplamak için 64 GPU Çalışanıyla bir Bonsai test örneğini başlattık. Daha sonra Zeth kullanarak 17735424'ün (182 işlem, 3242 segment veya yaklaşık 3,4 milyar döngü) engellendiğini doğrulamasını istedik.
Kanıtlar oluşturmak için zkVM'nin öncelikle yürütmeyi bölümlere ayırması gerekir. Aşağıdaki ekran görüntüsünde bu süreç, 10 dakika süren utor görevi tarafından yakalanmıştır. (Bu zamanın çoğunu ağ depolama alanına yazmak gibi AWS işleri yapmakla geçirirsiniz). Yerel makinede aynı görevin tamamlanması 6 dakikadan az sürer. Gelecek yıl bu süreyi önemli ölçüde azaltmayı umuyoruz).
İnfazcı sonunda idamı 3242 parçaya böler. Bu sadece 64 GPU için çok fazla parçalanma anlamına geliyor. Bu nedenle, her çalışan düğümün 50 adet segment kanıtı oluşturması gerekir. Aşağıdaki şekilde görüldüğü gibi bu işlem 35 dakika sürer. Eğer 50 kat daha fazla çalışan düğümümüz varsa, bu yalnızca 42 saniye sürer.
Segment kanıtı tamamlandıktan sonra toplama başlar. 3242 segment olduğu için log_2(3242) = 12 turluk bir toplama işlemi yapmamız gerekiyor. Toplama işleminin ilk aşamalarında işçilerden daha fazla işçi vardır; yani ilk aşama 1 dakika, ikinci aşama 35 saniye, üçüncü aşama 25 saniye sürer ve bu şekilde devam eder. Yedinci aşamada, süre 5 saniyenin biraz üzerinde sabitlendi. Aynı şekilde eğer daha fazla çalışanımız olsaydı her aşama sadece 5 saniye sürecekti.
Toplama tamamlandıktan sonra sonuçlar kesinleşir ve bu işlem bir dakika daha sürer.
Sonuç olarak, yetersiz küme boyutuyla yaklaşık 50 dakikada (1,1 MHz etkin hız) kanıt oluşturmayı başardık. Küme uygun şekilde boyutlandırılırsa kanıtların oluşturulmasının daha hızlı olacağını tahmin ediyoruz:
Tamamen paralelleştirilmiş durumda ispat adımı 42 + 12 * 5 + 60 saniyede veya 2 dakika 42 saniyede tamamlanabilir.
İhtiyatlı bir şekilde yuvarlarsak ve uygulayıcı süresini de dahil edersek, süre 9 ila 12 dakika arasındadır (etkili hız 4,7 MHz - 6,3 MHz).
Uygulayıcılarımızı ve kanıt çerçevemizi geliştirmeye devam ettikçe, bu sürenin gelecek yıl önemli ölçüde azalacağı konusunda iyimseriz.
Kanıt oluşturmak için kaynak tüketimi
Yukarıdaki test kümesi AWS'ye dağıtıldı. 64 g5.xlarge kanıt düğümü ve 1 m5zn.xlarge yürütme düğümünden oluşur. Amazon'a göre her g5.xlarge düğümünün
24 GiB GPU belleğe sahip 1 GPU
16 GiB bellek kapasitesine sahip 4 vCPU
Bu yazının yazıldığı an itibariyle, bu bulut sunucularının İsteğe Bağlı fiyatı 1,006 USD/saat, Rezerve Edilmiş Bulut Sunucularının fiyatı ise 0,402 USD/saattir. Bu arada, Amazon teknik özellikler sayfası m5zn.xlarge düğümümüzün
4 vCPU, 16 GB RAM
Bu yazının yazıldığı an itibariyle, bu örneğin İsteğe Bağlı fiyatı 0,3303 USD/saattir.
Yukarıda açıklanan 17735424 bloğunun kanıt maliyetini kabaca tahmin etmek için bu sayıları kullanabiliriz.
64 adet kanıt düğümü konuşlandırdığımızı ve bu dağıtımda bir kanıt oluşturmanın (uçtan uca) 50 dakika sürdüğünü hatırlayın. Boşta kalan çalışan zamanı göz ardı edildiğinde, 64 kanıt düğümü artı bir yürütme düğümünün maliyeti 50 dakika için 50/60 * (64 * 0,402 + 0,3303) = 21,72 USD'dir. Bu abartılı bir tahmin çünkü boşta kalan işçilere ödeme yaptığımızı varsayıyor. İşçilerin atıl kalmasının maliyetini (örneğin onları kapatmak veya başka işlere koymak) hesaba katmazsak, maliyet yaklaşık 19,61 dolar oluyor.
Bu blokta 182 işlem veya işlem başına 0,11 ABD doları vardır.
İşlemin toplam değeri 1,125045057 Eth veya yaklaşık 2137,59$'dır. Böylece, her 1 dolarlık kanıt, kullanıcı fonunda 109,01 dolar kazandırır.
Aynı blok için ödenen ödül 0,117623263003047027 Eth'tir (işlem ücretleri hariç). Bu yazının yazıldığı sırada bu rakam 223,48 dolar civarındaydı. Bu nedenle kanıtlarımız blok ödülünün yaklaşık %8,7'sine mal oluyor.
İşlem ücretlerinin toplamı 0,03277635 Eth'e veya 62,28 $'a kadar çıkar; bu, kanıt maliyetimizin 3 katından fazladır.
Bu dolar tahminlerinin kümenin büyüklüğünden bağımsız olduğunu belirtmekte fayda var! Önemli olan segment sayısıdır. Bunun nedeni, sırayla 2 iş yapan 1 makinenin, paralel olarak 1 iş yapan 2 makinenin maliyetiyle aynı olmasıdır. Bu nedenle, eğer küme boyutu daha büyükse, kanıtlar daha hızlı üretilecek, ancak daha pahalı olmayacaktır.
Maliyetleri daha da azaltmanın birkaç yolu vardır. Belki bir Keccak hızlandırıcı ekleyerek zkVM'nin performansını iyileştirmeye devam etmenin yanı sıra, daha ucuz örnekler de arayabiliriz. Daha da önemlisi, kullandığımız düşük özellikli makineler göz önüne alındığında (ve zkVM'miz nVidia Cuda ve Apple Metal'i destekler), bu iş sıradan tüketici PC'lerinden ve Mac'lerden oluşan bir p2p ağı üzerinden kolayca yapılabilir.
Zincir Üzerinde Doğrulama
Yukarıda belirtildiği gibi Sepolia'daki Zeth kanıtlarını RISC Zero Groth16 doğrulayıcıyı kullanarak doğruladık. Bu, bu ayın başlarında piyasaya sürülen RISC Zero protokol yığınının nispeten yeni bir parçası. ZkVM'nin yerel STARK kanıtını eşdeğer bir SNARK kanıtına dönüştürmek için Bonsai'yi kullanarak ve bu kanıtı zincir üzerindeki bir SNARK doğrulayıcıya göndererek çalışır.
İşlem girişini UTF-8 verisi olarak görürsek kanıtın 17735424 bloğuna karşılık geldiğini görürüz.
Bonsai kullanıldığında STARK'tan SNARK'a dönüşüm yaklaşık 40 saniye sürer. Zincir üzerindeki SNARK'ın doğrulanmasının maliyeti 245.129 gas (bu yazının yazıldığı sırada ~5,90$) idi.
Elbette zkVM'nin bir avantajı birden fazla kanıtı tek bir kanıtta birleştirebilmesidir. Bu işlevsellik sayesinde, herhangi bir ek gaz kullanılmadan zincir üzerinde bir dizi kanıt doğrulanabilir. Bu şekilde, zincir üstü doğrulamanın maliyeti tüm kanıt setine yayılarak herkes için maliyet azaltılabilir.
Bunun Ethereum için anlamı
Daha önce de belirtildiği gibi Ethereum, ZK dostu olması düşünülerek tasarlanmamıştır. zkEVM'lerin gösterdiği gibi, özellikle işlem kodları, dijital imzalar ve hash işlevleri söz konusu olduğunda farklı şekillerde yapılabilecek pek çok şey vardır.
Bu değişiklikler performansı artırsa da, bu değişiklikler olmadan da hâlâ sağlam bir performans elde edebildik. Vitalik geçen yıl farklı zkEVM türleri hakkında yazdığında, bir Ethereum bloğunun geçerliliğini kanıtlamak saatler sürüyordu; şimdi bunu dakikalar içinde yapabiliriz. ZK performansı hızla gelişiyor ve bu eğilimin önümüzdeki birkaç yılda da devam edeceğine inanmak için nedenlerimiz var.
Ek: Zeth nasıl çalışır?
Bu bölüm geliştiriciler içindir.
Kabaca söylemek gerekirse, Zeth blokları tam bir düğümle aynı şekilde oluşturur: ana blokla, işlem listesiyle ve blok yazarıyla başlarız, ardından birçok hesaplama yaparız (imzaları doğrulamak, işlemleri çalıştırmak, genel durumu güncellemek vb.), ve son olarak yeni blok karma değerini döndürün.
Ancak tam düğümlerden farklı olarak bunu zkVM'de yapıyoruz. Bu, belirli bir hash'e sahip bir bloğun geçerli olduğuna dair ZK kanıtını elde ettiğimiz anlamına gelir.
Elbette bu zorluklardan muaf değil. Bu bölümde bu zorlukları ve bunları nasıl çözeceğimizi anlatacağız.
Kriptografi
İlk zorluk kriptografidir. Bir Ethereum bloğu oluşturmak çok fazla çalışma gerektirir; bunların en önemlileri karma (Keccak-256) ve imza doğrulamadır (ECDSA ve secp256k1).
zkVM'miz eliptik eğriler için hızlandırılmış desteğe sahiptir, dolayısıyla ECDSA imza doğrulaması zor değildir.
Ancak karma söz konusu olduğunda o kadar şanslı değiliz. ZkVM'miz Sha2-256 desteğini hızlandırdı, ancak (bu yazının yazıldığı sırada) Keccak-256'yı desteklemedi. Bu nedenle şu anda sha3 Rust sandığında sadece Keccak uygulamasını kullanıyoruz. Profil oluşturma sayesinde bunun birçok döngü gerektirdiğini biliyoruz. İdeal değil, ancak zkVM'miz bunun üstesinden gelebilir ve daha sonra Keccak hızlandırıcılarını geri dönüştürüp ekleyebiliriz.
Hesaplar ve Depolama: Performans ve Güvenlik
Ethereum'da hesaplar ve depolama, küresel bir Merkle Patricia Trie (MPT) tarafından izlenir.
Etherscan'e göre bu yazının yazıldığı sırada ağaç yaklaşık 250.000.000 benzersiz Ethereum adresinin durumunu içeriyordu. Bu genel olarak çok büyük bir veri miktarı değil, ancak onu nasıl sakladığımız ve kullandığımız konusunda dikkatli olmamız için yeterli. Özellikle MPT'nin performansı kritik öneme sahiptir.
Ancak performans tek faktör değil, güvenliği de göz önünde bulundurmalıyız.
Zeth'in blok oluşturucusu zkVM'de istemci olarak çalışır. Bu, Ethereum p2p ağına veya diğer RPC sağlayıcılarına doğrudan erişemeyeceği anlamına gelir. Bunun yerine zkVM dışında çalışan ayrı programlar tarafından sağlanan verilere dayanması gerekir.
Bir ZK uygulamasının güvenliğini analiz ederken, harici programların kötü amaçlı olduğunu ve dolayısıyla kötü amaçlı veriler sunabileceğini varsaymalıyız. Bunu önlemek için ZK uygulamalarının kendilerine sağlanan verilerin geçerli olduğunu doğrulaması gerekir.
Zeth blok oluşturucuları için bu, ilgili tüm hesapların ve depolamanın (yani belirli bir işlem listesini çalıştırmak için gereken hesaplar ve depolama) durumunun doğrulanması anlamına gelir.
Neyse ki böyle bir mekanizma, Merkle'nin dahil edilmesi yoluyla belirli bir hesabın (ve depolama alanının) durumunu kanıtlamanın standart bir yolunu tanımlayan EIP-1186 tarafından sağlanmaktadır.
Prensip olarak Zeth'in blok oluşturucuları, bir dizi EIP-1186 dahil edilme kanıtını doğrulayarak hesap ve depolama durumunu doğrulayabilir. Ancak bu yaklaşım ideal değildir.
Bunun yerine, kısmi bir MPT oluşturmak için EIP-1186 dahil edilme kanıtındaki verileri kullanmak daha iyidir. Bu, yalnızca belirli bir işlem listesiyle ilgili düğümleri içeren bir MPT türüdür; ilgisiz dallar basitçe karşılık gelen karmalarla temsil edilir. Kısmi MPT'leri Merkle dahil etme kanıtlarının bir tür "birleşmesi" olarak veya tercih ederseniz Merkle alt kümesi kanıtları olarak düşünebilirsiniz.
Kısmi bir MPT'yi doğrulama süreci temel olarak normal bir EIP-1186 kanıtını doğrulamayla aynıdır: kök karması hesaplanır ve ana bloğun durum köküyle karşılaştırılır. İkisi eşitse, hesapların ve içindeki depolamanın bütünlüğüne güvenilebilir.
Kısmi MPT doğrulandıktan sonra işlem uygulanabilir ve kısmi MPT güncellenebilir. Yeni durum kökü, kısmi MPT'nin yeni kök karma değeri hesaplanarak elde edilebilir.
Zeth blok oluşturucuyu çalıştırmadan önce, hangi hesapların ve depolamanın ilgili olduğunu belirlemek için işlem listesini sanal alanda çalıştırıyoruz. (Bu süreç aynı zamanda, blokhash() sorgularını desteklemek için gereken en eski ilgili öncül bloğu belirlememize de olanak tanır).
İlgili her hesap ve depolama için EIP-1186 dahil edilme kanıtını alıyoruz. (İlgili öncül blokları da alıyoruz).
İlgili tüm verileri içeren kısmi bir MPT oluşturmak için bu dahil etme kanıtlarını kullanırız.
zkVM'yi başlatıyoruz, Zeth blok oluşturucusunu çalıştırmasına izin veriyoruz ve bazı MPT ve diğer girişleri (ana blok, işlem listesi vb.) sağlıyoruz.
zkVM'de Zeth blok oluşturucu:
Kısmi MPT kökünün ana bloğun durum köküyle eşleştiğini doğrulayın.
Ana bloğa kadar önceki bloğun karma zincirini doğrulayın.
Başvuru işlemleri.
Bazı MPT'leri güncelleyin.
Kısmi MPT'nin yeni kök karmasını yeni bloğun durum kökü olarak kullanın.
Zeth blok üreteci tamamlandıktan sonra yeni bloğun hash değerini çıkaracaktır.
Bu karma, ana bloğa yönelik bir taahhüdü ve dolayısıyla ana bloğun durum kökünü (orijinal kısmi MPT'yi doğrulamak için kullanılır) içerir. Bu, kötü niyetli bir doğrulayıcının geçersiz bir üst blok sağlamadan hesaplara ve depolamaya geçersiz veriler sağlayamayacağı anlamına gelir.
Başka bir deyişle: eğer ana blok geçerliyse Zeth tarafından oluşturulan yeni blok da geçerlidir.
Yani birisi size yeni bir blok ve Zeth tarafından oluşturulmuş bir ZK kanıtı verirse aşağıdaki üç şeyi kontrol ederek bloğun geçerliliğini kontrol edebilirsiniz:
ZK kanıtının geçerli olduğundan ve Zeth'ten olduğundan emin olun. Zincir dışı uygulamalar için zkVM Rust sandığı tarafından sağlanan işlevler inceleme amacıyla kullanılabilir. Zincir üstü uygulamalar için bu, zincir üstü kanıt doğrulayıcımız kullanılarak kontrol edilebilir.
ZK'nin yeni bloğun karmasının işlendiğini kanıtladığından emin olun.
Ana bloğun beklediğiniz karma değerine sahip olduğundan emin olun.
Bunlar kontrol edilirse yeni blok geçerlidir.
Sınırlamalar ve Gelecekteki İyileştirmeler
Projemizin amacı blok inşaatının performansını incelemektir. Bu nedenle kapsamı birleştirilmiş bloklarla sınırlamaya karar verdik.
Ek olarak Zeth, belirli bir bloğun geçerli olduğunu kanıtlayabilse de şu anda fikir birliğini (yani bloğun gerçekten kanonik zincire dahil olduğunu) kanıtlayamıyor. Bu durum gelecekte zkVM'ye doğrulayıcı veya senkronizasyon komitesi imzaları için kontroller eklenerek değişebilir.
Son olarak Zeth yeni bir yazılımdır. Bazı testler yapmış olsak da (Ethereum test paketi ve çeşitli gerçek dünya blokları dahil), Zeth hala bazı hatalar içerebilir. Bu yazının yazıldığı an itibariyle deneysel bir yazılım olarak kabul edilmesi gerekir.
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Ethereum blok doğrulayıcı Zeth'in ayrıntılı açıklaması: ilk Type 0 zkEVM
Orijinal başlık: Zeth'i Duyuruyoruz: İlk Type Zero zkEVM
Oyuncular: Tim Cartens, Victor Graf, Rami Khalil, Steven Li, Parker Thompson, Wolfgang Welz, Zeth Collaboration
Yapı: bayemon.eth, ChainCatcher
25 Ağustos'ta, RISC Zero zkVM'yi temel alan Ethereum'un açık kaynaklı ZK blok doğrulayıcısı Zeth, halka açık olarak piyasaya sürüldü. Zeth, doğrulayıcılara veya senkronizasyon komitelerine güvenmeden zkVM'de yeni bloklar oluşturmak için gereken tüm işi yapar. Zeth, Ethereum ana ağının birden fazla gerçek bloğunda doğrulandı ve resmi Ethereum test paketinin ilgili tüm testlerini geçti. Zeth, zkVM tabanlı Rust desteğini ve revm, eterler ve alaşım dahil olmak üzere güçlü anakartları 4 hafta içinde uygulamaya koymayı başardı. zkVM'nin süreklilik ve Bonsai prova hizmetleri desteği sayesinde Zeth, bu provaları dakikalar içinde oluşturabilir. Zeth'in zincir üstü doğrulama desteği sayesinde herkes bu kanıtları zincir üzerinde düşük maliyetle doğrulayabilir. Bu yazıda daha fazla ayrıntıya gireceğiz ancak kodu daha derinlemesine incelemek istiyorsanız kaynak koduna göz atın ve RISC Zero geliştirici portalını ziyaret edin.
Özet
Yaklaşık bir yıl önce Vitalik, zkEVM'nin farklı türlerini detaylandırdı:
Ethereum tarihinde bunun mümkün olduğu durumlar olsa da, bugün RISC Zero'nun zkVM ve Bonsai hizmetlerini kullanan Ethereum blok kanıtlarının saatler değil dakikalar sürdüğünü duyurmaktan heyecan duyuyoruz.
Zeth: Doğrulanabilir Ethereum blok üretimi
Bugün, RISC Zero zkVM'de Ethereum için açık kaynaklı bir ZK blok doğrulayıcısı olan Zeth'i piyasaya sürdük.
Zeth, belirli bir Ethereum bloğunun geçerli olduğunu doğrulayıcılara veya senkronizasyon komitelerine dayanmadan kanıtlayabilir. Bunun nedeni, Zeth'in zkVM'de yeni bloklar oluşturmak için gereken tüm işleri yapmasıdır:
Yeni bir blok oluşturulduktan sonra Zeth, karma değerini hesaplar ve çıktı olarak verir. Bu işlemi zkVM'de çalıştırarak yeni blokların geçerli olduğuna dair ZK kanıtları elde edebiliriz.
RISC Zero'nun zkVM'sinden ve revm, eter ve alaşım gibi popüler Rust kasalarından yararlanarak Zeth'in ilk versiyonunu 4 haftadan kısa bir sürede yazdık. zkVM'nin süreklilik desteği ve Bonsai prova hizmeti sayesinde prova üretimi sadece birkaç dakika içinde yapılabilir. Zincir üstü doğrulama desteğiyle, bu kanıtları zincir üzerinde düşük maliyetle doğrulayabiliriz.
Zeth, Ethereum ana ağının birden fazla gerçek bloğunda doğrulandı ve resmi Ethereum test paketinin ilgili tüm testlerini geçti.
Zeth standart Ethereum blokları oluşturduğu için tip 1 zkEVM olarak düşünülebilir. Ancak bundan çok daha fazlası var: Zeth, standart Rust kod tahtaları (Reth gibi popüler tam düğümler tarafından kullanılan aynı kod tahtaları) kullanılarak oluşturulduğundan, onu sınıf 0 zkEVM olarak düşünmeyi tercih ediyoruz: tam Protokol uyumluluğu ve çok sayıda kodun yeniden kullanımı . **
Bu dönüm noktası, ZK teknolojisi ve Ethereum ekosistemi için ileriye doğru atılmış büyük bir adımı temsil ediyor. Bu yazıda Zeth'in ilk versiyonunun birkaç hafta içinde nasıl yazılacağını, performansını, nasıl çalıştığını ve bunun ZK projesi için ne anlama geldiğini tartışacağız.
RISC Zero, zk toplamaları, zkEVM'ler, hafif istemciler ve köprüler oluşturmayı kolaylaştırır
Zeth'i iki nedenden dolayı yazdık:
zk toplaması ve zkEVM
Type 0 zkEVM olarak Zeth, geliştiricilerin tamamen yerel EVM ve Ethereum uyumluluğuyla zk toplamaları oluşturmasına olanak tanır. Zeth'in zincir üstü kanıt doğrulama desteğiyle birleştiğinde, ZK odaklı bir L2 genişletme çözümü oluşturmak son derece basit hale gelecektir.
Mevcut ZK toplamaları ve zkEVM devreleri tasarım gereği yekparedir ve ZK kriptografisi konusunda üst düzey anlayışa sahip bir geliştirici olmadan yükseltilemez. Buna karşılık zkVM tabanlı Zeth yaklaşımı, herhangi bir geliştiricinin bunu kendi ihtiyaçlarına göre özelleştirmesine ve değiştirmesine olanak tanır.
Zeth, devir tabanlı açık kaynaktır ve diğer zkEVM ve EVM uyumlu zincirleri desteklemek için ince ayar yapmak nispeten kolay bir iştir. Bu nedenle Zeth, gelecekteki EIP güncellemelerine nispeten daha hızlı yanıt verecektir. Ayrıca Zeth, geliştiricilerin kendi blok oluşturma mantığını oluşturmalarına olanak tanıyan modülerlik de sağlar.
zk odaklı L2 çözümlerinin daha önce yıllarca süren araştırma ve geliştirme ve çoğu projenin karşılayamayacağı bir tüketim olan 100 milyon ABD dolarından fazla finansman gerektirdiğini bildiğimizden, Zeth'in çabalarının zk rollup ve zkEVM'leri demokratikleştireceğini umuyoruz.
Hafif istemci ve köprü
Beacon zincirinin kullanıma sunulmasının hafif istemciler ve köprüler için bir nimet olduğuna şüphe yoktur. Bu teknikler, Ethereum'un artık olgunlaşmış PoS modelini temel alarak, herkesin kurallara uyması koşuluyla, hafif istemcilerin ve köprülerin, yeniden oluşturmadan son blokları kolayca doğrulamasına olanak tanıyor.
Elbette stake etmenin asıl amacı, düğümlerin kurallara uyması için ekonomik teşvikler sağlamaktır. Bununla birlikte, Slashing'in düğümlere uyguladığı tehdit, kötülüğü tamamen önleyemez; dış teşvikler, çıkarların "dengesini" her zaman kötülüğe doğru çevirecektir ve bu kötü niyetli davranışları uygun şekilde ele alabilecek bir hafif istemci veya köprü tasarlamak çok önemlidir. zor.
Zeth gibi araçlarla düğümlerin kötülük yapma riski büyük ölçüde azalır. Hafif istemciler, zkVM'ye birkaç açıklama ekleyerek Zeth ile entegre olabilir; köprüler gibi zincir üstü uygulamalar, zincir içi kanıt kanıtı doğrulama sözleşmemizi kullanarak Zeth ile entegre olabilir.
Yakın gelecekte, belirli bir bloğun geçerli olup olmadığını belirlemek için ZK kanıtlarını kullanan hafif istemcileri ve köprüleri hayal edebiliriz. Bu yaklaşım, blokları doğrulama maliyetini önemli ölçüde artırmadan riski büyük ölçüde azaltacaktır.
Bu özellikle uygulama zincirleri, modüler ekosistemler ve henüz Ethereum'un geniş tam düğüm topluluğunun sağladığı güvenlik düzeyine sahip olmayan yeni zincirler için önemlidir.
İyi bir temel, proje geliştirme sürecini basitleştirir
RISC Zero zkVM'yi temel alan ve RISC-V talimat seti mimarisiyle desteklenen Zeth, geliştiricilere tanıdık bir programlama deneyimi sağlayabilir. Ancak zkVM'miz bir RISC-V çekirdeğinden daha fazlasıdır. Ayrıca karma ve imza doğrulama gibi yaygın şifreleme görevleri için hızlandırma devrelerimiz de mevcuttur.
Bu hibrit yaklaşım (genel amaçlı CPU çekirdeklerinin hızlandırma devreleriyle birleşimi) bize her iki dünyanın da en iyisini sunar:
Sonuç olarak, revm, eter ve alaşımdan mevcut Rust kod paketlerini kullanarak Zeth'i hızlı bir şekilde oluşturmayı başardık. Mevcut panoları yeniden kullanarak Zeth'in ilk versiyonunu 4 haftadan kısa bir sürede tamamladık. Daha az olgunlaşmış ekosistemlerde bu tür bir hız mümkün değildir.
Performans açısından Zeth, ECDSA imza doğrulaması için hızlandırıcı devrelerimizin yanı sıra ZK çerçevemizin paralel çalışan (nVidia CUDA veya Apple Metal kullanarak) GPU kümelerini hızlı bir şekilde kanıtlamak için kullanmayı kolaylaştıran yeni bir özelliği olan Devamlılık'tan da yararlanıyor. hesaplamalar. Devamlılıkların kullanımı kolaydır: bu işlevsellik zkVM'de çalışan tüm konuk programlara şeffaf bir şekilde sağlanır, yani düzgün çalışması için hiçbir kod değişikliği gerekmez.
ZkVM'miz ile, Ethereum blok geçerliliğinin ZK kanıtlarını saatler değil dakikalar içinde hızlı bir şekilde oluşturabiliyoruz.
Verim
Zeth blok oluşturucunun performansını ele alacağız. Zeth hâlâ yeni bir ürün olduğundan bu rakamlar değişebilir; ancak gelecekteki çalışmalara temel oluşturacak bazı somut rakamlar sunmak istedik.
Performans söz konusu olduğunda dikkate alınması gereken birkaç faktör vardır:
Süreklilik
Zeth'in zkVM'si sürekli çalışma kullanılarak performansa göre ayarlanabilir. O halde biraz durup "sürekli çalışma"nın nasıl çalıştığını tartışmamız gerekiyor.
zkVM'miz standart RISC-V işlemcilerini uygular. Bu nedenle yürütme döngülerle ölçülür. (Devremizde, istisnalar olmasına rağmen çoğu RISC-V talimatı 1 döngüde yürütülür). Basit programların yürütülmesi genellikle yalnızca birkaç yüz bin döngü gerektirir, ancak daha karmaşık programlar milyarlarca döngü gerektirebilir.
Tipik bir ZK sisteminde, bu yürütme döngüleri bir kanıtta toplanır; döngü sayısı arttıkça kanıtı oluşturmak için gereken zaman ve bellek de artar. Ancak zkVM'miz bu stereotipleri takip etmiyor ve bu yılın başlarında geleneksel kanıt şeması oluşturmanın dezavantajlarını iyileştiren yeni bir süreklilik özelliğine öncülük ettik.
Süreklilik açısından ispat süreci üç aşamaya ayrılır:
Gerekli hesaplamaları provasız bir simülatörde yapıyoruz. Yol boyunca döngünün o ana kadar kaç kez çalıştığını sayarız. Yapılandırılabilir aralıklarla programın durumunun anlık görüntülerini alırız. Bu, yürütmeyi etkili bir şekilde birden fazla parçaya böler. Her bölüm küçüktür ve tipik olarak 1 milyon veya daha az döngüyü temsil eder.
Bu parçalar bir dizi kanıt oluşturma çalışanına atanır. Verilen program bölümleri için ZK kanıtları üretirler. Önemli olan bunu paralel olarak yapabilmeleridir. Yeterli çalışan olduğu sürece, bir program segmentini kanıtlamak için gereken sürede tüm program segmentleri kanıtlanabilir. Ağ segmentinin küçük boyutundan dolayı gereken süre genellikle kısadır (onlarca saniye).
Segmentlerin kanıtları oluşturulduğunda, bunlar eninde sonunda toplanacaktır. Her "toplama" işlemi bir çift ardışık bölümlenmiş kanıt alır ve bu bölümlerin birleşimi için yeni bir kanıt üretir. Örneğin, bölüm 1 programın A durumundan B durumuna geçiş yaptığını kanıtlarsa ve bölüm 2, programın B durumundan C durumuna geçiş yaptığını kanıtlarsa toplama, programın A durumundan C durumuna geçiş yaptığını kanıtlar. Yeterli çalışanla bu, N'nin parça sayısı olduğu log(N) zamanda yapılabilir.
Rakamları incelediğimizde bu aşamaları çalışırken göreceğiz.
**Ethereum bloğu oluşturmak ne kadar zor? **
Öncelikle bir Ethereum bloğu oluşturmanın karmaşıklığına bakalım. Aşağıdaki tabloda, bazı gerçek dünyadaki Ethereum bloklarını alıp bunları zkVM'de Zeth kullanarak yeniden yapılandırıyoruz.
Örneğin, 17606771 bloğu 2131 kapsam üretir. Her bölüm en fazla 2^20 yürütme döngüsünü temsil eder, dolayısıyla tüm hesaplama en fazla 2.234.515.456 yürütme döngüsü alır.
Genel olarak, tipik bir Ethereum bloğunun oluşturulmasının 2 ila 400 milyon döngü sürdüğünü, ancak bazen 9,5 milyar döngüye kadar çıktığını görüyoruz. (İlk başta, bu farklılıkların işlemin gazına yansımadığını görmek bizi şaşırttı. Ancak daha fazla düşündükten sonra mantıklı geldi: gaz sistemi, ZK kanıtları değil, düzenli yürütme göz önünde bulundurularak tasarlandı).
Süreklilik sayesinde bu ölçeğin yönetilmesi kolaydır. Bu rakamlara göre, zkVM doğrulayıcılarını çalıştıran 10.000 düğümden oluşan eşler arası bir ağ, en büyük bloklar için en yüksek paralel doğrulama performansını elde etmek için yeterlidir; bu, Ethereum'un şu anda sahip olduğu 700.000 doğrulayıcının bir kısmıdır.
**Kanıtın oluşturulması ne kadar sürer? **
Bazı temel performans verilerini toplamak için 64 GPU Çalışanıyla bir Bonsai test örneğini başlattık. Daha sonra Zeth kullanarak 17735424'ün (182 işlem, 3242 segment veya yaklaşık 3,4 milyar döngü) engellendiğini doğrulamasını istedik.
Kanıtlar oluşturmak için zkVM'nin öncelikle yürütmeyi bölümlere ayırması gerekir. Aşağıdaki ekran görüntüsünde bu süreç, 10 dakika süren utor görevi tarafından yakalanmıştır. (Bu zamanın çoğunu ağ depolama alanına yazmak gibi AWS işleri yapmakla geçirirsiniz). Yerel makinede aynı görevin tamamlanması 6 dakikadan az sürer. Gelecek yıl bu süreyi önemli ölçüde azaltmayı umuyoruz).
İnfazcı sonunda idamı 3242 parçaya böler. Bu sadece 64 GPU için çok fazla parçalanma anlamına geliyor. Bu nedenle, her çalışan düğümün 50 adet segment kanıtı oluşturması gerekir. Aşağıdaki şekilde görüldüğü gibi bu işlem 35 dakika sürer. Eğer 50 kat daha fazla çalışan düğümümüz varsa, bu yalnızca 42 saniye sürer.
Segment kanıtı tamamlandıktan sonra toplama başlar. 3242 segment olduğu için log_2(3242) = 12 turluk bir toplama işlemi yapmamız gerekiyor. Toplama işleminin ilk aşamalarında işçilerden daha fazla işçi vardır; yani ilk aşama 1 dakika, ikinci aşama 35 saniye, üçüncü aşama 25 saniye sürer ve bu şekilde devam eder. Yedinci aşamada, süre 5 saniyenin biraz üzerinde sabitlendi. Aynı şekilde eğer daha fazla çalışanımız olsaydı her aşama sadece 5 saniye sürecekti.
Toplama tamamlandıktan sonra sonuçlar kesinleşir ve bu işlem bir dakika daha sürer.
Sonuç olarak, yetersiz küme boyutuyla yaklaşık 50 dakikada (1,1 MHz etkin hız) kanıt oluşturmayı başardık. Küme uygun şekilde boyutlandırılırsa kanıtların oluşturulmasının daha hızlı olacağını tahmin ediyoruz:
Tamamen paralelleştirilmiş durumda ispat adımı 42 + 12 * 5 + 60 saniyede veya 2 dakika 42 saniyede tamamlanabilir.
İhtiyatlı bir şekilde yuvarlarsak ve uygulayıcı süresini de dahil edersek, süre 9 ila 12 dakika arasındadır (etkili hız 4,7 MHz - 6,3 MHz).
Uygulayıcılarımızı ve kanıt çerçevemizi geliştirmeye devam ettikçe, bu sürenin gelecek yıl önemli ölçüde azalacağı konusunda iyimseriz.
Kanıt oluşturmak için kaynak tüketimi
Yukarıdaki test kümesi AWS'ye dağıtıldı. 64 g5.xlarge kanıt düğümü ve 1 m5zn.xlarge yürütme düğümünden oluşur. Amazon'a göre her g5.xlarge düğümünün
Bu yazının yazıldığı an itibariyle, bu bulut sunucularının İsteğe Bağlı fiyatı 1,006 USD/saat, Rezerve Edilmiş Bulut Sunucularının fiyatı ise 0,402 USD/saattir. Bu arada, Amazon teknik özellikler sayfası m5zn.xlarge düğümümüzün
Bu yazının yazıldığı an itibariyle, bu örneğin İsteğe Bağlı fiyatı 0,3303 USD/saattir.
Yukarıda açıklanan 17735424 bloğunun kanıt maliyetini kabaca tahmin etmek için bu sayıları kullanabiliriz.
64 adet kanıt düğümü konuşlandırdığımızı ve bu dağıtımda bir kanıt oluşturmanın (uçtan uca) 50 dakika sürdüğünü hatırlayın. Boşta kalan çalışan zamanı göz ardı edildiğinde, 64 kanıt düğümü artı bir yürütme düğümünün maliyeti 50 dakika için 50/60 * (64 * 0,402 + 0,3303) = 21,72 USD'dir. Bu abartılı bir tahmin çünkü boşta kalan işçilere ödeme yaptığımızı varsayıyor. İşçilerin atıl kalmasının maliyetini (örneğin onları kapatmak veya başka işlere koymak) hesaba katmazsak, maliyet yaklaşık 19,61 dolar oluyor.
Bu dolar tahminlerinin kümenin büyüklüğünden bağımsız olduğunu belirtmekte fayda var! Önemli olan segment sayısıdır. Bunun nedeni, sırayla 2 iş yapan 1 makinenin, paralel olarak 1 iş yapan 2 makinenin maliyetiyle aynı olmasıdır. Bu nedenle, eğer küme boyutu daha büyükse, kanıtlar daha hızlı üretilecek, ancak daha pahalı olmayacaktır.
Maliyetleri daha da azaltmanın birkaç yolu vardır. Belki bir Keccak hızlandırıcı ekleyerek zkVM'nin performansını iyileştirmeye devam etmenin yanı sıra, daha ucuz örnekler de arayabiliriz. Daha da önemlisi, kullandığımız düşük özellikli makineler göz önüne alındığında (ve zkVM'miz nVidia Cuda ve Apple Metal'i destekler), bu iş sıradan tüketici PC'lerinden ve Mac'lerden oluşan bir p2p ağı üzerinden kolayca yapılabilir.
Zincir Üzerinde Doğrulama
Yukarıda belirtildiği gibi Sepolia'daki Zeth kanıtlarını RISC Zero Groth16 doğrulayıcıyı kullanarak doğruladık. Bu, bu ayın başlarında piyasaya sürülen RISC Zero protokol yığınının nispeten yeni bir parçası. ZkVM'nin yerel STARK kanıtını eşdeğer bir SNARK kanıtına dönüştürmek için Bonsai'yi kullanarak ve bu kanıtı zincir üzerindeki bir SNARK doğrulayıcıya göndererek çalışır.
İşlem girişini UTF-8 verisi olarak görürsek kanıtın 17735424 bloğuna karşılık geldiğini görürüz.
Bonsai kullanıldığında STARK'tan SNARK'a dönüşüm yaklaşık 40 saniye sürer. Zincir üzerindeki SNARK'ın doğrulanmasının maliyeti 245.129 gas (bu yazının yazıldığı sırada ~5,90$) idi.
Elbette zkVM'nin bir avantajı birden fazla kanıtı tek bir kanıtta birleştirebilmesidir. Bu işlevsellik sayesinde, herhangi bir ek gaz kullanılmadan zincir üzerinde bir dizi kanıt doğrulanabilir. Bu şekilde, zincir üstü doğrulamanın maliyeti tüm kanıt setine yayılarak herkes için maliyet azaltılabilir.
Bunun Ethereum için anlamı
Daha önce de belirtildiği gibi Ethereum, ZK dostu olması düşünülerek tasarlanmamıştır. zkEVM'lerin gösterdiği gibi, özellikle işlem kodları, dijital imzalar ve hash işlevleri söz konusu olduğunda farklı şekillerde yapılabilecek pek çok şey vardır.
Bu değişiklikler performansı artırsa da, bu değişiklikler olmadan da hâlâ sağlam bir performans elde edebildik. Vitalik geçen yıl farklı zkEVM türleri hakkında yazdığında, bir Ethereum bloğunun geçerliliğini kanıtlamak saatler sürüyordu; şimdi bunu dakikalar içinde yapabiliriz. ZK performansı hızla gelişiyor ve bu eğilimin önümüzdeki birkaç yılda da devam edeceğine inanmak için nedenlerimiz var.
Ek: Zeth nasıl çalışır?
Bu bölüm geliştiriciler içindir.
Kabaca söylemek gerekirse, Zeth blokları tam bir düğümle aynı şekilde oluşturur: ana blokla, işlem listesiyle ve blok yazarıyla başlarız, ardından birçok hesaplama yaparız (imzaları doğrulamak, işlemleri çalıştırmak, genel durumu güncellemek vb.), ve son olarak yeni blok karma değerini döndürün.
Ancak tam düğümlerden farklı olarak bunu zkVM'de yapıyoruz. Bu, belirli bir hash'e sahip bir bloğun geçerli olduğuna dair ZK kanıtını elde ettiğimiz anlamına gelir.
Elbette bu zorluklardan muaf değil. Bu bölümde bu zorlukları ve bunları nasıl çözeceğimizi anlatacağız.
Kriptografi
İlk zorluk kriptografidir. Bir Ethereum bloğu oluşturmak çok fazla çalışma gerektirir; bunların en önemlileri karma (Keccak-256) ve imza doğrulamadır (ECDSA ve secp256k1).
zkVM'miz eliptik eğriler için hızlandırılmış desteğe sahiptir, dolayısıyla ECDSA imza doğrulaması zor değildir.
Ancak karma söz konusu olduğunda o kadar şanslı değiliz. ZkVM'miz Sha2-256 desteğini hızlandırdı, ancak (bu yazının yazıldığı sırada) Keccak-256'yı desteklemedi. Bu nedenle şu anda sha3 Rust sandığında sadece Keccak uygulamasını kullanıyoruz. Profil oluşturma sayesinde bunun birçok döngü gerektirdiğini biliyoruz. İdeal değil, ancak zkVM'miz bunun üstesinden gelebilir ve daha sonra Keccak hızlandırıcılarını geri dönüştürüp ekleyebiliriz.
Hesaplar ve Depolama: Performans ve Güvenlik
Ethereum'da hesaplar ve depolama, küresel bir Merkle Patricia Trie (MPT) tarafından izlenir.
Etherscan'e göre bu yazının yazıldığı sırada ağaç yaklaşık 250.000.000 benzersiz Ethereum adresinin durumunu içeriyordu. Bu genel olarak çok büyük bir veri miktarı değil, ancak onu nasıl sakladığımız ve kullandığımız konusunda dikkatli olmamız için yeterli. Özellikle MPT'nin performansı kritik öneme sahiptir.
Ancak performans tek faktör değil, güvenliği de göz önünde bulundurmalıyız.
Zeth'in blok oluşturucusu zkVM'de istemci olarak çalışır. Bu, Ethereum p2p ağına veya diğer RPC sağlayıcılarına doğrudan erişemeyeceği anlamına gelir. Bunun yerine zkVM dışında çalışan ayrı programlar tarafından sağlanan verilere dayanması gerekir.
Bir ZK uygulamasının güvenliğini analiz ederken, harici programların kötü amaçlı olduğunu ve dolayısıyla kötü amaçlı veriler sunabileceğini varsaymalıyız. Bunu önlemek için ZK uygulamalarının kendilerine sağlanan verilerin geçerli olduğunu doğrulaması gerekir.
Zeth blok oluşturucuları için bu, ilgili tüm hesapların ve depolamanın (yani belirli bir işlem listesini çalıştırmak için gereken hesaplar ve depolama) durumunun doğrulanması anlamına gelir.
Neyse ki böyle bir mekanizma, Merkle'nin dahil edilmesi yoluyla belirli bir hesabın (ve depolama alanının) durumunu kanıtlamanın standart bir yolunu tanımlayan EIP-1186 tarafından sağlanmaktadır.
Prensip olarak Zeth'in blok oluşturucuları, bir dizi EIP-1186 dahil edilme kanıtını doğrulayarak hesap ve depolama durumunu doğrulayabilir. Ancak bu yaklaşım ideal değildir.
Bunun yerine, kısmi bir MPT oluşturmak için EIP-1186 dahil edilme kanıtındaki verileri kullanmak daha iyidir. Bu, yalnızca belirli bir işlem listesiyle ilgili düğümleri içeren bir MPT türüdür; ilgisiz dallar basitçe karşılık gelen karmalarla temsil edilir. Kısmi MPT'leri Merkle dahil etme kanıtlarının bir tür "birleşmesi" olarak veya tercih ederseniz Merkle alt kümesi kanıtları olarak düşünebilirsiniz.
Kısmi bir MPT'yi doğrulama süreci temel olarak normal bir EIP-1186 kanıtını doğrulamayla aynıdır: kök karması hesaplanır ve ana bloğun durum köküyle karşılaştırılır. İkisi eşitse, hesapların ve içindeki depolamanın bütünlüğüne güvenilebilir.
Kısmi MPT doğrulandıktan sonra işlem uygulanabilir ve kısmi MPT güncellenebilir. Yeni durum kökü, kısmi MPT'nin yeni kök karma değeri hesaplanarak elde edilebilir.
zkVM'de Zeth blok oluşturucu:
Zeth blok üreteci tamamlandıktan sonra yeni bloğun hash değerini çıkaracaktır.
Bu karma, ana bloğa yönelik bir taahhüdü ve dolayısıyla ana bloğun durum kökünü (orijinal kısmi MPT'yi doğrulamak için kullanılır) içerir. Bu, kötü niyetli bir doğrulayıcının geçersiz bir üst blok sağlamadan hesaplara ve depolamaya geçersiz veriler sağlayamayacağı anlamına gelir.
Başka bir deyişle: eğer ana blok geçerliyse Zeth tarafından oluşturulan yeni blok da geçerlidir.
Yani birisi size yeni bir blok ve Zeth tarafından oluşturulmuş bir ZK kanıtı verirse aşağıdaki üç şeyi kontrol ederek bloğun geçerliliğini kontrol edebilirsiniz:
Bunlar kontrol edilirse yeni blok geçerlidir.
Sınırlamalar ve Gelecekteki İyileştirmeler
Projemizin amacı blok inşaatının performansını incelemektir. Bu nedenle kapsamı birleştirilmiş bloklarla sınırlamaya karar verdik.
Ek olarak Zeth, belirli bir bloğun geçerli olduğunu kanıtlayabilse de şu anda fikir birliğini (yani bloğun gerçekten kanonik zincire dahil olduğunu) kanıtlayamıyor. Bu durum gelecekte zkVM'ye doğrulayıcı veya senkronizasyon komitesi imzaları için kontroller eklenerek değişebilir.
Son olarak Zeth yeni bir yazılımdır. Bazı testler yapmış olsak da (Ethereum test paketi ve çeşitli gerçek dünya blokları dahil), Zeth hala bazı hatalar içerebilir. Bu yazının yazıldığı an itibariyle deneysel bir yazılım olarak kabul edilmesi gerekir.