E se perdesse a memória de hora em hora? E precisa de pedir constantemente a alguém para lhe dizer o que fez? Esse é o estado atual dos contratos inteligentes. Em blockchains como o Ethereum, os contratos inteligentes não podem aceder diretamente a estados para além dos 256 blocos. Este problema é ainda mais agravado no ecossistema multi-cadeias, onde a recuperação e verificação de dados em diferentes camadas de execução é ainda mais difícil.
Em 2020, Vitalik Buterin e Tomasz Stanczak propuseram uma forma de aceder aos dados ao longo do tempo. Enquanto o EIP ficou estagnado, a sua necessidade ressurgiu no mundo multi-cadeias centrado no roll-up. Hoje, as provas de armazenamento emergiram como uma fronteira, para dar consciência e memória aos contratos inteligentes.
Existem várias maneiras pelas quais os dapps podem aceder aos dados e ao estado. Todas as abordagens exigem que a aplicação confie em humanos/entidades ou segurança ou código económico criptográfico e tenha algumas compensações:
Dados os desafios e limitações destas soluções, há uma necessidade clara de armazenar e fornecer hashes de bloco na cadeia. É aqui que entram as provas de armazenamento. Para entender melhor as provas de armazenamento, vamos dar uma olhada rápida no armazenamento de dados em blockchains.
Uma blockchain é uma base de dados pública que é atualizada e partilhada entre muitos computadores numa rede. Os dados e o estado são armazenados em grupos consecutivos chamados blocos e cada bloco faz referência criptograficamente ao seu pai, armazenando o hash do cabeçalho do bloco anterior.
Vamos tomar o bloco Ethereum como exemplo. O Ethereum aproveita um tipo específico de árvore Merkle conhecida como a “árvore Merkle Patricia” (MPT). Os cabeçalhos de bloco Ethereum contêm raízes de quatro tentativas diferentes da Merkle-Patricia, i.e. Tribo estadual, Tribo de armazenamento, Tribo de recibos e Triagem de transação. Estas 4 tentativas codificam mapeamentos que compreendem todos os dados do Ethereum. As árvores Merkle são utilizadas devido à sua eficiência no armazenamento de dados. Usando hashes recursivos, apenas o hash raiz eventualmente precisa ser armazenado, economizando muito espaço. Permitem que qualquer pessoa prove a existência de um elemento na árvore provando que o hash recursivo dos nós leva ao mesmo hash raiz. As provas da Merkle permitem que clientes ligeiros no Ethereum obtêm respostas a perguntas como:
Em vez de descarregar todas as transações e cada bloco, um “cliente leve” só pode descarregar a cadeia de cabeçalhos de bloco e verificar as informações usando Merkle Proofs. Isto torna o processo global altamente eficiente. Consulte este blog da Vitalik e do artigo de pesquisa Maven11 para entender melhor a implementação, vantagens e desafios associados às Merkle Trees.
As provas de armazenamento permitem-nos provar que algo está comprometido na base de dados e é válido também usando compromissos criptográficos. Se pudermos fornecer essa prova, é uma alegação verificável de que algo aconteceu na cadeia de blocos.
As provas de armazenamento permitem duas funcionalidades principais:
Provas de armazenamento a um nível muito alto verificam se o bloco específico faz parte do histórico canónico da cadeia de blocos e, em seguida, verifique se os dados específicos solicitados fazem parte do bloco. Isto poderia ser conseguido através de:
Alguns dos projetos que adotam esta abordagem são Heródoto, Lagrange, Axiom, Hyper Oracle, Brevis Network e nil foundation. Enquanto um esforço significativo está a ser feito para tornar as aplicações sensíveis ao estado em vários blockchains, o IBC (Inter Blockchain Communication) destaca-se como um padrão de interoperabilidade que permite aplicações como ICQ (interchain queries) e ICA (Interchain accounts). O ICQ permite que as aplicações na Cadeia A consultem o estado da cadeia B incluindo a consulta num pacote IBC simples e o ICA permite que uma cadeia de blocos controle com segurança uma conta noutra cadeia de blocos. Combiná-los pode permitir casos de uso interessantes entre cadeias. Os fornecedores de RaaS como a Saga oferecem estas funcionalidades a todas as suas cadeias de aplicações por predefinição, utilizando o IBC.
Existem muitas maneiras pelas quais as provas de armazenamento podem ser otimizadas para encontrar o equilíbrio certo entre o consumo de memória, o tempo de prova, o tempo de verificação, a eficiência computacional e a experiência do programador. O processo global pode ser amplamente dividido em 3 subprocessos principais.
Acesso aos dados: Neste subprocesso, o fornecedor de serviços acessa os cabeçalhos de bloco da cadeia de origem nativamente na camada de execução ou através da manutenção de uma cache na cadeia. Para acesso a dados entre cadeias, é necessária a verificação do consenso da cadeia de origem na cadeia de destino. Algumas das abordagens e otimizações que estão a ser adotadas incluem:
Juntamente com o acesso aos dados, os contratos inteligentes também devem poder fazer cálculos arbitrários sobre os dados. Embora alguns casos de uso possam não exigir computação, é um serviço importante de valor acrescentado para muitos outros casos de uso. Muitos dos prestadores de serviços permitem cálculos nos dados, uma vez que uma prova zk do cálculo pode ser gerada e fornecida na cadeia para validade. Como as soluções AMP existentes como Axelar, LayerZero, Polyhedra Network poderiam potencialmente ser usadas para acesso a dados, o processamento de dados pode tornar-se um diferencial para os prestadores de serviços à prova de armazenamento.
O Hyper Oracle, por exemplo, permite aos programadores definir cálculos personalizados fora da cadeia com JavaScript. A Brevis projetou um mercado aberto de ZK Query Enginees que aceita consultas de dados de DApps e processa-as usando os cabeçalhos de bloco atestados. O contrato inteligente envia uma consulta de dados, que é recolhida por um provador do mercado. O Prover gera uma prova com base na entrada da consulta, cabeçalhos de bloco relevantes (da camada de agregação Brevis) e resultados. Lagrange introduziu o ZK Big Data Stack para provar modelos de programação distribuída como SQL, MapReduce e Spark/RDD. As provas são modulares e podem ser geradas a partir de qualquer cabeçalho de bloco originado de pontes de cadeia cruzada existentes e protocolos AMP. O ZK MapReduce, o primeiro produto da pilha Lagrange ZK BigData, é um motor de computação distribuído (baseado no conhecido modelo de programação MapReduce) para provar resultados de computação envolvendo conjuntos consideráveis de dados multi-cadeia. Por exemplo, uma única prova ZKMR pode ser usada para provar alterações na liquidez de um DEX implantado em 4—5 cadeias ao longo de uma janela de tempo especificada. Para consultas relativamente simples, o cálculo também pode ser feito diretamente na cadeia, como está sendo feito por Heródoto no momento.
As provas de estado e armazenamento podem desbloquear muitos novos casos de utilização para contratos inteligentes na camada de aplicação, middleware e infra-estrutura. Alguns destes são:
Governança:
Todas as provas acima podem ser utilizadas para fornecer uma experiência personalizada aos utilizadores. Os Dapps podem oferecer descontos ou privilégios para reter comerciantes ou utilizadores experientes e oferecer uma experiência de utilizador simplificada para utilizadores novatos.
Os dois últimos casos de uso exigirão que a prova seja atualizada sempre que um novo bloco for adicionado à cadeia de origem.
A sensibilização capacita as empresas de tecnologia a servirem melhor os seus clientes. Da identidade do utilizador ao comportamento de compra aos gráficos sociais, as empresas de tecnologia aproveitam a consciência para desbloquear capacidades como segmentação de precisão, segmentação de clientes e marketing viral. As empresas de tecnologia tradicionais precisam de permissão explícita dos seus utilizadores e têm de ter cuidado ao gerir os dados do utilizador. No entanto, todos os dados do utilizador em blockchains sem permissão estão disponíveis publicamente sem revelar necessariamente a identidade do utilizador. Os contratos inteligentes devem poder alavancar os dados publicamente disponíveis para melhor servir os utilizadores. O desenvolvimento e a adoção de ecossistemas mais especializados farão da sensibilização do estado ao longo do tempo e das blockchains um problema cada vez mais importante a ser resolvido. As provas de armazenamento podem permitir que o Ethereum surja como uma camada de identidade e propriedade de ativos, além de ser uma camada de liquidação. Os utilizadores podem manter a sua identidade e activos chave no Ethereum que poderiam ser usados em várias cadeias de blocos sem fazer a ponte entre ativos o tempo todo. Continuamos entusiasmados com as novas possibilidades e casos de utilização que serão desbloqueados no futuro.
E se perdesse a memória de hora em hora? E precisa de pedir constantemente a alguém para lhe dizer o que fez? Esse é o estado atual dos contratos inteligentes. Em blockchains como o Ethereum, os contratos inteligentes não podem aceder diretamente a estados para além dos 256 blocos. Este problema é ainda mais agravado no ecossistema multi-cadeias, onde a recuperação e verificação de dados em diferentes camadas de execução é ainda mais difícil.
Em 2020, Vitalik Buterin e Tomasz Stanczak propuseram uma forma de aceder aos dados ao longo do tempo. Enquanto o EIP ficou estagnado, a sua necessidade ressurgiu no mundo multi-cadeias centrado no roll-up. Hoje, as provas de armazenamento emergiram como uma fronteira, para dar consciência e memória aos contratos inteligentes.
Existem várias maneiras pelas quais os dapps podem aceder aos dados e ao estado. Todas as abordagens exigem que a aplicação confie em humanos/entidades ou segurança ou código económico criptográfico e tenha algumas compensações:
Dados os desafios e limitações destas soluções, há uma necessidade clara de armazenar e fornecer hashes de bloco na cadeia. É aqui que entram as provas de armazenamento. Para entender melhor as provas de armazenamento, vamos dar uma olhada rápida no armazenamento de dados em blockchains.
Uma blockchain é uma base de dados pública que é atualizada e partilhada entre muitos computadores numa rede. Os dados e o estado são armazenados em grupos consecutivos chamados blocos e cada bloco faz referência criptograficamente ao seu pai, armazenando o hash do cabeçalho do bloco anterior.
Vamos tomar o bloco Ethereum como exemplo. O Ethereum aproveita um tipo específico de árvore Merkle conhecida como a “árvore Merkle Patricia” (MPT). Os cabeçalhos de bloco Ethereum contêm raízes de quatro tentativas diferentes da Merkle-Patricia, i.e. Tribo estadual, Tribo de armazenamento, Tribo de recibos e Triagem de transação. Estas 4 tentativas codificam mapeamentos que compreendem todos os dados do Ethereum. As árvores Merkle são utilizadas devido à sua eficiência no armazenamento de dados. Usando hashes recursivos, apenas o hash raiz eventualmente precisa ser armazenado, economizando muito espaço. Permitem que qualquer pessoa prove a existência de um elemento na árvore provando que o hash recursivo dos nós leva ao mesmo hash raiz. As provas da Merkle permitem que clientes ligeiros no Ethereum obtêm respostas a perguntas como:
Em vez de descarregar todas as transações e cada bloco, um “cliente leve” só pode descarregar a cadeia de cabeçalhos de bloco e verificar as informações usando Merkle Proofs. Isto torna o processo global altamente eficiente. Consulte este blog da Vitalik e do artigo de pesquisa Maven11 para entender melhor a implementação, vantagens e desafios associados às Merkle Trees.
As provas de armazenamento permitem-nos provar que algo está comprometido na base de dados e é válido também usando compromissos criptográficos. Se pudermos fornecer essa prova, é uma alegação verificável de que algo aconteceu na cadeia de blocos.
As provas de armazenamento permitem duas funcionalidades principais:
Provas de armazenamento a um nível muito alto verificam se o bloco específico faz parte do histórico canónico da cadeia de blocos e, em seguida, verifique se os dados específicos solicitados fazem parte do bloco. Isto poderia ser conseguido através de:
Alguns dos projetos que adotam esta abordagem são Heródoto, Lagrange, Axiom, Hyper Oracle, Brevis Network e nil foundation. Enquanto um esforço significativo está a ser feito para tornar as aplicações sensíveis ao estado em vários blockchains, o IBC (Inter Blockchain Communication) destaca-se como um padrão de interoperabilidade que permite aplicações como ICQ (interchain queries) e ICA (Interchain accounts). O ICQ permite que as aplicações na Cadeia A consultem o estado da cadeia B incluindo a consulta num pacote IBC simples e o ICA permite que uma cadeia de blocos controle com segurança uma conta noutra cadeia de blocos. Combiná-los pode permitir casos de uso interessantes entre cadeias. Os fornecedores de RaaS como a Saga oferecem estas funcionalidades a todas as suas cadeias de aplicações por predefinição, utilizando o IBC.
Existem muitas maneiras pelas quais as provas de armazenamento podem ser otimizadas para encontrar o equilíbrio certo entre o consumo de memória, o tempo de prova, o tempo de verificação, a eficiência computacional e a experiência do programador. O processo global pode ser amplamente dividido em 3 subprocessos principais.
Acesso aos dados: Neste subprocesso, o fornecedor de serviços acessa os cabeçalhos de bloco da cadeia de origem nativamente na camada de execução ou através da manutenção de uma cache na cadeia. Para acesso a dados entre cadeias, é necessária a verificação do consenso da cadeia de origem na cadeia de destino. Algumas das abordagens e otimizações que estão a ser adotadas incluem:
Juntamente com o acesso aos dados, os contratos inteligentes também devem poder fazer cálculos arbitrários sobre os dados. Embora alguns casos de uso possam não exigir computação, é um serviço importante de valor acrescentado para muitos outros casos de uso. Muitos dos prestadores de serviços permitem cálculos nos dados, uma vez que uma prova zk do cálculo pode ser gerada e fornecida na cadeia para validade. Como as soluções AMP existentes como Axelar, LayerZero, Polyhedra Network poderiam potencialmente ser usadas para acesso a dados, o processamento de dados pode tornar-se um diferencial para os prestadores de serviços à prova de armazenamento.
O Hyper Oracle, por exemplo, permite aos programadores definir cálculos personalizados fora da cadeia com JavaScript. A Brevis projetou um mercado aberto de ZK Query Enginees que aceita consultas de dados de DApps e processa-as usando os cabeçalhos de bloco atestados. O contrato inteligente envia uma consulta de dados, que é recolhida por um provador do mercado. O Prover gera uma prova com base na entrada da consulta, cabeçalhos de bloco relevantes (da camada de agregação Brevis) e resultados. Lagrange introduziu o ZK Big Data Stack para provar modelos de programação distribuída como SQL, MapReduce e Spark/RDD. As provas são modulares e podem ser geradas a partir de qualquer cabeçalho de bloco originado de pontes de cadeia cruzada existentes e protocolos AMP. O ZK MapReduce, o primeiro produto da pilha Lagrange ZK BigData, é um motor de computação distribuído (baseado no conhecido modelo de programação MapReduce) para provar resultados de computação envolvendo conjuntos consideráveis de dados multi-cadeia. Por exemplo, uma única prova ZKMR pode ser usada para provar alterações na liquidez de um DEX implantado em 4—5 cadeias ao longo de uma janela de tempo especificada. Para consultas relativamente simples, o cálculo também pode ser feito diretamente na cadeia, como está sendo feito por Heródoto no momento.
As provas de estado e armazenamento podem desbloquear muitos novos casos de utilização para contratos inteligentes na camada de aplicação, middleware e infra-estrutura. Alguns destes são:
Governança:
Todas as provas acima podem ser utilizadas para fornecer uma experiência personalizada aos utilizadores. Os Dapps podem oferecer descontos ou privilégios para reter comerciantes ou utilizadores experientes e oferecer uma experiência de utilizador simplificada para utilizadores novatos.
Os dois últimos casos de uso exigirão que a prova seja atualizada sempre que um novo bloco for adicionado à cadeia de origem.
A sensibilização capacita as empresas de tecnologia a servirem melhor os seus clientes. Da identidade do utilizador ao comportamento de compra aos gráficos sociais, as empresas de tecnologia aproveitam a consciência para desbloquear capacidades como segmentação de precisão, segmentação de clientes e marketing viral. As empresas de tecnologia tradicionais precisam de permissão explícita dos seus utilizadores e têm de ter cuidado ao gerir os dados do utilizador. No entanto, todos os dados do utilizador em blockchains sem permissão estão disponíveis publicamente sem revelar necessariamente a identidade do utilizador. Os contratos inteligentes devem poder alavancar os dados publicamente disponíveis para melhor servir os utilizadores. O desenvolvimento e a adoção de ecossistemas mais especializados farão da sensibilização do estado ao longo do tempo e das blockchains um problema cada vez mais importante a ser resolvido. As provas de armazenamento podem permitir que o Ethereum surja como uma camada de identidade e propriedade de ativos, além de ser uma camada de liquidação. Os utilizadores podem manter a sua identidade e activos chave no Ethereum que poderiam ser usados em várias cadeias de blocos sem fazer a ponte entre ativos o tempo todo. Continuamos entusiasmados com as novas possibilidades e casos de utilização que serão desbloqueados no futuro.