ZK Language Survey: Noir, o1js, Circom, Leo, Cairo, Lurk

Introdução

Provas de linguagem específica de domínio (DSL) em conhecimento zero (ZK).[4] desempenha um papel vital no terreno. Em sua essência, as provas ZK resolvem o desafio de provar a existência de certos atributos em dados secretos sem revelar nenhuma informação adicional. No entanto, traduzir ideias de alto nível em provas concretas pode ser complexo. É aqui que as DSLs entram em jogo, unindo conceitos abstratos com a representação dos circuitos necessários para provar o sistema.

Sistema de prova[5] é um método ou acordo que permite a uma parte provar a validade de uma declaração ou reivindicação a outra parte sem revelar qualquer informação sensível. Envolve um conjunto de regras e procedimentos que permitem ao provador convencer o verificador da veracidade de uma determinada afirmação, como a exatidão de um cálculo ou a posse de certos conhecimentos, sem revelar quaisquer segredos ou dados subjacentes.

No entanto, os sistemas de prova não podem lidar diretamente com conceitos de alto nível. Em vez disso, eles precisam ser convertidos em circuitos que representam as propriedades desejadas. Esta mudança de conceitos de alto nível para circuitos apresenta desafios. É aqui que entra em jogo a linguagem dos circuitos. As linguagens de circuito resolvem este problema fornecendo uma forma estruturada e formal de expressar ideias de alto nível.

Na última década, houve um aumento significativo no número e na diversidade de linguagens de circuito. O desenvolvimento de muitas linguagens de circuito, como Noir, Cairo[6] e Leão, indicando o quão ativo é o campo. Esta proliferação de línguas permite-nos comparar e contrastar as suas características, semelhanças e diferenças. Um exame abrangente dessas linguagens fornece uma compreensão mais profunda do panorama geral da linguagem de circuito.

TLDR;

Noir – Desenvolvido pela Aztec, abstrai a complexidade da criptografia e possibilita que desenvolvedores de qualquer fundo escrevam circuitos ZK.

– o1js – Uma biblioteca de tipos desenvolvida pela O(1) Labs. Permite que os desenvolvedores escrevam contratos inteligentes. Integra-se bem com as bibliotecas e ferramentas Java e Type existentes.

**– **Circom**[7] ** – Projetado para o desenvolvimento de circuitos ZKP. Proporcionando precisão e clareza, suas características são focadas principalmente nesta área específica.

– Leo – Fornece um ambiente amigável para desenvolvedores. Uma arquitetura de compilador formalmente validada é usada com foco na deteção e prevenção precoce de erros.

**– **Cairo**[8] ** – Ênfase na eficiência e escalabilidade. A interoperabilidade é suportada por meio de interfaces padrão que podem ser integradas com plataformas blockchain, contratos inteligentes e sistemas off-chain.

Lurk – Resolve as limitações dos SNARKs tradicionais aproveitando o Lisp para implementar um circuito comum.

Glossário

Como abordaremos conceitos técnicos, aqui está um glossário de alguns dos termos complexos que você pode encontrar nos textos subsequentes:

Representação Intermediária de Circuito Abstrato (Acer) :* Representação intermediária do circuito ZK usado por Noir que pode ser compilado em um sistema de restrição de primeira ordem (R1CS).

• Portões personalizados: Portas lógicas especializadas projetadas para operações criptográficas eficientes e seguras em circuitos ZK.

• SHA-256: Uma função hash criptográfica que recebe uma entrada e produz uma saída de tamanho fixo.

Pedersen-Merkle Check: Usando as técnicas de verificação criptográfica do Pedersen Promise e Merkle Tree, a integridade e a consistência dos dados podem ser verificadas.

• Completude de Turing: Uma propriedade de um sistema de computação que pode emular uma máquina de Turing e ser capaz de resolver qualquer problema computável com tempo e recursos suficientes.

Continuation Passing Style (CPS) :* uma técnica de programação que divide o processo de avaliação em etapas gerenciáveis para uma execução uniforme e eficiente.

Elementos de campo :* elementos em um campo matemático finito, comumente usados em esquemas de criptografia e cálculos.

Preto

Preto[9] é uma linguagem específica de domínio (DSL) projetada pela Aztec para simplificar a criação de circuitos ZK e programas ZK sem a necessidade de conhecimento extensivo de criptografia ou para se tornar um criptógrafo. Seu principal objetivo é permitir que desenvolvedores de qualquer formação escrevam circuitos ZK (conhecimento zero). O Noir prioriza segurança, simplicidade e desempenho. Ele fornece uma sintaxe de alto nível, semelhante a Rust, que abstrai a segurança criptográfica e simplifica o uso de primitivas criptográficas, mantendo o alto desempenho.

