Skip to content

Instantly share code, notes, and snippets.

@Turupawn
Last active July 30, 2024 21:25
Show Gist options
  • Save Turupawn/7a2c9fe210e83e08097b5e67318aacef to your computer and use it in GitHub Desktop.
Save Turupawn/7a2c9fe210e83e08097b5e67318aacef to your computer and use it in GitHub Desktop.
ZK Ethereum Argentina

Instala noir v22

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

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

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

cd into the circuits directory

nargo new hello_world
cd hello_world
nargo build
nargo check

Edita circuit/Prover.toml

Ejemplo donde X es Público y Y privado.

x = "6"
y = "8"

Genera una ZKp

nargo prove

Genera y lanza el contrato verificador

nargo codegen-verifier

Ahora lanza UltraVerifier ubicado en circuit/contract/circuit/plonk_vk.sol en Scroll Sepolia. Si te sale "Stack too deep error" al compilar, reintenta poniéndole opitización en 200.

Lanza el contrato de Lógica Personalizada

Lanza este contrato pasandole el verificador que recién lanzamos.

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

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

contract VerificationCounter
{
    uint public verifyCount;

    IUltraVerifier ultraVerifier;
    constructor(address ultraVerifierAddress)
    {
        ultraVerifier = IUltraVerifier(ultraVerifierAddress);
    }

    function sendProof(bytes calldata _proof, bytes32[] calldata _publicInputs) public
    {
        ultraVerifier.verify(_proof, _publicInputs);
        verifyCount+=1;
    }
}

Verifica una prueba

Si estás verificando en Remix, copy pastea la prueba ubicada en circuit/contract/proofs/circuit.proof agrégale 0x. Ahora setea el public input que puedes obtener en Verifier.toml con el formato a continuación ["0x0000000000000000000000000000000000000000000000000000000000000008"]. En nuestro caso y=8 así que solo establecemos un único public input en el arreglo.

Ahora la variable verifyCount debería ser 1.

Recursos

En español

En Inglés

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