WEB3DEV

Cover image for Explorando Provas de Conhecimento Zero com Solidity e Muito Mais! 🕵️‍♂️🔐
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Explorando Provas de Conhecimento Zero com Solidity e Muito Mais! 🕵️‍♂️🔐

Provas de conhecimento zero se tornaram uma palavra da moda no mundo da criptografia e da tecnologia blockchain. Elas são o ingrediente secreto por trás da garantia de privacidade e segurança em sistemas descentralizados. Nesta extensa exploração, mergulharemos profundamente no mundo dos SNARKs (Succinct Non-Interactive Arguments of Knowledge), STARKs (Scalable Transparent Arguments of Knowledge) e outras técnicas de ponta que formam a base dessas tecnologias de preservação da privacidade, todas usando Solidity, a linguagem de programação dos contratos inteligentes da Ethereum.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*3cpzlFsyzeqeryoqEqfwTQ.png

Provas de conhecimento zero com SNARKs, STARKs e muito mais! 🕵️‍♂️🔐

O que é um SNARK? 🕵️‍♂️

Vamos começar desmistificando o termo SNARK no contexto do Solidity. Um SNARK é uma prova criptográfica de que uma parte (o provador) pode convencer outra parte (o verificador) da veracidade de uma declaração sem revelar qualquer informação sobre a própria declaração. Essa propriedade notável torna os SNARKs ideais para manter a privacidade enquanto validam transações em blockchains públicas como a Ethereum.

Construindo um SNARK em Solidity 🔨

Construir um SNARK no Solidity envolve vários componentes principais:

1. Contrato Inteligente Solidity: um contrato inteligente que representa o cálculo que você deseja provar. Pense nisso como um programa em uma linguagem de alto nível.

// Exemplo: um contrato inteligente simples do Solidity para provar o conhecimento de um número secreto.
pragma solidity ^0.8.0;
contract SNARKDemo {
 uint256 public secretNumber;
constructor(uint256 _secretNumber) {
 secretNumber = _secretNumber;
 }
function proveKnowledge(uint256 proof) public view returns (bool) {
 return secretNumber * 2 == proof;
 }
}
Enter fullscreen mode Exit fullscreen mode

2. Função Solidity: uma função Solidity dentro do contrato inteligente para verificar a prova.

// Função Solidity para verificar a prova SNARK
function verifySNARKProof(uint256 proof) public view returns (bool) {
 return SNARKDemo(proverContractAddress).proveKnowledge(proof);
}
Enter fullscreen mode Exit fullscreen mode

3. Provador: a parte que deseja provar o conhecimento de uma testemunha válida. O provador cria uma prova SNARK.

// O provador gera uma prova SNARK 
function generateSNARKProof(uint256 secretNumber) public returns (uint256) {
 // Realizar geração de prova aqui
}
Enter fullscreen mode Exit fullscreen mode

4. Verificador: a parte que deseja verificar a prova sem saber quaisquer detalhes sobre a testemunha.

// O verificador verifica a prova SNARK 
function verifySNARKProof(uint256 proof) public view returns (bool) {
 return SNARKDemo(proverContractAddress).proveKnowledge(proof);
}
Enter fullscreen mode Exit fullscreen mode

5. Configuração confiável: esta é uma etapa crítica onde uma fase de configuração gera parâmetros iniciais para o SNARK. É importante que esta fase seja feita de forma correta e segura, uma vez que qualquer comprometimento pode comprometer o sistema.

6. Propriedade de conhecimento zero: a principal característica dos SNARKs é que eles permitem que o provador convença o verificador sem revelar os dados privados (o secretNumber em nosso exemplo).

SNARKs vs. STARKs 🧩

Agora que entendemos o que são SNARKs, vamos explorar seu primo, STARKs, no contexto do Solidity. STARKs são outro tipo de prova de conhecimento zero, mas apresentam algumas diferenças:

- Interatividade: SNARKs são não-interativos, o que significa que o provador gera a prova e a envia ao verificador de uma só vez. Os STARKs, por outro lado, são interativos, exigindo comunicação direta entre o provador e o verificador.

- Transparência: STARKs são transparentes, o que significa que toda a prova pode ser examinada publicamente. Os SNARKs, embora sucintos, não oferecem o mesmo nível de transparência.

