
Bukti tanpa pengetahuan (ZKP) adalah alat kriptografi canggih yang dapat memverifikasi kebenaran penghitungan sekaligus melindungi privasi data masukan. Sebagai bagian integral dari infrastruktur penting ini, bahasa khusus domain (DSL) memainkan peran penting, menyederhanakan proses pengembangan dan verifikasi sirkuit ZKP. Mereka memainkan peran penting dalam menghubungkan konsep-konsep abstrak dengan representasi rangkaian tepat yang diperlukan untuk membuktikan sistem, bertindak sebagai jembatan penting antara keduanya.
Salah satu tantangan utama dalam pembuktian sistem adalah menerjemahkan konsep abstrak tingkat tinggi ke dalam rangkaian nyata. Namun, munculnya DSL mengatasi tantangan ini dengan memfasilitasi ekspresi terstruktur dari konsep-konsep abstrak dengan cara yang lebih konkrit dan dapat dicapai.
Selama dekade terakhir, kita telah menyaksikan pertumbuhan signifikan dalam jumlah dan keragaman DSL. Aktivitas di kawasan ini tercermin dari berkembangnya beberapa bahasa sirkuit, antara lain Noir, Leo, Zinc, dan lain-lain. Apakah Anda memerlukan opsi tujuan umum, seperti Circom, atau solusi yang disesuaikan untuk platform tertentu, seperti Kairo, Anda dapat memilih dari berbagai bahasa dan kerangka kerja untuk menulis sirkuit ZKP.
Pada artikel ini, kita akan menjelajahi bahasa pemrograman ZK utama yang secara aktif dimanfaatkan oleh pengembang dan menganalisis fitur terbaik dari setiap bahasa.
TLDR;

