Kakarot: Menjelajahi Jalan yang Kompatibel dengan EVM Starknet

Penulis: Sinis

###TL;DR

  • Mesin virtual adalah sistem komputer yang disimulasikan perangkat lunak yang menyediakan lingkungan eksekusi untuk program. Itu dapat meniru berbagai perangkat keras, sehingga program dapat berjalan di lingkungan yang terkontrol dan kompatibel. Mesin Virtual Ethereum (EVM) adalah mesin virtual berbasis tumpukan yang digunakan untuk mengeksekusi kontrak cerdas Ethereum.
  • zkEVM adalah EVM yang mengintegrasikan teknologi zero-knowledge proof/validity proof. Ini memungkinkan eksekusi EVM diverifikasi menggunakan bukti tanpa pengetahuan tanpa mengharuskan semua pemverifikasi untuk mengeksekusi ulang EVM. Ada berbagai produk zkEVM di pasaran, masing-masing dengan pendekatan dan desainnya sendiri.
  • Alasan zkEVM adalah kebutuhan akan mesin virtual yang mendukung eksekusi smart contract pada Layer 2. Selain itu, beberapa proyek memilih untuk menggunakan zkEVM untuk memanfaatkan ekosistem pengguna EVM yang luas dan merancang rangkaian instruksi yang lebih ramah terhadap bukti tanpa pengetahuan.
  • Kakarot adalah zkEVM yang diimplementasikan di Starknet menggunakan bahasa Kairo. Ini mensimulasikan tumpukan, memori, eksekusi, dan aspek lain dari EVM dalam bentuk kontrak pintar Kairo. Kakarot menghadapi tantangan seperti kompatibilitas dengan sistem akun Starknet, pengoptimalan biaya, dan stabilitas, karena bahasa Kairo masih bersifat eksperimental.
  • Warp adalah penerjemah dari kode Solidity ke kode Kairo, memberikan kompatibilitas pada tingkat bahasa tingkat tinggi. Kakarot, di sisi lain, menyediakan kompatibilitas pada level EVM dengan mengimplementasikan opcode dan prekompilasi EVM.

Apa itu mesin virtual?

Untuk memperjelas apa itu mesin virtual, pertama-tama kita harus berbicara tentang proses eksekusi komputer di bawah arsitektur arus utama von Neumann. Berbagai program yang berjalan di komputer biasanya diubah oleh lapisan bahasa tingkat tinggi, dan akhirnya menghasilkan kode mesin yang dapat dimengerti mesin untuk dieksekusi. Menurut cara mengonversi ke kode mesin, bahasa tingkat tinggi secara kasar dapat dibagi menjadi bahasa yang dikompilasi dan bahasa yang ditafsirkan.

Kakarot: Menjelajahi jalur kompatibilitas EVM Starknet

Bahasa yang dikompilasi berarti bahwa setelah kode ditulis, itu perlu diproses oleh kompiler untuk mengubah kode bahasa tingkat tinggi menjadi kode mesin dan menghasilkan file yang dapat dieksekusi. Setelah dikompilasi, itu dapat dieksekusi beberapa kali dengan efisiensi yang lebih tinggi. Keuntungan dari bahasa yang dikompilasi adalah kode telah diubah menjadi kode mesin selama kompilasi, sehingga kecepatan eksekusi cepat, dan program dapat dijalankan di lingkungan tanpa kompiler, yang nyaman digunakan pengguna dan tidak perlu untuk menginstal perangkat lunak tambahan. Bahasa yang dikompilasi umum termasuk C, C++, Go, dll.

Mitra dari bahasa yang dikompilasi adalah bahasa yang ditafsirkan. Bahasa yang ditafsirkan berarti bahwa kode ditafsirkan dan dieksekusi baris demi baris melalui juru bahasa, dan dijalankan langsung di komputer, dan proses terjemahan perlu diterjemahkan ulang setiap kali dijalankan. Keuntungan dari bahasa yang ditafsirkan adalah efisiensi pengembangan yang tinggi dan debugging kode yang mudah, tetapi kecepatan eksekusi relatif lambat. Bahasa yang ditafsirkan umum termasuk Python, Java, Ruby, dll.

Perlu ditekankan bahwa bahasa tidak membedakan antara jenis yang dikompilasi dan yang ditafsirkan pada intinya, tetapi akan ada beberapa kecenderungan dalam desain awal. C/C++ dikompilasi dan dieksekusi dalam banyak kasus, tetapi juga dapat ditafsirkan dan dieksekusi (Cint, Cling). Banyak bahasa yang ditafsirkan dalam pengertian tradisional sekarang dikompilasi menjadi kode perantara dan dieksekusi pada mesin virtual (Python, Lua).