- Escalabilidade: STARKs são conhecidos por sua escalabilidade, tornando-os adequados para cálculos em grande escala. Os SNARKs, embora eficientes, podem ter problemas com circuitos extremamente complexos.

// Exemplo de verificação STARK no Solidity
function verifySTARKProof(uint256 starkProof, uint256 publicData) public view returns (bool) {
 // O verificador interage com o provador para verificar a prova STARK
}
Enter fullscreen mode Exit fullscreen mode

A escolha entre SNARKs e STARKs no Solidity depende do caso de uso específico e das compensações que você está disposto a fazer.

PLONK e Portas Personalizadas em Solidity 🚧

Agora, vamos apresentar o PLONK (Permutações sobre bases de Lagrange para argumentos de conhecimento não-interativos ecumênicos) no contexto do Solidity, que é uma forma avançada de SNARK. O PLONK oferece maior eficiência e escalabilidade, tornando-o adequado para diversas aplicações.

PLONK introduz o conceito de portas personalizadas no Solidity. Estas portas permitem que os desenvolvedores otimizem o desempenho dos circuitos SNARK definindo operações personalizadas.

// Exemplo de porta personalizada para circuito PLONK no Solidity
function customGate(uint256 input1, uint256 input2, uint256 output) internal pure returns (uint256) {
 uint256 outputConstraint = input1 * input2 - output;
 return outputConstraint;
}
Enter fullscreen mode Exit fullscreen mode

Portas personalizadas permitem a criação de circuitos SNARK altamente eficientes, adaptados para casos de uso específicos no Solidity, como transações blockchain ou cálculos que preservam a privacidade.

Argumentos de Pesquisa para Otimização de Desempenho em Solidity 📈

A otimização do desempenho é crucial ao trabalhar com provas de conhecimento zero no Solidity, especialmente em ambientes com recursos limitados como a Ethereum. Argumentos de pesquisa são uma técnica usada para otimizar SNARKs e reduzir seus requisitos computacionais e de armazenamento.

A ideia por trás dos argumentos de pesquisa no Solidity é pré-calcular certos valores e armazená-los em uma tabela de pesquisa. Isso reduz a complexidade do circuito SNARK, tornando mais rápida a geração e verificação de provas. No entanto, isso tem o custo de uma maior complexidade de configuração.

// Exemplo de argumento de pesquisa em um circuito Solidity SNARK
function lookupArgument(uint256 inputIndex, uint256[] memory lookupTable) internal pure returns (uint256) {
 return lookupTable[inputIndex];
}
Enter fullscreen mode Exit fullscreen mode

O uso de argumentos de pesquisa pode aumentar significativamente a eficiência dos sistemas baseados em SNARK no Solidity, permitindo uma adoção mais ampla.

Máquina Virtual de Conhecimento Zero (zkVM) em Solidity 💻

A Máquina Virtual de Conhecimento Zero (zkVM) é um desenvolvimento interessante no mundo das provas de conhecimento zero e pode ser implementada no Solidity. É uma máquina virtual que permite computação privada e eficiente em blockchains públicas.

A zkVM aproveita os SNARKs para validar a exatidão dos cálculos, mantendo os detalhes privados. Isso é particularmente valioso para aplicações descentralizadas que exigem privacidade, como sistemas de votação ou contratos inteligentes confidenciais.

// um exemplo de contrato inteligente de zkVM no Solidity
contract zkVMSmartContract {
 function executeConfidentialComputation(bytes memory input, bytes memory zkProof) public {
 // Validar zkProof e executar computação confidencial
 }
}
Enter fullscreen mode Exit fullscreen mode

A zkVM é um passo promissor para alcançar a computação privada descentralizada no Solidity, mantendo ao mesmo tempo a segurança e a transparência das redes blockchain.

Alcançando Computação Privada Descentralizada no Solidity 🌐

A computação privada descentralizada é um Santo Graal no mundo blockchain e pode ser implementada no Solidity. Envolve a realização de cálculos em dados, mantendo-os privados e seguros.

As provas de conhecimento zero desempenham um papel fundamental para atingir esse objetivo.

