NOVO: Helius adquire a Light Protocol
Palestra principal sobre ZK Compression: Breakpoint 2024
Blog/Fundamentos

Palestra principal sobre ZK Compression: Breakpoint 2024

PesquisadorLostin no X
13 min de leitura

A seguir, apresentamos uma visão geral e os principais pontos da palestra e da sessão de perguntas e respostas sobre ZK Compression na conferência Breakpoint 2024, conduzidas por Swen Schaeferjohann, cofundador da Light Protocol, e Nicolas Pennie, cofundador da Helius. A apresentação explora a ZK Compression: o que é, como funciona e, acima de tudo, por que é crucial para o futuro da Solana.

Baixe os slides da apresentação.

ZK Compression: leve a zero

Uma coisa que os desenvolvedores descobrem rapidamente ao trabalhar com a Solana é que, embora o processamento seja relativamente barato, os custos de armazenamento de dados são altos. Por exemplo, considerando o preço de US$ 150 por SOL, criar 1.000 contas de tokens custa cerca de US$ 300, enquanto criar um milhão de contas custaria US$ 300.000. Isso torna financeiramente inviável escalar aplicações para uma grande base de usuários, pois esses custos aumentam com o preço do SOL. Além disso, o crescimento do estado é um desafio enfrentado por todas as blockchains com estado. À medida que novas contas são criadas, é preciso pagar taxas de aluguel para mantê-las, o que é caro. Atualmente, a Solana tem mais de 500 milhões de contas, com aproximadamente um milhão de novas contas adicionadas por dia.

A ZK Compression oferece soluções para esses problemas ao proporcionar:

  • Contas mil vezes mais baratas
  • Uma solução para o crescimento do estado
  • Uma base para computação ZK na Solana

Compressão de estado + ZK

Para entender a ZK Compression, primeiro vamos analisar a compressão de estado, que envolve cinco etapas principais:

  1. Milhões de contas → “impressão digital”
  2. Armazenar a impressão digital on-chain
  3. Armazenar o histórico das contas no ledger da Solana
  4. Armazenar em cache o estado mais recente das contas com um indexador
  5. Verificar o estado comprimido das contas por meio da “impressão digital” on-chain

Começamos comprimindo milhões de contas da Solana e aplicando hash a elas para gerar uma "impressão digital" compacta. Essa impressão digital é armazenada em uma conta on-chain, enquanto todos os dados subjacentes das contas continuam acessíveis no ledger da Solana. Para garantir a validade dessas contas off-chain, usamos um mecanismo de prova que verifica a integridade delas por meio da impressão digital on-chain. A etapa final desse processo utiliza SNARKs de conhecimento zero, que sustentam o sistema de provas responsável por verificar a integridade dessas contas.

Por que ZK Compression?

Vários recursos importantes tornam a ZK Compression uma solução ideal para compressão de estado. Por exemplo, contas comprimidas se comportam de forma semelhante às contas padrão da Solana, permitindo que os desenvolvedores aproveitem seus conhecimentos e técnicas de desenvolvimento existentes com uma curva de aprendizado reduzida. Isso diminui a barreira de entrada e facilita a adoção da ZK Compression pelos desenvolvedores.

‍A API disponibilizada pelo indexador é muito semelhante às chamadas RPC existentes. Por exemplo, o método getAccountInfo corresponde diretamente a getCompressedAccount, e esse mapeamento individual se estende por toda a API RPC. Essa consistência simplifica a integração da ZK Compression às ferramentas e aos fluxos de trabalho existentes da Solana.

PDAs comprimidos

Um recurso importante desse sistema é a compatibilidade com endereços derivados de programa (PDAs) comprimidos. PDAs são endereços de contas determinísticos que podem ser derivados de forma consistente usando um endereço de programa e uma seed específicos. PDAs comprimidos ajudam a eliminar problemas como condições de corrida, colisões de endereços ou a criação acidental de várias contas para a mesma combinação de endereço de programa e seed. Essa melhoria é uma das principais razões para a migração do sistema existente de compressão de contas SPL para a ZK Compression.

‍Com compatibilidade total com a ZK Compression, o impacto potencial na Solana é significativo. Os PDAs e a capacidade de compor programas permitem criar arquiteturas mais complexas, envolvendo vários programas e diferentes PDAs, o que reproduz a experiência familiar de desenvolvimento de aplicações tradicionais. Isso pode ser feito por uma fração do custo, reduzindo em até mil vezes as despesas com contas. Essa redução drástica de custos viabilizará novos casos de uso que antes eram inacessíveis devido aos custos proibitivos.

Melhorias de composabilidade

Tudo é executado diretamente na Solana: não se trata de uma L2 nem de um validium. A disponibilidade dos dados é fornecida automaticamente pelo ledger da Solana, garantindo uma execução verificável e totalmente combinável.

‍As provas de conhecimento zero reduzem o tamanho das provas para 128 bytes constantes, liberando mais espaço em cada transação para outras operações, o que facilita a composabilidade e oferece mais flexibilidade para atividades adicionais. O tamanho das provas permanece constante, independentemente de quantas contas sejam atualizadas, lidas ou gravadas em uma única transação ou de quantas inclusões ou exclusões precisem ser comprovadas. Isso é essencial porque as transações da Solana são inerentemente pequenas, com 1,2 kilobytes. Para alcançar tempos de prova rápidos, foi necessária uma função hash diferente para as árvores de Merkle de estado. Por isso, não foi possível usar o programa original de compressão de contas SPL.

Descompressão

Outro recurso importante é a descompressão, que evita a dependência de uma única solução e permite uma interoperabilidade fluida entre contas “normais” e comprimidas. Qualquer conta da Solana pode ser comprimida, permitindo que você recupere o custo do aluguel. Você também pode descomprimir uma conta comprimida a qualquer momento, facilitando a transição entre as duas formas. Por exemplo, se você tiver um token comprimido que precise ser trocado, basta descomprimi-lo e usá-lo com a Jupiter para executar a troca.

A descompressão permite transições fluidas entre estados quentes e frios. Por exemplo, se você estiver desenvolvendo um jogo com várias cartas e itens comprimidos, poderá descomprimi-los durante as batalhas para permitir mudanças rápidas de estado e, depois, comprimi-los novamente para salvar o resultado final, como alterações nos pontos de vida. Há algumas limitações de simultaneidade dentro de uma única árvore durante um slot. A compressão deve ser evitada se você precisar atualizar a mesma conta várias vezes dentro de um bloco. Nesses casos, é melhor descomprimir permanentemente essa conta específica para que ela funcione como uma conta on-chain normal. Por exemplo, uma conta de pool de AMM seria mais adequada dessa forma, pois seu estado precisa ser atualizado regularmente. O sistema é flexível o bastante para interagir com contas comprimidas e descomprimidas na mesma transação.

Essa solução totalmente generalizada não se limita a um único programa, lógica de negócios ou aplicação. As contas da Solana podem ser comprimidas com baixo custo e suporte integrado à indexação. A solução é totalmente open source, está pronta para produção e pode ser adaptada a diversos casos de uso.

Tokens comprimidos

Tokens comprimidos não são diretamente compatíveis com corretoras e plataformas DeFi, a menos que elas ofereçam suporte. No entanto, isso pode ser resolvido facilmente descomprimindo o token comprimido em um token SPL padrão, que pode então ser usado em DeFi e corretoras como qualquer token normal. Essa flexibilidade evita a dependência de uma única solução, e os usuários podem alternar entre tokens comprimidos e normais conforme necessário. Tokens comprimidos são ideais para aplicações frias que exigem interações menos frequentes, enquanto contas de tokens normais são mais adequadas para estados quentes ou ativos usados com frequência. Uma das principais vantagens desse sistema é sua capacidade de resolver o problema do crescimento do estado transferindo dados de estado frio para o armazenamento comprimido, preservando todos os benefícios e gerenciando o estado com mais eficiência.‍

‍Em nosso lançamento inicial, apresentamos tokens comprimidos criados com as mesmas ferramentas que você usaria em qualquer aplicação compatível com compressão. O programa de tokens comprimidos é idêntico ao programa de tokens da Solana, oferecendo a mesma experiência de usuário com um custo mil vezes menor. A previsão é que as extensões de tokens entrem em operação no início de 2025.

Com recursos como a descompressão, você pode distribuir grandes volumes de tokens por airdrop e descomprimi-los rapidamente quando forem necessários para atividades DeFi. Embora as provas de conhecimento zero (ZK) sejam frequentemente consideradas o Santo Graal da computação cara, otimizamos o processo para que as transferências sejam semelhantes às transferências padrão de tokens SPL, reduzindo o tempo de geração de provas para milissegundos. Isso coloca o ZK para consumidores, pronto para produção, em primeiro plano e reduz significativamente o custo de gerenciamento de contas de tokens.

Como funciona a ZK Compression?

O sistema geral tem cinco componentes principais: 

  • Uma floresta de árvores de estado
  • Light System Program
  • Compressed Token Program
  • Nós Forester
  • Indexadores (Photon)

Uma floresta de árvores de estado

Primeiro, temos as árvores de Merkle de estado, que chamamos de “floresta de árvores de Merkle de estado”. Essa estrutura cria uma impressão digital criptográfica exclusiva de um conjunto de contas que podemos armazenar on-chain. Por exemplo, se você tiver quatro contas, poderá aplicar hash a elas recursivamente em uma estrutura de árvore de Merkle.

O hash final de 32 bytes no topo fornece uma garantia criptográfica da integridade dos dados subjacentes de todas as contas. Isso garante que o estado de qualquer conta possa ser facilmente verificado como parte da árvore de Merkle ao compará-lo com a raiz de estado. Usamos o termo "floresta" porque existem várias árvores de Merkle, cada uma com sua própria raiz.

Comparação com a compressão de contas SPL existente

Uma grande melhoria da ZK Compression em relação ao programa existente de compressão de contas SPL é a capacidade de provar que uma parte do estado pertence a determinada árvore de Merkle, garantindo a geração eficiente de provas dentro dos limites de tamanho das transações da Solana. Isso nos permite provar a exclusividade de determinado endereço ao gerenciar uma árvore de endereços, semelhante a uma árvore de Merkle de estado, mas com um recurso adicional: provar a inclusão em uma folha também comprova a exclusão de um intervalo específico de números. Isso permite lidar com um espaço de endereços de 248 bits usando árvores de Merkle muito menores, garantindo a exclusividade dos endereços.

É possível comprovar M contas em N árvores mantendo um tamanho de prova constante de 128 bytes e, portanto, respeitando os limites de 1,2 kb para o tamanho das transações da Solana. A geração de provas, que ocorre off-chain, é mais cara do que no programa existente de compressão de contas SPL. No entanto, a verificação das provas, que ocorre on-chain, permanece constante e costuma ser mais barata, na maioria dos casos, do que no programa de compressão existente.

Light System Program e Compressed Token Program

O protocolo envolve dois programas principais. O Light System Program é um contrato on-chain que reproduz o Solana System Program. Ele interage com a árvore de Merkle, aplica o modelo padrão de contas da Solana e verifica a exclusividade dos PDAs. O Compressed Token Program reproduz o programa de tokens SPL, aplicando o layout de dados SPL ao modelo de contas comprimidas.

Nós Forester

Os nós Forester são responsáveis por gerenciar essa floresta leve. Quando você atualiza uma conta comprimida, um novo estado da conta é adicionado à árvore, enquanto o estado antigo é zerado ou anulado.

Essa abordagem tem duas implicações principais. Primeiro, qualquer atualização de estado causa uma mudança na raiz à medida que as modificações se propagam pela árvore de Merkle invertida até o topo. Segundo, as árvores são preenchidas gradualmente e acabam atingindo sua capacidade máxima. É nesse ponto que entra a floresta de árvores leves.

Os nós Forester são responsáveis por manter a raiz de estado. Eles atualizam a raiz de estado de forma assíncrona e gerenciam a rotação das árvores de estado cheias. A operação de um nó Forester para suas próprias árvores de estado não exige permissão e funciona de forma semelhante à execução de um RPC, permitindo que qualquer pessoa gerencie suas próprias atualizações de estado. Como desenvolvedor de uma aplicação, você tem interesse direto em manter seu estado comprimido, o que cria um incentivo natural para garantir que suas árvores de estado sejam gerenciadas corretamente. Você pode executar seu próprio nó para hospedagem própria ou pagar a um provedor para cuidar disso.

Photon

O indexador Photon é uma solução open source projetada para acompanhar e gerenciar atualizações, criações, mutações e outros eventos relacionados a contas comprimidas na blockchain. Ele monitora a atividade on-chain e armazena em cache o estado atual dessas contas. Além disso, gera provas criptográficas que podem ser usadas para verificação ou alteração de dados.

‍O indexador Photon, pronto para produção, incorpora melhorias significativas baseadas nos aprendizados obtidos com versões anteriores da compressão. Seu objetivo é ser simples e acessível, seja para um desenvolvedor individual, uma empresa ou um provedor de RPC.

O desenvolvimento local ficou muito mais simples. A solução inclui uma ferramenta de CLI com um clique que se integra perfeitamente à sua configuração local. Também está disponível um explorador voltado a desenvolvedores, que oferece uma interface visual para consultar contas comprimidas, acompanhar suas alterações e examinar o histórico de transações.

