Autor: The Mandalorian, Protocolo de red Manta

Durante el último año, cada vez más personas se han dado cuenta del poder de las herramientas criptográficas como ZK (prueba de conocimiento cero), y también hemos visto el aumento de muchas aplicaciones a prueba de conocimiento cero, como las redes sociales privadas. votación privada y DAO privado, etc. De hecho, la aplicación de la prueba de conocimiento cero es muy amplia y cualquier aplicación que requiera privacidad en la cadena puede utilizar la prueba de conocimiento cero.

En el evento ETHGlobal Hackathon durante el recién concluido ETHSanFrancisco 2022, los amigos del equipo de desarrollo de criptografía de Manta Network crearon un juego de póquer basado en zkSNARK en solo 36 horas y lo lanzaron con éxito en ApeCoin, cuatro unidades de competencia organizadas por ENS, SKALE y El optimismo ganó premios.

Dark Forest, con el que mucha gente está familiarizada, es un juego de estrategia en tiempo real (información imperfecta) basado en zkSNARK. Los juegos de información incompleta son juegos en los que el jugador no conoce todos los estados. Por ejemplo, en el póquer, las cartas en la mano del jugador son información privada y el proceso de sacar las cartas también es completamente privado. Lo interesante de la información incompleta es que puede dar lugar a una serie de estrategias de juego complejas.

En una cadena de bloques pública, es difícil crear un juego con información incompleta debido a la apertura y transparencia de los datos en la cadena. Sin embargo, a través de la tecnología de prueba de conocimiento cero, los jugadores pueden enviar públicamente acciones válidas verificables manteniendo la privacidad.

En este evento de hackathon, Manta Network creó un sistema de reparto y barajado de póquer en cadena basado en zkSNARK. Este sistema resuelve principalmente dos problemas existentes en los juegos de póquer en cadena: cómo barajar las cartas de manera justa y cómo repartir las cartas entre los jugadores de forma encubierta (de lo contrario, es posible que el juego no se pueda jugar debido a problemas de MEV).

En esencia, el póquer en cadena basado en pruebas de conocimiento cero descentraliza al crupier de cartas, y el crupier no puede controlar el juego de cartas controlando al crupier de cartas.

Cuando juegues Texas Hold'em en un cliente centralizado Web2, te encontrarás con una situación en la que la probabilidad de que te repartan una carta sea extremadamente baja. Existe una alta probabilidad de que puedas conseguir las cartas, pero no puedas sacarlas.

El objetivo es manipular el juego repartiendo cartas para que tu oponente pueda ganarte online cuando la probabilidad de ganar offline es extremadamente baja.

Por eso necesitamos el póquer descentralizado.

El sistema ZKShuffle tiene tres funciones:

ZKShuffle.setup: cada jugador genera un par de claves y junta las claves públicas correspondientes de cada jugador para generar una clave pública agregada.

ZKShuffle.shuffle_encrypt: al barajar, cada jugador debe llamar a shuffle_encrypt por turno.

Para garantizar que el cifrado y descifrado se puedan realizar en cualquier orden, utilizamos un esquema de cifrado homomórfico (esquema de cifrado homomórfico). Por ejemplo, hay tres jugadores en este juego. Después de una ronda de cifrado, cada tarjeta tendrá tres bloqueos de cifrado: Tarjeta {Alice, Bob, Charlie}.

ZKShuffle.decrypt: si desea repartir cartas a un jugador específico, cada jugador debe llamar a la función de descifrado. Por ejemplo, si la lógica del juego es repartir cartas a Charlie, la secuencia correcta debería ser: Alice obtiene la carta cifrada Card {Alice, Bob, Charlie}, usa su clave para descifrarla y luego envía la carta descifrada Card {Bob, Charlie} envía la cadena y envía una prueba de conocimiento cero para verificar la validez del descifrado.

Después de que Bob obtiene la tarjeta Card{Bob, Charlie} parcialmente descifrada enviada por Alice en la cadena, la descifra con su propia clave y envía la tarjeta Card{Charlie} y la clave para verificar la validez del descifrado en la cadena. Prueba de conocimiento cero. Finalmente, Charlie obtiene la Tarjeta {Charlie} y puede ver sus tarjetas descifrándolas con su propia clave.

El equipo de desarrollo de criptografía de Manta Network creó una demostración de póquer Texas Hold'em utilizando ZKShuffle, una aplicación descentralizada basada en Solidity, React y Ether.js. En esta demostración, cada vez que comienza una nueva ronda del juego, todos los jugadores deben realizar una ronda de configuraciones para garantizar que las cartas de la cadena se barajen de manera justa. Luego, cada jugador debe realizar una ronda de descifrado y obtener dos cartas. Con estos, los jugadores pueden jugar Texas Hold'em Poker en una cadena de bloques EVM.

Manta ha implementado actualmente esta DApp en las cadenas de bloques Optimism Goerli, Ethereum Goerli y Skale.

 

Principio de implementación

 

Todo el proyecto consta de 3 partes:

  • circuito ZK;

  • Contratos inteligentes para verificar el descifrado y la mezcla, incluido el contrato ZKShuffle y el contrato de lógica del juego DApp front-end, demostración creada con React y ether.js y la biblioteca Circomlib JS;

  • Circomlib criptográfico JS库。

En la implementación de Circom, se adopta el esquema de cifrado ElGamal y se utilizan las bibliotecas existentes de Circom, como los hashes de Poseidón.

El circuito de cifrado tiene restricciones 87308 R1CS y el tiempo de generación de prueba en la DApp es de 4,5 segundos. El circuito de descifrado tiene restricciones de 1522 R1CS y el tiempo de generación de prueba en la DApp es de 0,1 segundos. Utilice SnarkJs para generar pruebas de conocimiento cero en DApps.

El contrato inteligente consta de dos partes: el contrato marco ZKShuffle y el contrato lógico del juego de póquer. El contrato ZKShuffle simplemente encapsula la lógica de verificación ZKP y dos circuitos. El contrato lógico despliega una máquina de estados para obtener la etapa actual del juego y el orden de qué jugador es el turno desde el nodo RPC.

La DApp se implementa utilizando el marco React y Ether.js para mostrar la mesa de póquer y la animación de acción de cada jugador. Cuando se requiere que un jugador realice una acción, el jugador solo necesita hacer clic en un botón en la interfaz de usuario y usar la metamáscara para firmar la transacción.

Ver demostración

 

Acerca de la red Manta

 

Manta Network se compromete a construir un mundo Web3 mejor a través de la protección de la privacidad. El diseño del producto de Manta parte de los primeros principios y proporciona protección de privacidad de extremo a extremo para los usuarios de blockchain a través de arquitecturas criptográficas líderes como zkSNARK. Al tiempo que garantiza la privacidad, Manta combina interoperabilidad, conveniencia, alto rendimiento y auditabilidad, lo que permite a los usuarios realizar transferencias y transacciones privadas entre cualquier activo de parachain. La visión de Manta es proporcionar servicios de protección de la privacidad más convenientes para todo el mundo blockchain.

El equipo fundador de Manta está formado por varios veteranos, profesores y académicos de las criptomonedas cuya experiencia incluye la Universidad de Harvard, el MIT y Algorand. Las instituciones de inversión de Manta incluyen Polychain, ParaFi, Binance Labs, Multicoin, CoinFund, Alameda, DeFiance e Hypersphere, etc. Manta también es receptor oficial de una subvención de la Fundación Polkadot Web3, miembro del Programa Substrate Builder y miembro del Acelerador Blockchain de la Universidad de Berkeley.