Survei Bahasa ZK: Noir, o1js, Circom, Leo, Kairo, Lurk

Pendahuluan

Bukti Domain-Specific Language (DSL) dalam zero-knowledge (ZK).[4] memainkan peran penting di lapangan. Pada intinya, bukti ZK memecahkan tantangan untuk membuktikan keberadaan atribut tertentu dalam data rahasia tanpa mengungkapkan informasi tambahan apa pun. Namun, menerjemahkan ide-ide tingkat tinggi ke dalam bukti konkret bisa jadi rumit. Di sinilah DSL berperan, menjembatani konsep abstrak dengan representasi sirkuit yang diperlukan untuk membuktikan sistem.

Sistem pembuktian[5] adalah metode atau perjanjian yang memungkinkan satu pihak untuk membuktikan keabsahan suatu pernyataan atau klaim kepada pihak lain tanpa mengungkapkan informasi sensitif apa pun. Ini melibatkan seperangkat aturan dan prosedur yang memungkinkan prover untuk meyakinkan pemverifikasi kebenaran pernyataan tertentu, seperti kebenaran perhitungan atau kepemilikan pengetahuan tertentu, tanpa mengungkapkan rahasia atau data yang mendasarinya.

Namun, sistem pembuktian tidak dapat secara langsung menangani konsep tingkat tinggi. Sebaliknya, mereka perlu diubah menjadi sirkuit yang mewakili properti yang diinginkan. Pergeseran dari konsep tingkat tinggi ke sirkuit ini menghadirkan tantangan. Di sinilah bahasa sirkuit berperan. Bahasa sirkuit memecahkan masalah ini dengan menyediakan cara terstruktur dan formal untuk mengekspresikan ide-ide tingkat tinggi.

Selama dekade terakhir, telah terjadi peningkatan yang signifikan dalam jumlah dan keragaman bahasa sirkuit. Perkembangan banyak bahasa sirkuit, seperti Noir, Kairo[6] dan Leo, menunjukkan seberapa aktif bidang tersebut. Perkembangan bahasa ini memungkinkan kita untuk membandingkan dan membedakan karakteristik, persamaan, dan perbedaannya. Pemeriksaan komprehensif bahasa-bahasa ini memberikan pemahaman yang lebih dalam tentang lanskap bahasa sirkuit secara keseluruhan.

TLDR;

Noir – Dikembangkan oleh Aztec, abstrak kompleksitas kriptografi dan memungkinkan bagi pengembang dari latar belakang apapun untuk menulis sirkuit ZK.

– o1js – Perpustakaan Tipe yang dikembangkan oleh O(1) Labs. Memungkinkan pengembang untuk menulis kontrak pintar. Terintegrasi dengan baik dengan pustaka dan alat Java dan Tipe yang ada.

**– **Circom**[7] ** – Dirancang untuk pengembangan sirkuit ZKP. Memberikan presisi dan kejelasan, fitur-fiturnya terutama difokuskan pada area khusus ini.

**– Leo ** – Menyediakan lingkungan yang ramah pengguna untuk pengembang. Arsitektur compiler yang divalidasi secara formal digunakan dengan fokus pada deteksi dan pencegahan kesalahan dini.

**–**Kairo**[8] ** – Penekanan pada efisiensi dan skalabilitas. Interoperabilitas didukung melalui antarmuka standar yang dapat diintegrasikan dengan platform blockchain, kontrak pintar, dan sistem off-chain.

Lurk – Memecahkan keterbatasan SNARKs tradisional dengan memanfaatkan Lisp untuk mengimplementasikan sirkuit umum.

Glosarium

Karena kita akan menyentuh konsep teknis, berikut adalah glosarium dari beberapa istilah kompleks yang mungkin Anda temui dalam teks-teks berikutnya:

Abstract Circuit Intermediate Representation (Acer) :* Representasi menengah dari rangkaian ZK yang digunakan oleh Noir yang dapat dikompilasi menjadi sistem kendala orde pertama (R1CS).

**• Gerbang khusus: ** Gerbang logika khusus yang dirancang untuk operasi kriptografi yang efisien dan aman di sirkuit ZK.

• SHA-256: Fungsi hash kriptografi yang mengambil input dan menghasilkan output berukuran tetap.