Possibilidades de dimensionamento com ZK Proof

Uma vantagem do Noir é que ele tem o potencial de expandir a gama de aplicações que podem tirar proveito dos recursos de preservação da privacidade fornecidos pelas provas ZK. Essas provas aumentam a privacidade e fornecem uma verificação eficiente. Noir é compilado em uma representação intermediária chamada Abstract Circuit Intermediate Representation (Acer), que pode ser compilada em um sistema de restrição chamado R1CS (rank one constraint). Esta dissociação do sistema de prova de back-end da linguagem permite que o Noir suporte uma variedade de sistemas de prova, incluindo Aztec Brettenberg, Turbo Plonk e potencialmente integrações futuras, como Groth16 e Halo 2.

Otimização & Biblioteca Padrão

Os desenvolvedores podem otimizar circuitos no nível do sistema de atestado para melhorar a velocidade, a segurança e uma variedade de recursos de aplicativos, aproveitando portas personalizadas, um tipo de porta lógica especificamente projetada para executar operações criptográficas de forma eficiente e segura. A linguagem fornece uma biblioteca padrão com funções otimizadas, como verificações SHA-256 e Pedersen-Merkle, que usam compromissos Pedersen e árvores Merkle para verificar a integridade e consistência dos dados.

!

Gráficos mostrando a sintaxe da linguagem Noir### Organização de código e habilidades de apresentação

O Noir suporta a organização de código através de módulos e caixas externas, facilitando a criação de bibliotecas para programas Noir. Ele fornece tipos de dados compostos, como matrizes, tuplas e estruturas, permitindo que os desenvolvedores agrupem dados e implementem funções comuns. A linguagem também suporta estruturas de fluxo de controle, como loops, instruções if e operadores lógicos e bitwise. Genéricos e funções de primeira ordem estão sendo ativamente desenvolvidos para melhorar ainda mais as capacidades expressivas do Noir.

É importante notar que o Noir ainda está evoluindo. Pode ter algumas limitações e possíveis bugs. A equipe de desenvolvimento está constantemente iterando a linguagem e está comprometida com a melhoria contínua.

o1js

o1js[10] é uma biblioteca de tipos projetada por (0)1Labs para escrever contratos inteligentes usando a linguagem de programação Snark. Ele aproveita as tecnologias abertas existentes, como o Node .js e os navegadores, para torná-lo mais acessível e conveniente para os desenvolvedores. Ao desenvolver o Type, o o1js permite que os desenvolvedores aproveitem seus conhecimentos existentes de bibliotecas e ferramentas Java e Type.

Integrações

O o1js integra-se perfeitamente com bibliotecas e ferramentas Java e Type, fornecendo aos desenvolvedores recursos poderosos e amplo suporte à comunidade. Essa integração aumenta a produtividade e reduz a curva de aprendizado para a adoção de novos ambientes de desenvolvimento.

Suporte a código VS

Ele fornece suporte para Visual Studio Code (VS Code), um editor de código popular. Os desenvolvedores podem aproveitar recursos como conclusão de código, realce de sintaxe e depuração para aprimorar a experiência geral de desenvolvimento.

Biblioteca Padrão

O O1JS fornece uma biblioteca padrão abrangente que inclui tipos básicos, como elementos de domínio, un-64, un-32, chaves públicas, chaves privadas e assinaturas. Esses tipos vêm com métodos internos que simplificam o manuseio de esquemas de criptografia, dados opcionais, booleanos e curvas elípticas.

Circom

Circom, abreviação de Circuit Compiler, é uma poderosa linguagem específica de domínio (DSL) projetada para o desenvolvimento de circuitos à prova de conhecimento zero (ZKP), criada por Jordi Balyna e a equipe iden3.

Definição de Circuito Expressivo

Com sua sintaxe expressiva, o Circom permite que os desenvolvedores definam circuitos para aplicações ZKP de forma precisa e clara. No entanto, a sintaxe e a semântica do Circom podem ser difíceis de entender para aqueles que são novos no Circom e para aqueles que não estão familiarizados com os conceitos DSL ou ZKP. Para desenvolvedores de circuitos iniciantes ou desenvolvedores com experiência em linguagens de programação de uso geral, isso pode exigir esforço e tempo extras.

Limites de escopo

