Um artigo discutindo a linguagem de programação ZK

A prova de conhecimento zero (ZKP) é uma ferramenta criptográfica poderosa que pode verificar a exatidão dos cálculos enquanto protege a privacidade dos dados de entrada. Como parte integrante desta infraestrutura crítica, as linguagens específicas de domínio (DSLs) desempenham um papel vital na simplificação do processo de desenvolvimento e verificação de circuitos ZKP. Eles desempenham um papel importante na ligação de conceitos abstratos às representações precisas do circuito necessárias para provar o sistema, atuando como uma ponte importante entre os dois.

Um dos principais desafios na prova de sistemas é traduzir conceitos abstratos de alto nível em circuitos reais. No entanto, o surgimento das DSLs aborda este desafio, facilitando a expressão estruturada destes conceitos abstratos de uma forma mais concreta e alcançável.

Na última década, testemunhamos um crescimento significativo no número e na diversidade de DSLs. A atividade nesta área reflete-se no desenvolvimento de diversas linguagens de circuito, incluindo Noir, Leo, Zinc, etc. Se você precisa de uma opção de uso geral, como o Circom, ou de uma solução personalizada para uma plataforma específica, como o Cairo, você pode escolher entre uma ampla variedade de linguagens e estruturas para escrever circuitos ZKP.

Neste artigo, exploraremos as principais linguagens de programação ZK que os desenvolvedores estão utilizando ativamente e analisaremos os melhores recursos de cada linguagem.

####TLDR;

Um artigo discutindo a linguagem de programação ZK

Cairo Por StarkWare

Cairo, a linguagem central para programas de computação de uso geral que suportam provas STARK, desempenhou um papel fundamental no sucesso da StarkNet e StarkEx, impulsionando a escalabilidade de aplicações na rede principal Ethereum. Vale ressaltar que Cairo tem desempenhado um papel importante no suporte a diversas aplicações, incluindo dYdX, Sorare, Immutable X, etc. O nome "Cairo" vem da abreviatura de "CPU Algebraic Intermediate Representation". No campo das provas de conhecimento zero, ela desempenha um papel semelhante à linguagem assembly, facilitando o início dos desenvolvedores familiarizados com linguagens de programação de baixo nível, como C, C++ ou Solidity.

Inspirado em Rust, Cairo capacita os desenvolvedores a criar contratos inteligentes Starknet, com foco na segurança e no desenvolvimento amigável. Cairo possui uma sintaxe poderosa que simplifica a criação de circuitos ZK e permite aos usuários realizar uma variedade de tarefas nos programas Cairo. Além disso, uma vantagem significativa do Cairo é a sua extensibilidade, permitindo a introdução flexível de novos recursos e capacidades.

Nos sistemas ZK, a eficiência e a escalabilidade são fatores cruciais, e Cairo atende a esse requisito enfatizando esses dois aspectos. A linguagem integra estratégias de otimização, incluindo redução de restrições e eliminação de loops, para aliviar a carga computacional normalmente associada aos circuitos ZK. A otimização do projeto de circuito do Cairo resulta em geração e verificação de provas mais rápidas, tornando-o ideal para aplicações que exigem alto rendimento e latência mínima.

A expansão do Cairo tem sido impressionante, com um aumento extraordinário de promotores a tempo inteiro nos últimos dois anos. Este aumento destaca a adaptabilidade do Cairo, uma vez que as utilizações do Cairo não se limitam à blockchain, mas são significativas em qualquer contexto onde a verificação computacional é necessária. Como resultado, podemos esperar um crescimento adicional significativo na adoção do Cairo pelos desenvolvedores.

Em 28 de setembro de 2023, a Starknet lançou uma importante atualização em sua linguagem de programação Cairo v2.3.0. Este lançamento marca um grande passo em direção a tornar os contratos mais modulares, aumentando o potencial dos contratos inteligentes através da introdução de novos recursos, opções de armazenamento e gerenciamento de eventos. A integração desses componentes oferece uma maneira flexível de ampliar a funcionalidade do contrato, permitindo que módulos de terceiros aprimorem a funcionalidade do contrato.