Pemeriksaan Pedersen-Merkle: Dengan menggunakan teknik verifikasi kriptografi Pedersen Promise dan Merkle Tree, integritas dan konsistensi data dapat diverifikasi.

• Kelengkapan Turing: Properti sistem komputasi yang dapat meniru mesin Turing dan dapat memecahkan masalah komputasi apa pun dengan waktu dan sumber daya yang cukup.

Continuation Passing Style (CPS) :* teknik pemrograman yang memecah proses evaluasi menjadi langkah-langkah yang dapat dikelola untuk eksekusi yang seragam dan efisien.

Elemen medan :* elemen dalam bidang matematika terbatas, yang biasa digunakan dalam skema kriptografi dan perhitungan.

Hitam

Hitam[9] adalah Domain Specific Language (DSL) yang dirancang oleh Aztec untuk menyederhanakan pembuatan sirkuit ZK dan program ZK tanpa perlu pengetahuan luas tentang kriptografi atau menjadi kriptografer. Tujuan utamanya adalah untuk memungkinkan pengembang dari latar belakang apa pun untuk menulis sirkuit ZK (zero-knowledge). Noir memprioritaskan keamanan, kesederhanaan, dan kinerja. Ini menyediakan sintaks tingkat tinggi, seperti Rust yang mengabstraksi keamanan kriptografi dan menyederhanakan penggunaan primitif kriptografi sambil mempertahankan kinerja tinggi.

Kemungkinan Penskalaan dengan ZK Proof

Salah satu keuntungan dari Noir adalah bahwa ia memiliki potensi untuk memperluas jangkauan aplikasi yang dapat memanfaatkan fitur pelestarian privasi yang disediakan oleh bukti ZK. Bukti ini meningkatkan privasi dan memberikan verifikasi yang efisien. Noir dikompilasi menjadi representasi menengah yang disebut Abstract Circuit Intermediate Representation (Acer), yang selanjutnya dapat dikompilasi menjadi sistem kendala yang disebut R1CS (peringkat satu kendala). Pemisahan sistem bukti back-end dari bahasa ini memungkinkan Noir untuk mendukung berbagai sistem bukti, termasuk Aztec Brettenberg, Turbo Plonk, dan integrasi potensial di masa depan seperti Groth16 dan Halo 2.

Optimasi &; Perpustakaan Standar

Pengembang dapat mengoptimalkan sirkuit pada tingkat sistem pengesahan untuk meningkatkan kecepatan, keamanan, dan berbagai fitur aplikasi dengan memanfaatkan gerbang kustom, sejenis gerbang logika yang dirancang khusus untuk melakukan operasi kriptografi secara efisien dan aman. Bahasa ini menyediakan pustaka standar dengan fungsi yang dioptimalkan seperti pemeriksaan SHA-256 dan Pedersen-Merkle, yang menggunakan komitmen Pedersen dan pohon Merkle untuk memverifikasi integritas dan konsistensi data.

!

Grafik yang menunjukkan sintaks bahasa Noir### Organisasi Kode dan Keterampilan Presentasi

Noir mendukung organisasi kode melalui modul dan peti eksternal, sehingga mudah untuk membuat perpustakaan untuk program Noir. Ini menyediakan tipe data komposit seperti array, tupel, dan struktur, memungkinkan pengembang untuk mengelompokkan data dan mengimplementasikan fungsi umum. Bahasa ini juga mendukung struktur aliran kontrol seperti untuk loop, pernyataan if, dan operator logis dan bitwise. Fungsi generik dan orde pertama sedang dikembangkan secara aktif untuk lebih meningkatkan kemampuan ekspresif Noir.

Penting untuk dicatat bahwa Noir masih berkembang. Ini mungkin memiliki beberapa keterbatasan dan potensi bug. Tim pengembang terus mengulangi bahasa dan berkomitmen untuk perbaikan terus-menerus.

o1js

O1JS[10] adalah pustaka Tipe yang dirancang oleh (0)1Labs untuk menulis kontrak pintar menggunakan bahasa pemrograman Snark. Ini memanfaatkan teknologi terbuka yang ada seperti Node .js dan browser untuk membuatnya lebih mudah diakses dan nyaman bagi pengembang. Dengan membangun Type, o1js memungkinkan pengembang untuk memanfaatkan pengetahuan mereka yang ada tentang pustaka dan alat Java dan Type.

