
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).
$ git clone https://github.com/albertobas/zk-connect-four.git
$ cd zk-connect-four
$ cp .env.example .env # fill in tha values for each variable in ./.env, NEXT_PUBLIC_NETWORK_NAME must be either sepolia or localhost.
$ pnpm install
$ pnpm dev
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:
$ pnpm node
Entonces, abra otra pestaña y:
$ pnpm compile && pnpm generate && pnpm deploy:contracts && pnpm export
$ pnpm dev
Testeando el circuito
$ pnpm test
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.