Mengetahui proses eksekusi mesin fisik, sekarang mari kita bicara tentang mesin virtual.

Mesin virtual biasanya menyediakan lingkungan komputer virtual dengan mensimulasikan perangkat keras yang berbeda. Perangkat keras yang dapat disimulasikan oleh mesin virtual berbeda berbeda, tetapi umumnya termasuk CPU, memori, hard disk, antarmuka jaringan, dan sebagainya.

Ambil Mesin Virtual Ethereum (EVM) sebagai contoh.EVM adalah mesin virtual berbasis tumpukan yang digunakan untuk mengeksekusi kontrak pintar Ethereum. EVM menyediakan lingkungan komputer virtual dengan mensimulasikan perangkat keras seperti CPU, memori, penyimpanan, dan tumpukan.

Kakarot: Menjelajahi jalur kompatibilitas EVM Starknet

Secara khusus, EVM adalah mesin virtual berbasis tumpukan yang menggunakan tumpukan untuk menyimpan data dan menjalankan instruksi. Set instruksi EVM mencakup berbagai opcode, seperti operasi aritmatika, operasi logika, operasi penyimpanan, operasi lompatan, dll. Instruksi ini dapat dijalankan pada tumpukan EVM untuk menyelesaikan eksekusi kontrak cerdas.

Memori dan penyimpanan yang ditiru oleh EVM adalah perangkat yang digunakan untuk menyimpan status dan data kontrak pintar. EVM memperlakukan memori dan penyimpanan sebagai dua area berbeda, dan dapat mengakses status dan data kontrak pintar dengan membaca dan menulis ke memori dan penyimpanan.

Tumpukan yang ditiru oleh EVM digunakan untuk menyimpan operan dan hasil instruksi. Sebagian besar instruksi dalam set instruksi EVM berbasis tumpukan, membaca operan dari tumpukan dan mendorong hasilnya kembali ke tumpukan.

Singkatnya, EVM menyediakan lingkungan komputer virtual dengan mensimulasikan perangkat keras seperti CPU, memori, penyimpanan, dan tumpukan, yang dapat menjalankan instruksi kontrak pintar dan menyimpan status dan data kontrak pintar. Dalam operasi sebenarnya, EVM akan memuat bytecode smart contract ke dalam memori, dan mengeksekusi logika smart contract dengan mengeksekusi set instruksi. Yang sebenarnya diganti oleh EVM adalah bagian dari sistem operasi + perangkat keras pada gambar di atas.

Proses desain EVM jelas dari bawah ke atas. Pertama, lingkungan perangkat keras yang disimulasikan (tumpukan, memori) diselesaikan, dan kemudian satu set set instruksi perakitan (Opcode) dan bytecode (Bytecode) dirancang sesuai dengan lingkungan yang sesuai. . Meskipun set instruksi perakitan adalah untuk dibaca orang, itu melibatkan banyak pengetahuan tingkat rendah, memiliki persyaratan tinggi untuk pengembang, dan tidak praktis untuk dikembangkan.Oleh karena itu, bahasa tingkat tinggi diperlukan untuk melindungi tingkat rendah yang tidak jelas dan rumit panggilan, dan memberi pengembang pengalaman yang lebih baik. Karena desain set instruksi perakitan EVM yang disesuaikan, sulit untuk langsung menggunakan bahasa tingkat tinggi tradisional, dan hanya membuat ulang bahasa tingkat tinggi baru untuk beradaptasi dengan mesin virtual. Komunitas Ethereum telah merancang dua bahasa tingkat tinggi terkompilasi—Solidity dan Vyper—untuk efisiensi eksekusi EVM. Soliditas tidak perlu ditekankan, Vyper adalah bahasa tingkat tinggi EVM yang dirancang oleh Vitalik setelah memperbaiki beberapa kekurangan di Soliditas, tetapi belum banyak diadopsi di komunitas, sehingga lambat laun menghilang dari panggung sejarah.

Apa itu zkEVM

Sederhananya, zkEVM adalah EVM yang menggunakan teknologi zero-knowledge proof/validity proof, sehingga proses eksekusi EVM dapat diverifikasi lebih efisien dan dengan biaya rendah melalui zero-knowledge proof/validity proof tanpa mengharuskan semua verifikator untuk Carry proses eksekusi EVM.

Ada banyak produk zkEVM di pasaran, dan treknya panas. Pemain utama termasuk Starknet, zkSync, Scroll, Taiko, Linea, Polygon zkEVM (sebelumnya Polygon Hermez), dll., Yang dibagi menjadi 5 kategori (1, 2 , 2.5, 3, 4) oleh vitalik . Konten spesifik dapat dilihat di blog Vitalik.

