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
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
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
nargo new hello_world
cd hello_world
nargo build
nargo check
Ejemplo donde X es Público y Y privado.
x = "6"
y = "8"
nargo prove
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 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;
}
}
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.
- Video de 2h40 de ZK Todo lo que debes saber
- Huracán, el proyecto educativo de ZK para devs
- ZK y Mundos autónomos
- Scroll and Noir tutorial: https://dev.to/turupawn/aztec-noir-scroll-crea-zk-dapps-facil-40jg
- Intro to ZK en Español: https://www.youtube.com/watch?v=dSlhXtvgbI8&list=PL5LoUunXvIgI2LSiD1xH6MNIHOvMn4SHN
- Inclusions proof demo: https://github.com/Turupawn/EcrecoverInclusionProof
- Noir docs: https://noir-lang.org/docs/
- ZK Mooc: https://www.youtube.com/watch?v=bGEXYpt3sj0