Uma das principais aplicações da computação privada descentralizada no Solidity está no domínio das moedas de privacidade. Estas são criptomoedas que fornecem recursos de privacidade aprimorados aos seus usuários, como Monero ou Zcash.

// Exemplo de computação privada descentralizada em uma moeda de privacidade usando Solidity
contract PrivacyCoin {
 function privateTransaction(bytes memory input, bytes memory zkProof) public {
 // Validar zkProof e executar transação privada
 }
}
Enter fullscreen mode Exit fullscreen mode

Ao combinar provas de conhecimento zero com redes descentralizadas no Solidity, torna-se possível realizar transações confidenciais sem revelar qualquer informação sensível.

Introdução aos zkRollups no Solidity 🔄

Os zkRollups são uma solução de escalonamento fascinante para Ethereum e podem ser implementados em Solidity. Eles aproveitam as provas de conhecimento zero para agrupar múltiplas transações em uma única prova, reduzindo a carga na blockchain Ethereum e aumentando seu rendimento.

// agregador de transações zkRollup no Solidity
contract zkRollupAggregator {
 function aggregateTransactions(bytes[] memory transactions, bytes memory zkProof) public {
 // Validar zkProof e agrupar transações
 }
}
Enter fullscreen mode Exit fullscreen mode

Os zkRollups têm o potencial de revolucionar a escalabilidade da Ethereum no Solidity, tornando-a mais eficiente e ecologicamente correta.

zkEVM no Solidity 🚀

zkEVM (Zero-Knowledge Ethereum Virtual Machine) é um desenvolvimento interessante para o ecossistema Ethereum e pode ser implementado no Solidity. É uma máquina virtual compatível com Ethereum que incorpora provas de conhecimento zero para execução privada e eficiente de contratos inteligentes.

// contrato inteligente da zkEVM no Solidity 
contract zkEVMSmartContract {
 function executeConfidentialSmartContract(bytes memory input, bytes memory zkProof) public {
 // Validar zkProof e executar contrato inteligente confidencial
 }
}
Enter fullscreen mode Exit fullscreen mode

A zkEVM abre novas possibilidades para contratos inteligentes confidenciais na Ethereum em Solidity, permitindo que aplicativos centrados na privacidade prosperem na plataforma.

Swaps ZK no Solidity 🔄

A privacidade é uma preocupação significativa no comércio de criptomoedas, e os swaps ZK (Zero-Knowledge Swaps ou swaps de conhecimento zero) podem ser implementados no Solidity. Eles fornecem uma maneira de negociar criptomoedas de forma privada, sem revelar detalhes da negociação em um livro-razão público.

// Função Swap ZK no Solidity
contract ZKSwap {
 function swap(bytes memory input, bytes memory zkProof) public {
 // Validar zkProof e executar um swap privado
 }
}
Enter fullscreen mode Exit fullscreen mode

Os swaps ZK no Solidity garantem que os traders possam trocar ativos sem expor seu histórico de transações ou participações ao público.

zkID no Solidity 🆔

O gerenciamento de identidade é outra área onde brilham as provas de conhecimento zero, e as soluções zkID (Zero-Knowledge Identity ou identidade de conhecimento zero) podem ser implementadas no Solidity. Elas permitem que as pessoas provem sua identidade sem revelar informações pessoais desnecessárias.

// verificação de identidade zkID no Solidity
contract zkIDVerification {
 function verifyIdentity(bytes memory identityData, bytes memory zkProof) public {
 // Validar zkProof and conceder acesso ou confirmar identidade
 }
}
Enter fullscreen mode Exit fullscreen mode

A zkID pode revolucionar a autenticação online e a verificação de identidade no Solidity, reduzindo o risco de violação de dados e roubo de identidade.

Recursão rápida com Plonky2 no Solidity ⏩

Plonky2 é uma evolução do protocolo PLONK que traz uma recursão ainda mais rápida para o mundo das provas de conhecimento zero e pode ser implementado no Solidity. A recursão refere-se à capacidade de usar uma prova como parte de outra prova, criando uma cadeia de provas.

// Exemplo de recursão rápida com Plonky2 no Solidity
contract RecursivePlonky2 {
 function executeRecursiveComputation(bytes memory input, bytes memory plonky2Proof) public {
 // Validar plonky2Proof e executar computação recursiva confidencial
 }
}
Enter fullscreen mode Exit fullscreen mode