Integrasi

o1js terintegrasi secara mulus dengan pustaka dan alat Java dan Type, menyediakan pengembang dengan fitur-fitur canggih dan dukungan komunitas yang luas. Integrasi ini meningkatkan produktivitas dan mengurangi kurva pembelajaran untuk mengadopsi lingkungan pengembangan baru.

**Dukungan Kode VS **

Ini menyediakan dukungan untuk Visual Studio Code (VS Code), editor kode populer. Pengembang dapat memanfaatkan fitur seperti penyelesaian kode, penyorotan sintaks, dan debugging untuk meningkatkan pengalaman pengembangan secara keseluruhan.

Perpustakaan Standar

O1JS menyediakan pustaka standar komprehensif yang mencakup tipe dasar seperti elemen domain, un-64, un-32, kunci publik, kunci privat, dan tanda tangan. Jenis ini dilengkapi dengan metode bawaan yang menyederhanakan penanganan skema enkripsi, data opsional, Boolean, dan kurva elips.

Circom

Circom, kependekan dari Circuit Compiler, adalah bahasa khusus domain (DSL) yang kuat yang dirancang untuk pengembangan sirkuit zero-knowledge proof (ZKP), yang dibuat oleh Jordi Balyna dan tim iden3.

Definisi Sirkuit Ekspresif

Dengan sintaks ekspresifnya, Circom memungkinkan pengembang untuk menentukan sirkuit untuk aplikasi ZKP dengan cara yang tepat dan jelas. Namun, sintaks dan semantik Circom bisa sulit dipahami bagi mereka yang baru mengenal Circom dan mereka yang tidak terbiasa dengan konsep DSL atau ZKP. Untuk pengembang sirkuit pemula atau pengembang dengan latar belakang bahasa pemrograman tujuan umum, mungkin memerlukan usaha dan waktu ekstra.

Batas Lingkup

Sementara Circom unggul dalam pengembangan sirkuit ZKP, penting untuk dicatat bahwa fitur-fiturnya terutama difokuskan di area khusus ini. Akibatnya, pengembang yang mencari bahasa tujuan yang lebih umum untuk menangani berbagai tugas komputasi mungkin menemukan Circom agak terbatas. Untuk memenuhi kebutuhan pengembangan yang lebih luas, mungkin perlu menggunakan Circom bersama dengan bahasa pemrograman atau kerangka kerja lain.

Penjelasan tentang cara kerja Circom. ### Keterbatasan Alat &; Ekosistem

Circom didukung oleh berbagai alat pengembangan dan memiliki ekosistem yang berkembang, meskipun ketersediaan alat dan sumber dayanya mungkin masih relatif terbatas dibandingkan dengan bahasa pemrograman dan kerangka kerja yang lebih mapan. Pengembang mungkin kesulitan menemukan dokumentasi, pustaka, dan dukungan komunitas yang komprehensif untuk kasus penggunaan tertentu atau fitur lanjutan. Keterbatasan ini dapat berdampak pada kecepatan pengembangan dan adopsi komunitas Circom.

Pertimbangan Kompatibilitas

Kompatibilitas Circom terutama difokuskan pada sistem bukti tanpa pengetahuan populer seperti snarkjs dan libsnark. Meskipun ini memungkinkannya untuk berintegrasi secara mulus dengan sistem ini, ini juga memperkenalkan dependensi pada fitur dan batasan spesifik mereka. Pengembang yang lebih suka atau membutuhkan sistem ZKP lain mungkin mengalami masalah kompatibilitas atau memerlukan upaya tambahan untuk beradaptasi dan mengintegrasikan sirkuit yang dihasilkan Circom ke dalam sistem pilihan mereka.

Leo

Leo[11] adalah bahasa pemrograman yang dirancang khusus untuk pengembangan aplikasi zero-knowledge proof. Ini bertujuan untuk menyediakan lingkungan yang ramah pengguna bagi pengembang, terutama mereka yang memiliki pengalaman sebelumnya dalam ekosistem blockchain. LEO mirip dengan Rust dan memiliki beberapa elemen seperti Java yang dirancang untuk menciptakan keakraban dan kenyamanan dalam pengembangan aplikasi.

Fitur penting Leo adalah kompilernya, yang mengubah program menjadi format bukti tingkat rendah yang disebut R1CS. Yang membedakan kompiler Leo adalah proses verifikasi formal yang ketat yang dijalaninya. Verifikasi ini diperlukan karena kesalahan dapat terjadi pada berbagai tahap, termasuk pemrograman, audit, dan kompilasi. Dengan secara matematis memastikan bahwa kompiler mengikuti maksud programmer, Leo bertujuan untuk meminimalkan risiko kesalahan yang diabaikan atau dieksploitasi, terutama dalam konteks L2, ZK-rollups, atau program berpemilik di platform LEO.

Tata bahasa Leo mengakui bahwa meskipun upaya terbaik, kesalahan tidak bisa dihindari, dan tim Leo menekankan pentingnya pencegahan dan deteksi kesalahan dini, terutama dalam sistem yang berhubungan dengan transfer nilai penting. Untuk mengatasi hal ini, arsitektur kompiler Leo yang divalidasi secara formal menyuntikkan kepercayaan tambahan dan mengurangi kemungkinan penyimpangan yang tidak diinginkan dari perilaku program yang diharapkan.

Selain bahasa dan kompiler, Leo menawarkan berbagai alat dan fitur pengalaman pengembang. Komponen-komponen ini dirancang untuk meningkatkan proses pengembangan, menyederhanakan tugas, dan meningkatkan efisiensi. Berdasarkan pengalaman tujuh tahun dan mengamati evolusi ekosistem Ethereum, tim Leo bertujuan untuk menyediakan lingkungan yang ramah pengguna yang mirip dengan evolusi alat seperti penjelajah, kerangka kerja penyebaran seperti Truffle dan Ganache, dan sumber daya lain yang menyederhanakan pengembangan dan pengujian aplikasi.

Kairo

Kairo[12] Menyediakan sintaks yang menyederhanakan proses membangun sirkuit ZKP. Mengambil inspirasi dari bahasa pemrograman tradisional, Kairo memungkinkan pengembang untuk memanfaatkan keterampilan pemrograman mereka yang ada saat merancang sistem ZK. Melalui pendekatan deklaratifnya, Kairo memungkinkan untuk menormalkan pernyataan logis dan perhitungan, membuatnya lebih mudah untuk mewakili skenario dunia nyata dalam konteks bukti tanpa pengetahuan.

Efisiensi & Skalabilitas

Kinerja adalah faktor kunci dalam sistem ZK. Kairo memecahkan masalah ini dengan berfokus pada efisiensi dan skalabilitas. Bahasa ini menggunakan teknik optimasi seperti pengurangan kendala dan eliminasi loop untuk meminimalkan overhead komputasi yang terkait dengan sirkuit ZKP. Dengan mengoptimalkan desain sirkuit, Kairo mencapai pembangkitan bukti dan verifikasi yang lebih cepat untuk aplikasi yang membutuhkan throughput tinggi dan latensi rendah.

Interoperabilitas &; Integrasi

Kairo dirancang untuk berintegrasi dengan infrastruktur perangkat lunak yang ada, memungkinkan pengembang untuk menggabungkan kemampuan ZKP dengan teknologi lain. Bahasa ini mendukung interoperabilitas melalui antarmuka standar, memungkinkan integrasi dengan platform blockchain, kontrak pintar, dan sistem off-chain. Fleksibilitas ini membuka pintu bagi kemungkinan penerapan fitur privasi yang ditingkatkan dalam aplikasi terdesentralisasi, sistem keuangan, dan protokol validasi data.

Kairo SNARK arsitektur CPU dalam satu contoh: ### **Komunitas &; Ekosistem **

Proyek Kairo menumbuhkan komunitas pengembang, peneliti, dan penggemar yang berkontribusi pada pengembangannya. Ketersediaan dokumentasi, tutorial, dan kode sampel membantu dalam proses orientasi, memungkinkan pengembang untuk memahami konsep dan mulai membangun sistem ZK. Selain itu, Kairo mendapat manfaat dari ekosistem StarkWare yang lebih luas, yang menyediakan dukungan, alat, dan kemajuan penelitian untuk meningkatkan bahasa dan kemampuannya.

