Circom adalah bahasa pemrograman sirkuit zero-knowledge paling banyak diadopsi, dibuat oleh tim iden3 (Jorge Izquierdo, Jordi Baylina, dan kolaborator) dan digunakan untuk membangun arithmetic circuit yang dapat dibuktikan dengan sistem proof zkSNARK — dengan ekosistem Circom menjadi pusat toolkit developer ZK: sebagian besar aplikasi ZK publik (sirkuit mixer asli Tornado Cash, sirkuit voting anonim Semaphore, banyak komponen zkRollup) ditulis dalam Circom.
Cara Kerja Circom
Alur pengembangan:
- Tulis sirkuit dalam file
.circom(bahasa template kustom) - Kompilasi dengan compiler
circom→ menghasilkan file constraint R1CS + kalkulator witness - Trusted setup → hasilkan proving key (
.zkey) dan verification key - Prove dengan snarkjs: berikan input privat (witness) → hasilkan proof
- Verifikasi on-chain atau off-chain: kirim proof + input publik ke kontrak verifier
Konsep Kunci:
- Signals: Variabel dalam sirkuit (bisa berupa input, output, atau intermediate)
- Constraints: Persamaan yang harus berlaku agar proof valid (
===) - Templates: Komponen sirkuit yang dapat digunakan kembali (seperti fungsi)
- Components: Template yang diinstansiasi dalam sirkuit
- Witness: Kumpulan semua nilai signal yang memenuhi semua constraint
Pola Bug Kritis
“`circom
// BURUK — mengassign tapi TIDAK mengconstraint (kerentanan soundness!)
c <– a * b;
// BAIK — mengassign DAN mengconstraint (keduanya ditegakkan)
c <== a * b;
“`
Kesalahan ini — menggunakan <-- alih-alih <== — adalah salah satu bug paling umum dan berbahaya dalam kode Circom. Sirkuit yang under-constrained dapat memungkinkan prover menghasilkan proof yang valid untuk pernyataan yang salah.
Integrasi snarkjs
Circom dipasangkan dengan snarkjs (library JavaScript/Node.js):
- Setup:
snarkjs powersoftaudansnarkjs groth16 setup - Prove:
snarkjs groth16 prove(satu baris, diberikan witness + proving key) - Verify:
snarkjs groth16 verify(off-chain) - Export verifier:
snarkjs zkey export solidityverifier→ kontrak Solidity untuk verifikasi on-chain
Sirkuit Circom yang Terkenal
| Sirkuit | Aplikasi | Penggunaan |
|---|---|---|
| Tornado Cash | Privacy mixer | Skema nullifier/commitment |
| Semaphore | Identitas anonim | Proof keanggotaan grup |
| Hermez rollup | zkRollup | Validitas transaksi |
| MACI | Voting | Skema voting anti-suap |
| zkEmail | Proof email | Buktikan kepemilikan email |
Circom vs. Alternatif ZK
| Bahasa | Pendekatan | Tradeoff |
|---|---|---|
| Circom | Kontrol langsung atas constraint R1CS | Powerful tapi rawan bug under-constraint |
| Noir (Aztec) | Bahasa ZK level lebih tinggi | Lebih aman, kurang kontrol granular |
| Cairo (StarkNet) | Untuk STARK proof di StarkNet | Ekosistem berbeda (STARK vs SNARK) |
| Halo2 | Library Rust dari Zcash | Kuat tapi kurva pembelajaran tinggi |
Kritik
- Bug under-constraint: Pengembangan sirkuit Circom membutuhkan perhatian cermat terhadap potensi bug under-constrained — pola
<--vs<==telah menyebabkan kerentanan nyata dalam protokol yang di-deploy. Audit sirkuit Circom memerlukan keahlian ZK khusus. - Kurva pembelajaran: Meskipun lebih mudah dari alternatif level rendah, Circom masih memerlukan pemahaman mendalam tentang sistem proof zkSNARK dan arithmetic circuit untuk digunakan dengan benar.
Sentimen Media Sosial
- r/zkproofs dan r/ethereum: Circom diakui sebagai fondasi ekosistem ZK yang penting; pengembang ZK memuji ekosistem tooling yang matang (snarkjs + Circom) meski menyadari risiko under-constraint.
- X/Twitter: Komunitas pengembang ZK aktif mendiskusikan tradeoff antara Circom dan Noir/Cairo; tutorial Circom populer di komunitas hackathon Ethereum.
- Telegram (komunitas kripto Indonesia): Topik teknis ZK seperti Circom masih relatif niche di komunitas kripto Indonesia; lebih banyak dibahas oleh developer blockchain daripada pengguna umum.
Terakhir diperbarui: 2026-04
Istilah Terkait
Lihat Juga
- Mengapa Audit Smart Contract Gagal
- Apakah Jaringan Layer 2 Terdesentralisasi?
- Tukar kripto dengan ChangeNOW
Sumber
- Circom Documentation — dokumentasi resmi bahasa Circom.
- iden3 GitHub — repositori open-source Circom.
- snarkjs GitHub — library JavaScript untuk pembuatan dan verifikasi proof.
- Semaphore Protocol — contoh nyata protokol yang dibangun dengan Circom.