Zinco por ZkSync

Zinc é uma linguagem de programação projetada para criar contratos inteligentes e circuitos SNARK na plataforma zkSync. Ele usa sintaxe Rust, incorpora elementos de Solidity e fornece recursos exclusivos.

O que torna o Zinco único é a sua facilidade de uso. Você não precisa entender todos os detalhes intrincados dos sistemas de restrições de primeira ordem (R1CS) para escrever código seguro. O zinco enfatiza a imutabilidade, tornando-o inerentemente funcional. Isso significa que ele prioriza dados imutáveis e avaliação de funções, reduzindo assim os efeitos colaterais e promovendo a escrita de código de contrato inteligente mais limpo e menos sujeito a erros.

Além disso, o Zinc inclui operações matemáticas seguras para evitar possíveis transbordamentos, garantindo a segurança de todas as operações. Embora tenha algumas limitações, como nenhum loop infinito e recursão, o Zinc simplifica o processo de depuração por meio do rastreamento de log do console. Esses rastreamentos melhoram a experiência de depuração, simplificando o processo de rastreamento e resolução de problemas na rede de teste ou na rede principal.

Noir por asteca

Noir é uma DSL de código aberto desenvolvida pela Aztec, baseada em Rust, projetada para simplificar a criação de circuitos ZK e programas ZK sem conhecimento profundo de criptografia. É considerada uma das linguagens mais fáceis de começar e é adequada para escrever aplicativos ZK compatíveis com qualquer sistema de prova. Noir se concentra em segurança, simplicidade e desempenho. Ele fornece uma sintaxe semelhante ao Rust de alto nível que abstrai a segurança criptográfica e simplifica o uso de primitivas criptográficas básicas, mantendo o alto desempenho.

Noir tem vantagens significativas na expansão da gama de aplicações que podem aproveitar as vantagens dos recursos de proteção de privacidade fornecidos pelo ZKP, aumentando assim a privacidade e a eficiência da verificação. Noir é compilado em uma representação intermediária chamada Abstract Circuit Intermediate Representation (Acer), que pode então ser compilada em R1CS. Separar o sistema de prova de back-end da própria linguagem permite que Noir suporte uma variedade de sistemas de prova, incluindo Aztec Brettenberg, Turbo Plonk e possíveis integrações futuras, como Groth16 e Halo2.

A linguagem fornece uma biblioteca padrão que inclui recursos eficientes como SHA-256 (uma função hash criptográfica que gera uma saída de tamanho fixo) e verificações Pedersen-Merkle (um método que usa compromissos Pedersen e árvores Merkle para garantir a integridade dos dados e criptografia de consistência tecnologia de verificação). O design do Noir é semelhante ao Rust e inclui recursos familiares aos desenvolvedores de aplicativos, como funções, submódulos, tipos definidos pelo usuário (estruturas), condicionais, loops e constantes globais. Além disso, esforços contínuos estão sendo feitos para desenvolver funções genéricas e de primeira classe para aprimorar ainda mais as capacidades expressivas do Noir.

Deve-se notar que Noir ainda é um trabalho em andamento e pode haver algumas limitações e possíveis bugs. Mas a equipe de desenvolvimento está comprometida em melhorar e otimizar continuamente a linguagem.

o1js por 0(1) Laboratórios

o1js, anteriormente conhecido como SnarkyJS, é uma biblioteca Type desenvolvida pela 0(1)Labs para a criação de contratos inteligentes usando a linguagem de programação SNARK. Ele aproveita tecnologias estabelecidas como Node.js e compatibilidade de navegador para garantir fácil acesso e uso para desenvolvedores.