Kairo Oleh StarkWare
Kairo, bahasa inti untuk program komputasi tujuan umum yang mendukung bukti STARK, memainkan peran penting dalam kesuksesan StarkNet dan StarkEx, mendorong skalabilitas aplikasi di mainnet Ethereum. Khususnya, Cairo telah berperan penting dalam mendukung berbagai aplikasi, termasuk dYdX, Sorare, Immutable X, dan banyak lagi. Nama "Kairo" berasal dari singkatan "CPU Algebraic Intermediate Representation". Dalam dunia tanpa bukti pengetahuan, ini memainkan peran yang mirip dengan bahasa rakitan, sehingga memudahkan pengembang yang akrab dengan bahasa pemrograman tingkat rendah seperti C, C++, atau Solidity untuk memulai.
Terinspirasi oleh Rust, Cairo memberdayakan pengembang untuk membuat kontrak pintar Starknet dengan fokus pada keamanan dan pengembangan yang ramah pengguna. Cairo memiliki sintaks yang kuat yang menyederhanakan pembuatan sirkuit ZK, memungkinkan pengguna untuk melakukan berbagai tugas dalam program Kairo. Selain itu, keunggulan Kairo yang signifikan adalah kemampuannya yang dapat diperluas, sehingga memungkinkan pengenalan fitur dan kemampuan baru secara fleksibel.
Dalam sistem ZK, efisiensi dan skalabilitas merupakan faktor penting, dan Kairo memenuhi persyaratan ini dengan menekankan kedua aspek ini. Bahasa ini mengintegrasikan strategi optimasi, termasuk pengurangan kendala dan penghapusan loop, untuk meringankan beban komputasi yang biasanya terkait dengan sirkuit ZK. Optimalisasi desain sirkuit di Kairo menghasilkan pembuatan bukti dan verifikasi yang lebih cepat, sehingga ideal untuk aplikasi yang memerlukan throughput tinggi dan latensi minimal.
Ekspansi Kairo sangat mengesankan, dengan lonjakan luar biasa dalam jumlah pengembang penuh waktu selama dua tahun terakhir. Lonjakan ini menyoroti kemampuan beradaptasi Kairo, karena penggunaan Kairo tidak terbatas pada blockchain namun relevan dalam konteks apa pun yang memerlukan verifikasi komputasi. Sebagai hasilnya, kita dapat mengharapkan pertumbuhan signifikan lebih lanjut dalam adopsi pengembang di Kairo.
Pada tanggal 28 September 2023, Starknet meluncurkan peningkatan penting pada bahasa pemrograman Cairo v2.3.0. Rilis ini menandai langkah maju yang besar dalam menjadikan kontrak lebih modular, meningkatkan potensi kontrak pintar dengan memperkenalkan fitur-fitur baru, opsi penyimpanan, dan manajemen acara. Integrasi komponen-komponen ini memberikan cara yang fleksibel untuk memperluas fungsionalitas kontrak, memungkinkan modul pihak ketiga untuk meningkatkan fungsionalitas kontrak.
Seng oleh ZkSync
Zinc adalah bahasa pemrograman yang dirancang untuk membuat kontrak pintar dan sirkuit SNARK pada platform zkSync. Ia menggunakan sintaks Rust, menggabungkan elemen Soliditas, dan menyediakan fitur unik.
Apa yang membuat Zinc unik adalah kemudahan penggunaannya. Anda tidak perlu memahami semua detail rumit sistem batasan orde pertama (R1CS) untuk menulis kode aman. Seng menekankan kekekalan, menjadikannya fungsional secara inheren. Artinya, ini memprioritaskan data yang tidak dapat diubah dan evaluasi fungsi, sehingga mengurangi efek samping dan mendorong penulisan kode kontrak pintar yang lebih bersih dan tidak rawan kesalahan.
Selain itu, Zinc mencakup operasi matematika yang aman untuk mencegah potensi luapan, sehingga menjamin keamanan semua operasi. Meskipun memiliki beberapa keterbatasan, seperti tidak adanya loop tak terbatas dan rekursi, Zinc menyederhanakan proses debugging melalui penelusuran log konsol. Jejak ini meningkatkan pengalaman debugging dengan menyederhanakan proses pelacakan dan penyelesaian masalah pada jaringan pengujian atau jaringan utama.
Noir Oleh Aztec
Noir adalah DSL sumber terbuka yang dikembangkan oleh Aztec, berdasarkan Rust, dirancang untuk menyederhanakan pembuatan sirkuit ZK dan program ZK tanpa memerlukan pengetahuan kriptografi yang mendalam. Ini dianggap sebagai salah satu bahasa yang paling mudah diakses untuk menulis aplikasi ZK dan kompatibel dengan sistem pembuktian apa pun. Noir berfokus pada keamanan, kesederhanaan, dan kinerja. Ini menyediakan sintaksis seperti Rust tingkat tinggi yang mengabstraksi keamanan kriptografi dan menyederhanakan penggunaan primitif dasar kriptografi sambil mempertahankan kinerja tinggi.
Noir memiliki keunggulan signifikan dalam memperluas jangkauan aplikasi yang dapat memanfaatkan kemampuan perlindungan privasi yang disediakan oleh ZKP, sehingga meningkatkan efisiensi privasi dan verifikasi. Noir dikompilasi menjadi representasi perantara yang disebut Representasi Menengah Sirkuit Abstrak (Acer), yang kemudian dapat dikompilasi lebih lanjut menjadi R1CS. Memisahkan sistem pembuktian backend dari bahasa itu sendiri memungkinkan Noir mendukung berbagai sistem pembuktian, termasuk Aztec Brettenberg, Turbo Plonk, dan potensi integrasi di masa depan seperti Groth16 dan Halo2.
Bahasa ini menyediakan perpustakaan standar yang mencakup fitur efisien seperti SHA-256 (fungsi hash kriptografi yang menghasilkan keluaran berukuran tetap) dan pemeriksaan Pedersen-Merkle (metode yang menggunakan komitmen Pedersen dan pohon Merkle untuk memastikan integritas data dan enkripsi konsistensi teknologi verifikasi). Noir dirancang seperti Rust dan menyertakan fitur-fitur yang familiar bagi pengembang aplikasi, seperti fungsi, submodul, tipe yang ditentukan pengguna (struct), kondisional, loop, dan konstanta global. Selain itu, upaya berkelanjutan sedang dilakukan untuk mengembangkan fungsi generik dan kelas satu untuk lebih meningkatkan kemampuan ekspresif Noir.
Perlu dicatat bahwa Noir masih dalam proses dan mungkin ada beberapa keterbatasan dan potensi bug. Namun tim pengembangan berkomitmen untuk terus meningkatkan dan mengoptimalkan bahasa tersebut.
o1js oleh 0(1) Labs
o1js, sebelumnya SnarkyJS, adalah perpustakaan TypeScript yang dikembangkan oleh 0(1)Labs untuk membuat kontrak pintar menggunakan bahasa pemrograman SNARK. Ini memanfaatkan teknologi yang sudah ada seperti Node.js dan kompatibilitas browser untuk memastikan akses mudah dan kemudahan penggunaan bagi pengembang.
o1js terintegrasi secara mulus dengan pustaka dan alat JavaScript dan TypeScript, memberikan pengembang ekosistem yang kuat dan dukungan komunitas yang luas. Integrasi ini menyederhanakan proses pembangunan dan mengurangi kurva pembelajaran yang terkait dengan adopsi lingkungan pembangunan baru. Selain itu, ia sepenuhnya mendukung Visual Studio Code (VS Code), editor kode yang banyak digunakan yang memungkinkan pengembang memanfaatkan fitur-fitur seperti penyelesaian kode, penyorotan sintaksis, dan debugging untuk meningkatkan pengalaman pengembangan.
o1js pada dasarnya adalah kerangka kerja ZK serbaguna yang memberi Anda alat utama yang Anda perlukan untuk membuat bukti ZK. Ini mendukung pembuatan beragam program ZK, yang mencakup berbagai operasi bawaan yang dapat dibuktikan, termasuk aritmatika dasar, hashing, tanda tangan, operasi Boolean, perbandingan, dan banyak lagi. Dengan kerangka o1js, Anda dapat membangun zkApps di Protokol Mina, kontrak pintar yang dijalankan di sisi klien dan memiliki masukan pribadi.
Perlu disebutkan bahwa pada awal September 2023, tim 0(1)Labs mengumumkan bahwa mereka akan melakukan transisi dari SnarkyJS ke o1js dan menekankan komitmen mereka untuk meningkatkan kinerja. Catatan khusus adalah bahwa mereka mencapai pengurangan waktu pemuatan perpustakaan sebesar 3-4x, yang mengacu pada waktu yang diperlukan untuk mengimpor o1js, sebuah proses yang dapat memblokir thread utama. Untuk aplikasi web, waktu pemuatan sangat penting bagi waktu eksekusi JavaScript dan rendering seluruh halaman. Selain itu, tim telah memperbarui Mina zkApp CLI untuk meningkatkan pengalaman pembuatan antarmuka pengguna, dan mengumumkan peningkatan lebih lanjut pada Archive Node API untuk meningkatkan keandalan dan kejelasannya.
Leo oleh Aleo
Blockchain Aleo unik di bidang kontrak pintar dan menekankan perlindungan privasi. Intinya adalah bahasa pemrograman Leo, bahasa yang diketik secara statis yang terinspirasi oleh Rust. Dirancang khusus untuk mengembangkan aplikasi pribadi, Leo memberdayakan pencipta yang ingin membangun ekosistem terdesentralisasi yang aman dan pribadi. Apa yang benar-benar unik tentang Leo adalah peran perintisnya dalam memperkenalkan perangkat komprehensif untuk aplikasi tanpa pengetahuan untuk tujuan umum. Toolkit ini mencakup kerangka pengujian, registri paket, parser impor, kompiler jarak jauh, dan generator teorema.
Leo dirancang oleh tim pengembang yang dipimpin oleh Howard Wu yang membayangkan sebuah teknologi yang akan memberdayakan pengembang untuk membangun aplikasi terdesentralisasi yang memprioritaskan privasi dan keamanan. Desain Leo mengacu pada prinsip Rust sambil menggabungkan beberapa elemen mirip JavaScript untuk meningkatkan keakraban dan kenyamanan selama proses pengembangan. Selain itu, Leo bertujuan untuk mempercepat pengembangan dan menyederhanakan proses pengembangan dengan menyediakan platform pengujian terintegrasi, registri paket, dan konverter impor. Integrasi ini memungkinkan pengembang untuk fokus pada logika inti aplikasi mereka tanpa terbebani oleh masalah infrastruktur.
Fitur yang mencolok dari Leo adalah kompilernya, yang mengubah program menjadi format bukti R1CS tingkat rendah. Kompiler Leo unik dalam proses verifikasi formalnya yang ketat. Verifikasi ini penting karena kerentanan dapat muncul pada berbagai tahap, mulai dari pemrograman awal hingga audit dan kompilasi. Dengan melakukan pemeriksaan matematis yang ketat untuk memastikan bahwa kompiler konsisten dengan maksud pemrogram, Leo bertujuan untuk mengurangi risiko kesalahan yang tidak terdeteksi atau potensi kerentanan, terutama dalam konteks L2, ZK-rollup, atau program pribadi pada platform Leo.
Circom oleh iden3
Circom, DSL yang dibuat khusus untuk pengembangan sirkuit ZK, adalah hasil kerja sama antara Jordi Baylina dan tim iden3. Kompiler Circom ditulis dalam Rust dan tugas utamanya adalah mengkompilasi sirkuit yang ditulis dalam bahasa Circom. Khususnya, Circom telah menjadi pilihan utama untuk aplikasi ZK dunia nyata yang luar biasa, seperti Dark Forest dan Tornado Cash. Popularitasnya disebabkan oleh kinerjanya yang luar biasa, termasuk waktu pemeriksaan browser yang cepat melalui bukti WASM yang dioptimalkan, bukti sisi server yang efisien melalui rapidsnark, dan verifikasi on-chain yang efisien.
Namun, penting untuk disadari bahwa fungsi Circom terutama difokuskan pada pengembangan sirkuit ZK, yang mungkin membuatnya kurang cocok untuk menangani tugas komputasi yang lebih luas. Pengembang yang mencari lebih banyak fungsi yang dapat mengakomodasi kebutuhan pengembangan yang lebih luas mungkin mendapati kemampuan Circom agak terbatas. Dalam hal ini, pengembang mungkin perlu menggabungkan bahasa atau kerangka pemrograman lain untuk memenuhi kebutuhan pengembangan yang lebih luas.
Gambar melalui Circom
Kompatibilitas Circom berfokus pada sistem ZKP yang banyak digunakan seperti snarkjs dan libsnark. Meskipun kompatibilitas ini memastikan integrasi yang mulus dengan sistem yang banyak digunakan ini, hal ini juga berarti bahwa sirkuit Circom mewarisi kemampuan dan batasan spesifik yang terkait dengan ketergantungan ini. Pengembang yang lebih memilih atau memerlukan sistem ZKP alternatif mungkin menghadapi tantangan kompatibilitas atau perlu menginvestasikan pekerjaan tambahan untuk mengadaptasi dan mengintegrasikan sirkuit yang dihasilkan Circom ke dalam sistem pilihan mereka.
Lurk oleh Lurk Lab
Lurk adalah dialek Lisp dengan cakupan statis yang dipengaruhi oleh Skema dan Common Lisp, dengan fitur unik: memungkinkan bukti langsung kebenaran eksekusi program menggunakan zk-SNARKs, memungkinkan verifikasi yang ringkas dan efisien.
Kegunaan utama Lurk meliputi:
Perhitungan yang dapat diverifikasi: Lurk memungkinkan Anda membuktikan kebenaran ekspresinya dalam kondisi tanpa pengetahuan, meningkatkan kepercayaan pada hasil perhitungan.
Tanpa pengetahuan: Pengguna dapat membuktikan pengetahuannya tanpa mengungkapkan informasi spesifik di luar masukan publik, sehingga menjaga privasi.
Data yang dapat dialamatkan konten: Setiap program Lurk dilengkapi dengan pengidentifikasi konten unik (CID), sehingga kompatibel dengan IPFS dan IPLD.
Kelengkapan Turing: Lurk mendukung pembuatan dan pembuktian klaim komputasi yang sewenang-wenang.
Fungsi tingkat tinggi: Fungsi pengintai dapat menerima dan mengembalikan fungsi, memungkinkan pemrograman fungsional ekspresif.
Komputasi yang menangani data pribadi: Lurk memungkinkan penanganan data pribadi sambil memastikan keluaran yang terbukti benar tanpa mengorbankan privasi.
Lurk memanfaatkan sepenuhnya pengalokasi memori "kontra" Lisp saat membangun sirkuit tujuan umum. Pengalokasi ini menggabungkan ekspresi dan menghasilkan referensi melalui hash. Kuncinya adalah membuktikan bahwa kedua ekspresi tersebut memang memiliki hash pada referensi yang sama. Verifikasi ini memungkinkan Lurk melakukan perhitungan dalam sirkuit snark.
Lurk sangat kaya fitur, termasuk dukungan untuk rekursi tak terbatas, loop, aliran kontrol bersyarat, dan beberapa sistem bukti backend seperti Groth16 dan SnarkPack+ dan Nova. Fleksibilitas ini membuka pintu bagi berbagai aplikasi, termasuk perhitungan verifikasi, pemrosesan data pribadi, dan pelaksanaan program lengkap Turing dalam sirkuit snark.
Meringkaskan
Seiring dengan meningkatnya keragaman aplikasi ZK, DSL memiliki prospek luas untuk pengembangan di bidang ZK. Kunci kesuksesan DSL adalah membangun komunitas yang berkembang dan perpustakaan yang kaya untuk memperkaya pengalaman pengembang. DSL yang memprioritaskan kompatibilitas dengan perpustakaan yang ada dapat memanfaatkan pengetahuan dan sumber daya komunitas pengembang yang lebih luas. Pendekatan ini memfasilitasi integrasi yang lebih lancar, mempercepat pengembangan, dan memberikan fleksibilitas yang lebih besar saat mengimplementasikan aplikasi ZK. Upaya kolaboratif ini sangat penting untuk mengembangkan ekosistem yang lebih kuat di sekitar DSL, memberikan manfaat nyata bagi pengembang dan selanjutnya akan mendorong adopsi dan efektivitas teknologi ZK.




