Judul asli: Mengumumkan Zeth: zkEVM Tipe Nol pertama
作者:Tim Cartens, Victor Graf, Rami Khalil, Steven Li, Parker Thompson, Wolfgang Welz, Zeth Collaboration
Membangun: bayemon.eth, ChainCatcher
Pada tanggal 25 Agustus, Zeth, validator blok ZK sumber terbuka Ethereum berdasarkan RISC Zero zkVM, dirilis ke publik. Zeth melakukan semua pekerjaan yang diperlukan untuk membangun blok baru di zkVM tanpa bergantung pada validator atau komite sinkronisasi. Zeth telah diverifikasi di beberapa blok nyata dari mainnet Ethereum dan telah lulus semua pengujian yang relevan dari rangkaian pengujian resmi Ethereum. Zeth mampu mengimplementasikan dukungan Rust berbasis zkVM dan papan yang kuat termasuk revm, ethers, dan alloy dalam waktu 4 minggu. Dengan dukungan zkVM untuk layanan kontinuitas dan bukti Bonsai, Zeth dapat menghasilkan bukti ini dalam hitungan menit. Dengan dukungan Zeth untuk verifikasi on-chain, siapa pun dapat memverifikasi bukti-bukti ini secara on-chain dengan biaya rendah. Dalam postingan ini, kami akan membahas lebih detail, tetapi jika Anda ingin menggali lebih dalam kodenya, lihat kode sumbernya dan kunjungi portal pengembang RISC Zero.
Ringkasan
Sekitar setahun yang lalu, Vitalik menguraikan berbagai jenis zkEVM:
Ethereum pada awalnya tidak dirancang berdasarkan kesesuaian ZK, jadi ada banyak bagian dari protokol Ethereum yang memerlukan komputasi intensif untuk verifikasi ZK. EVM Tipe 1 bertujuan untuk mereplikasi Ethereum sepenuhnya, sehingga tidak dapat mengatasi inefisiensi ini. Saat ini, pembuktian blok Ethereum membutuhkan waktu berjam-jam untuk diselesaikan.
Meskipun ada beberapa kasus dalam sejarah Ethereum yang memungkinkan hal ini terjadi, hari ini kami dengan gembira mengumumkan bahwa pembuktian blok Ethereum menggunakan layanan zkVM dan Bonsai RISC Zero memerlukan waktu beberapa menit, bukan jam.
Zeth: Pembuatan blok Ethereum yang dapat diverifikasi
Hari ini kami merilis Zeth, validator blok ZK sumber terbuka untuk Ethereum di RISC Zero zkVM.
Zeth dapat membuktikan bahwa blok Ethereum tertentu valid tanpa bergantung pada validator atau komite sinkronisasi. Ini karena Zeth melakukan semua pekerjaan yang diperlukan untuk menghasilkan blok baru di zkVM, termasuk:
Verifikasi tanda tangan transaksi
Validasi akun dan status penyimpanan terhadap akar status blok induk.
Transaksi aplikasi
Membayar biaya untuk memblokir penulis.
perbarui status akar
Pekerjaan lain diperlukan untuk menghasilkan blok
Setelah blok baru dibuat, Zeth menghitung dan mengeluarkan hashnya. Dengan menjalankan proses ini di zkVM, kita bisa mendapatkan bukti ZK bahwa blok baru itu valid.
Dengan memanfaatkan zkVM RISC Zero dan peti Rust populer seperti revm, ether, dan alloy, kami menulis versi pertama Zeth dalam waktu kurang dari 4 minggu. Dengan dukungan zkVM untuk kontinuitas dan layanan bukti Bonsai, pembuatan bukti dapat dilakukan hanya dalam hitungan menit. Dengan dukungan untuk verifikasi on-chain, kami dapat memverifikasi bukti-bukti ini secara on-chain dengan biaya rendah.
Zeth telah diverifikasi di beberapa blok nyata dari mainnet Ethereum dan telah lulus semua pengujian yang relevan dari rangkaian pengujian resmi Ethereum.
Karena Zeth membangun blok Ethereum standar, ini dapat dianggap sebagai zkEVM tipe 1. Namun lebih dari itu: karena Zeth dibuat menggunakan papan kode Rust standar (papan kode yang sama yang digunakan oleh node penuh populer seperti Reth), kami lebih suka menganggapnya sebagai zkEVM kelas 0: kompatibilitas penuh dengan Protokol, dan banyak penggunaan ulang kode . **
Pencapaian ini mewakili langkah maju yang besar bagi teknologi ZK dan ekosistem Ethereum. Dalam postingan kali ini, kami membahas cara menulis Zeth versi pertama dalam beberapa minggu, kinerjanya, cara kerjanya, dan apa artinya bagi proyek ZK.
RISC Zero mempermudah pembuatan zk rollup, zkEVM, klien ringan, dan bridge
Kami menulis Zeth karena dua alasan:
Permudah tim lain untuk membangun infrastruktur bertenaga ZK mereka sendiri: ZK rollup, zkEVM, ZK light client, ZK bridge, dll. Zeth menyediakan semua yang diperlukan untuk menghasilkan bukti ZK untuk blok berbasis EVM. Ini adalah komponen kunci dari setiap zkEVM atau jembatan. Zeth adalah open source berdasarkan revm, sehingga pengembang proyek dapat dengan mudah memodifikasi atau menggunakannya. Bukti dapat diverifikasi secara on-chain (bagus untuk jembatan dan L2), atau dalam aplikasi lokal (bagus untuk node penuh dan klien ringan).
Melakukan penelitian terkait kinerja EVM di zkVM Zeth, khususnya tugas yang berkaitan dengan Ethereum. (Lihat di bawah untuk analisis hasil survei).
pembatalan zk dan zkEVM
Sebagai zkEVM Tipe 0, Zeth memungkinkan pengembang membuat zk rollup dengan kompatibilitas EVM dan Ethereum yang sepenuhnya asli. Ditambah dengan dukungan Zeth untuk verifikasi bukti on-chain, membangun solusi ekspansi L2 berbasis ZK akan menjadi sangat sederhana.
Rollup ZK dan sirkuit zkEVM yang ada memiliki desain monolitik dan tidak dapat ditingkatkan tanpa pengembang memiliki pemahaman tingkat tinggi tentang kriptografi ZK. Sebaliknya, pendekatan Zeth berbasis zkVM memungkinkan pengembang mana pun untuk menyesuaikan dan memodifikasinya sesuai kebutuhan mereka.
Zeth adalah open source berdasarkan revm, dan penyesuaian untuk mendukung rantai lain yang kompatibel dengan zkEVM dan EVM adalah tugas yang relatif mudah. Oleh karena itu, Zeth akan memiliki respons yang relatif lebih cepat terhadap pembaruan EIP di masa mendatang. Selain itu, Zeth juga menyediakan modularitas, memungkinkan pengembang membangun logika pembangunan blok mereka sendiri di dalamnya.
Kami berharap upaya Zeth akan mendemokratisasi zk rollup dan zkEVM, mengingat bahwa solusi L2 yang digerakkan oleh zk sebelumnya memerlukan penelitian dan pengembangan selama bertahun-tahun dan pendanaan lebih dari 100 juta dolar AS, yang merupakan konsumsi yang tidak mampu ditanggung oleh sebagian besar proyek.
Klien ringan dan jembatan
Tidak ada keraguan bahwa pengenalan rantai suar merupakan keuntungan bagi klien ringan dan jembatan. Teknik-teknik ini dibangun berdasarkan model PoS Ethereum yang kini sudah matang, memungkinkan klien ringan dan jembatan untuk dengan mudah memverifikasi blok terbaru tanpa membangunnya kembali, asalkan semua orang mematuhi aturan.
Tentu saja, inti dari staking adalah untuk memberikan insentif ekonomi bagi node agar mengikuti aturan. Namun, ancaman yang ditimbulkan oleh Slashing pada node tidak dapat sepenuhnya menghindari kejahatan-insentif eksternal akan selalu memiringkan "keseimbangan" kepentingan ke arah kejahatan--dan sangat penting untuk merancang klien ringan atau jembatan yang dapat menangani perilaku jahat ini dengan baik. keras.
Dengan alat seperti Zeth, risiko node melakukan kejahatan sangat berkurang. Klien ringan dapat berintegrasi dengan Zeth hanya dengan menambahkan beberapa info ke zkVM; aplikasi on-chain seperti bridge dapat berintegrasi dengan Zeth menggunakan kontrak verifikasi bukti-bukti on-chain kami.
Dalam waktu dekat, kita dapat membayangkan klien ringan dan jembatan menggunakan bukti ZK untuk menentukan apakah blok tertentu valid. Pendekatan ini akan sangat mengurangi risiko tanpa meningkatkan biaya validasi blok secara signifikan.
Hal ini sangat penting terutama untuk rantai aplikasi, ekosistem modular, dan rantai baru yang belum memiliki tingkat keamanan yang sama dengan yang disediakan oleh komunitas full node besar Ethereum.
Landasan yang baik menyederhanakan proses pengembangan proyek
Berdasarkan RISC Zero zkVM dan didukung oleh arsitektur set instruksi RISC-V, Zeth dapat memberikan pengalaman pemrograman yang familiar bagi pengembang. Namun zkVM kami lebih dari sekedar inti RISC-V. Kami juga memiliki sirkuit akselerasi untuk tugas kriptografi umum seperti hashing dan verifikasi tanda tangan.
Pendekatan hibrid ini (kombinasi inti CPU tujuan umum dengan sirkuit akselerasi) memberi kita yang terbaik dari kedua hal tersebut:
Mendukung bahasa pemrograman utama.
Kinerja operasi kriptografi penting tidak terganggu.
Hasilnya, kami dapat dengan cepat membangun Zeth menggunakan paket kode Rust yang ada dari revm, ether, dan alloy. Dengan menggunakan kembali papan yang ada, kami menyelesaikan Zeth versi pertama dalam waktu kurang dari 4 minggu. Kecepatan seperti ini tidak mungkin terjadi pada ekosistem yang kurang matang.
Dalam hal kinerja, Zeth memanfaatkan sirkuit akselerator kami untuk verifikasi tanda tangan ECDSA serta Kontinuitas - fitur baru kerangka ZK kami yang memudahkan penggunaan cluster GPU yang bekerja secara paralel (menggunakan nVidia CUDA atau Apple Metal) untuk membuktikan ukuran besar dengan cepat perhitungan. Lanjutannya mudah digunakan: fungsionalitas ini disediakan secara transparan untuk semua program tamu yang berjalan di zkVM, yaitu tidak diperlukan modifikasi kode agar dapat berfungsi dengan baik.
Dengan zkVM kami, kami dapat dengan cepat menghasilkan bukti ZK validitas blok Ethereum dalam hitungan menit, bukan jam.
Pertunjukan
Kami akan membahas kinerja generator blok Zeth. Zeth masih merupakan produk baru, jadi angka-angka ini dapat berubah; namun, kami ingin memberikan beberapa angka konkret sebagai dasar untuk pekerjaan di masa depan.
Terkait kinerja, ada beberapa faktor yang perlu dipertimbangkan:
Sumber daya komputasi diperlukan untuk menghasilkan bukti.
"Waktu dinding" yang diperlukan untuk menghasilkan bukti (yaitu berapa lama pengguna harus menunggu hingga bukti tersedia).
Total biaya pembuatan bukti (USD).
Kontinuitas
ZkVM Zeth dapat disetel kinerjanya dengan menggunakan pengoperasian berkelanjutan. Jadi kita perlu berhenti sejenak dan mendiskusikan cara kerja "operasi berkelanjutan".
ZkVM kami mengimplementasikan prosesor RISC-V standar. Oleh karena itu, eksekusi diukur dalam siklus. (Di sirkuit kami, sebagian besar instruksi RISC-V dijalankan dalam 1 siklus, meskipun ada pengecualian). Program sederhana biasanya hanya memerlukan beberapa ratus ribu siklus untuk dijalankan, namun program yang lebih kompleks mungkin memerlukan miliaran siklus.
Dalam sistem ZK pada umumnya, siklus eksekusi ini dikumpulkan menjadi sebuah bukti; seiring bertambahnya jumlah siklus, waktu dan memori yang dibutuhkan untuk menghasilkan bukti juga meningkat. Namun zkVM kami tidak mengikuti stereotip ini, dan awal tahun ini kami memelopori fitur kontinuitas baru yang memperbaiki kelemahan pembuatan skema bukti tradisional.
Dari segi kontinuitas, proses pembuktian dibagi menjadi tiga tahap:
Kami melakukan perhitungan yang diperlukan dalam simulator non-bukti. Sepanjang prosesnya, kami menghitung berapa kali perulangan telah berjalan sejauh ini. Pada interval yang dapat dikonfigurasi, kami mengambil cuplikan status program. Ini secara efektif membagi eksekusi menjadi beberapa bagian. Setiap segmen berukuran kecil, biasanya mewakili 1 juta siklus atau kurang.
Potongan-potongan ini ditugaskan ke sekumpulan pekerja pembuat bukti. Mereka menghasilkan bukti ZK untuk segmen program tertentu. Yang penting, mereka dapat melakukan hal ini secara paralel. Selama jumlah pekerja cukup, semua segmen program dapat dibuktikan dalam waktu yang dibutuhkan untuk membuktikan satu segmen program. Karena ukuran segmen jaringan yang kecil, waktu yang dibutuhkan biasanya singkat (puluhan detik).
Saat bukti segmen dihasilkan, segmen tersebut pada akhirnya akan digabungkan. Setiap operasi "rollup" mengambil sepasang bukti tersegmentasi secara berurutan dan menghasilkan bukti baru untuk kombinasi segmen tersebut. Misalnya, jika segmen 1 membuktikan bahwa program bertransisi dari keadaan A ke keadaan B, dan segmen 2 membuktikan bahwa program tersebut bertransisi dari keadaan B ke keadaan C, maka rollup membuktikan bahwa program tersebut bertransisi dari keadaan A ke keadaan C. Dengan pekerja yang cukup, hal ini dapat dilakukan dalam waktu log(N), dimana N adalah jumlah fragmen.
Kita akan melihat tahapan-tahapan ini saat kita menggali angka-angkanya.
**Seberapa sulitkah membangun blok Ethereum? **
Pertama, mari kita lihat kompleksitas pembuatan blok Ethereum. Pada tabel di bawah, kami mengambil beberapa blok Ethereum dunia nyata dan merekonstruksinya menggunakan Zeth di zkVM.
Misalnya, blok 17606771 menghasilkan 2131 luasan. Setiap segmen mewakili paling banyak 2^20 siklus eksekusi, sehingga seluruh komputasi memerlukan paling banyak 2.234.515.456 siklus eksekusi.
Secara umum, kita melihat blok Ethereum pada umumnya membutuhkan 2-400 juta siklus untuk dibangun, namun terkadang mencapai 9,5 miliar siklus. (Pada awalnya, kami terkejut melihat bahwa perbedaan-perbedaan ini tidak tercermin dalam transaksi gas. Namun setelah memikirkannya lebih jauh, hal ini masuk akal: sistem gas dirancang dengan mempertimbangkan eksekusi reguler, bukan bukti ZK).
Dengan kontinuitas, skala ini mudah dikelola. Menurut angka-angka ini, jaringan peer-to-peer yang terdiri dari 10.000 node yang menjalankan validator zkVM sudah cukup untuk mencapai kinerja validasi paralel tertinggi untuk blok terbesar, yang merupakan sebagian kecil dari 700.000 validator yang dimiliki Ethereum saat ini.
**Berapa lama waktu yang dibutuhkan untuk menghasilkan bukti? **
Untuk mengumpulkan beberapa data kinerja dasar, kami meluncurkan mesin uji Bonsai dengan 64 Pekerja GPU. Kami kemudian memintanya untuk membuktikan pemblokiran 17735424 (182 transaksi, 3242 segmen, atau sekitar 3,4 miliar siklus) menggunakan Zeth.
Untuk menghasilkan bukti, zkVM harus terlebih dahulu membagi eksekusi menjadi beberapa segmen. Pada tangkapan layar di bawah, proses ini ditangkap oleh tugas utor, yang berjalan selama 10 menit. (Sebagian besar waktunya adalah melakukan hal-hal AWS seperti menulis ke penyimpanan jaringan). Di mesin lokal, tugas yang sama membutuhkan waktu kurang dari 6 menit untuk diselesaikan. Kami berharap dapat mengurangi waktu ini secara signifikan pada tahun depan).
Eksekutor akhirnya membagi eksekusi menjadi 3242 buah. Itu banyak fragmentasi hanya untuk 64 GPU. Oleh karena itu, setiap node pekerja harus menghasilkan 50 bukti segmen. Seperti yang ditunjukkan pada gambar di bawah, waktu yang dibutuhkan adalah 35 menit. Jika kita memiliki node pekerja 50 kali lebih banyak, itu hanya membutuhkan waktu 42 detik.
Setelah pembuktian segmen selesai, rollup dimulai. Karena ada 3242 segmen, kita perlu melakukan proses rollup log_2(3242) = 12 putaran. Pada tahap awal rollup, jumlah pekerja lebih banyak daripada pekerja; jadi tahap pertama memerlukan waktu 1 menit, tahap kedua memerlukan waktu 35 detik, tahap ketiga memerlukan waktu 25 detik, dan seterusnya. Pada tahap ketujuh, waktu stabil hanya dalam 5 detik. Begitu pula jika kita memiliki lebih banyak pekerja, setiap tahapan hanya membutuhkan waktu 5 detik.
Setelah rollup selesai, hasilnya diselesaikan, yang memerlukan waktu satu menit lagi.
Hasilnya, kami dapat menghasilkan bukti dalam waktu sekitar 50 menit (kecepatan efektif 1,1 MHz) dengan ukuran cluster yang tidak mencukupi. Jika cluster berukuran tepat, kami memperkirakan pembuatan bukti akan lebih cepat:
Dalam kasus yang diparalelkan penuh, langkah pembuktian dapat diselesaikan dalam 42 + 12 * 5 + 60 detik atau 2 menit 42 detik.
Jika kita membulatkan secara konservatif dan memasukkan waktu pelaksana, maka waktunya berkisar antara 9 dan 12 menit (kecepatan efektif 4,7 MHz - 6,3 MHz).
Seiring kami terus meningkatkan pelaksana dan kerangka pembuktian, kami optimis bahwa waktu tersebut akan berkurang secara signifikan pada tahun depan.
Konsumsi sumber daya untuk menghasilkan bukti
Klaster pengujian di atas telah diterapkan ke AWS. Ini terdiri dari 64 node bukti g5.xlarge dan 1 node eksekusi m5zn.xlarge. Menurut Amazon, setiap node g5.xlarge memilikinya
1 GPU dengan memori GPU 24 GiB
4 vCPU dengan kapasitas memori 16 GiB
Saat tulisan ini dibuat, harga Sesuai Permintaan untuk instans ini adalah $1,006/jam, dan Instans Cadangan adalah $0,402/jam. Sementara itu, lembar spesifikasi Amazon menunjukkan bahwa node m5zn.xlarge kami memilikinya
4 vCPU, RAM 16GB
Pada tulisan ini, harga Sesuai Permintaan untuk instance ini adalah $0,3303/jam.
Kita dapat menggunakan angka-angka ini untuk memperkirakan secara kasar biaya pembuktian untuk blok 17735424 yang dijelaskan di atas.
Ingatlah bahwa kami menerapkan 64 node bukti dan dalam penerapan ini diperlukan waktu 50 menit (end-to-end) untuk menghasilkan bukti. Mengabaikan waktu pekerja menganggur, 64 node bukti ditambah satu node eksekusi dikenakan biaya 50/60 * (64 * 0,402 + 0,3303) = $21,72 selama 50 menit. Perkiraan ini terlalu berlebihan karena mengasumsikan kita membayar pekerja yang menganggur. Jika kita tidak memperhitungkan biaya pekerja yang menganggur (misalnya, memberhentikan mereka atau mempekerjakan mereka di pekerjaan lain), biayanya sekitar $19,61.
Blok ini memiliki 182 transaksi, atau $0,11 per transaksi.
Nilai total transaksi adalah 1.125045057 Eth, atau sekitar $2137.59. Jadi, setiap $1 bukti menghasilkan $109,01 dana pengguna.
Hadiah yang dibayarkan untuk blok yang sama adalah 0,117623263003047027 Eth (tidak termasuk biaya transaksi). Pada saat penulisan, itu sekitar $223,48. Oleh karena itu, biaya bukti kami sekitar 8,7% dari hadiah blok.
Biaya transaksi berjumlah 0,03277635 Eth, atau $62,28, lebih dari 3x biaya bukti kami.
Perlu dicatat bahwa perkiraan dolar ini tidak bergantung pada ukuran cluster! Yang penting adalah jumlah segmennya. Hal ini disebabkan karena 1 mesin melakukan 2 pekerjaan secara berurutan biayanya sama dengan 2 mesin yang melakukan 1 pekerjaan secara paralel. Oleh karena itu, jika ukuran cluster lebih besar, pembuktian akan dihasilkan lebih cepat, namun tidak lebih mahal.
Ada beberapa cara untuk lebih mengurangi biaya. Selain terus meningkatkan kinerja zkVM, mungkin menambahkan akselerator Keccak, kita juga bisa mencari contoh yang lebih murah. Yang penting, mengingat mesin berspesifikasi rendah yang kami gunakan (dan zkVM kami mendukung nVidia Cuda dan Apple Metal), pekerjaan ini dapat dengan mudah dilakukan melalui jaringan p2p pada PC konsumen biasa dan Mac.
Verifikasi On-Chain
Seperti disebutkan di atas, kami memverifikasi bukti Zeth di Sepolia menggunakan validator RISC Zero Groth16. Ini adalah bagian yang relatif baru dari tumpukan protokol RISC Zero, yang dirilis awal bulan ini. Ia bekerja dengan menggunakan Bonsai untuk mengubah bukti STARK asli zkVM menjadi bukti SNARK yang setara, dan mengirimkan bukti tersebut ke validator SNARK on-chain.
Jika kita melihat input transaksi sebagai data UTF-8, kita melihat bahwa buktinya sesuai dengan blok 17735424.
Menggunakan Bonsai, konversi dari STARK ke SNARK membutuhkan waktu sekitar 40 detik. Memverifikasi SNARK on-chain membutuhkan biaya 245,129 bahan bakar (~$5,90 pada saat penulisan).
Tentu saja, salah satu keunggulan zkVM adalah ia dapat menggabungkan banyak bukti menjadi satu. Dengan fungsi ini, seluruh rangkaian bukti dapat diverifikasi secara on-chain tanpa menggunakan bahan bakar tambahan. Dengan cara ini, biaya verifikasi on-chain dapat disebar ke seluruh rangkaian bukti, sehingga mengurangi biaya untuk semua orang.
Apa artinya ini bagi Ethereum
Seperti disebutkan sebelumnya, Ethereum tidak dirancang dengan mempertimbangkan keramahan ZK. Seperti yang ditunjukkan pada kasus zkEVMs, ada banyak hal yang dapat dilakukan dengan berbagai cara, terutama terkait opcode, tanda tangan digital, dan fungsi hash.
Meskipun perubahan ini memang meningkatkan kinerja, kami masih dapat mencapai kinerja yang solid tanpa perubahan ini. Ketika Vitalik menulis tentang berbagai jenis zkEVM tahun lalu, dibutuhkan waktu berjam-jam untuk membuktikan validitas blok Ethereum; sekarang, kita dapat melakukannya dalam hitungan menit. Kinerja ZK meningkat pesat, dan kami yakin tren ini akan terus berlanjut dalam beberapa tahun mendatang.
Lampiran: Cara kerja Zeth
Bagian ini untuk pengembang.
Secara kasar, Zeth membangun blok dengan cara yang sama seperti node penuh: kita mulai dengan blok induk, daftar transaksi, dan pembuat blok, kemudian melakukan banyak perhitungan (verifikasi tanda tangan, jalankan transaksi, perbarui status global, dll.), dan terakhir mengembalikan nilai hash blok baru.
Namun tidak seperti node penuh, kami melakukan ini di zkVM. Ini berarti kita mendapatkan bukti ZK bahwa blok dengan hash yang diberikan adalah valid.
Tentu saja hal ini bukannya tanpa tantangan. Pada bagian ini, kami memperkenalkan tantangan-tantangan ini dan cara kami mengatasinya.
Kriptografi
Tantangan pertama adalah kriptografi. Membangun blok Ethereum memerlukan banyak pekerjaan, yang paling penting adalah hashing (Keccak-256) dan verifikasi tanda tangan (ECDSA dan secp256k1).
ZkVM kami telah mempercepat dukungan untuk kurva elips, sehingga verifikasi tanda tangan ECDSA tidaklah sulit.
Namun dalam hal hashing, kami tidak seberuntung itu. ZkVM kami telah mempercepat dukungan untuk Sha2-256, tetapi tidak (pada saat penulisan) Keccak-256. Oleh karena itu, saat ini kami hanya menggunakan implementasi Keccak di peti sha3 Rust. Melalui pembuatan profil, kami mengetahui bahwa hal ini memerlukan banyak siklus. Memang belum maksimal, tapi zkVM kita bisa mengatasinya, dan kita bisa mendaur ulang serta menambahkan akselerator Keccak nanti.
Akun dan Penyimpanan: Kinerja dan Keamanan
Di Ethereum, akun dan penyimpanan dilacak oleh Merkle Patricia Trie (MPT) global.
Pada saat penulisan, pohon tersebut berisi hampir 250.000.000 alamat Ethereum unik, menurut Etherscan. Jumlah data tersebut secara keseluruhan bukanlah jumlah yang besar, namun cukup untuk membuat kita berhati-hati dalam menyimpan dan menggunakannya. Secara khusus, kinerja MPT sangatlah penting.
Namun performa bukan satu-satunya faktor, kita juga harus mempertimbangkan keamanan.
Generator blok Zeth berjalan sebagai klien di zkVM. Artinya, ia tidak dapat mengakses langsung jaringan p2p Ethereum atau penyedia RPC lainnya. Sebaliknya, ia harus bergantung pada data yang disediakan oleh program terpisah yang berjalan di luar zkVM.
Saat menganalisis keamanan aplikasi ZK, kita harus berasumsi bahwa program eksternal berbahaya dan karenanya mungkin menyajikan data berbahaya. Untuk mencegah hal ini, aplikasi ZK harus memverifikasi bahwa data yang diberikan valid.
Untuk generator blok Zeth, ini berarti memverifikasi status semua akun dan penyimpanan yang relevan (yaitu akun dan penyimpanan yang diperlukan untuk menjalankan daftar transaksi tertentu).
Untungnya, mekanisme tersebut disediakan oleh EIP-1186, yang mendefinisikan cara standar untuk membuktikan status akun tertentu (dan penyimpanannya) melalui penyertaan Merkle.
Pada prinsipnya, generator blok Zeth dapat memverifikasi akun dan status penyimpanan dengan memverifikasi serangkaian bukti penyertaan EIP-1186. Namun pendekatan ini tidak ideal.
Sebaliknya, lebih baik menggunakan data dalam bukti inklusi EIP-1186 untuk membuat MPT parsial. Ini adalah jenis MPT yang hanya menyertakan node yang relevan dengan daftar transaksi tertentu; cabang yang tidak terkait hanya diwakili dengan hash yang sesuai. Anda dapat menganggap MPT parsial sebagai semacam "gabungan" dari bukti inklusi Merkle; atau, jika Anda mau, sebagai bukti subset Merkle.
Proses memverifikasi sebagian MPT pada dasarnya sama dengan memverifikasi bukti EIP-1186 normal: hash root dihitung dan dibandingkan dengan root status blok induk. Jika keduanya setara, integritas akun dan penyimpanan di dalamnya dapat dipercaya.
Setelah sebagian MPT diverifikasi, transaksi dapat diterapkan dan sebagian MPT diperbarui. State root baru dapat diperoleh dengan menghitung nilai hash root baru dari parsial MPT.
Sebelum menjalankan generator blok Zeth, kami menjalankan daftar transaksi di kotak pasir untuk menentukan akun dan penyimpanan mana yang relevan. (Proses ini juga memungkinkan kita untuk menentukan blok pendahulu terkait terlama, yang diperlukan untuk mendukung kueri blockhash()).
Kami memperoleh bukti penyertaan EIP-1186 untuk setiap akun dan penyimpanan yang relevan. (Kami juga mendapatkan blok pendahulunya yang relevan).
Kami menggunakan bukti inklusi ini untuk membuat sebagian MPT yang mencakup semua data relevan.
Kita memulai zkVM, membiarkannya menjalankan generator blok Zeth, dan menyediakan beberapa MPT dan input lainnya (blok induk, daftar transaksi, dll.).
Di zkVM, generator blok Zeth:
Verifikasi bahwa akar MPT parsial cocok dengan akar status blok induk.
Verifikasi rantai hash dari blok sebelumnya hingga blok induk.
Transaksi aplikasi.
Perbarui beberapa MPT.
Gunakan hash root baru dari sebagian MPT sebagai root status blok baru.
Setelah generator blok Zeth selesai, ia akan menampilkan nilai hash dari blok baru.
Hash ini mencakup komitmen terhadap blok induk, dan dengan demikian akar status dari blok induk (digunakan untuk memverifikasi sebagian MPT asli). Artinya, validator jahat tidak dapat menyediakan akun dan penyimpanan dengan data yang tidak valid tanpa memberikan blok induk yang tidak valid.
Dengan kata lain: jika blok induk valid, maka blok baru yang dihasilkan oleh Zeth juga valid.
Jadi jika seseorang memberi Anda blok baru dan bukti ZK yang dihasilkan oleh Zeth, Anda dapat memeriksa validitas blok tersebut dengan memeriksa tiga hal berikut:
Pastikan bukti ZK valid dan dari Zeth. Untuk aplikasi off-chain, fungsi yang disediakan oleh zkVM Rust crate dapat digunakan untuk inspeksi. Untuk aplikasi on-chain, hal ini dapat diperiksa menggunakan validator bukti on-chain kami.
Pastikan ZK membuktikan bahwa hash dari blok baru telah dilakukan.
Pastikan blok induk memiliki hash yang Anda harapkan.
Jika ini berhasil, maka blok baru tersebut valid.
Keterbatasan dan Peningkatan di Masa Depan
Tujuan dari proyek kami adalah untuk mempelajari kinerja konstruksi blok. Karena alasan ini, kami memutuskan untuk membatasi cakupan pada blok gabungan.
Selain itu, meskipun Zeth dapat membuktikan bahwa blok tertentu valid, saat ini Zeth tidak dapat membuktikan konsensus (yaitu bahwa blok tersebut memang termasuk dalam rantai kanonik). Ini mungkin berubah di masa depan, mungkin dengan menambahkan pemeriksaan untuk validator atau tanda tangan komite sinkronisasi di zkVM.
Terakhir, Zeth adalah perangkat lunak baru. Meskipun kami telah melakukan beberapa pengujian (termasuk rangkaian pengujian Ethereum dan berbagai blok dunia nyata), Zeth mungkin masih mengandung beberapa bug. Pada tulisan ini, ini harus dianggap sebagai perangkat lunak eksperimental.
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Penjelasan mendetail tentang validator blok Ethereum Zeth: zkEVM Tipe 0 pertama
Judul asli: Mengumumkan Zeth: zkEVM Tipe Nol pertama
作者:Tim Cartens, Victor Graf, Rami Khalil, Steven Li, Parker Thompson, Wolfgang Welz, Zeth Collaboration
Membangun: bayemon.eth, ChainCatcher
Pada tanggal 25 Agustus, Zeth, validator blok ZK sumber terbuka Ethereum berdasarkan RISC Zero zkVM, dirilis ke publik. Zeth melakukan semua pekerjaan yang diperlukan untuk membangun blok baru di zkVM tanpa bergantung pada validator atau komite sinkronisasi. Zeth telah diverifikasi di beberapa blok nyata dari mainnet Ethereum dan telah lulus semua pengujian yang relevan dari rangkaian pengujian resmi Ethereum. Zeth mampu mengimplementasikan dukungan Rust berbasis zkVM dan papan yang kuat termasuk revm, ethers, dan alloy dalam waktu 4 minggu. Dengan dukungan zkVM untuk layanan kontinuitas dan bukti Bonsai, Zeth dapat menghasilkan bukti ini dalam hitungan menit. Dengan dukungan Zeth untuk verifikasi on-chain, siapa pun dapat memverifikasi bukti-bukti ini secara on-chain dengan biaya rendah. Dalam postingan ini, kami akan membahas lebih detail, tetapi jika Anda ingin menggali lebih dalam kodenya, lihat kode sumbernya dan kunjungi portal pengembang RISC Zero.
Ringkasan
Sekitar setahun yang lalu, Vitalik menguraikan berbagai jenis zkEVM:
Meskipun ada beberapa kasus dalam sejarah Ethereum yang memungkinkan hal ini terjadi, hari ini kami dengan gembira mengumumkan bahwa pembuktian blok Ethereum menggunakan layanan zkVM dan Bonsai RISC Zero memerlukan waktu beberapa menit, bukan jam.
Zeth: Pembuatan blok Ethereum yang dapat diverifikasi
Hari ini kami merilis Zeth, validator blok ZK sumber terbuka untuk Ethereum di RISC Zero zkVM.
Zeth dapat membuktikan bahwa blok Ethereum tertentu valid tanpa bergantung pada validator atau komite sinkronisasi. Ini karena Zeth melakukan semua pekerjaan yang diperlukan untuk menghasilkan blok baru di zkVM, termasuk:
Setelah blok baru dibuat, Zeth menghitung dan mengeluarkan hashnya. Dengan menjalankan proses ini di zkVM, kita bisa mendapatkan bukti ZK bahwa blok baru itu valid.
Dengan memanfaatkan zkVM RISC Zero dan peti Rust populer seperti revm, ether, dan alloy, kami menulis versi pertama Zeth dalam waktu kurang dari 4 minggu. Dengan dukungan zkVM untuk kontinuitas dan layanan bukti Bonsai, pembuatan bukti dapat dilakukan hanya dalam hitungan menit. Dengan dukungan untuk verifikasi on-chain, kami dapat memverifikasi bukti-bukti ini secara on-chain dengan biaya rendah.
Zeth telah diverifikasi di beberapa blok nyata dari mainnet Ethereum dan telah lulus semua pengujian yang relevan dari rangkaian pengujian resmi Ethereum.
Karena Zeth membangun blok Ethereum standar, ini dapat dianggap sebagai zkEVM tipe 1. Namun lebih dari itu: karena Zeth dibuat menggunakan papan kode Rust standar (papan kode yang sama yang digunakan oleh node penuh populer seperti Reth), kami lebih suka menganggapnya sebagai zkEVM kelas 0: kompatibilitas penuh dengan Protokol, dan banyak penggunaan ulang kode . **
Pencapaian ini mewakili langkah maju yang besar bagi teknologi ZK dan ekosistem Ethereum. Dalam postingan kali ini, kami membahas cara menulis Zeth versi pertama dalam beberapa minggu, kinerjanya, cara kerjanya, dan apa artinya bagi proyek ZK.
RISC Zero mempermudah pembuatan zk rollup, zkEVM, klien ringan, dan bridge
Kami menulis Zeth karena dua alasan:
pembatalan zk dan zkEVM
Sebagai zkEVM Tipe 0, Zeth memungkinkan pengembang membuat zk rollup dengan kompatibilitas EVM dan Ethereum yang sepenuhnya asli. Ditambah dengan dukungan Zeth untuk verifikasi bukti on-chain, membangun solusi ekspansi L2 berbasis ZK akan menjadi sangat sederhana.
Rollup ZK dan sirkuit zkEVM yang ada memiliki desain monolitik dan tidak dapat ditingkatkan tanpa pengembang memiliki pemahaman tingkat tinggi tentang kriptografi ZK. Sebaliknya, pendekatan Zeth berbasis zkVM memungkinkan pengembang mana pun untuk menyesuaikan dan memodifikasinya sesuai kebutuhan mereka.
Zeth adalah open source berdasarkan revm, dan penyesuaian untuk mendukung rantai lain yang kompatibel dengan zkEVM dan EVM adalah tugas yang relatif mudah. Oleh karena itu, Zeth akan memiliki respons yang relatif lebih cepat terhadap pembaruan EIP di masa mendatang. Selain itu, Zeth juga menyediakan modularitas, memungkinkan pengembang membangun logika pembangunan blok mereka sendiri di dalamnya.
Kami berharap upaya Zeth akan mendemokratisasi zk rollup dan zkEVM, mengingat bahwa solusi L2 yang digerakkan oleh zk sebelumnya memerlukan penelitian dan pengembangan selama bertahun-tahun dan pendanaan lebih dari 100 juta dolar AS, yang merupakan konsumsi yang tidak mampu ditanggung oleh sebagian besar proyek.
Klien ringan dan jembatan
Tidak ada keraguan bahwa pengenalan rantai suar merupakan keuntungan bagi klien ringan dan jembatan. Teknik-teknik ini dibangun berdasarkan model PoS Ethereum yang kini sudah matang, memungkinkan klien ringan dan jembatan untuk dengan mudah memverifikasi blok terbaru tanpa membangunnya kembali, asalkan semua orang mematuhi aturan.
Tentu saja, inti dari staking adalah untuk memberikan insentif ekonomi bagi node agar mengikuti aturan. Namun, ancaman yang ditimbulkan oleh Slashing pada node tidak dapat sepenuhnya menghindari kejahatan-insentif eksternal akan selalu memiringkan "keseimbangan" kepentingan ke arah kejahatan--dan sangat penting untuk merancang klien ringan atau jembatan yang dapat menangani perilaku jahat ini dengan baik. keras.
Dengan alat seperti Zeth, risiko node melakukan kejahatan sangat berkurang. Klien ringan dapat berintegrasi dengan Zeth hanya dengan menambahkan beberapa info ke zkVM; aplikasi on-chain seperti bridge dapat berintegrasi dengan Zeth menggunakan kontrak verifikasi bukti-bukti on-chain kami.
Dalam waktu dekat, kita dapat membayangkan klien ringan dan jembatan menggunakan bukti ZK untuk menentukan apakah blok tertentu valid. Pendekatan ini akan sangat mengurangi risiko tanpa meningkatkan biaya validasi blok secara signifikan.
Hal ini sangat penting terutama untuk rantai aplikasi, ekosistem modular, dan rantai baru yang belum memiliki tingkat keamanan yang sama dengan yang disediakan oleh komunitas full node besar Ethereum.
Landasan yang baik menyederhanakan proses pengembangan proyek
Berdasarkan RISC Zero zkVM dan didukung oleh arsitektur set instruksi RISC-V, Zeth dapat memberikan pengalaman pemrograman yang familiar bagi pengembang. Namun zkVM kami lebih dari sekedar inti RISC-V. Kami juga memiliki sirkuit akselerasi untuk tugas kriptografi umum seperti hashing dan verifikasi tanda tangan.
Pendekatan hibrid ini (kombinasi inti CPU tujuan umum dengan sirkuit akselerasi) memberi kita yang terbaik dari kedua hal tersebut:
Hasilnya, kami dapat dengan cepat membangun Zeth menggunakan paket kode Rust yang ada dari revm, ether, dan alloy. Dengan menggunakan kembali papan yang ada, kami menyelesaikan Zeth versi pertama dalam waktu kurang dari 4 minggu. Kecepatan seperti ini tidak mungkin terjadi pada ekosistem yang kurang matang.
Dalam hal kinerja, Zeth memanfaatkan sirkuit akselerator kami untuk verifikasi tanda tangan ECDSA serta Kontinuitas - fitur baru kerangka ZK kami yang memudahkan penggunaan cluster GPU yang bekerja secara paralel (menggunakan nVidia CUDA atau Apple Metal) untuk membuktikan ukuran besar dengan cepat perhitungan. Lanjutannya mudah digunakan: fungsionalitas ini disediakan secara transparan untuk semua program tamu yang berjalan di zkVM, yaitu tidak diperlukan modifikasi kode agar dapat berfungsi dengan baik.
Dengan zkVM kami, kami dapat dengan cepat menghasilkan bukti ZK validitas blok Ethereum dalam hitungan menit, bukan jam.
Pertunjukan
Kami akan membahas kinerja generator blok Zeth. Zeth masih merupakan produk baru, jadi angka-angka ini dapat berubah; namun, kami ingin memberikan beberapa angka konkret sebagai dasar untuk pekerjaan di masa depan.
Terkait kinerja, ada beberapa faktor yang perlu dipertimbangkan:
Kontinuitas
ZkVM Zeth dapat disetel kinerjanya dengan menggunakan pengoperasian berkelanjutan. Jadi kita perlu berhenti sejenak dan mendiskusikan cara kerja "operasi berkelanjutan".
ZkVM kami mengimplementasikan prosesor RISC-V standar. Oleh karena itu, eksekusi diukur dalam siklus. (Di sirkuit kami, sebagian besar instruksi RISC-V dijalankan dalam 1 siklus, meskipun ada pengecualian). Program sederhana biasanya hanya memerlukan beberapa ratus ribu siklus untuk dijalankan, namun program yang lebih kompleks mungkin memerlukan miliaran siklus.
Dalam sistem ZK pada umumnya, siklus eksekusi ini dikumpulkan menjadi sebuah bukti; seiring bertambahnya jumlah siklus, waktu dan memori yang dibutuhkan untuk menghasilkan bukti juga meningkat. Namun zkVM kami tidak mengikuti stereotip ini, dan awal tahun ini kami memelopori fitur kontinuitas baru yang memperbaiki kelemahan pembuatan skema bukti tradisional.
Dari segi kontinuitas, proses pembuktian dibagi menjadi tiga tahap:
Kami melakukan perhitungan yang diperlukan dalam simulator non-bukti. Sepanjang prosesnya, kami menghitung berapa kali perulangan telah berjalan sejauh ini. Pada interval yang dapat dikonfigurasi, kami mengambil cuplikan status program. Ini secara efektif membagi eksekusi menjadi beberapa bagian. Setiap segmen berukuran kecil, biasanya mewakili 1 juta siklus atau kurang.
Potongan-potongan ini ditugaskan ke sekumpulan pekerja pembuat bukti. Mereka menghasilkan bukti ZK untuk segmen program tertentu. Yang penting, mereka dapat melakukan hal ini secara paralel. Selama jumlah pekerja cukup, semua segmen program dapat dibuktikan dalam waktu yang dibutuhkan untuk membuktikan satu segmen program. Karena ukuran segmen jaringan yang kecil, waktu yang dibutuhkan biasanya singkat (puluhan detik).
Saat bukti segmen dihasilkan, segmen tersebut pada akhirnya akan digabungkan. Setiap operasi "rollup" mengambil sepasang bukti tersegmentasi secara berurutan dan menghasilkan bukti baru untuk kombinasi segmen tersebut. Misalnya, jika segmen 1 membuktikan bahwa program bertransisi dari keadaan A ke keadaan B, dan segmen 2 membuktikan bahwa program tersebut bertransisi dari keadaan B ke keadaan C, maka rollup membuktikan bahwa program tersebut bertransisi dari keadaan A ke keadaan C. Dengan pekerja yang cukup, hal ini dapat dilakukan dalam waktu log(N), dimana N adalah jumlah fragmen.
Kita akan melihat tahapan-tahapan ini saat kita menggali angka-angkanya.
**Seberapa sulitkah membangun blok Ethereum? **
Pertama, mari kita lihat kompleksitas pembuatan blok Ethereum. Pada tabel di bawah, kami mengambil beberapa blok Ethereum dunia nyata dan merekonstruksinya menggunakan Zeth di zkVM.
Misalnya, blok 17606771 menghasilkan 2131 luasan. Setiap segmen mewakili paling banyak 2^20 siklus eksekusi, sehingga seluruh komputasi memerlukan paling banyak 2.234.515.456 siklus eksekusi.
Secara umum, kita melihat blok Ethereum pada umumnya membutuhkan 2-400 juta siklus untuk dibangun, namun terkadang mencapai 9,5 miliar siklus. (Pada awalnya, kami terkejut melihat bahwa perbedaan-perbedaan ini tidak tercermin dalam transaksi gas. Namun setelah memikirkannya lebih jauh, hal ini masuk akal: sistem gas dirancang dengan mempertimbangkan eksekusi reguler, bukan bukti ZK).
Dengan kontinuitas, skala ini mudah dikelola. Menurut angka-angka ini, jaringan peer-to-peer yang terdiri dari 10.000 node yang menjalankan validator zkVM sudah cukup untuk mencapai kinerja validasi paralel tertinggi untuk blok terbesar, yang merupakan sebagian kecil dari 700.000 validator yang dimiliki Ethereum saat ini.
**Berapa lama waktu yang dibutuhkan untuk menghasilkan bukti? **
Untuk mengumpulkan beberapa data kinerja dasar, kami meluncurkan mesin uji Bonsai dengan 64 Pekerja GPU. Kami kemudian memintanya untuk membuktikan pemblokiran 17735424 (182 transaksi, 3242 segmen, atau sekitar 3,4 miliar siklus) menggunakan Zeth.
Untuk menghasilkan bukti, zkVM harus terlebih dahulu membagi eksekusi menjadi beberapa segmen. Pada tangkapan layar di bawah, proses ini ditangkap oleh tugas utor, yang berjalan selama 10 menit. (Sebagian besar waktunya adalah melakukan hal-hal AWS seperti menulis ke penyimpanan jaringan). Di mesin lokal, tugas yang sama membutuhkan waktu kurang dari 6 menit untuk diselesaikan. Kami berharap dapat mengurangi waktu ini secara signifikan pada tahun depan).
Eksekutor akhirnya membagi eksekusi menjadi 3242 buah. Itu banyak fragmentasi hanya untuk 64 GPU. Oleh karena itu, setiap node pekerja harus menghasilkan 50 bukti segmen. Seperti yang ditunjukkan pada gambar di bawah, waktu yang dibutuhkan adalah 35 menit. Jika kita memiliki node pekerja 50 kali lebih banyak, itu hanya membutuhkan waktu 42 detik.
Setelah pembuktian segmen selesai, rollup dimulai. Karena ada 3242 segmen, kita perlu melakukan proses rollup log_2(3242) = 12 putaran. Pada tahap awal rollup, jumlah pekerja lebih banyak daripada pekerja; jadi tahap pertama memerlukan waktu 1 menit, tahap kedua memerlukan waktu 35 detik, tahap ketiga memerlukan waktu 25 detik, dan seterusnya. Pada tahap ketujuh, waktu stabil hanya dalam 5 detik. Begitu pula jika kita memiliki lebih banyak pekerja, setiap tahapan hanya membutuhkan waktu 5 detik.
Setelah rollup selesai, hasilnya diselesaikan, yang memerlukan waktu satu menit lagi.
Hasilnya, kami dapat menghasilkan bukti dalam waktu sekitar 50 menit (kecepatan efektif 1,1 MHz) dengan ukuran cluster yang tidak mencukupi. Jika cluster berukuran tepat, kami memperkirakan pembuatan bukti akan lebih cepat:
Dalam kasus yang diparalelkan penuh, langkah pembuktian dapat diselesaikan dalam 42 + 12 * 5 + 60 detik atau 2 menit 42 detik.
Jika kita membulatkan secara konservatif dan memasukkan waktu pelaksana, maka waktunya berkisar antara 9 dan 12 menit (kecepatan efektif 4,7 MHz - 6,3 MHz).
Seiring kami terus meningkatkan pelaksana dan kerangka pembuktian, kami optimis bahwa waktu tersebut akan berkurang secara signifikan pada tahun depan.
Konsumsi sumber daya untuk menghasilkan bukti
Klaster pengujian di atas telah diterapkan ke AWS. Ini terdiri dari 64 node bukti g5.xlarge dan 1 node eksekusi m5zn.xlarge. Menurut Amazon, setiap node g5.xlarge memilikinya
Saat tulisan ini dibuat, harga Sesuai Permintaan untuk instans ini adalah $1,006/jam, dan Instans Cadangan adalah $0,402/jam. Sementara itu, lembar spesifikasi Amazon menunjukkan bahwa node m5zn.xlarge kami memilikinya
Pada tulisan ini, harga Sesuai Permintaan untuk instance ini adalah $0,3303/jam.
Kita dapat menggunakan angka-angka ini untuk memperkirakan secara kasar biaya pembuktian untuk blok 17735424 yang dijelaskan di atas.
Ingatlah bahwa kami menerapkan 64 node bukti dan dalam penerapan ini diperlukan waktu 50 menit (end-to-end) untuk menghasilkan bukti. Mengabaikan waktu pekerja menganggur, 64 node bukti ditambah satu node eksekusi dikenakan biaya 50/60 * (64 * 0,402 + 0,3303) = $21,72 selama 50 menit. Perkiraan ini terlalu berlebihan karena mengasumsikan kita membayar pekerja yang menganggur. Jika kita tidak memperhitungkan biaya pekerja yang menganggur (misalnya, memberhentikan mereka atau mempekerjakan mereka di pekerjaan lain), biayanya sekitar $19,61.
Perlu dicatat bahwa perkiraan dolar ini tidak bergantung pada ukuran cluster! Yang penting adalah jumlah segmennya. Hal ini disebabkan karena 1 mesin melakukan 2 pekerjaan secara berurutan biayanya sama dengan 2 mesin yang melakukan 1 pekerjaan secara paralel. Oleh karena itu, jika ukuran cluster lebih besar, pembuktian akan dihasilkan lebih cepat, namun tidak lebih mahal.
Ada beberapa cara untuk lebih mengurangi biaya. Selain terus meningkatkan kinerja zkVM, mungkin menambahkan akselerator Keccak, kita juga bisa mencari contoh yang lebih murah. Yang penting, mengingat mesin berspesifikasi rendah yang kami gunakan (dan zkVM kami mendukung nVidia Cuda dan Apple Metal), pekerjaan ini dapat dengan mudah dilakukan melalui jaringan p2p pada PC konsumen biasa dan Mac.
Verifikasi On-Chain
Seperti disebutkan di atas, kami memverifikasi bukti Zeth di Sepolia menggunakan validator RISC Zero Groth16. Ini adalah bagian yang relatif baru dari tumpukan protokol RISC Zero, yang dirilis awal bulan ini. Ia bekerja dengan menggunakan Bonsai untuk mengubah bukti STARK asli zkVM menjadi bukti SNARK yang setara, dan mengirimkan bukti tersebut ke validator SNARK on-chain.
Jika kita melihat input transaksi sebagai data UTF-8, kita melihat bahwa buktinya sesuai dengan blok 17735424.
Menggunakan Bonsai, konversi dari STARK ke SNARK membutuhkan waktu sekitar 40 detik. Memverifikasi SNARK on-chain membutuhkan biaya 245,129 bahan bakar (~$5,90 pada saat penulisan).
Tentu saja, salah satu keunggulan zkVM adalah ia dapat menggabungkan banyak bukti menjadi satu. Dengan fungsi ini, seluruh rangkaian bukti dapat diverifikasi secara on-chain tanpa menggunakan bahan bakar tambahan. Dengan cara ini, biaya verifikasi on-chain dapat disebar ke seluruh rangkaian bukti, sehingga mengurangi biaya untuk semua orang.
Apa artinya ini bagi Ethereum
Seperti disebutkan sebelumnya, Ethereum tidak dirancang dengan mempertimbangkan keramahan ZK. Seperti yang ditunjukkan pada kasus zkEVMs, ada banyak hal yang dapat dilakukan dengan berbagai cara, terutama terkait opcode, tanda tangan digital, dan fungsi hash.
Meskipun perubahan ini memang meningkatkan kinerja, kami masih dapat mencapai kinerja yang solid tanpa perubahan ini. Ketika Vitalik menulis tentang berbagai jenis zkEVM tahun lalu, dibutuhkan waktu berjam-jam untuk membuktikan validitas blok Ethereum; sekarang, kita dapat melakukannya dalam hitungan menit. Kinerja ZK meningkat pesat, dan kami yakin tren ini akan terus berlanjut dalam beberapa tahun mendatang.
Lampiran: Cara kerja Zeth
Bagian ini untuk pengembang.
Secara kasar, Zeth membangun blok dengan cara yang sama seperti node penuh: kita mulai dengan blok induk, daftar transaksi, dan pembuat blok, kemudian melakukan banyak perhitungan (verifikasi tanda tangan, jalankan transaksi, perbarui status global, dll.), dan terakhir mengembalikan nilai hash blok baru.
Namun tidak seperti node penuh, kami melakukan ini di zkVM. Ini berarti kita mendapatkan bukti ZK bahwa blok dengan hash yang diberikan adalah valid.
Tentu saja hal ini bukannya tanpa tantangan. Pada bagian ini, kami memperkenalkan tantangan-tantangan ini dan cara kami mengatasinya.
Kriptografi
Tantangan pertama adalah kriptografi. Membangun blok Ethereum memerlukan banyak pekerjaan, yang paling penting adalah hashing (Keccak-256) dan verifikasi tanda tangan (ECDSA dan secp256k1).
ZkVM kami telah mempercepat dukungan untuk kurva elips, sehingga verifikasi tanda tangan ECDSA tidaklah sulit.
Namun dalam hal hashing, kami tidak seberuntung itu. ZkVM kami telah mempercepat dukungan untuk Sha2-256, tetapi tidak (pada saat penulisan) Keccak-256. Oleh karena itu, saat ini kami hanya menggunakan implementasi Keccak di peti sha3 Rust. Melalui pembuatan profil, kami mengetahui bahwa hal ini memerlukan banyak siklus. Memang belum maksimal, tapi zkVM kita bisa mengatasinya, dan kita bisa mendaur ulang serta menambahkan akselerator Keccak nanti.
Akun dan Penyimpanan: Kinerja dan Keamanan
Di Ethereum, akun dan penyimpanan dilacak oleh Merkle Patricia Trie (MPT) global.
Pada saat penulisan, pohon tersebut berisi hampir 250.000.000 alamat Ethereum unik, menurut Etherscan. Jumlah data tersebut secara keseluruhan bukanlah jumlah yang besar, namun cukup untuk membuat kita berhati-hati dalam menyimpan dan menggunakannya. Secara khusus, kinerja MPT sangatlah penting.
Namun performa bukan satu-satunya faktor, kita juga harus mempertimbangkan keamanan.
Generator blok Zeth berjalan sebagai klien di zkVM. Artinya, ia tidak dapat mengakses langsung jaringan p2p Ethereum atau penyedia RPC lainnya. Sebaliknya, ia harus bergantung pada data yang disediakan oleh program terpisah yang berjalan di luar zkVM.
Saat menganalisis keamanan aplikasi ZK, kita harus berasumsi bahwa program eksternal berbahaya dan karenanya mungkin menyajikan data berbahaya. Untuk mencegah hal ini, aplikasi ZK harus memverifikasi bahwa data yang diberikan valid.
Untuk generator blok Zeth, ini berarti memverifikasi status semua akun dan penyimpanan yang relevan (yaitu akun dan penyimpanan yang diperlukan untuk menjalankan daftar transaksi tertentu).
Untungnya, mekanisme tersebut disediakan oleh EIP-1186, yang mendefinisikan cara standar untuk membuktikan status akun tertentu (dan penyimpanannya) melalui penyertaan Merkle.
Pada prinsipnya, generator blok Zeth dapat memverifikasi akun dan status penyimpanan dengan memverifikasi serangkaian bukti penyertaan EIP-1186. Namun pendekatan ini tidak ideal.
Sebaliknya, lebih baik menggunakan data dalam bukti inklusi EIP-1186 untuk membuat MPT parsial. Ini adalah jenis MPT yang hanya menyertakan node yang relevan dengan daftar transaksi tertentu; cabang yang tidak terkait hanya diwakili dengan hash yang sesuai. Anda dapat menganggap MPT parsial sebagai semacam "gabungan" dari bukti inklusi Merkle; atau, jika Anda mau, sebagai bukti subset Merkle.
Proses memverifikasi sebagian MPT pada dasarnya sama dengan memverifikasi bukti EIP-1186 normal: hash root dihitung dan dibandingkan dengan root status blok induk. Jika keduanya setara, integritas akun dan penyimpanan di dalamnya dapat dipercaya.
Setelah sebagian MPT diverifikasi, transaksi dapat diterapkan dan sebagian MPT diperbarui. State root baru dapat diperoleh dengan menghitung nilai hash root baru dari parsial MPT.
Di zkVM, generator blok Zeth:
Setelah generator blok Zeth selesai, ia akan menampilkan nilai hash dari blok baru.
Hash ini mencakup komitmen terhadap blok induk, dan dengan demikian akar status dari blok induk (digunakan untuk memverifikasi sebagian MPT asli). Artinya, validator jahat tidak dapat menyediakan akun dan penyimpanan dengan data yang tidak valid tanpa memberikan blok induk yang tidak valid.
Dengan kata lain: jika blok induk valid, maka blok baru yang dihasilkan oleh Zeth juga valid.
Jadi jika seseorang memberi Anda blok baru dan bukti ZK yang dihasilkan oleh Zeth, Anda dapat memeriksa validitas blok tersebut dengan memeriksa tiga hal berikut:
Jika ini berhasil, maka blok baru tersebut valid.
Keterbatasan dan Peningkatan di Masa Depan
Tujuan dari proyek kami adalah untuk mempelajari kinerja konstruksi blok. Karena alasan ini, kami memutuskan untuk membatasi cakupan pada blok gabungan.
Selain itu, meskipun Zeth dapat membuktikan bahwa blok tertentu valid, saat ini Zeth tidak dapat membuktikan konsensus (yaitu bahwa blok tersebut memang termasuk dalam rantai kanonik). Ini mungkin berubah di masa depan, mungkin dengan menambahkan pemeriksaan untuk validator atau tanda tangan komite sinkronisasi di zkVM.
Terakhir, Zeth adalah perangkat lunak baru. Meskipun kami telah melakukan beberapa pengujian (termasuk rangkaian pengujian Ethereum dan berbagai blok dunia nyata), Zeth mungkin masih mengandung beberapa bug. Pada tulisan ini, ini harus dianggap sebagai perangkat lunak eksperimental.