o1js pode se integrar perfeitamente com bibliotecas e ferramentas Java e TypeScript, fornecendo aos desenvolvedores um ecossistema forte e amplo suporte da comunidade. Esta integração simplifica o processo de desenvolvimento e reduz a curva de aprendizagem associada à adoção de um novo ambiente de desenvolvimento. Além disso, ele oferece suporte total ao Visual Studio Code (VS Code), um editor de código amplamente utilizado que permite aos desenvolvedores aproveitar ao máximo recursos como conclusão de código, realce de sintaxe e depuração para aprimorar a experiência de desenvolvimento.

o1js é essencialmente uma estrutura ZK versátil que fornece as principais ferramentas necessárias para criar provas ZK. Ele suporta a criação de diversos programas ZK, cobrindo uma variedade de operações comprováveis integradas, incluindo aritmética básica, hashing, assinaturas, operações booleanas, comparações e muito mais. Com a estrutura o1js, você pode construir zkApps no protocolo Mina, contratos inteligentes que são executados no lado do cliente e possuem entradas privadas.

Vale ressaltar que no início de setembro de 2023, a equipe 0(1)Labs anunciou que faria a transição do SnarkyJS para o1js e enfatizou seu compromisso em melhorar o desempenho. Digno de nota é que eles alcançaram uma redução de 3 a 4x no tempo de carregamento da biblioteca, que se refere ao tempo necessário para importar o1js, um processo que pode bloquear o thread principal. Para aplicativos da web, o tempo de carregamento é de grande importância tanto para o tempo de execução do Java quanto para a renderização de toda a página. Além disso, a equipe também atualizou a CLI do Mina zkApp para melhorar a experiência de construção da interface do usuário e anunciou melhorias adicionais na API Archive Node para aumentar sua confiabilidade e clareza.

###Leo por Aleo

O blockchain Aleo é único no campo de contratos inteligentes e enfatiza a proteção da privacidade. Em sua essência está a linguagem de programação Leo, uma linguagem de tipo estaticamente inspirada em Rust. Projetado especificamente para o desenvolvimento de aplicativos privados, Leo capacita criadores que desejam construir um ecossistema descentralizado seguro e privado. O que é verdadeiramente único no Leo é o seu papel pioneiro na introdução de um kit de ferramentas abrangente para aplicações de conhecimento zero de uso geral. Este kit de ferramentas inclui uma estrutura de teste, registro de pacotes, analisador de importação, compilador remoto e gerador de teoremas.

Leo foi concebido por uma equipe de desenvolvedores liderada por Howard Wu, que imaginou uma tecnologia que capacitaria os desenvolvedores a criar aplicativos descentralizados que priorizassem a privacidade e a segurança. O design de Leo baseia-se nos princípios do Rust enquanto incorpora alguns elementos semelhantes ao Java para promover familiaridade e conveniência durante o processo de desenvolvimento. Além disso, Leo pretende acelerar o desenvolvimento e simplificar o processo de desenvolvimento, fornecendo uma plataforma de testes integrada, registro de pacotes e conversor de importação. Essa integração permite que os desenvolvedores se concentrem na lógica central de seus aplicativos sem serem sobrecarregados por problemas de infraestrutura.

Uma característica marcante do Leo é seu compilador, que converte programas no formato de prova R1CS de baixo nível. O compilador Leo é único em seu rigoroso processo de verificação formal. Esta verificação é crítica porque as vulnerabilidades podem surgir em vários estágios, desde a programação inicial até a auditoria e compilação. Ao realizar verificações matemáticas rigorosas para garantir que o compilador seja consistente com a intenção do programador, Leo visa reduzir o risco de erros não detectados ou vulnerabilidades potenciais, especialmente em contextos L2, rollups ZK ou programas privados na plataforma Leo.

Circom por iden3

Circom, uma DSL projetada especificamente para o desenvolvimento do circuito ZK, é o resultado de um esforço conjunto entre Jordi Baylina e a equipe iden3. O compilador Circom é escrito em Rust e sua principal tarefa é compilar circuitos escritos na linguagem Circom. Notavelmente, a Circom se tornou a escolha certa para aplicações ZK excepcionais do mundo real, como Dark Forest e Tornado Cash. Sua popularidade se deve ao seu excelente desempenho, incluindo tempos rápidos de prova do navegador por meio de provas WASM otimizadas, provas eficientes do lado do servidor por meio do Rapidsnark e verificação eficiente na cadeia.

