zk Connect Four

zk Connect Four

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.

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:

Notas

Este proyecto se publica bajo licencia GNU General Public v3.0.


Proyectos relacionados

Olive Oil Trust

Olive Oil Trust

Olive Oil Trust es un sistema de trazabilidad para el aceite de oliva implementado en Ethereum que adapta el flujo de trabajo de la cadena de valor larga del aceite de oliva a la cadena de bloques mediante el uso de contratos inteligentes.

Ver más
Bank Microservices

Bank Microservices

Bank Microservices es mi propuesta de una aplicación, con arquitectura basada en microservicios y utilizando el stack MERN.

Ver más
albertobas.com

albertobas.com

Esta es mi página web personal, donde publico artículos y proyectos.

Ver más

¿Preparado para #buidl?

¿Está interesado en Web3 o en las sinergias entre la tecnología blockchain, la inteligencia artificial y el conocimiento cero?. Entonces, no dude en contactarme por e-mail o en mi perfil de LinkedIn. También me puede encontrar en GitHub.