Mengapa zkEVM diperlukan

Pertanyaan ini perlu dilihat dari dua perspektif.

Upaya zk Rollup awal hanya dapat mencapai fungsi transfer dan transaksi yang relatif sederhana, seperti zkSync Lite, Loopring, dll. Tapi begitu lautan terlalu sulit, orang biasa menggunakan Turing-complete EVM di Ethereum Ketika tidak mungkin membuat berbagai aplikasi melalui pemrograman, orang mulai memanggil mesin virtual di L2. Kebutuhan untuk menulis kontrak pintar adalah salah satunya.

Kakarot: Menjelajahi jalur kompatibilitas EVM Starknet

Karena beberapa desain di EVM tidak ramah untuk menghasilkan bukti tanpa pengetahuan/bukti validitas, beberapa pemain memilih untuk menggunakan set instruksi yang ramah terhadap bukti tanpa pengetahuan/bukti validitas di lapisan bawah, seperti Starknet's Cairo Assembly dan zkSync's Instruksi seng. Tetapi pada saat yang sama, semua orang tidak mau melepaskan ekologi pengguna EVM yang sangat besar, jadi mereka memilih untuk kompatibel dengan EVM di lapisan atas, yaitu zkEVM tipe 3 dan 4. Beberapa pemain masih bersikeras pada set instruksi EVM tradisional Opcode, dan fokus untuk menghasilkan bukti yang lebih efisien untuk Opcode, yaitu zkEVM Tipe 1 dan Tipe 2. Ekologi besar EVM dibagi menjadi dua.

Kakarot: Menjelajahi jalan kompatibilitas EVM Starknet

Kakarot: Mesin virtual di mesin virtual?

Mengapa mesin virtual lain dapat dibuat di mesin virtual? Hal ini sudah biasa bagi para praktisi komputer, namun mungkin tidak begitu jelas bagi pengguna yang tidak mengerti komputer. Sebenarnya mudah dimengerti, ini seperti blok bangunan, selama lapisan bawah cukup kuat (dengan lingkungan eksekusi Turing-complete), blok bangunan dapat ditumpuk di lapisan atas tanpa batas. Tetapi tidak peduli berapa banyak lapisan yang dibangun, eksekusi akhir tetap harus ditangani oleh perangkat keras fisik tingkat terendah, sehingga menambah jumlah lapisan akan menyebabkan penurunan efisiensi. Pada saat yang sama, karena desain yang berbeda dari blok bangunan yang berbeda (desain mesin virtual yang berbeda), karena blok bangunan dibangun lebih tinggi dan lebih tinggi, kemungkinan blok bangunan runtuh (kesalahan berjalan) lebih besar, yang membutuhkan tingkat yang lebih tinggi. dukungan teknis.

Kakarot adalah EVM yang diimplementasikan dalam bahasa Kairo di Starknet. Ia menggunakan kontrak pintar Kairo untuk mensimulasikan tumpukan, memori, eksekusi, dll. di EVM. Secara relatif, tidak sulit untuk mengimplementasikan EVM. Selain EVM yang ditulis dalam Golang di Go-Ethereum, yang memiliki tingkat penggunaan tertinggi, ada juga EVM yang ditulis dengan Python, Java, Java, dan Rust.

Kakarot: Menjelajahi jalan kompatibilitas EVM Starknet

Kesulitan teknis Kakarot zkEVM adalah bahwa protokol tersebut ada sebagai kontrak pada rantai Starknet, yang menimbulkan dua masalah utama.

  1. Kompatibilitas Starknet menggunakan sistem akun yang sama sekali berbeda dari Ethereum. Akun di Ethereum dibagi menjadi EOA (akun yang dimiliki secara eksternal) dan CA (akun kontrak). Namun, Starknet mendukung abstraksi akun asli, dan semua akun adalah kontrak. akun. Pada saat yang sama, karena algoritma kriptografi yang digunakan berbeda, pengguna tidak dapat menggunakan entropi yang sama untuk menghasilkan alamat yang sama di Starknet seperti di Ethereum.
  2. Biaya Karena kakarot zkEVM ada di rantai sebagai kontrak, ia memiliki persyaratan tinggi untuk penerapan kode dan perlu dioptimalkan untuk Gas sebanyak mungkin untuk mengurangi biaya interaksi.
  3. Stabilitas Tidak seperti menggunakan bahasa tingkat tinggi tradisional seperti Golang, Rust, Python, dll., Bahasa Kairo masih dalam tahap percobaan, dari Kairo 0 hingga Kairo 1 hingga Kairo 2 (atau jika Anda suka, Kairo 1 versi 2), tim resmi masih Fitur bahasa terus direvisi. Pada saat yang sama, VM Kairo belum cukup diuji, dan kemungkinan penulisan ulang skala besar selanjutnya tidak dapat dikesampingkan.

