Skip to content

Instantly share code, notes, and snippets.

@Turupawn
Created March 13, 2024 08:18
Show Gist options
  • Save Turupawn/10b8e1f9d03e74437b39a6f9780719ec to your computer and use it in GitHub Desktop.
Save Turupawn/10b8e1f9d03e74437b39a6f9780719ec to your computer and use it in GitHub Desktop.

1. Contrato

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

contract Hello
{
    string public hello = "Hola mundo!";
    uint public count;
    address public last_writer;

    function setHello(string memory _hello) public
    {
        hello = _hello;
        count += 1;
        last_writer = msg.sender;
    }
}

2. Dapp

https://github.com/FilosofiaCodigo/Web3TemplateV2

Instalación

En Linux

mkdir -p $HOME/.nargo/bin && \
curl -o $HOME/.nargo/bin/nargo-x86_64-unknown-linux-gnu.tar.gz -L https://github.com/noir-lang/noir/releases/download/v0.22.0/nargo-x86_64-unknown-linux-gnu.tar.gz && \
tar -xvf $HOME/.nargo/bin/nargo-x86_64-unknown-linux-gnu.tar.gz -C $HOME/.nargo/bin/ && \
echo -e '\nexport PATH=$PATH:$HOME/.nargo/bin' >> ~/.bashrc && \
source ~/.bashrc

En MacOs Apple Silicon

mkdir -p $HOME/.nargo/bin && \
curl -o $HOME/.nargo/bin/nargo-aarch64-apple-darwin.tar.gz -L https://github.com/noir-lang/noir/releases/download/v0.22.0/nargo-aarch64-apple-darwin.tar.gz && \
tar -xvf $HOME/.nargo/bin/nargo-aarch64-apple-darwin.tar.gz -C $HOME/.nargo/bin/ && \
echo '\nexport PATH=$PATH:$HOME/.nargo/bin' >> ~/.zshrc && \
source ~/.zshrc

En MacOs Intel

mkdir -p $HOME/.nargo/bin && \
curl -o $HOME/.nargo/bin/nargo-x86_64-apple-darwin.tar.gz -L https://github.com/noir-lang/noir/releases/download/v0.22.0/nargo-x86_64-apple-darwin.tar.gz && \
tar -xvf $HOME/.nargo/bin/nargo-x86_64-apple-darwin.tar.gz -C $HOME/.nargo/bin/ && \
echo '\nexport PATH=$PATH:$HOME/.nargo/bin' >> ~/.zshrc && \
source ~/.zshrc

Genera una prueba

Genera un nuevo proyecto de noir y prepáralo para recibir parámetros para el proveing.

nargo new hello_world
cd hello_world
nargo check

Ahora pon los inputs en Prover.toml y genera la prueba.

Prover.toml

x = "1"
y = "2"
nargo prove

La prueba ahora está ubicada en proofs/hello_world.proof.

Verifica la prueba

Genera un verificador en Solidity.

nargo codegen-verifier

El contrato verificador ahora está ubicado en contract/hello_world/plonk_vk.sol. Deplóyalo y envía su address como parámetro del siguiente contrato con lógica personalizada.

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;

interface INoirVerifier {
    function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool);
}

contract NoirCustomLogic {
    INoirVerifier noirVerifier;
    uint public publicInput;

    constructor(address noirVeriferAddress) {
        noirVerifier = INoirVerifier(noirVeriferAddress);
    }

    function sendProof(bytes calldata _proof, bytes32[] calldata _publicInputs) public {
        // ZK verification
        noirVerifier.verify(_proof, _publicInputs);

        // Your custom logic
        publicInput = uint(_publicInputs[0]);
    }
}

De esta manera puedes demostrar on-chain que tienes el conocimiento de a, tal que a!=b, esto sin revelar a que es un parámetros privado. Esta misma arquitectura puede aplicar en proyectos más avanzados donde puedes anonimizar, por ejemplo, al usuario que ejecutó una transacción o a el monto de una transacción.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment