ZK Proofs: cómo verificar sin revelar datos
Imagina que una empresa necesita demostrar a un auditor que todas sus órdenes de mantenimiento del mes fueron completadas correctamente, pero no quiere revelar los detalles específicos de cada orden. Las pruebas de conocimiento cero (ZK Proofs) hacen exactamente eso.
El circuito
Basis Network utiliza un circuito Circom llamado batch_verifier que toma un lote de 4 transacciones, calcula un hash Poseidon encadenado y verifica que el resultado coincide con la raíz publicada. El circuito tiene 742 constraints, suficientes para la prueba de concepto y escalables a lotes mayores en producción.
El flujo completo
1. La empresa genera un lote de transacciones con sus hashes y montos.
2. El circuito Circom compila el lote y genera un witness.
3. SnarkJS produce una prueba Groth16 usando la clave de proving del trusted setup.
4. La prueba se envía al contrato ZKVerifier en Basis Network.
5. El contrato utiliza los precompilados EIP-196 (ecAdd, ecMul) y EIP-197 (ecPairing) para verificar la prueba on-chain.
6. Si la verificación pasa, el lote queda registrado como verificado.
Por qué Groth16
Elegimos Groth16 por tres razones: (1) es el esquema más eficiente en gas para verificación on-chain (~200K gas), (2) tiene el ecosistema de herramientas más maduro (Circom + SnarkJS), y (3) está probado en producción por proyectos como Polygon zkEVM e Iden3.