Created on 20th July 2024
•
Con este proyecto nos trazamos dos objetivos principales. El primero era construir una dapp funcional y amigable en el que los usuarios pudieran apreciar que la privacidad total y necesaria en transacciones la podemos garantizar con ZK. Se conoce sobre los marcos regulatorios de aplicaciones de este tipo que han sido sancionadas como Tornado Cash. Pero nuestro segundo propósito y no menos importante era detallar toda la documentación en cuanto a como construimos las pruebas zkSNARKs. Este resultado al final fue un documento que le llamamos "ZK de Cero a Experto en 3hrs". Nuestro propósito es educar a la comunidad desde los conocimientos básicos y necesarios para entender esta tecnología paso por paso, de forma práctica y amigable. Muchos llaman a ZK pura magia :) pero realmente las primitivas criptográficas, las matematicas hacen que estos objetivos sean posible. Adoptamos Scroll Sepolia porque consideramos que las transacciones son mucho más económicas porque es una blockchain de Tesnet, ZKEVM compatible totalmente con EVM. Esto que comento y los árboles de Merkles históricos reducen los costos en blockchain de nuestra dapp-zkatm.
Durante el desarrollo del proyecto una de las funcionalidades que nos tomó tiempo fue al comienzo, desplegar el smart contrato Hasher.sol que ejecuta la función de Poseidon para 2 argumentos. Por medio de una Interfaz en Scroll Sepolia, a partir del ABI y Bytecode que estan implementados en circomlibjs. Tuvimos que bajar la versión de circomlib
yarn add circomlibjs-old@npm:[email protected]
Esto era necesario para hacer match con el circuito de Poseidon de la librería circomlib. El último inconveniente detectado fue un proceso parecido en el momento de parcear los datos para presentárselos desde el cliente a la función withdraw, algo que realmente no es complicado, pero si hay que ajustar la versión adecuada para convertir con bigInt a uint256. Es algo que nos quedó pendiente mejorar. Uno de los puntos claves que tenemos en cuenta es que las pruebas de conocimientos cero se deben generar offchain debido al costo computacional requerido dependiendo de las restricciones de los circuitos construidos. Además como una capa adicional de privaciadad las ZKP (deben ser generadas en cliente). Esto trae como resultado que para agilizar este proceso pudieramos haber utilizado tecnologías como wasm o servicios en la nube por ejemplo Irreducible que ofrece poder computacional con arquitectura FPGA. A pesar de que nuestros circuitos eran bien considerados en cuanto restriciones (al rededor de 1000), el deploy de la dapp en Vercel fue factible para generar pruebas en pocos segundos. Para nuestra dapp inicial los depositos son muy pocos pero se pueden agregar con solamente aumentar el nivel del arbol.
Tracks Applied (2)