A recursão rápida com Plonky2 aumenta a escalabilidade e a eficiência de sistemas de prova de conhecimento zero no Solidity, tornando-os mais adequados para aplicações complexas.

Nova Crash no Solidity ☄️

Nova Crash é um projeto interessante que combina provas de conhecimento zero com finanças descentralizadas (DeFi) e pode ser implementado em Solidity. O objetivo é criar uma exchange descentralizada (DEX) segura e privada para criptomoedas.

// DEX Nova Crash no Solidity
contract NovaCrashDEX {
 function executePrivateCryptoExchange(bytes memory input, bytes memory zkProof) public {
 // Validar zkProof and executar exchange de criptomoeda
 }
}
Enter fullscreen mode Exit fullscreen mode

Nova Crash é apenas um exemplo de como as provas de conhecimento zero podem melhorar a segurança e a privacidade das plataformas DeFi no Solidity.

Argumento de Produto Interno no Halo 2 no Solidity ⚙️

Halo 2 é um sistema de ponta de prova de conhecimento zero que introduz o argumento do produto interno e pode ser implementado no Solidity. Este recurso permite a verificação eficiente dos cálculos do produto interno sem revelar as entradas.

// Argumento do produto interno no Halo 2 no Solidity
contract Halo2InnerProduct {
 function verifyInnerProduct(bytes memory input, bytes memory halo2Proof) public {
 // Validar halo2Proof e a executar cálculo do produto interno confidencial
 }
}
Enter fullscreen mode Exit fullscreen mode

O argumento do produto interno no Halo 2 tem uma ampla gama de aplicações no Solidity, incluindo transferências confidenciais de ativos e gerenciamento da cadeia de suprimentos.

Pool de Múltiplos Ativos Blindados em Solidity 🌊

Pools protegidos de múltiplos ativos são um recurso de aprimoramento de privacidade encontrado em algumas criptomoedas e podem ser implementados no Solidity. Esses pools permitem que os usuários combinem vários ativos em um único pool protegido, preservando a privacidade e ao mesmo tempo permitindo a negociação e o fornecimento de liquidez.

// Pool de múltiplos ativos blindados em Solidity
contract MultiAssetShieldedPool {
 function manageAssets(bytes[] memory assets, bytes memory zkProof) public {
 // Validar zkProof e executar operações privadas de pool 
 }
}
Enter fullscreen mode Exit fullscreen mode

Pools de múltiplos ativos blindados fornecem uma maneira versátil de gerenciar ativos de forma privada em uma blockchain no Solidity.

Conclusão 🎉

https://miro.medium.com/v2/resize:fit:640/format:webp/1*jx-d_b9LYbH0ThmH-pxx1Q.png

Buy me a Coffee

Nesta extensa exploração de provas de conhecimento zero no contexto do Solidity, cobrimos uma ampla gama de tópicos, desde o básico de SNARKs até técnicas avançadas como zkRollups, zkEVM e o argumento do produto interno do Halo 2. Essas ferramentas criptográficas estão moldando o futuro da privacidade e da segurança na tecnologia blockchain e além, tudo dentro do ambiente de contrato inteligente Solidity.

À medida que você se aprofunda no mundo das provas de conhecimento zero no Solidity, lembre-se de que cada uma dessas técnicas tem seus pontos fortes e fracos e que escolher a correta para sua aplicação de contrato inteligente Ethereum requer uma consideração cuidadosa. Esteja você construindo uma moeda de privacidade, uma exchange descentralizada ou um sistema de verificação de identidade, as provas de conhecimento zero oferecem ferramentas poderosas para ajudá-lo a atingir seus objetivos e, ao mesmo tempo, proteger a privacidade do usuário.

Portanto, seja você um desenvolvedor, pesquisador ou simplesmente um explorador curioso da fronteira da blockchain, continue explorando o fascinante mundo das provas de conhecimento zero e estará na vanguarda da revolução da privacidade em Ethereum e na Tecnologia Blockchain. 🚀🔒

📚 Fontes 📚

Este artigo foi escrito Solidity Academy por e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Oldest comments (0)