Lurk

Mengintai[13] Ini bertujuan untuk memecahkan keterbatasan SNARKs tradisional dan sirkuit dengan memanfaatkan Lisp, bahasa pemrograman fungsional, untuk mengimplementasikan sirkuit tujuan umum. Menggunakan Lisp, Lurk memperkenalkan fungsi generik yang disebut "" yang dapat mengevaluasi ekspresi data apa pun dalam rangkaian snark.

Kode adalah data, data adalah kode

Salah satu prinsip dasar Lurk adalah untuk mewakili program sebagai data dengan konten yang dapat dialamatkan. Pendekatan ini memungkinkan evaluasi dan validasi program Lurk yang efisien. Keteralamatan konten menyederhanakan proses parsing, dan data yang dihasilkan dapat digunakan secara langsung di SNARK provers tanpa perlu langkah kompilasi terpisah.

Menerapkan Lisp di SNARKs

Untuk membuat sirkuit tujuan umum, Lurk memanfaatkan "kontra" pengalokasi memori Lisp. Alokator menggabungkan dua ekspresi dan menghasilkan referensi ke ekspresi yang dihasilkan dengan hashing. Dengan membuktikan bahwa dua ekspresi di-hash ke referensi yang sama, Lurk dapat melakukan perhitungan dalam sirkuit snark.

Kelanjutan dari Gaya Lewat

Lurk menggunakan Continuity Passing Style (CPS), yang memecah proses evaluasi menjadi langkah-langkah yang dapat dikelola. Setiap langkah evaluasi menjadi perhitungan yang dapat diproses, memungkinkan eksekusi yang seragam dan efisien. Termasuk kelanjutan eksplisit di sirkuit SNARK membantu melalui proses evaluasi langkah demi langkah.

Memberikan kelengkapan dan kemampuan rekursif Turing

Dengan menggunakan Lisp, Lurk mencapai kelengkapan Turing dan mendukung rekursi tak terbatas di sirkuit SNARK. Kemampuan penting ini memungkinkan bukti perhitungan yang rumit dan implementasi sirkuit tujuan umum yang mampu melakukan perhitungan sewenang-wenang.

Efek & Aplikasi

Kemampuan Lurk memiliki implikasi luas. Dengan mendukung rekursi tak terbatas, siklik, dan aliran yang dikontrol secara kondisional, Lurk memungkinkan komputasi kompleks di sirkuit SNARK. Ini membuka berbagai aplikasi untuk perhitungan verifikasi, pemrosesan data pribadi, dan pelaksanaan program Turing-complete.

Kesimpulan

Pilihan bahasa khusus domain (DSL) beragam dan diperkirakan akan terus tumbuh karena kasus penggunaan untuk zero-knowledge proofs (ZKs) terus berkembang di seluruh ekosistem blockchain. Saat ini, perlombaan untuk membangun bahasa yang dominan untuk membangun aplikasi ZK masih dalam tahap awal, menunjukkan bahwa kita dapat mengharapkan perbaikan lebih lanjut di bidang ini.

Namun, keterbatasan umum dari sebagian besar DSL adalah kurangnya efek jaringan dari komunitas besar dan perpustakaan yang kuat. Memiliki komunitas yang dinamis dan perpustakaan yang komprehensif dapat sangat meningkatkan pengalaman pengembang. Meskipun kekurangan ini dapat diatasi dari waktu ke waktu, penting bagi tim yang terlibat dalam pengembangan DSL untuk memprioritaskan kompatibilitas dengan pustaka lain, meminjam dari pendekatan yang diambil oleh o1js.

Dengan memastikan kompatibilitas dengan pustaka yang ada, DSL dapat memanfaatkan pengetahuan dan sumber daya kolektif dari komunitas pengembang yang lebih luas, memungkinkan integrasi yang lebih mudah, pengembangan yang lebih cepat, dan fleksibilitas yang lebih besar dalam mengimplementasikan aplikasi ZK. Pendekatan kolaboratif ini akan mendorong pengembangan ekosistem yang lebih kuat di sekitar DSL untuk kepentingan pengembang dan pada akhirnya mendorong adopsi dan efektivitas teknologi ZK.

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.
  • 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)