Embora o Circom se destaque no desenvolvimento de circuitos ZKP, é importante notar que suas características são focadas principalmente nesta área específica. Como resultado, os desenvolvedores que procuram uma linguagem de uso mais geral para lidar com uma ampla gama de tarefas de computação podem achar o Circom um pouco limitado. Para atender a necessidades de desenvolvimento mais amplas, pode ser necessário usar o Circom em conjunto com outras linguagens de programação ou frameworks.

Uma explicação de como funciona o Circom. ### Ferramentas & Limitações do Ecossistema

O Circom é apoiado por uma variedade de ferramentas de desenvolvimento e tem um ecossistema em crescimento, embora a disponibilidade das suas ferramentas e recursos possa ainda ser relativamente limitada em comparação com linguagens de programação e frameworks mais estabelecidos. Os desenvolvedores podem ter dificuldades para encontrar documentação abrangente, bibliotecas e suporte da comunidade para casos de uso específicos ou recursos avançados. Essa limitação pode ter impacto na velocidade de desenvolvimento e adoção comunitária do Circom.

Considerações de compatibilidade

A compatibilidade do Circom está focada principalmente em sistemas populares de prova de conhecimento zero, como snarkjs e libsnark. Embora isso permita que ele se integre perfeitamente com esses sistemas, também introduz dependências em suas características e limitações específicas. Os desenvolvedores que preferem ou precisam de outros sistemas ZKP podem ter problemas de compatibilidade ou exigir esforço adicional para adaptar e integrar circuitos gerados pelo Circom em seus sistemas preferidos.

Leão

Leão[11] é uma linguagem de programação especificamente projetada para o desenvolvimento de aplicações à prova de conhecimento zero. Ele visa fornecer um ambiente amigável para desenvolvedores, especialmente aqueles com experiência prévia no ecossistema blockchain. LEO é semelhante ao Rust e tem alguns elementos semelhantes a Java projetados para criar familiaridade e conveniência no desenvolvimento de aplicativos.

Uma característica notável do Leo é seu compilador, que converte programas em um formato de prova de baixo nível chamado R1CS. O que distingue o compilador Leo é o rigoroso processo de verificação formal a que é submetido. Essa verificação é necessária porque erros podem ocorrer em vários estágios, incluindo programação, auditoria e compilação. Ao garantir matematicamente que o compilador segue a intenção do programador, Leo visa minimizar o risco de erros serem negligenciados ou explorados, especialmente em contextos L2, rollups ZK ou programas proprietários na plataforma LEO.

A gramática da linguagem leonina reconhece que, apesar dos melhores esforços, os erros são inevitáveis, e a equipe leonina enfatiza a importância da prevenção e deteção precoce de erros, especialmente em sistemas que lidam com transferências de valor importantes. Para resolver isso, a arquitetura de compilador formalmente validada do Leo injeta confiança adicional e reduz a probabilidade de desvios não intencionais do comportamento esperado do programa.

Além da linguagem e do compilador, Leo oferece uma variedade de ferramentas e recursos de experiência do desenvolvedor. Esses componentes são projetados para melhorar o processo de desenvolvimento, simplificar tarefas e aumentar a eficiência. Com base em sete anos de experiência e observando a evolução do ecossistema Ethereum, a equipe Leo visa fornecer um ambiente amigável semelhante à evolução de ferramentas como exploradores, estruturas de implantação como Truffle e Ganache e outros recursos que simplificam o desenvolvimento e teste de aplicativos.

Cairo

Cairo[12] Fornece uma sintaxe que simplifica o processo de construção de circuitos ZKP. Inspirando-se nas linguagens de programação tradicionais, o Cairo permite que os desenvolvedores aproveitem suas habilidades de programação existentes ao projetar sistemas ZK. Através de sua abordagem declarativa, Cairo torna possível normalizar declarações lógicas e cálculos, tornando mais fácil representar cenários do mundo real no contexto de provas de conhecimento zero.

Eficiência & Escalabilidade

O desempenho é um fator-chave no sistema ZK. Cairo resolve este problema concentrando-se na eficiência e escalabilidade. A linguagem emprega técnicas de otimização como redução de restrições e eliminação de loops para minimizar a sobrecarga computacional associada aos circuitos ZKP. Ao otimizar o projeto do circuito, o Cairo alcança a geração e verificação de provas mais rápidas para aplicações que exigem alto rendimento e baixa latência.

Interoperabilidade e Integração