O Photon gera snapshots diários, acelerando o desenvolvimento e a implantação. Em vez de reindexar desde o bloco gênese, os desenvolvedores podem começar com um snapshot, reduzindo os tempos de inicialização para 15 minutos ou menos. Esses snapshots também melhoram a replicação, garantindo que, se um provedor de RPC deixar de oferecer suporte à compressão, você possa obter facilmente um snapshot e executar o indexador de forma independente. O risco de perda de dados é minimizado com snapshots, que podem ser armazenados em soluções descentralizadas como a FileCoin.

Com o Photon, você tem a flexibilidade de indexar apenas um subconjunto dos dados, o que reduz significativamente os requisitos de hardware e o tamanho do banco de dados. Isso pode ser feito usando SQLite com um único comando da CLI. Como alternativa, se você for um provedor de RPC, poderá indexar todo o conjunto de dados. O Photon está disponível em qualquer plano da Helius. Você também pode executá-lo de forma independente ou solicitar que outro provedor o ofereça.

Por desenvolvedores, para desenvolvedores

Nosso foco está totalmente nos desenvolvedores, e estamos trabalhando ativamente em três grandes melhorias criadas especificamente para aprimorar a experiência de desenvolvimento.

Web3.js para compressão

O SDK foi projetado para funcionar de forma semelhante ao Solana web3.js, mas com suporte completo à compressão. Para iniciar uma transferência de tokens comprimidos, primeiro você busca suas contas de tokens comprimidos e depois as usa para obter uma prova de validade pelo seu RPC ou por um nó de prova dedicado. Em seguida, cria as instruções da mesma forma que faria com o programa de tokens SPL, especificando o que deseja enviar, a quantidade, a mint e o destinatário, gerando uma transação normal da Solana.

‍Configuração completa para desenvolvimento local

Oferecemos um validador de teste pré-configurado com tudo o que é necessário para o desenvolvimento local, incluindo todos os programas necessários, o indexador Photon e um nó de prova local. Isso garante um processo de configuração simplificado para os desenvolvedores.

Macros do Anchor

Para quem está familiarizado com o desenvolvimento de programas da Solana usando o Anchor, nosso objetivo é tornar o trabalho com contas comprimidas tão simples quanto trabalhar com contas normais. Se você já criou um programa com Anchor, reconhecerá imediatamente a experiência familiar de desenvolvimento. As macros do Anchor ainda estão em desenvolvimento.

Airship

O Airship permite que os desenvolvedores aproveitem a ZK Compression hoje mesmo com uma ferramenta de airdrop de tokens em massa que é simples e econômica. Ele oferece uma interface de usuário e uma CLI. Como é totalmente open source, os desenvolvedores podem criar um fork e modificá-lo conforme suas necessidades. À medida que mais desenvolvedores distribuírem tokens comprimidos por airdrop, o ecossistema começará a adotá-los em várias aplicações. No entanto, se houver necessidade de conversão imediata, os desenvolvedores poderão descomprimir os tokens na mesma hora, garantindo que o Airship já seja uma ferramenta de airdrop pronta para uso com tokens normais.

‍A ferramenta oferece suporte automático a airdrops para detentores de dispositivos Solana mobile, detentores de tokens específicos ou detentores de coleções de NFT. Se você tiver uma lista pré-gerada de destinatários, também poderá importar um arquivo CSV e especificar o token e a quantidade do airdrop. Tanto a CLI quanto a interface permitem reiniciar o airdrop a partir do último estado salvo caso você enfrente problemas, como a perda da conexão com a internet. Isso é especialmente útil em airdrops maiores, que podem levar de 30 a 45 minutos ao distribuir tokens para uma longa lista de endereços.

Um novo espaço de design para aplicações

A ZK Compression resolve o problema do crescimento do estado armazenando na memória do validador ativo apenas o hash raiz final de todas as contas. Essa abordagem reduz de forma eficaz os problemas de crescimento do estado. Além disso, a ZK Compression abre novas possibilidades de design para aplicações. Estes são apenas alguns possíveis casos de uso:

  • Compressores de tokens SPL
  • Um bilhão de meme coins
  • Mercados de previsão para publicações no Twitter
  • PDAs de identificação para nós em redes DePin
  • Cálculo e distribuição verificáveis de recompensas
  • Pontes com confiança minimizada
  • Protocolos de identidade ZK

A documentação apresenta mais ideias.

A ZK Compression já está disponível na mainnet e na devnet! Você pode começar lendo nossa documentação e explorando os exemplos. Além disso, estamos promovendo um hackathon com até US$ 45.000 em prêmios.

Se você quiser se aprofundar em ZK, confira nossas publicações anteriores no blog da Helius para conhecer em detalhes os fundamentos das provas de conhecimento zero e suas aplicações na Solana.

‍

Assine a Helius

Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos

Imagem ampliada