// 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;
}
}
Created
March 13, 2024 08:18
-
-
Save Turupawn/10b8e1f9d03e74437b39a6f9780719ec to your computer and use it in GitHub Desktop.
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
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
.
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