Bukti Pengetahuan Nol (ZKP) adalah alat kriptografi yang kuat yang dapat memvalidasi keakuratan perhitungan sambil melindungi privasi data input. Bahasa Khusus Domain (DSL) memainkan peran penting sebagai bagian dari infrastruktur kunci ini, menyederhanakan proses pengembangan dan verifikasi sirkuit ZKP. Mereka bertindak sebagai jembatan penting antara konsep abstrak dan representasi sirkuit yang tepat yang diperlukan oleh sistem bukti.
Salah satu tantangan utama yang dihadapi oleh sistem bukti adalah menerjemahkan konsep abstrak tingkat tinggi ke dalam rangkaian praktis. Namun, munculnya DSL telah mengatasi isu ini dengan memfasilitasi struktur konsep-konsep abstrak ini dengan cara yang lebih konkret dan dapat diimplementasikan, sehingga memenuhi tantangan ini.
Dalam satu dekade terakhir, kita telah menyaksikan peningkatan signifikan dalam jumlah dan keragaman DSL. Keberagaman ini dalam bidang tersebut terlihat dalam pengembangan berbagai bahasa sirkuit, termasuk Noir, Leo, dan Zinc. Apakah Anda membutuhkan pilihan yang serbaguna seperti Circom atau solusi yang disesuaikan untuk platform tertentu seperti Cairo, Anda dapat memilih dari berbagai bahasa dan kerangka kerja untuk menulis sirkuit ZKP.
Dalam artikel ini, kami akan menjelajahi bahasa pemrograman ZK utama yang aktif digunakan oleh pengembang dan menganalisis fitur terbaik dari setiap bahasa.
Cairo adalah bahasa inti untuk program komputasi umum yang mendukung bukti STARK. Telah memainkan peran kunci dalam kesuksesan StarkNet dan StarkEx, mendorong skalabilitas aplikasi di Ethereum mainnet. Terutama, Cairo telah berperan penting dalam mendukung berbagai aplikasi, termasuk dYdX, Sorare, dan Immutable X. Nama “Cairo” berasal dari singkatan “CPU Algebraic Intermediate Representation.” Di ranah bukti pengetahuan nol, ia berfungsi mirip dengan bahasa rakitan, memungkinkan pengembang yang akrab dengan bahasa pemrograman tingkat rendah seperti C, C++, atau Solidity untuk memulai lebih mudah.
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 melakukan berbagai tugas dalam program Cairo. Selain itu, salah satu keunggulan signifikan Cairo adalah skalabilitasnya, memungkinkan integrasi yang fleksibel dari fitur dan fungsionalitas baru.
Dalam sistem ZK, efisiensi dan skalabilitas adalah faktor penting, dan Cairo memenuhi persyaratan ini dengan menekankan keduanya. Bahasa ini mengintegrasikan strategi optimisasi, termasuk pengurangan kendala dan eliminasi loop, untuk mengurangi beban komputasi yang biasanya terkait dengan sirkuit ZK. Optimisasi dalam desain sirkuit menghasilkan pembangkitan bukti dan verifikasi yang lebih cepat, menjadikannya pilihan yang ideal untuk aplikasi yang membutuhkan throughput tinggi dan latensi minimal.
Perluasan dan pengembangan Kairo telah luar biasa, menyaksikan lonjakan luar biasa dalam jumlah pengembang penuh waktu dalam dua tahun terakhir ini. Lonjakan ini menunjukkan fleksibilitas Kairo, karena penggunaannya tidak terbatas pada blockchain tetapi signifikan dalam konteks apa pun yang memerlukan verifikasi komputasi. Oleh karena itu, kita dapat mengantisipasi pertumbuhan signifikan lebih lanjut dalam pengembang yang mengadopsi Kairo.
Pada 28 September 2023, Starknet meluncurkan upgrade besar-besaran untuk bahasa pemrogramannya dengan Cairo v2.3.0. Versi ini menandai kemajuan signifikan dalam membuat kontrak lebih modular dengan memperkenalkan fitur-fitur baru, pilihan penyimpanan, dan manajemen acara, meningkatkan potensi kontrak pintar. Integrasi komponen-komponen ini menawarkan cara yang fleksibel untuk memperluas fungsionalitas kontrak, memungkinkan modul-modul pihak ketiga untuk meningkatkan fungsionalitas kontrak.
Zinc adalah bahasa pemrograman yang dirancang khusus untuk membuat kontrak pintar dan sirkuit SNARK di platform zkSync. Ini mengadopsi sintaks Rust, mengintegrasikan elemen Solidity, dan menawarkan fungsionalitas unik.
Keunikan Zinc terletak pada kemudahannya bagi pengguna. Anda dapat menulis kode yang aman tanpa perlu menyelami semua detail kompleks dari Sistem Kendala Orde Pertama (R1CS). Zinc menekankan ketidakberubahannya, memberikannya karakteristik fungsional yang melekat. Hal ini berarti Zinc memprioritaskan data yang tidak berubah dan evaluasi fungsi, sehingga mengurangi efek samping dan memudahkan penulisan kode kontrak pintar yang lebih bersih dan kurang rentan terhadap kesalahan.
Selain itu, Zinc mencakup operasi matematika yang aman untuk mencegah potensi overflow, memastikan keamanan semua operasi. Meskipun memiliki beberapa keterbatasan, seperti ketiadaan loop tak terbatas dan rekursi, Zinc menyederhanakan proses debugging melalui pelacakan log konsol. Log ini memudahkan pelacakan dan pemecahan masalah transaksional pada jaringan uji atau jaringan utama, sehingga meningkatkan pengalaman debugging.
Noir, sebuah DSL sumber terbuka yang dikembangkan oleh Aztec dan berbasis Rust, bertujuan 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 yang kompatibel dengan sistem pembuktian apa pun. Noir berfokus pada keamanan, kesederhanaan, dan kinerja, menawarkan sintaks tingkat tinggi yang mirip dengan Rust. Ini mengabstraksi keamanan kriptografi, menyederhanakan penggunaan primitif kriptografi sambil mempertahankan kinerja tinggi.
Noir memiliki keunggulan signifikan dalam memperluas rentang aplikasi yang dapat memanfaatkan kemampuan perlindungan privasi yang ditawarkan oleh ZKP, sehingga meningkatkan efisiensi privasi dan verifikasi. Ini dikompilasi ke dalam representasi intermediate yang disebut Abstract Circuit Intermediate Representation (Acer), yang kemudian dapat dikompilasi lebih lanjut menjadi R1CS. Pemisahan sistem pembuktian backend dari bahasa itu sendiri memungkinkan Noir mendukung berbagai sistem pembuktian, termasuk Aztec Brettenberg, Turbo Plonk, dan integrasi masa depan potensial seperti Groth16 dan Halo2.
Bahasa ini mencakup perpustakaan standar yang menampilkan fungsionalitas yang efisien seperti SHA-256 (fungsi hash kriptografis yang menghasilkan output berukuran tetap) dan pemeriksaan Pedersen-Merkle (teknik verifikasi kriptografis menggunakan komitmen Pedersen dan pohon Merkle untuk memastikan integritas data dan konsistensi). Desain Noir, mirip dengan Rust, mencakup fitur-fitur yang akrab bagi pengembang aplikasi, seperti fungsi, submodul, tipe yang didefinisikan pengguna (structs), pernyataan kondisional, loop, dan konstanta global. Selain itu, upaya sedang dilakukan untuk mengembangkan generic dan fungsi kelas pertama untuk meningkatkan ekspresivitas Noir lebih lanjut.
Penting untuk dicatat bahwa Noir masih berkembang, dengan potensi keterbatasan dan bug. Namun, tim pengembang berkomitmen untuk perbaikan dan optimalisasi berkelanjutan.
o1js, sebelumnya dikenal sebagai SnarkyJS, adalah perpustakaan TypeScript yang dikembangkan oleh 0(1) Labs untuk membuat kontrak pintar menggunakan bahasa pemrograman SNARK. Ini sepenuhnya memanfaatkan teknologi yang sudah mapan seperti Node.js dan kompatibilitas browser untuk memastikan akses mudah dan kenyamanan bagi para pengembang.
o1js terintegrasi dengan mulus dengan pustaka dan alat JavaScript dan TypeScript, menyediakan pengembang dengan ekosistem yang kuat dan dukungan komunitas yang luas. Integrasi ini menyederhanakan proses pengembangan dan mengurangi kurva pembelajaran yang terkait dengan mengadopsi lingkungan pengembangan baru. Selain itu, sepenuhnya mendukung Visual Studio Code (VS Code), editor kode yang banyak digunakan, memungkinkan pengembang untuk memanfaatkan sepenuhnya fitur seperti penyelesaian kode, penyorotan sintaks, dan debugging untuk meningkatkan pengalaman pengembangan.
Secara esensial, o1js adalah kerangka kerja ZK multifungsional yang menawarkan alat kunci yang diperlukan untuk membuat bukti ZK. Ini mendukung beragam program ZK, mencakup berbagai operasi terbukti bawaan seperti aritmatika dasar, hashing, penandatanganan, operasi boolean, perbandingan, dan lainnya. Dengan kerangka kerja o1js, Anda dapat membangun zkApps pada Protokol Mina, kontrak pintar ini dieksekusi di sisi klien dengan input pribadi.
Terutama, pada awal September 2023, tim 0(1) Labs mengumumkan transisi dari SnarkyJS ke o1js, menekankan komitmen mereka untuk meningkatkan kinerja. Yang patut dicatat adalah pencapaian mereka dalam mengurangi waktu pemuatan pustaka sebanyak 3-4 kali lipat, yang merujuk pada waktu yang diperlukan untuk mengimpor o1js, sebuah proses yang dapat memblokir utas utama. Untuk aplikasi web, waktu pemuatan sangat penting untuk waktu eksekusi JavaScript dan keseluruhan penguraian halaman. Selain itu, tim juga memperbarui Mina zkApp CLI, meningkatkan pengalaman membangun antarmuka pengguna, dan mengumumkan peningkatan lebih lanjut pada Archive Node API untuk meningkatkan keandalannya dan kejelasannya.
Blockchain Aleo menonjol dalam bidang kontrak pintar dengan penekanan kuat pada perlindungan privasi. Pada intinya adalah bahasa pemrograman Leo, bahasa berjenis statis yang terinspirasi dari Rust. Dirancang khusus untuk mengembangkan aplikasi privat, Leo mendukung para pencipta yang bertujuan membangun ekosistem terdesentralisasi yang aman dan rahasia. Yang benar-benar membedakan Leo adalah peran pionirnya dalam memperkenalkan toolkit komprehensif untuk aplikasi zero-knowledge universal. Toolkit ini meliputi kerangka pengujian, registri paket, parser impor, kompilator jarak jauh, dan pembangkit teorema.
Konsep Leo berasal dari tim pengembangan yang dipimpin oleh Howard Wu, membayangkan sebuah sistem yang memberdayakan pengembang untuk membangun aplikasi terdesentralisasi dengan prioritas pada privasi dan keamanan. Menggambar dari prinsip-prinsip Rust, desain Leo juga menggabungkan unsur-unsur yang mirip dengan JavaScript, memfasilitasi rasa keakraban dan kemudahan selama proses pengembangan. Selain itu, Leo bertujuan untuk mempercepat dan merampingkan pengembangan dengan menawarkan platform pengujian terintegrasi, registri paket, dan konverter impor. Integrasi ini memungkinkan pengembang untuk fokus pada logika inti aplikasi mereka tanpa terhambat oleh masalah infrastruktur.
Sebuah fitur yang mencolok dari Leo adalah kompilernya, yang mentransformasikan program menjadi format bukti R1CS tingkat rendah. Keunikan dari kompilator Leo terletak pada proses verifikasi formal yang ketat. Verifikasi ini penting karena kerentanan dapat muncul pada berbagai tahap, mulai dari pemrograman awal hingga pemeriksaan dan kompilasi. Dengan melakukan pemeriksaan matematis yang ketat untuk memastikan kompilator sejalan dengan niat pemrogram, Leo bertujuan untuk meminimalkan risiko kesalahan yang tidak terdeteksi atau kerentanan potensial, terutama dalam konteks L2, ZK-rollups, atau program pribadi di platform Leo.
Circom, bahasa khusus domain (DSL) yang dirancang dengan cermat untuk pengembangan sirkuit ZK, adalah hasil kreasi kolaboratif oleh Jordi Baylina dan tim iden3. Compiler Circom, yang ditulis dalam Rust, secara utama berfungsi untuk mengkompilasi sirkuit yang dikembangkan menggunakan bahasa Circom. Secara mencolok, Circom telah muncul sebagai pilihan utama untuk aplikasi ZK yang luar biasa di dunia nyata, seperti Dark Forest dan Tornado Cash. Popularitasnya disebabkan oleh performanya yang mengesankan, termasuk waktu bukti browser yang cepat melalui bukti WASM yang dioptimalkan, bukti server-sisi yang efisien melalui rapidsnark, dan verifikasi on-chain yang efektif.
Namun, penting untuk mengenali bahwa fungsionalitas Circom terutama difokuskan pada pengembangan sirkuit ZK, yang mungkin membuatnya kurang cocok untuk tugas komputasi yang lebih luas. Pengembang yang mencari kemampuan yang lebih fleksibel untuk memenuhi kebutuhan pengembangan yang lebih luas mungkin menemukan kemampuan Circom agak terbatas. Dalam kasus seperti itu, pengembang mungkin perlu mengintegrasikan bahasa pemrograman atau kerangka kerja lain untuk memenuhi persyaratan pengembangan yang lebih komprehensif.
Sumber Gambar: Circom
Kompatibilitas Circom terutama berfokus pada sistem Zero-Knowledge Proof (ZKP) yang banyak digunakan seperti snarkjs dan libsnark. Kompatibilitas ini memastikan integrasi yang lancar dengan sistem-sistem yang umum digunakan ini, tetapi juga berarti bahwa sirkuit Circom mewarisi fitur-fitur khusus dan batasan yang terkait dengan dependensi-dependensi ini. Pengembang yang lebih memilih atau membutuhkan sistem ZKP alternatif mungkin menghadapi tantangan kompatibilitas atau perlu berinvestasi lebih banyak usaha untuk menyesuaikan dan mengintegrasikan sirkuit yang dihasilkan oleh Circom ke dalam sistem pilihan mereka.
Lurk adalah dialek Lisp yang berlingkup statis yang dipengaruhi oleh Scheme dan Common Lisp, dengan fitur unik: memungkinkan bukti langsung dari kebenaran eksekusi program menggunakan zk-SNARKs, memungkinkan verifikasi yang kompak dan efisien. Penggunaan utama Lurk termasuk:
Komputasi yang dapat diverifikasi: Lurk memungkinkan bukti kebenaran dari ekspresinya dalam kondisi pengetahuan nol, meningkatkan kepercayaan pada hasil komputasi.
Zero Knowledge: Pengguna dapat membuktikan pengetahuan tanpa mengungkapkan informasi spesifik di luar input publik, sehingga melindungi privasi.
Data yang Dapat Diakses Konten: Setiap program Lurk dilengkapi dengan pengenal konten unik (CID), sehingga kompatibel dengan IPFS dan IPLD.
Turing Completeness: Lurk mendukung pembuatan dan bukti pernyataan komputasi sembarang.
Fungsi Orde Tinggi: Fungsi yang tersembunyi dapat menerima dan mengembalikan fungsi lain, memfasilitasi pemrograman fungsional yang ekspresif.
Komputasi dengan Data Pribadi: Lurk memungkinkan penanganan data pribadi sambil memastikan output yang terbukti benar tanpa kebocoran privasi.
Dalam membangun rangkaian tujuan umum, Lurk secara luas menggunakan alokator memori “cons” Lisp, yang mengombinasikan ekspresi dan menghasilkan referensi melalui hashing. Kuncinya terletak pada membuktikan bahwa dua ekspresi memang menghasilkan referensi yang sama. Verifikasi ini memungkinkan Lurk untuk melakukan komputasi dalam rangkaian snark.
Fungsionalitas Lurk sangat beragam, termasuk dukungan untuk rekursi tak terbatas, perulangan, alur kontrol kondisional, dan beberapa sistem pembuktian backend seperti Groth16, SnarkPack+, dan Nova. Fleksibilitas ini membuka pintu bagi berbagai aplikasi, termasuk komputasi yang dapat diverifikasi, penanganan data pribadi, dan menjalankan program Turing lengkap dalam sirkuit snark.
Seiring dengan bertambahnya keragaman aplikasi ZK, prospek DSL dalam domain ZK sangat luas. Kunci keberhasilan DSL terletak pada pembentukan komunitas yang berkembang dan perpustakaan yang kaya untuk memperkaya pengalaman pengembang. DSL yang memprioritaskan kompatibilitas dengan perpustakaan yang sudah ada dapat sepenuhnya memanfaatkan pengetahuan dan sumber daya dari komunitas pengembang yang lebih luas. Pendekatan ini membantu integrasi yang lebih lancar, mempercepat pengembangan, dan menawarkan fleksibilitas yang lebih besar dalam mengimplementasikan aplikasi ZK. Upaya kolaboratif seperti ini sangat penting dalam mengembangkan ekosistem yang lebih kuat di sekitar DSL, menawarkan manfaat yang nyata bagi para pengembang, dan lebih mempercepat adopsi serta efektivitas teknologi ZK.
Bukti Pengetahuan Nol (ZKP) adalah alat kriptografi yang kuat yang dapat memvalidasi keakuratan perhitungan sambil melindungi privasi data input. Bahasa Khusus Domain (DSL) memainkan peran penting sebagai bagian dari infrastruktur kunci ini, menyederhanakan proses pengembangan dan verifikasi sirkuit ZKP. Mereka bertindak sebagai jembatan penting antara konsep abstrak dan representasi sirkuit yang tepat yang diperlukan oleh sistem bukti.
Salah satu tantangan utama yang dihadapi oleh sistem bukti adalah menerjemahkan konsep abstrak tingkat tinggi ke dalam rangkaian praktis. Namun, munculnya DSL telah mengatasi isu ini dengan memfasilitasi struktur konsep-konsep abstrak ini dengan cara yang lebih konkret dan dapat diimplementasikan, sehingga memenuhi tantangan ini.
Dalam satu dekade terakhir, kita telah menyaksikan peningkatan signifikan dalam jumlah dan keragaman DSL. Keberagaman ini dalam bidang tersebut terlihat dalam pengembangan berbagai bahasa sirkuit, termasuk Noir, Leo, dan Zinc. Apakah Anda membutuhkan pilihan yang serbaguna seperti Circom atau solusi yang disesuaikan untuk platform tertentu seperti Cairo, Anda dapat memilih dari berbagai bahasa dan kerangka kerja untuk menulis sirkuit ZKP.
Dalam artikel ini, kami akan menjelajahi bahasa pemrograman ZK utama yang aktif digunakan oleh pengembang dan menganalisis fitur terbaik dari setiap bahasa.
Cairo adalah bahasa inti untuk program komputasi umum yang mendukung bukti STARK. Telah memainkan peran kunci dalam kesuksesan StarkNet dan StarkEx, mendorong skalabilitas aplikasi di Ethereum mainnet. Terutama, Cairo telah berperan penting dalam mendukung berbagai aplikasi, termasuk dYdX, Sorare, dan Immutable X. Nama “Cairo” berasal dari singkatan “CPU Algebraic Intermediate Representation.” Di ranah bukti pengetahuan nol, ia berfungsi mirip dengan bahasa rakitan, memungkinkan pengembang yang akrab dengan bahasa pemrograman tingkat rendah seperti C, C++, atau Solidity untuk memulai lebih mudah.
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 melakukan berbagai tugas dalam program Cairo. Selain itu, salah satu keunggulan signifikan Cairo adalah skalabilitasnya, memungkinkan integrasi yang fleksibel dari fitur dan fungsionalitas baru.
Dalam sistem ZK, efisiensi dan skalabilitas adalah faktor penting, dan Cairo memenuhi persyaratan ini dengan menekankan keduanya. Bahasa ini mengintegrasikan strategi optimisasi, termasuk pengurangan kendala dan eliminasi loop, untuk mengurangi beban komputasi yang biasanya terkait dengan sirkuit ZK. Optimisasi dalam desain sirkuit menghasilkan pembangkitan bukti dan verifikasi yang lebih cepat, menjadikannya pilihan yang ideal untuk aplikasi yang membutuhkan throughput tinggi dan latensi minimal.
Perluasan dan pengembangan Kairo telah luar biasa, menyaksikan lonjakan luar biasa dalam jumlah pengembang penuh waktu dalam dua tahun terakhir ini. Lonjakan ini menunjukkan fleksibilitas Kairo, karena penggunaannya tidak terbatas pada blockchain tetapi signifikan dalam konteks apa pun yang memerlukan verifikasi komputasi. Oleh karena itu, kita dapat mengantisipasi pertumbuhan signifikan lebih lanjut dalam pengembang yang mengadopsi Kairo.
Pada 28 September 2023, Starknet meluncurkan upgrade besar-besaran untuk bahasa pemrogramannya dengan Cairo v2.3.0. Versi ini menandai kemajuan signifikan dalam membuat kontrak lebih modular dengan memperkenalkan fitur-fitur baru, pilihan penyimpanan, dan manajemen acara, meningkatkan potensi kontrak pintar. Integrasi komponen-komponen ini menawarkan cara yang fleksibel untuk memperluas fungsionalitas kontrak, memungkinkan modul-modul pihak ketiga untuk meningkatkan fungsionalitas kontrak.
Zinc adalah bahasa pemrograman yang dirancang khusus untuk membuat kontrak pintar dan sirkuit SNARK di platform zkSync. Ini mengadopsi sintaks Rust, mengintegrasikan elemen Solidity, dan menawarkan fungsionalitas unik.
Keunikan Zinc terletak pada kemudahannya bagi pengguna. Anda dapat menulis kode yang aman tanpa perlu menyelami semua detail kompleks dari Sistem Kendala Orde Pertama (R1CS). Zinc menekankan ketidakberubahannya, memberikannya karakteristik fungsional yang melekat. Hal ini berarti Zinc memprioritaskan data yang tidak berubah dan evaluasi fungsi, sehingga mengurangi efek samping dan memudahkan penulisan kode kontrak pintar yang lebih bersih dan kurang rentan terhadap kesalahan.
Selain itu, Zinc mencakup operasi matematika yang aman untuk mencegah potensi overflow, memastikan keamanan semua operasi. Meskipun memiliki beberapa keterbatasan, seperti ketiadaan loop tak terbatas dan rekursi, Zinc menyederhanakan proses debugging melalui pelacakan log konsol. Log ini memudahkan pelacakan dan pemecahan masalah transaksional pada jaringan uji atau jaringan utama, sehingga meningkatkan pengalaman debugging.
Noir, sebuah DSL sumber terbuka yang dikembangkan oleh Aztec dan berbasis Rust, bertujuan 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 yang kompatibel dengan sistem pembuktian apa pun. Noir berfokus pada keamanan, kesederhanaan, dan kinerja, menawarkan sintaks tingkat tinggi yang mirip dengan Rust. Ini mengabstraksi keamanan kriptografi, menyederhanakan penggunaan primitif kriptografi sambil mempertahankan kinerja tinggi.
Noir memiliki keunggulan signifikan dalam memperluas rentang aplikasi yang dapat memanfaatkan kemampuan perlindungan privasi yang ditawarkan oleh ZKP, sehingga meningkatkan efisiensi privasi dan verifikasi. Ini dikompilasi ke dalam representasi intermediate yang disebut Abstract Circuit Intermediate Representation (Acer), yang kemudian dapat dikompilasi lebih lanjut menjadi R1CS. Pemisahan sistem pembuktian backend dari bahasa itu sendiri memungkinkan Noir mendukung berbagai sistem pembuktian, termasuk Aztec Brettenberg, Turbo Plonk, dan integrasi masa depan potensial seperti Groth16 dan Halo2.
Bahasa ini mencakup perpustakaan standar yang menampilkan fungsionalitas yang efisien seperti SHA-256 (fungsi hash kriptografis yang menghasilkan output berukuran tetap) dan pemeriksaan Pedersen-Merkle (teknik verifikasi kriptografis menggunakan komitmen Pedersen dan pohon Merkle untuk memastikan integritas data dan konsistensi). Desain Noir, mirip dengan Rust, mencakup fitur-fitur yang akrab bagi pengembang aplikasi, seperti fungsi, submodul, tipe yang didefinisikan pengguna (structs), pernyataan kondisional, loop, dan konstanta global. Selain itu, upaya sedang dilakukan untuk mengembangkan generic dan fungsi kelas pertama untuk meningkatkan ekspresivitas Noir lebih lanjut.
Penting untuk dicatat bahwa Noir masih berkembang, dengan potensi keterbatasan dan bug. Namun, tim pengembang berkomitmen untuk perbaikan dan optimalisasi berkelanjutan.
o1js, sebelumnya dikenal sebagai SnarkyJS, adalah perpustakaan TypeScript yang dikembangkan oleh 0(1) Labs untuk membuat kontrak pintar menggunakan bahasa pemrograman SNARK. Ini sepenuhnya memanfaatkan teknologi yang sudah mapan seperti Node.js dan kompatibilitas browser untuk memastikan akses mudah dan kenyamanan bagi para pengembang.
o1js terintegrasi dengan mulus dengan pustaka dan alat JavaScript dan TypeScript, menyediakan pengembang dengan ekosistem yang kuat dan dukungan komunitas yang luas. Integrasi ini menyederhanakan proses pengembangan dan mengurangi kurva pembelajaran yang terkait dengan mengadopsi lingkungan pengembangan baru. Selain itu, sepenuhnya mendukung Visual Studio Code (VS Code), editor kode yang banyak digunakan, memungkinkan pengembang untuk memanfaatkan sepenuhnya fitur seperti penyelesaian kode, penyorotan sintaks, dan debugging untuk meningkatkan pengalaman pengembangan.
Secara esensial, o1js adalah kerangka kerja ZK multifungsional yang menawarkan alat kunci yang diperlukan untuk membuat bukti ZK. Ini mendukung beragam program ZK, mencakup berbagai operasi terbukti bawaan seperti aritmatika dasar, hashing, penandatanganan, operasi boolean, perbandingan, dan lainnya. Dengan kerangka kerja o1js, Anda dapat membangun zkApps pada Protokol Mina, kontrak pintar ini dieksekusi di sisi klien dengan input pribadi.
Terutama, pada awal September 2023, tim 0(1) Labs mengumumkan transisi dari SnarkyJS ke o1js, menekankan komitmen mereka untuk meningkatkan kinerja. Yang patut dicatat adalah pencapaian mereka dalam mengurangi waktu pemuatan pustaka sebanyak 3-4 kali lipat, yang merujuk pada waktu yang diperlukan untuk mengimpor o1js, sebuah proses yang dapat memblokir utas utama. Untuk aplikasi web, waktu pemuatan sangat penting untuk waktu eksekusi JavaScript dan keseluruhan penguraian halaman. Selain itu, tim juga memperbarui Mina zkApp CLI, meningkatkan pengalaman membangun antarmuka pengguna, dan mengumumkan peningkatan lebih lanjut pada Archive Node API untuk meningkatkan keandalannya dan kejelasannya.
Blockchain Aleo menonjol dalam bidang kontrak pintar dengan penekanan kuat pada perlindungan privasi. Pada intinya adalah bahasa pemrograman Leo, bahasa berjenis statis yang terinspirasi dari Rust. Dirancang khusus untuk mengembangkan aplikasi privat, Leo mendukung para pencipta yang bertujuan membangun ekosistem terdesentralisasi yang aman dan rahasia. Yang benar-benar membedakan Leo adalah peran pionirnya dalam memperkenalkan toolkit komprehensif untuk aplikasi zero-knowledge universal. Toolkit ini meliputi kerangka pengujian, registri paket, parser impor, kompilator jarak jauh, dan pembangkit teorema.
Konsep Leo berasal dari tim pengembangan yang dipimpin oleh Howard Wu, membayangkan sebuah sistem yang memberdayakan pengembang untuk membangun aplikasi terdesentralisasi dengan prioritas pada privasi dan keamanan. Menggambar dari prinsip-prinsip Rust, desain Leo juga menggabungkan unsur-unsur yang mirip dengan JavaScript, memfasilitasi rasa keakraban dan kemudahan selama proses pengembangan. Selain itu, Leo bertujuan untuk mempercepat dan merampingkan pengembangan dengan menawarkan platform pengujian terintegrasi, registri paket, dan konverter impor. Integrasi ini memungkinkan pengembang untuk fokus pada logika inti aplikasi mereka tanpa terhambat oleh masalah infrastruktur.
Sebuah fitur yang mencolok dari Leo adalah kompilernya, yang mentransformasikan program menjadi format bukti R1CS tingkat rendah. Keunikan dari kompilator Leo terletak pada proses verifikasi formal yang ketat. Verifikasi ini penting karena kerentanan dapat muncul pada berbagai tahap, mulai dari pemrograman awal hingga pemeriksaan dan kompilasi. Dengan melakukan pemeriksaan matematis yang ketat untuk memastikan kompilator sejalan dengan niat pemrogram, Leo bertujuan untuk meminimalkan risiko kesalahan yang tidak terdeteksi atau kerentanan potensial, terutama dalam konteks L2, ZK-rollups, atau program pribadi di platform Leo.
Circom, bahasa khusus domain (DSL) yang dirancang dengan cermat untuk pengembangan sirkuit ZK, adalah hasil kreasi kolaboratif oleh Jordi Baylina dan tim iden3. Compiler Circom, yang ditulis dalam Rust, secara utama berfungsi untuk mengkompilasi sirkuit yang dikembangkan menggunakan bahasa Circom. Secara mencolok, Circom telah muncul sebagai pilihan utama untuk aplikasi ZK yang luar biasa di dunia nyata, seperti Dark Forest dan Tornado Cash. Popularitasnya disebabkan oleh performanya yang mengesankan, termasuk waktu bukti browser yang cepat melalui bukti WASM yang dioptimalkan, bukti server-sisi yang efisien melalui rapidsnark, dan verifikasi on-chain yang efektif.
Namun, penting untuk mengenali bahwa fungsionalitas Circom terutama difokuskan pada pengembangan sirkuit ZK, yang mungkin membuatnya kurang cocok untuk tugas komputasi yang lebih luas. Pengembang yang mencari kemampuan yang lebih fleksibel untuk memenuhi kebutuhan pengembangan yang lebih luas mungkin menemukan kemampuan Circom agak terbatas. Dalam kasus seperti itu, pengembang mungkin perlu mengintegrasikan bahasa pemrograman atau kerangka kerja lain untuk memenuhi persyaratan pengembangan yang lebih komprehensif.
Sumber Gambar: Circom
Kompatibilitas Circom terutama berfokus pada sistem Zero-Knowledge Proof (ZKP) yang banyak digunakan seperti snarkjs dan libsnark. Kompatibilitas ini memastikan integrasi yang lancar dengan sistem-sistem yang umum digunakan ini, tetapi juga berarti bahwa sirkuit Circom mewarisi fitur-fitur khusus dan batasan yang terkait dengan dependensi-dependensi ini. Pengembang yang lebih memilih atau membutuhkan sistem ZKP alternatif mungkin menghadapi tantangan kompatibilitas atau perlu berinvestasi lebih banyak usaha untuk menyesuaikan dan mengintegrasikan sirkuit yang dihasilkan oleh Circom ke dalam sistem pilihan mereka.
Lurk adalah dialek Lisp yang berlingkup statis yang dipengaruhi oleh Scheme dan Common Lisp, dengan fitur unik: memungkinkan bukti langsung dari kebenaran eksekusi program menggunakan zk-SNARKs, memungkinkan verifikasi yang kompak dan efisien. Penggunaan utama Lurk termasuk:
Komputasi yang dapat diverifikasi: Lurk memungkinkan bukti kebenaran dari ekspresinya dalam kondisi pengetahuan nol, meningkatkan kepercayaan pada hasil komputasi.
Zero Knowledge: Pengguna dapat membuktikan pengetahuan tanpa mengungkapkan informasi spesifik di luar input publik, sehingga melindungi privasi.
Data yang Dapat Diakses Konten: Setiap program Lurk dilengkapi dengan pengenal konten unik (CID), sehingga kompatibel dengan IPFS dan IPLD.
Turing Completeness: Lurk mendukung pembuatan dan bukti pernyataan komputasi sembarang.
Fungsi Orde Tinggi: Fungsi yang tersembunyi dapat menerima dan mengembalikan fungsi lain, memfasilitasi pemrograman fungsional yang ekspresif.
Komputasi dengan Data Pribadi: Lurk memungkinkan penanganan data pribadi sambil memastikan output yang terbukti benar tanpa kebocoran privasi.
Dalam membangun rangkaian tujuan umum, Lurk secara luas menggunakan alokator memori “cons” Lisp, yang mengombinasikan ekspresi dan menghasilkan referensi melalui hashing. Kuncinya terletak pada membuktikan bahwa dua ekspresi memang menghasilkan referensi yang sama. Verifikasi ini memungkinkan Lurk untuk melakukan komputasi dalam rangkaian snark.
Fungsionalitas Lurk sangat beragam, termasuk dukungan untuk rekursi tak terbatas, perulangan, alur kontrol kondisional, dan beberapa sistem pembuktian backend seperti Groth16, SnarkPack+, dan Nova. Fleksibilitas ini membuka pintu bagi berbagai aplikasi, termasuk komputasi yang dapat diverifikasi, penanganan data pribadi, dan menjalankan program Turing lengkap dalam sirkuit snark.
Seiring dengan bertambahnya keragaman aplikasi ZK, prospek DSL dalam domain ZK sangat luas. Kunci keberhasilan DSL terletak pada pembentukan komunitas yang berkembang dan perpustakaan yang kaya untuk memperkaya pengalaman pengembang. DSL yang memprioritaskan kompatibilitas dengan perpustakaan yang sudah ada dapat sepenuhnya memanfaatkan pengetahuan dan sumber daya dari komunitas pengembang yang lebih luas. Pendekatan ini membantu integrasi yang lebih lancar, mempercepat pengembangan, dan menawarkan fleksibilitas yang lebih besar dalam mengimplementasikan aplikasi ZK. Upaya kolaboratif seperti ini sangat penting dalam mengembangkan ekosistem yang lebih kuat di sekitar DSL, menawarkan manfaat yang nyata bagi para pengembang, dan lebih mempercepat adopsi serta efektivitas teknologi ZK.