Saltar al contenido principal
Versión: V3

Pruebas Semaphore

Una vez que un usuario liga su identidad Semaphore a un grupo Semaphore, el usuario puede emitir una señal anónima con una prueba de conocimiento cero (ZKP) que demuestre lo siguiente:

  • el usuario es un miembro del grupo,
  • el mismo usuario creo tanto la señal como la prueba.

Las y los desarrolladores pueden utilizar Semaphore para realizar las siguientes acciones:

Generar una prueba off-chain

Utilice la librería @semaphore-protocol/proof para generar una prueba off-chain. Para generar una prueba, transforme los siguientes parámetros con la función generateProof:

  • identity: la identidad Semaphore del usuario emitiendo la señal y generando la prueba;
  • group: el grupo al cual pertenece el usuario;
  • externalNullifier: el valor que impide la emisión de dos señales por el mismo usuario;
  • signal: la señal que el usuario quiere enviar de forma anónima;
  • snarkArtifacts: la zkey y wasm de los archivos confiables de configuración.

Instalar librería:

npm install @semaphore-protocol/proof@^3

En el caso de uso de un sistema de votación, una vez que todos los votantes hayan ligado sus identidades al grupo de la votación, un votante puede generar una prueba para votar por una propuesta. En el llamado para generateProof(generar la prueba), el sistema de votación envía el ID único de la votación (la raíz del árbol de Merkle del grupo) como el externalNullifier para impedir que el votante emita más de una señal para esta votación. La siguiente muestra de código demuestra cómo utilizar generateProof para generar una prueba de votación:

import { generateProof } from "@semaphore-protocol/proof"

const externalNullifier = group.root
const signal = 1

const fullProof = await generateProof(identity, group, externalNullifier, signal, {
zkeyFilePath: "./semaphore.zkey",
wasmFilePath: "./semaphore.wasm"
})
información

Si estás generando la prueba en el lado del cliente, puedes evitar agregar los artefactos de snark porque se obtienen automáticamente:

const fullProof = await generateProof(identity, group, externalNullifier, signal)

Verificar una prueba off-chain

Utilice la librería @semaphore-protocol/proof para verificar una prueba Semaphore off-chain. Para verificar una prueba, transforme los siguientes parámetros con la función verifyProof:

  • fullProof: la prueba Semaphore;
  • treeDepth: la profundidad del árbol de Merkle.

La siguiente muestra de código demuestra cómo verificar la prueba generada previamente:

import { verifyProof } from "@semaphore-protocol/proof"

await verifyProof(fullProof, 20) // verdadero o falso.

verifyProof devolverá una Promesa que determina uno de los dos valores verdadero o falso.

Verificar una prueba on-chain

Utilice el contrato Semaphore.sol para verificar pruebas on-chain.

información

Vea nuestros contratos desplegados para encontrar las direcciones adecuadas para su red.

Para verificar las pruebas Semaphore en su contrato, importe ISemaphore.sol, transfórmelo a la dirección Semaphore.sol y llame el método verifyProof con los siguientes parámetros:

  • groupId: el identificador del grupo;
  • merkleTreeRoot: la raíz del árbol de Merkle;
  • signal: la señal que el usuario quiere enviar de forma anónima ;
  • nullifierHash: un nullifier hash (hash anulador);
  • externalNullifier: el valor que impide la emisión de dos señales por el mismo usuario;
  • proof: una prueba Semaphore que es compatible con Solidity.
información

Puede importar ISemaphore.sol y otros contratos Semaphore del módulo NPM @semaphore-protocol/contracts.