Tabla de contenidos
Introducción
zk Connect Four es una aplicación descentralizada de conocimiento cero que le permite jugar al juego de Conecta Cuatro contra una política de juego entrenada por un agente DQN, o contra otro usuario, y generar y verificar una prueba zk-SNARK para validar que un usuario conoce quién ha ganado una partida válida sin tener que revelar ninguna información.
Detalles técnicos
El grueso de esta aplicación se compone de (i) circuitos escritos en Circom y testeados utilizando TypeScript, (ii) contratos escritos en Solidity utilizando Hardhat y (iii) una aplicación de React escrita en TypeScript utilizando Next.js.
La política de juego que se utiliza para jugar contra un usario consiste de una red neuronal optimizada por un agente DQN en un ejercicio de aprendizaje por refuerzo utilizando PyTorch.
- Lenguaje de los circuitos: Circom
- Lenguaje de los contratos: Solidity
- Framework de contratos: Hardhat
- Framework de front end: Next.js
- Lenguaje de front end: TypeScript
- Estilos: PostCSS
- Manager de dependencias de Python: Poetry
- Framework de aprendizaje automático: Pytorch
Perspectiva general
packages/*
: paquetes npm que contienen código y archivos de configuración que se utilizan por otros paquetes o servicios.apps/*
: workspaces que constituyen la mayor parte de la aplicación.apps/circuits/*
: workspace que incluye los circuitos escritos en Circom y un test unitario del circuito.apps/contracts/*
: workspace que engloban los contratos inteligentes escritos en lenguaje Solidity, scripts de despliegue y un archivo JSON del despliegue.apps/web/*
: workspace que incluye el front end, el cuál engloba componentes funcionales React, archivos de CSSModules, mixins de PostCSS y un archivo global CSS.
Ejecución local
Antes de ejecutar esta applicación deberá instalar pnpm y Circom, descargar el archivo oportuno de powers of Tau y pegarlo en apps/circuits/ptau (más info en este archivo readme).
Si quisiese ejecutar esta aplicación localmente y desplegar los contratos en un nodo local, reemplace sepolia
por localhost
en la variable de entorno NEXT_PUBLIC_NETWORK_NAME
(e importe los ABIs y direcciones de los contratos correspondientes en apps/web/src/components/enabled-verify-button.tsx
tras desplegar los contratos localmente y exportar los datos) y ejecute:
Entonces, abra otra pestaña y:
Testeando el circuito
Despliegue
Este proyecto se ha desplegado en esta dirección y actualmente hay soporte para la red Sepolia.
Entradas relacionadas
He escrito las siguientes entradas para explicar en detalle este proyecto:
- Cómo desarrollar una DApp de conocimiento cero
- Formación de un agente DQN en el juego de Conecta Cuatro
Notas
Este proyecto se publica bajo licencia GNU General Public v3.0.