Circom

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:

  1. Tulis sirkuit dalam file .circom (bahasa template kustom)
  2. Kompilasi dengan compiler circom → menghasilkan file constraint R1CS + kalkulator witness
  3. Trusted setup → hasilkan proving key (.zkey) dan verification key
  4. Prove dengan snarkjs: berikan input privat (witness) → hasilkan proof
  5. 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 powersoftau dan snarkjs 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


Sumber