O Cairo foi projetado para se integrar com a infraestrutura de software existente, permitindo que os desenvolvedores combinem os recursos do ZKP com outras tecnologias. A linguagem suporta interoperabilidade através de interfaces padrão, permitindo a integração com plataformas blockchain, contratos inteligentes e sistemas off-chain. Essa flexibilidade abre a porta para a possibilidade de implementar recursos de privacidade aprimorados em aplicativos descentralizados, sistemas financeiros e protocolos de validação de dados.

Cairo SNARK CPU architecture em um exemplo ### Comunidade & Ecossistema

O projeto Cairo promove uma comunidade de desenvolvedores, pesquisadores e entusiastas que contribuem para o seu desenvolvimento. A disponibilidade de documentação, tutoriais e código de exemplo ajuda no processo de integração, permitindo que os desenvolvedores compreendam conceitos e comecem a criar sistemas ZK. Além disso, o Cairo se beneficia do ecossistema mais amplo da StarkWare, que fornece suporte, ferramentas e avanços de pesquisa para melhorar a linguagem e suas capacidades.

Lurk

Espreita[13] O objetivo é resolver as limitações dos SNARKs e circuitos tradicionais, aproveitando a Lisp, uma linguagem de programação funcional, para implementar circuitos de uso geral. Usando Lisp, Lurk introduz uma função genérica chamada "" que pode avaliar qualquer expressão de dados em um circuito snark.

Código é dados, dados são código

Um dos princípios básicos do Lurk é representar um programa como dados com conteúdo endereçável. Esta abordagem permite uma avaliação e validação eficientes dos programas Lurk. A endereçabilidade de conteúdo simplifica o processo de análise, e os dados resultantes podem ser usados diretamente em provadores SNARK sem a necessidade de uma etapa de compilação separada.

Implementando o Lisp em SNARKs

Para criar um circuito de uso geral, Lurk aproveitou os "contras" do alocador de memória da Lisp. O alocador combina duas expressões e gera uma referência à expressão resultante por hash. Ao provar que duas expressões são hashed para a mesma referência, Lurk pode executar cálculos em um circuito snark.

Continuação do Estilo de Passagem

Lurk emprega o Continuity Passing Style (CPS), que divide o processo de avaliação em etapas gerenciáveis. Cada etapa de avaliação torna-se um cálculo processável, permitindo uma execução uniforme e eficiente. Incluir continuações explícitas nos circuitos SNARK ajuda a passar pelo processo de avaliação passo a passo.

Dá completude de Turing e habilidades recursivas

Ao empregar Lisp, Lurk alcança a completude de Turing e suporta recursão infinita em circuitos SNARK. Esta importante capacidade permite a prova de cálculos complexos e a implementação de circuitos de uso geral capazes de realizar cálculos arbitrários.

Efeitos & Aplicações

As capacidades de Lurk têm implicações abrangentes. Ao suportar recursão infinita, cíclicos e fluxos controlados condicionalmente, o Lurk permite cálculos complexos em circuitos SNARK. Isso abre uma variedade de aplicações para cálculos de verificação, processamento de dados privados e a execução de programas Turing-complete.

Conclusão

A escolha de linguagens específicas de domínio (DSLs) é diversificada e espera-se que continue a crescer à medida que os casos de uso para provas de conhecimento zero (ZKs) continuam a se expandir em ecossistemas de blockchain. No momento, a corrida para estabelecer uma linguagem dominante para a construção de aplicativos ZK ainda está em seus estágios iniciais, sugerindo que podemos esperar mais melhorias nesta área.

No entanto, uma limitação comum da maioria das DSLs é a falta de efeitos de rede de grandes comunidades e bibliotecas robustas. Ter uma comunidade vibrante e bibliotecas abrangentes pode melhorar muito a experiência do desenvolvedor. Embora essa deficiência possa ser resolvida ao longo do tempo, é importante que as equipes envolvidas no desenvolvimento DSL priorizem a compatibilidade com outras bibliotecas, tomando emprestado a abordagem adotada pelo o1js.

Ao garantir a compatibilidade com bibliotecas existentes, as DSLs podem aproveitar o conhecimento coletivo e os recursos da comunidade de desenvolvedores mais ampla, permitindo uma integração mais fácil, desenvolvimento mais rápido e maior flexibilidade na implementação de aplicativos ZK. Essa abordagem colaborativa promoverá o desenvolvimento de um ecossistema mais forte em torno das DSLs para o benefício dos desenvolvedores e, em última análise, impulsionará a adoção e a 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
  • Republicar
  • 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)