No entanto, é importante perceber que a funcionalidade do Circom está focada principalmente no desenvolvimento de circuitos ZK, o que pode torná-lo menos adequado para lidar com uma gama mais ampla de tarefas computacionais. Os desenvolvedores que procuram mais recursos que possam atender a uma gama mais ampla de necessidades de desenvolvimento podem achar os recursos do Circom um tanto limitados. Nesse caso, os desenvolvedores podem precisar combinar outras linguagens de programação ou estruturas para atender às necessidades mais amplas de desenvolvimento.

Um artigo discutindo a linguagem de programação ZK Fotos da Circom

A compatibilidade do Circom concentra-se principalmente em sistemas ZKP amplamente utilizados, como snarkjs e libsnark. Embora esta compatibilidade garanta uma integração perfeita com estes sistemas amplamente utilizados, também significa que os circuitos Circom herdam capacidades e limitações específicas associadas a estas dependências. Os desenvolvedores que preferem ou necessitam de um sistema ZKP alternativo podem enfrentar desafios de compatibilidade ou exigir trabalho adicional para adaptar e integrar circuitos gerados pela Circom em seu sistema preferido.

Espreita por Lurk Lab

Lurk é um dialeto Lisp com escopo estático influenciado por Scheme e Common Lisp, com uma característica única: permite a prova direta da correção da execução do programa usando zk-SNARKs, permitindo uma verificação compacta e eficiente.

Os principais usos do Lurk incluem:

  • Cálculo verificável: Lurk permite provar a exatidão de suas expressões sob condições de conhecimento zero, aumentando a confiança nos resultados do cálculo.
  • Conhecimento zero: os usuários podem comprovar conhecimento sem revelar informações específicas além da contribuição pública, protegendo assim a privacidade.
  • Dados endereçáveis por conteúdo: Cada programa Lurk é equipado com um identificador de conteúdo exclusivo (CID), tornando-o compatível com IPFS e IPLD.
  • Completude de Turing: Lurk oferece suporte à criação e prova de afirmações computacionais arbitrárias.
  • Funções de ordem superior: as funções Lurk podem aceitar e retornar funções, permitindo uma programação funcional expressiva.
  • Computação que lida com dados privados: o Lurk torna possível lidar com dados privados ao mesmo tempo que garante uma saída comprovadamente correta sem comprometer a privacidade.

Lurk aproveita ao máximo o alocador de memória "contras" do Lisp ao construir circuitos de uso geral. Este alocador combina expressões e gera referências via hashes. A chave é provar que as duas expressões realmente têm a mesma referência. Esta verificação permite que Lurk realize cálculos dentro do circuito snark.

Lurk é muito rico em recursos, incluindo suporte para recursão infinita, loops, fluxo de controle condicional e vários sistemas de prova de backend, como Groth16, SnarkPack+ e Nova. Essa versatilidade abre as portas para uma variedade de aplicações, incluindo computação de verificação, processamento de dados privados e execução de programas completos de Turing em circuitos snark.

Resumir

Com o aumento da diversidade de aplicações ZK, o DSL tem amplas perspectivas de desenvolvimento no campo ZK. A chave para uma DSL bem-sucedida é construir uma comunidade próspera e bibliotecas ricas para enriquecer a experiência do desenvolvedor. DSLs que priorizam a compatibilidade com bibliotecas existentes podem aproveitar o conhecimento e os recursos da comunidade mais ampla de desenvolvedores. Essa abordagem facilita uma integração mais suave, acelera o desenvolvimento e oferece maior flexibilidade na implementação de aplicativos ZK. Este esforço colaborativo é fundamental para promover um ecossistema mais robusto em torno de DSLs, proporcionando benefícios tangíveis aos desenvolvedores e impulsionará ainda mais a adoção e eficácia da tecnologia ZK.

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)