Protokol kakarot terdiri dari lima komponen utama (empat ditulis dalam dokumen GitHub, EOA tidak termasuk, artikel ini telah disesuaikan untuk kenyamanan pembaca):

  • Kakarot (Core): bertanggung jawab untuk melaksanakan transaksi dalam bentuk Ethereum, dan menyediakan akun Starknet yang sesuai untuk pengguna Ethereum
  • Akun Kontrak: CA dalam arti Ethereum, bertanggung jawab untuk menyimpan bytecode kontrak dan status variabel dalam kontrak
  • Akun yang Dimiliki Secara Eksternal: EOA dalam pengertian Ethereum, bertanggung jawab untuk meneruskan transaksi Ethereum ke Kakarot Core
  • Registri Akun: Menyimpan korespondensi antara akun Ethereum dan akun Starknet.
  • Registri Blockhash: Sebagai Opcode khusus, Blockhash membutuhkan data blok sebelumnya, dan Kakarot tidak dapat langsung mendapatkan data pada rantai. Komponen ini menyimpan hubungan pemetaan dari block_number -> block_hash, yang ditulis oleh administrator dan disediakan untuk Kakarot Core.

Kakarot: Menjelajahi jalan kompatibilitas EVM Starknet

Menurut umpan balik dari CEO kakarot Elias Tazartes, dalam versi terbaru tim, desain Account Resister ditinggalkan, dan sebagai gantinya, pemetaan dari alamat Starknet 31bytes ke alamat EVM 20-bit digunakan secara langsung untuk menyimpan hubungan yang sesuai. . Di masa mendatang, untuk meningkatkan interoperabilitas dan memungkinkan kontrak Starknet mendaftarkan alamat EVM mereka sendiri, desain Daftar Akun dapat digunakan kembali.

Kompatibel dengan EVM di Starknet: Apa perbedaan antara Warp dan kakarot

Menurut tipe zkEVM yang ditentukan oleh Vitalik, Warp milik Tipe-4, sedangkan kakarot saat ini milik Tipe-2.5.

Kakarot: Menjelajahi jalur kompatibilitas EVM Starknet

Warp adalah penerjemah yang mengubah kode Solidity menjadi kode Kairo Alasan mengapa tidak disebut kompiler mungkin karena keluaran Kairo masih berupa bahasa tingkat tinggi. Melalui Warp, pengembang Solidity dapat mempertahankan status pengembangan asli tanpa harus mempelajari bahasa Kairo yang baru. Bagi banyak pihak proyek, Warp menurunkan ambang batas untuk memasuki ekosistem Starknet, dan tidak perlu menggunakan Kairo untuk menulis ulang sejumlah besar kode teknik.

Meskipun ide terjemahannya sederhana, kompatibilitasnya juga buruk. Beberapa kode Soliditas tidak dapat diterjemahkan dengan baik ke Kairo. Logika kode yang melibatkan sistem akun, algoritme kriptografi, dll. Perlu memodifikasi kode sumber untuk menyelesaikan migrasi. Fitur spesifik yang tidak didukung dapat dilihat di dokumentasi Warp. Misalnya, banyak proyek akan membedakan logika eksekusi akun EOA dan akun kontrak, tetapi semua akun di Starknet adalah akun kontrak, dan bagian kode ini perlu dimodifikasi sebelum diterjemahkan.

Warp kompatibel di level bahasa tingkat tinggi, dan kakarot kompatibel di level EVM.

Penulisan ulang lengkap EVM dan implementasi Opcode dan Pra-kompilasi satu per satu memungkinkan kakarot memiliki kompatibilitas asli yang lebih tinggi. Lagi pula, eksekusi di mesin virtual yang sama (EVM) selalu lebih kompatibel daripada eksekusi di mesin virtual yang berbeda (Cairo VM). Registri Akun dan Registri Blockhash dengan cerdik melindungi perbedaan di bawah sistem yang berbeda dan meminimalkan gesekan migrasi pengguna.

Kakarot: Menjelajahi jalur kompatibilitas EVM Starknet

Tim Kakarot

Kakarot: Menjelajahi jalan kompatibilitas EVM Starknet

Terima kasih kepada tim kakarot atas komentar berharga mereka pada artikel ini, khususnya Elias Tazartes. Terima kasih Pak!

Lihat Asli
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.
  • Hadiah
  • Komentar
  • Bagikan
Komentar
0/400
Tidak ada komentar
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)