Computação Off-Chain é tudo que você precisa

intermediário1/4/2024, 5:43:45 PM
Este artigo introduz os conceitos de co-processadores e Rollup, bem como a separação modular da computação e verificação futuras do blockchain.

Introdução

Blockchains são registros distribuídos globalmente que chegam a um consenso sobre um estado global. Alguns blockchains vêm equipados com um ambiente de execução Turing-completo que permite programabilidade em cima deste estado global. Programas que visam os ambientes de execução de blockchains são chamados de contratos inteligentes, e os blockchains subjacentes são chamados de plataformas de contratos inteligentes. Ethereum, Solana e Avalanche são algumas das plataformas de contratos inteligentes mais conhecidas. Podemos pensar em plataformas de contratos inteligentes como computadores distribuídos, com o ambiente de execução (ou máquina virtual) atuando como a CPU e o estado desempenhando o papel de armazenamento.

Essa moldura de blockchains como computadores será importante para motivar por que coprocessadores/computação off-chain são inevitáveis, especialmente no contexto de blockchains. Na computação tradicional, coprocessadores originaram-se na microarquitetura para melhorar o desempenho. Da mesma forma, os coprocessadores na Ethereum prometem acesso a dados históricos e computação offchain de alto desempenho para aumentar as funcionalidades e o espaço de design do protocolo de camada base. Dê uma olhada neste artigo introdutório sobre coprocessadores para mais informações.

Este artigo explora coprocessadores a partir de primeiros princípios, com o objetivo de esclarecer a sua importância e meta-propriedades. Em seguida, comparamos os coprocessadores com rollups, demonstrando como esses dois conceitos, embora diferentes, estão intimamente relacionados. Também fornecemos exemplos de quando rollups e coprocessadores podem ser usados em conjunto. Por exemplo, mesmo um rollup ou L1 todo-poderoso pode precisar de um coprocessador para tarefas de grande porte.

Concluímos este artigo observando que as blockchains estão caminhando para um futuro onde a computação é centralizada, mas a verificação permanece descentralizada. Rollups, coprocessadores e qualquer outra forma de computação verificável fora da cadeia são apenas diferentes instâncias deste futuro.

Como chegamos aqui:

Em "Os Limites da Escalabilidade do Blockchain", Vitalik mencionou que para a descentralização do blockchain, é importante que usuários regulares possam executar um nó.

Como mencionado anteriormente, o Ethereum pode ser conceituado como um computador global descentralizado em muitos aspectos. É uma rede de nós executando software que fornece recursos computacionais para a execução de contratos inteligentes. O blockchain do Ethereum armazena informações de estado e código, semelhante ao armazenamento e memória de um computador. E a Máquina Virtual Ethereum (EVM) roda em cada nó, processando transações e executando código como uma CPU. No entanto, o Ethereum é sem permissão e descentralizado, usando consenso entre nós não confiáveis. Se alguns nós ficarem offline, a rede continua operando. Para garantir a correção das operações da EVM, os validadores em redes de Prova de Participação (PoS) como o Ethereum devem realizar todas as transições de estado para verificá-las. Isso limita a velocidade de uma rede PoS aos seus nós mais lentos, limitando a quantidade de computação disponível para os desenvolvedores de aplicativos.

Ao contrário de um computador comum, o Ethereum limita a computação e o armazenamento para evitar abusos na rede. Taxas são cobradas para cada operação, tornando os loops infinitos financeiramente impraticáveis. Essa abordagem mantém as barreiras de entrada baixas, permitindo que hardware cotidiano como um Raspberry Pi execute nós de rede. As restrições possibilitam um sistema inclusivo onde qualquer pessoa pode ajudar a operar a rede descentralizada do Ethereum.

Devido a essas restrições computacionais dos nós do Ethereum, aplicativos complexos como modelos de Aprendizado de Máquina, jogos ou aplicativos de computação científica não podem ser executados diretamente no Ethereum hoje.

É um trade-off para tornar o Ethereum amplamente acessível, seguro e sustentável como base para aplicativos básicos. Mas inevitavelmente, algumas limitações existem em relação a um computador computacionalmente irrestrito. Ele tem limitações quando comparado até mesmo a um processador antigo como um Pentium 5:

Nenhuma matemática de ponto flutuante complexa - A EVM só suporta operações matemáticas básicas e lógicas. Cálculos numéricos avançados, como redes neurais, não são viáveis. (Um fato interessante é a incapacidade de lidar com ponto flutuante, o que também tornou mais difícil recentemente e às vezes incompatível com algumas DEXs, a troca de ativos de rebase como Ampleforth, etc).

Computação limitada por bloco - As taxas de gás medem as computações, então software complexo como jogos seriam proibitivamente caros. O limite de gás por bloco é de 30M de gás.

Memória restrita - Os contratos inteligentes têm limites pequenos de armazenamento permanente, tornando os programas grandes difíceis.

Sem armazenamento persistente de arquivos - Não há como armazenar arquivos como gráficos, áudio ou vídeo no blockchain.

Velocidade lenta - As velocidades de transação no Ethereum são atualmente ~15 TPS, muitas ordens de magnitude mais lentas do que uma CPU.

Por fim, o armazenamento limitado e o cálculo restrito restringem os graus de liberdade disponíveis para aplicativos (esses limites diferem de blockchain para blockchain, mas eles sempre existem). As pessoas compararam blockchains aos ambientes de cálculo restrito das décadas de 1970-1980, mas achamos que existem algumas grandes diferenças entre os dois:

O crescimento da computação nas décadas de 1970-1980 foi rápido (com a contagem de transistores em microprocessadores passando de ~1.000 para ~1.000.000 durante esse período). Mas esse crescimento não significava que as pessoas frequentemente compravam ou atualizavam seus computadores. Como as plataformas de contratos inteligentes são limitadas pelos seus nós mais lentos, um aumento de velocidade na fronteira dos computadores não necessariamente resultará em blockchains vendo um aumento proporcional na velocidade computacional. Um aumento de velocidade só pode acontecer se os requisitos básicos para os nós na blockchain forem atualizados.

Também há um claro trade-off entre atualizar constantemente os requisitos mínimos de hardware para os nós e a descentralização. Os stakers individuais podem não querer atualizar o hardware a cada dois anos (e certamente não querem monitorar o desempenho diariamente), levando apenas profissionais a quererem executar a infraestrutura de blockchain.

Tudo isso significa que, ao longo dos anos, as CPUs melhoraram, e obtivemos mais núcleos de CPU em todos os dispositivos para nos permitir realizar tarefas progressivamente complicadas. Se pensarmos que os computadores blockchain não vão acelerar tão rapidamente quanto a computação tradicional (devido aos requisitos de nós de base), então faz sentido tentar encontrar fontes alternativas de computação. Uma analogia interessante a ser feita aqui é que as CPUs na computação tradicional não se saíram bem em tarefas de processamento gráfico, levando ao surgimento de GPUs em quase todos os computadores. Da mesma forma, uma vez que as blockchains estão se concentrando em serem armazenamentos seguros de estado com baterias de computação simples ativadas, há uma clara oportunidade para a computação off-chain expandir o espaço de design de aplicativos. Atualmente, as blockchains só fazem sentido para aplicativos de baixa computação que desejam propriedades como acesso aberto, auto-soberania, resistência à censura e composabilidade. Para colocar uma variedade maior de aplicativos onchain, precisamos levantar as restrições que impomos aos desenvolvedores de aplicativos. Dizemos isso com o entendimento de que essas restrições também foram um benefício para a experimentação. Por exemplo, os CLOBs não poderiam ser executados efetivamente no Ethereum devido às restrições de computação, então os AMMs foram adotados, tendo desde então registrado um trilhão de dólares em volume.

Existem duas abordagens comuns para disponibilizar mais computação para aplicações de blockchain:

Aumentar os requisitos básicos do nó com bastante frequência. Este é mais ou menos o caminho integrado pelas blockchains de alto desempenho como Solana e Sui. Um alto requisito básico para os nós torna possível que eles construam uma blockchain muito rápida e também elimina algumas restrições de design do aplicativo. O Phoenix, uma DEX de Livro de Ordens Limitada na Solana, não poderia ser construído no Ethereum (ou em qualquer L2) hoje. O lado negativo de aumentar os requisitos básicos é que, se eles crescerem constantemente, então executar nós pode ser viável apenas para provedores de infraestrutura profissionais. Os requisitos históricos de RAM fazem um trabalho bastante bom ao mostrar como os requisitos de hardware cresceram consistentemente na Solana:

Arquivo da Web (Nota: usamos os requisitos de RAM medianos de 2020)

Movendo computação off-chain para terceiros. Essa tem sido a estratégia adotada pelo ecossistema Ethereum. Esses terceiros podem ser blockchain em si (no caso de rollups), dispositivos de computação verificáveis off-chain (ou seja, coprocessadores) ou terceiros confiáveis (como é o caso da computação off-chain específica de aplicativos, como o orderbook da dydx).

Rumo à Unificação da Computação Off-Chain

Recentemente, tem havido um aumento nas conversas sobre coprocessadores, que fornecem computação verificável fora da cadeia. Os coprocessadores podem ser implementados de várias maneiras, incluindo, mas não se limitando a Provas de Conhecimento Zero ou Ambientes de Execução Confiável (TEEs). Alguns exemplos são:

Coprocessadores ZK: Axiom, Bonsai da Risc Zero.

TEEs: Oyster da Marlin,

Simultaneamente, quando se trata de descarregar cálculos, o roadmap centrado em rollup da Ethereum transfere cálculos para vários rollups que liquidam na Ethereum. Nos últimos anos, um fluxo constante de desenvolvedores e usuários tem migrado para rollups devido a uma combinação de transações mais baratas e rápidas e incentivos fornecidos pelos rollups. Em um mundo ideal, os rollups permitem que a Ethereum aumente sua capacidade computacional geral por meio de execução off-chain sem adicionar suposições de confiança. Mais cálculos não se referem apenas à execução de mais transações, mas também a fazer mais cálculos expressivos por transação. Novos tipos de transação expandem o espaço de design disponível para aplicativos, e maior throughput reduz o custo de realizar essas transações expressivas, garantindo acesso acessível a uma classe superior de aplicativos.

Antes de avançarmos, vamos definir brevemente tanto os rollups quanto os coprocessadores para evitar confusão:

Rollups: Rollups mantêm um estado persistente e particionado diferente de suas cadeias base/hospedeiras, mas ainda herdam as propriedades de segurança de sua base ao postar dados/provas para ela. Ao mover o estado para fora da cadeia hospedeira, os rollups podem usar computação adicional para realizar transições de estado antes de postar provas de integridade dessas transições de estado para o hospedeiro. Os rollups são mais úteis para usuários que não desejam pagar as altas taxas do Ethereum, mas desejam acessar as propriedades de segurança do Ethereum.

Antes de nos aprofundarmos nos coprocessadores, vamos fornecer mais informações sobre como é restrito o desenvolvimento de contratos inteligentes no Ethereum hoje. O Ethereum possui armazenamento de estado persistente em seu estado global - saldos de contas, dados de contratos, etc. Esses dados persistem indefinidamente no blockchain. No entanto, existem limitações:

O tamanho máximo dos dados do contrato é limitado (por exemplo, 24KB por contrato atualmente e foi definido no EIP 170). Armazenar arquivos grandes excederia isso. (*Não resolvido também por coprocessadores)

A leitura/escrita de armazenamento de contratos é mais lenta do que um sistema de arquivos ou banco de dados. Acesso a 1KB de dados pode custar milhões de gas.

Enquanto o estado global persistir, os nós individuais apenas retêm o estado recente localmente no modo de "poda". A história completa do estado requer um nó de arquivo.

Não existem primitivas de sistema de arquivos nativas para lidar com arquivos como imagens, áudio e documentos. Os contratos inteligentes só podem ler/escrever tipos de dados básicos no armazenamento.

Soluções em torno disso são:

Arquivos grandes podem ser divididos em pedaços menores para caber nos limites de armazenamento do contrato.

As referências de arquivo podem ser armazenadas on-chain, com os arquivos armazenados off-chain em sistemas como IPFS.

Coprocessadores: Os coprocessadores não mantêm nenhum estado; eles se comportam como funções lambda na AWS, onde os aplicativos podem enviar uma tarefa de computação para eles e enviam de volta o resultado com prova de computação. Os coprocessadores aumentam fundamentalmente a quantidade de computação disponível para qualquer transação, mas como a prova em coprocessadores também acontece por transação, usá-los será mais caro do que os rollups. Dado o custo, os coprocessadores provavelmente serão úteis para protocolos ou usuários que desejam fazer tarefas únicas complexas de forma verificável. Outro benefício dos coprocessadores é que eles permitem que os aplicativos que usam computação off-chain também acessem o estado histórico completo do Ethereum sem adicionar quaisquer suposições de confiança ao aplicativo em si; Isso não é possível em um contrato inteligente de baunilha hoje.

Para ilustrar a diferença entre rollups e coprocessadores, vamos nos referir aos ZK flavors dessas primitivas. Os rollups ZK acessam tanto a verificabilidade quanto o aspecto de compressão das provas de conhecimento zero, permitindo que aumentem fundamentalmente a taxa de transferência para seu ecossistema. Os coprocessadores, por outro lado, acessam apenas a propriedade de verificabilidade das provas zk, o que significa que a taxa de transferência geral do sistema permanece a mesma. Além disso, os rollups ZK requerem circuitos que possam provar qualquer programa que tenha como alvo a máquina virtual para esse rollup (por exemplo, os rollups na Ethereum têm zkEVMs integrados para contratos que têm a EVM como alvo). Em contraste, os coprocessadores ZK só precisam construir circuitos para as tarefas para as quais são designados a realizar.

Então, parece que as duas maiores diferenças entre rollups e coprocessores são:

Rollups mantêm um estado persistente particionado, e os coprocessadores não (eles usam o estado da cadeia hospedeira).

Rollups (como o nome sugere) agrupam várias transações juntas, e coprocessadores são geralmente usados para tarefas complicadas como parte de uma única transação (pelo menos no paradigma atual).

Recentemente, os Booster Rollups foram propostos, que executam transações como se estivessem sendo executadas diretamente na cadeia hospedeira, com acesso ao estado completo do host. No entanto, os Booster Rollups também possuem seu próprio armazenamento, permitindo escalonar a computação e o armazenamento em ambos o host e o rollup. A proposta do Booster Rollup aponta para como há um espectro no design de computação off-chain, com rollups tradicionais e coprocessadores sentados em cada extremidade desse espectro. Rollups, Booster Rollups e Coprocessadores fornecem acesso a mais computação e apenas diferem em quanto estado eles mantêm particionado de seu L1 base.

Em uma palestra na Modular Summit, 2023 chamada "Transações Blindadas São Rollups", Henry De Valence falou sobre este conceito exato e apresentou uma imagem muito simples para definir um rollup:

A palestra postula que qualquer execução transferida pela cadeia de base para um terceiro é um rollup. Sob sua definição, os coprocessadores também seriam rollups. Isso difere ligeiramente da nossa visão de unificar rollups e coprocessadores sob a bandeira de cálculo verificável off-chain, mas o sentimento geral permanece o mesmo!

Em sua visão do Endgame, Vitalik discute um futuro onde a produção de blocos é centralizada e a validação de blocos é confiável e altamente descentralizada. Acreditamos que este é aproximadamente o modelo correto para pensar sobre o que está acontecendo agora. Em um zk-rollup, a produção de blocos e a computação de transições de estado são centralizadas. No entanto, as provas permitem que a verificação seja barata e descentralizada. Da mesma forma, um coprocessador zk não tem produção de blocos; ele apenas acessa dados históricos e calcula transições de estado sobre esses dados. A computação em um coprocessador zk provavelmente sempre será realizada em uma máquina centralizada; ainda assim, a prova de validade retornada juntamente com um resultado permite que qualquer pessoa verifique os resultados antes de usá-los. Talvez seja correto reformular a visão de Vitalik como: "um futuro onde a computação é centralizada, mas a verificação da computação centralizada é confiável e altamente descentralizada."

Mesmo Mesmo Mas Diferente

Apesar de suas semelhanças gerais, rollups e coprocessadores atendem a mercados muito diferentes hoje. Pode-se perguntar: "Se podemos simplesmente usar um coprocessador na ETH L1 e acessar sua liquidez, por que precisamos de rollups?" enquanto esta é uma pergunta justa, achamos que existem algumas razões pelas quais os rollups ainda fazem sentido (e representam uma oportunidade de mercado muito maior do que os coprocessadores hoje):

Como mencionado anteriormente, coprocessadores permitem que você acesse mais computação na mesma transação do que o L1. Mas eles não podem ajudar a movimentar o ponteiro sobre quantas transações podem ser realizadas pela blockchain que está chamando o coprocessador (se você está pensando em agrupamento, voilà, você chegou a um rollup). Ao manter um estado persistente particionado, os rollups podem aumentar o número de transações disponíveis para pessoas que desejam acessar o espaço de bloco com as propriedades de segurança do Ethereum. Isso é possível porque os rollups só postam no Ethereum a cada n blocos e não exigem que todos os validadores do Ethereum verifiquem que ocorreu uma transição de estado. As partes interessadas podem apenas confiar na prova.

Mesmo se você usar coprocessadores, ainda terá que pagar a mesma ordem de grandeza de taxas como qualquer outra transação na L1. Por outro lado, os rollups via batching podem reduzir os custos em ordens de grandeza.

Além disso, uma vez que os rollups proporcionam a capacidade de executar transações nesse estado separado, eles ainda se comportam como blockchains (blockchains mais rápidas, menos descentralizadas, mas blockchains mesmo assim), então, também têm limites claros sobre a quantidade de computação que pode ser acessada a partir do próprio rollup. Nesse cenário, um coprocessador pode ser útil para os rollups se um usuário quiser realizar transações arbitrariamente complexas (e agora você está realizando transações verificáveis em um rollup, então você só precisa obedecer às leis da física do rollup).

Outro ponto importante a ser observado aqui é que a maior parte da liquidez hoje reside na ETH L1, então para muitos protocolos que dependem da liquidez para melhorar seus produtos, pode ser astuto lançar ainda na mainnet Ethereum. Uma aplicação na mainnet Ethereum pode ter acesso a mais recursos fazendo transações intermitentes em um coprocessador. Por exemplo, uma DEX como Ambient ou Uniswap v4 pode usar ganchos em conjunto com coprocessadores para executar lógica complicada sobre como alterar taxas ou até modificar a forma da curva de liquidez com base em dados de mercado.

Uma analogia interessante compara a interação entre rollups e coprocessadores à programação imperativa e funcional. A programação imperativa foca em estados mutáveis e efeitos colaterais, especificando passo a passo como executar tarefas. A programação funcional enfatiza dados imutáveis e funções puras, evitando alterações de estado e efeitos colaterais. Da mesma forma, os rollups são como programas imperativos que modificam o estado que possuem, enquanto os coprocessadores são como programas funcionais que não mutam o estado, mas produzem um resultado juntamente com provas de computação. Além disso, assim como a programação imperativa e funcional, os rollups e coprocessadores têm seu lugar e devem ser usados de acordo.

Um Futuro Baseado em Prova

Se acabarmos em um mundo onde a computação é centralizada, mas a verificação da computação centralizada é confiável e altamente descentralizada, onde isso deixa o Ethereum? O computador mundial será reduzido a um mero banco de dados? Isso é algo ruim?

Em última análise, o objetivo do Ethereum é dar aos seus usuários acesso a cálculos e armazenamento sem confiança. No passado, a única maneira de acessar cálculos sem confiança no Ethereum era que a computação fosse realizada e verificada por todos os nós. Com a progressão das técnicas de prova (especialmente provas de conhecimento zero), podemos mover grande parte da computação que ocorreu nos nós validadores para cálculos fora da cadeia e apenas fazer com que os validadores verifiquem os resultados na cadeia. Isso essencialmente transforma o Ethereum em o quadro de avisos imutável do mundo. As provas de cálculo nos permitem verificar que uma transação foi feita corretamente e, ao postá-las no Ethereum, obtemos uma marca de data e um armazenamento histórico imutável para essas provas. À medida que as provas de conhecimento zero se tornam mais eficientes em cálculos arbitrários, é provável que, em algum momento, o custo de fazer cálculos em ZK seja significativamente menor do que o custo de fazê-lo em uma blockchain (talvez até em uma cadeia CometBFT de 100 validadores). Em um mundo assim, é difícil imaginar que as provas de conhecimento zero não se tornarão o modo dominante de acesso a cálculos sem confiança. Pensamentos semelhantes também foram ecoados recentemente por David Wong:

Um futuro em que qualquer cálculo possa ser comprovado também nos permite construir infraestrutura para os tipos de aplicativos sem confiança que têm demanda de usuários, em vez de tentar adaptar a camada base do Ethereum para se tornar a casa desses aplicativos. No caso ideal, a infraestrutura personalizada criará experiências de usuário mais contínuas e também se adaptará às aplicações construídas sobre ela. Isso esperançosamente permitirá que os aplicativos da web3 compitam com seus equivalentes da web2 e inaugurem o futuro sem confiança, baseado em provas, com o qual os cypherpunks sempre sonharam.

Tudo somado, acreditamos que estamos caminhando para o seguinte paradigma:

————————————————————Não Confie, Verifique————————————————————-

Aviso Legal:

  1. Este artigo é reproduzido a partir de [espelho]. Todos os direitos autorais pertencem ao autor original [Jacob Ko]. Se houver objeções a esta reimpressão, entre em contato com o Gate Learnequipe e eles lidarão com isso prontamente.
  2. Responsabilidade de Isenção: As opiniões e pontos de vista expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. As traduções do artigo para outros idiomas são feitas pela equipe do Gate Learn. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.

Computação Off-Chain é tudo que você precisa

intermediário1/4/2024, 5:43:45 PM
Este artigo introduz os conceitos de co-processadores e Rollup, bem como a separação modular da computação e verificação futuras do blockchain.

Introdução

Blockchains são registros distribuídos globalmente que chegam a um consenso sobre um estado global. Alguns blockchains vêm equipados com um ambiente de execução Turing-completo que permite programabilidade em cima deste estado global. Programas que visam os ambientes de execução de blockchains são chamados de contratos inteligentes, e os blockchains subjacentes são chamados de plataformas de contratos inteligentes. Ethereum, Solana e Avalanche são algumas das plataformas de contratos inteligentes mais conhecidas. Podemos pensar em plataformas de contratos inteligentes como computadores distribuídos, com o ambiente de execução (ou máquina virtual) atuando como a CPU e o estado desempenhando o papel de armazenamento.

Essa moldura de blockchains como computadores será importante para motivar por que coprocessadores/computação off-chain são inevitáveis, especialmente no contexto de blockchains. Na computação tradicional, coprocessadores originaram-se na microarquitetura para melhorar o desempenho. Da mesma forma, os coprocessadores na Ethereum prometem acesso a dados históricos e computação offchain de alto desempenho para aumentar as funcionalidades e o espaço de design do protocolo de camada base. Dê uma olhada neste artigo introdutório sobre coprocessadores para mais informações.

Este artigo explora coprocessadores a partir de primeiros princípios, com o objetivo de esclarecer a sua importância e meta-propriedades. Em seguida, comparamos os coprocessadores com rollups, demonstrando como esses dois conceitos, embora diferentes, estão intimamente relacionados. Também fornecemos exemplos de quando rollups e coprocessadores podem ser usados em conjunto. Por exemplo, mesmo um rollup ou L1 todo-poderoso pode precisar de um coprocessador para tarefas de grande porte.

Concluímos este artigo observando que as blockchains estão caminhando para um futuro onde a computação é centralizada, mas a verificação permanece descentralizada. Rollups, coprocessadores e qualquer outra forma de computação verificável fora da cadeia são apenas diferentes instâncias deste futuro.

Como chegamos aqui:

Em "Os Limites da Escalabilidade do Blockchain", Vitalik mencionou que para a descentralização do blockchain, é importante que usuários regulares possam executar um nó.

Como mencionado anteriormente, o Ethereum pode ser conceituado como um computador global descentralizado em muitos aspectos. É uma rede de nós executando software que fornece recursos computacionais para a execução de contratos inteligentes. O blockchain do Ethereum armazena informações de estado e código, semelhante ao armazenamento e memória de um computador. E a Máquina Virtual Ethereum (EVM) roda em cada nó, processando transações e executando código como uma CPU. No entanto, o Ethereum é sem permissão e descentralizado, usando consenso entre nós não confiáveis. Se alguns nós ficarem offline, a rede continua operando. Para garantir a correção das operações da EVM, os validadores em redes de Prova de Participação (PoS) como o Ethereum devem realizar todas as transições de estado para verificá-las. Isso limita a velocidade de uma rede PoS aos seus nós mais lentos, limitando a quantidade de computação disponível para os desenvolvedores de aplicativos.

Ao contrário de um computador comum, o Ethereum limita a computação e o armazenamento para evitar abusos na rede. Taxas são cobradas para cada operação, tornando os loops infinitos financeiramente impraticáveis. Essa abordagem mantém as barreiras de entrada baixas, permitindo que hardware cotidiano como um Raspberry Pi execute nós de rede. As restrições possibilitam um sistema inclusivo onde qualquer pessoa pode ajudar a operar a rede descentralizada do Ethereum.

Devido a essas restrições computacionais dos nós do Ethereum, aplicativos complexos como modelos de Aprendizado de Máquina, jogos ou aplicativos de computação científica não podem ser executados diretamente no Ethereum hoje.

É um trade-off para tornar o Ethereum amplamente acessível, seguro e sustentável como base para aplicativos básicos. Mas inevitavelmente, algumas limitações existem em relação a um computador computacionalmente irrestrito. Ele tem limitações quando comparado até mesmo a um processador antigo como um Pentium 5:

Nenhuma matemática de ponto flutuante complexa - A EVM só suporta operações matemáticas básicas e lógicas. Cálculos numéricos avançados, como redes neurais, não são viáveis. (Um fato interessante é a incapacidade de lidar com ponto flutuante, o que também tornou mais difícil recentemente e às vezes incompatível com algumas DEXs, a troca de ativos de rebase como Ampleforth, etc).

Computação limitada por bloco - As taxas de gás medem as computações, então software complexo como jogos seriam proibitivamente caros. O limite de gás por bloco é de 30M de gás.

Memória restrita - Os contratos inteligentes têm limites pequenos de armazenamento permanente, tornando os programas grandes difíceis.

Sem armazenamento persistente de arquivos - Não há como armazenar arquivos como gráficos, áudio ou vídeo no blockchain.

Velocidade lenta - As velocidades de transação no Ethereum são atualmente ~15 TPS, muitas ordens de magnitude mais lentas do que uma CPU.

Por fim, o armazenamento limitado e o cálculo restrito restringem os graus de liberdade disponíveis para aplicativos (esses limites diferem de blockchain para blockchain, mas eles sempre existem). As pessoas compararam blockchains aos ambientes de cálculo restrito das décadas de 1970-1980, mas achamos que existem algumas grandes diferenças entre os dois:

O crescimento da computação nas décadas de 1970-1980 foi rápido (com a contagem de transistores em microprocessadores passando de ~1.000 para ~1.000.000 durante esse período). Mas esse crescimento não significava que as pessoas frequentemente compravam ou atualizavam seus computadores. Como as plataformas de contratos inteligentes são limitadas pelos seus nós mais lentos, um aumento de velocidade na fronteira dos computadores não necessariamente resultará em blockchains vendo um aumento proporcional na velocidade computacional. Um aumento de velocidade só pode acontecer se os requisitos básicos para os nós na blockchain forem atualizados.

Também há um claro trade-off entre atualizar constantemente os requisitos mínimos de hardware para os nós e a descentralização. Os stakers individuais podem não querer atualizar o hardware a cada dois anos (e certamente não querem monitorar o desempenho diariamente), levando apenas profissionais a quererem executar a infraestrutura de blockchain.

Tudo isso significa que, ao longo dos anos, as CPUs melhoraram, e obtivemos mais núcleos de CPU em todos os dispositivos para nos permitir realizar tarefas progressivamente complicadas. Se pensarmos que os computadores blockchain não vão acelerar tão rapidamente quanto a computação tradicional (devido aos requisitos de nós de base), então faz sentido tentar encontrar fontes alternativas de computação. Uma analogia interessante a ser feita aqui é que as CPUs na computação tradicional não se saíram bem em tarefas de processamento gráfico, levando ao surgimento de GPUs em quase todos os computadores. Da mesma forma, uma vez que as blockchains estão se concentrando em serem armazenamentos seguros de estado com baterias de computação simples ativadas, há uma clara oportunidade para a computação off-chain expandir o espaço de design de aplicativos. Atualmente, as blockchains só fazem sentido para aplicativos de baixa computação que desejam propriedades como acesso aberto, auto-soberania, resistência à censura e composabilidade. Para colocar uma variedade maior de aplicativos onchain, precisamos levantar as restrições que impomos aos desenvolvedores de aplicativos. Dizemos isso com o entendimento de que essas restrições também foram um benefício para a experimentação. Por exemplo, os CLOBs não poderiam ser executados efetivamente no Ethereum devido às restrições de computação, então os AMMs foram adotados, tendo desde então registrado um trilhão de dólares em volume.

Existem duas abordagens comuns para disponibilizar mais computação para aplicações de blockchain:

Aumentar os requisitos básicos do nó com bastante frequência. Este é mais ou menos o caminho integrado pelas blockchains de alto desempenho como Solana e Sui. Um alto requisito básico para os nós torna possível que eles construam uma blockchain muito rápida e também elimina algumas restrições de design do aplicativo. O Phoenix, uma DEX de Livro de Ordens Limitada na Solana, não poderia ser construído no Ethereum (ou em qualquer L2) hoje. O lado negativo de aumentar os requisitos básicos é que, se eles crescerem constantemente, então executar nós pode ser viável apenas para provedores de infraestrutura profissionais. Os requisitos históricos de RAM fazem um trabalho bastante bom ao mostrar como os requisitos de hardware cresceram consistentemente na Solana:

Arquivo da Web (Nota: usamos os requisitos de RAM medianos de 2020)

Movendo computação off-chain para terceiros. Essa tem sido a estratégia adotada pelo ecossistema Ethereum. Esses terceiros podem ser blockchain em si (no caso de rollups), dispositivos de computação verificáveis off-chain (ou seja, coprocessadores) ou terceiros confiáveis (como é o caso da computação off-chain específica de aplicativos, como o orderbook da dydx).

Rumo à Unificação da Computação Off-Chain

Recentemente, tem havido um aumento nas conversas sobre coprocessadores, que fornecem computação verificável fora da cadeia. Os coprocessadores podem ser implementados de várias maneiras, incluindo, mas não se limitando a Provas de Conhecimento Zero ou Ambientes de Execução Confiável (TEEs). Alguns exemplos são:

Coprocessadores ZK: Axiom, Bonsai da Risc Zero.

TEEs: Oyster da Marlin,

Simultaneamente, quando se trata de descarregar cálculos, o roadmap centrado em rollup da Ethereum transfere cálculos para vários rollups que liquidam na Ethereum. Nos últimos anos, um fluxo constante de desenvolvedores e usuários tem migrado para rollups devido a uma combinação de transações mais baratas e rápidas e incentivos fornecidos pelos rollups. Em um mundo ideal, os rollups permitem que a Ethereum aumente sua capacidade computacional geral por meio de execução off-chain sem adicionar suposições de confiança. Mais cálculos não se referem apenas à execução de mais transações, mas também a fazer mais cálculos expressivos por transação. Novos tipos de transação expandem o espaço de design disponível para aplicativos, e maior throughput reduz o custo de realizar essas transações expressivas, garantindo acesso acessível a uma classe superior de aplicativos.

Antes de avançarmos, vamos definir brevemente tanto os rollups quanto os coprocessadores para evitar confusão:

Rollups: Rollups mantêm um estado persistente e particionado diferente de suas cadeias base/hospedeiras, mas ainda herdam as propriedades de segurança de sua base ao postar dados/provas para ela. Ao mover o estado para fora da cadeia hospedeira, os rollups podem usar computação adicional para realizar transições de estado antes de postar provas de integridade dessas transições de estado para o hospedeiro. Os rollups são mais úteis para usuários que não desejam pagar as altas taxas do Ethereum, mas desejam acessar as propriedades de segurança do Ethereum.

Antes de nos aprofundarmos nos coprocessadores, vamos fornecer mais informações sobre como é restrito o desenvolvimento de contratos inteligentes no Ethereum hoje. O Ethereum possui armazenamento de estado persistente em seu estado global - saldos de contas, dados de contratos, etc. Esses dados persistem indefinidamente no blockchain. No entanto, existem limitações:

O tamanho máximo dos dados do contrato é limitado (por exemplo, 24KB por contrato atualmente e foi definido no EIP 170). Armazenar arquivos grandes excederia isso. (*Não resolvido também por coprocessadores)

A leitura/escrita de armazenamento de contratos é mais lenta do que um sistema de arquivos ou banco de dados. Acesso a 1KB de dados pode custar milhões de gas.

Enquanto o estado global persistir, os nós individuais apenas retêm o estado recente localmente no modo de "poda". A história completa do estado requer um nó de arquivo.

Não existem primitivas de sistema de arquivos nativas para lidar com arquivos como imagens, áudio e documentos. Os contratos inteligentes só podem ler/escrever tipos de dados básicos no armazenamento.

Soluções em torno disso são:

Arquivos grandes podem ser divididos em pedaços menores para caber nos limites de armazenamento do contrato.

As referências de arquivo podem ser armazenadas on-chain, com os arquivos armazenados off-chain em sistemas como IPFS.

Coprocessadores: Os coprocessadores não mantêm nenhum estado; eles se comportam como funções lambda na AWS, onde os aplicativos podem enviar uma tarefa de computação para eles e enviam de volta o resultado com prova de computação. Os coprocessadores aumentam fundamentalmente a quantidade de computação disponível para qualquer transação, mas como a prova em coprocessadores também acontece por transação, usá-los será mais caro do que os rollups. Dado o custo, os coprocessadores provavelmente serão úteis para protocolos ou usuários que desejam fazer tarefas únicas complexas de forma verificável. Outro benefício dos coprocessadores é que eles permitem que os aplicativos que usam computação off-chain também acessem o estado histórico completo do Ethereum sem adicionar quaisquer suposições de confiança ao aplicativo em si; Isso não é possível em um contrato inteligente de baunilha hoje.

Para ilustrar a diferença entre rollups e coprocessadores, vamos nos referir aos ZK flavors dessas primitivas. Os rollups ZK acessam tanto a verificabilidade quanto o aspecto de compressão das provas de conhecimento zero, permitindo que aumentem fundamentalmente a taxa de transferência para seu ecossistema. Os coprocessadores, por outro lado, acessam apenas a propriedade de verificabilidade das provas zk, o que significa que a taxa de transferência geral do sistema permanece a mesma. Além disso, os rollups ZK requerem circuitos que possam provar qualquer programa que tenha como alvo a máquina virtual para esse rollup (por exemplo, os rollups na Ethereum têm zkEVMs integrados para contratos que têm a EVM como alvo). Em contraste, os coprocessadores ZK só precisam construir circuitos para as tarefas para as quais são designados a realizar.

Então, parece que as duas maiores diferenças entre rollups e coprocessores são:

Rollups mantêm um estado persistente particionado, e os coprocessadores não (eles usam o estado da cadeia hospedeira).

Rollups (como o nome sugere) agrupam várias transações juntas, e coprocessadores são geralmente usados para tarefas complicadas como parte de uma única transação (pelo menos no paradigma atual).

Recentemente, os Booster Rollups foram propostos, que executam transações como se estivessem sendo executadas diretamente na cadeia hospedeira, com acesso ao estado completo do host. No entanto, os Booster Rollups também possuem seu próprio armazenamento, permitindo escalonar a computação e o armazenamento em ambos o host e o rollup. A proposta do Booster Rollup aponta para como há um espectro no design de computação off-chain, com rollups tradicionais e coprocessadores sentados em cada extremidade desse espectro. Rollups, Booster Rollups e Coprocessadores fornecem acesso a mais computação e apenas diferem em quanto estado eles mantêm particionado de seu L1 base.

Em uma palestra na Modular Summit, 2023 chamada "Transações Blindadas São Rollups", Henry De Valence falou sobre este conceito exato e apresentou uma imagem muito simples para definir um rollup:

A palestra postula que qualquer execução transferida pela cadeia de base para um terceiro é um rollup. Sob sua definição, os coprocessadores também seriam rollups. Isso difere ligeiramente da nossa visão de unificar rollups e coprocessadores sob a bandeira de cálculo verificável off-chain, mas o sentimento geral permanece o mesmo!

Em sua visão do Endgame, Vitalik discute um futuro onde a produção de blocos é centralizada e a validação de blocos é confiável e altamente descentralizada. Acreditamos que este é aproximadamente o modelo correto para pensar sobre o que está acontecendo agora. Em um zk-rollup, a produção de blocos e a computação de transições de estado são centralizadas. No entanto, as provas permitem que a verificação seja barata e descentralizada. Da mesma forma, um coprocessador zk não tem produção de blocos; ele apenas acessa dados históricos e calcula transições de estado sobre esses dados. A computação em um coprocessador zk provavelmente sempre será realizada em uma máquina centralizada; ainda assim, a prova de validade retornada juntamente com um resultado permite que qualquer pessoa verifique os resultados antes de usá-los. Talvez seja correto reformular a visão de Vitalik como: "um futuro onde a computação é centralizada, mas a verificação da computação centralizada é confiável e altamente descentralizada."

Mesmo Mesmo Mas Diferente

Apesar de suas semelhanças gerais, rollups e coprocessadores atendem a mercados muito diferentes hoje. Pode-se perguntar: "Se podemos simplesmente usar um coprocessador na ETH L1 e acessar sua liquidez, por que precisamos de rollups?" enquanto esta é uma pergunta justa, achamos que existem algumas razões pelas quais os rollups ainda fazem sentido (e representam uma oportunidade de mercado muito maior do que os coprocessadores hoje):

Como mencionado anteriormente, coprocessadores permitem que você acesse mais computação na mesma transação do que o L1. Mas eles não podem ajudar a movimentar o ponteiro sobre quantas transações podem ser realizadas pela blockchain que está chamando o coprocessador (se você está pensando em agrupamento, voilà, você chegou a um rollup). Ao manter um estado persistente particionado, os rollups podem aumentar o número de transações disponíveis para pessoas que desejam acessar o espaço de bloco com as propriedades de segurança do Ethereum. Isso é possível porque os rollups só postam no Ethereum a cada n blocos e não exigem que todos os validadores do Ethereum verifiquem que ocorreu uma transição de estado. As partes interessadas podem apenas confiar na prova.

Mesmo se você usar coprocessadores, ainda terá que pagar a mesma ordem de grandeza de taxas como qualquer outra transação na L1. Por outro lado, os rollups via batching podem reduzir os custos em ordens de grandeza.

Além disso, uma vez que os rollups proporcionam a capacidade de executar transações nesse estado separado, eles ainda se comportam como blockchains (blockchains mais rápidas, menos descentralizadas, mas blockchains mesmo assim), então, também têm limites claros sobre a quantidade de computação que pode ser acessada a partir do próprio rollup. Nesse cenário, um coprocessador pode ser útil para os rollups se um usuário quiser realizar transações arbitrariamente complexas (e agora você está realizando transações verificáveis em um rollup, então você só precisa obedecer às leis da física do rollup).

Outro ponto importante a ser observado aqui é que a maior parte da liquidez hoje reside na ETH L1, então para muitos protocolos que dependem da liquidez para melhorar seus produtos, pode ser astuto lançar ainda na mainnet Ethereum. Uma aplicação na mainnet Ethereum pode ter acesso a mais recursos fazendo transações intermitentes em um coprocessador. Por exemplo, uma DEX como Ambient ou Uniswap v4 pode usar ganchos em conjunto com coprocessadores para executar lógica complicada sobre como alterar taxas ou até modificar a forma da curva de liquidez com base em dados de mercado.

Uma analogia interessante compara a interação entre rollups e coprocessadores à programação imperativa e funcional. A programação imperativa foca em estados mutáveis e efeitos colaterais, especificando passo a passo como executar tarefas. A programação funcional enfatiza dados imutáveis e funções puras, evitando alterações de estado e efeitos colaterais. Da mesma forma, os rollups são como programas imperativos que modificam o estado que possuem, enquanto os coprocessadores são como programas funcionais que não mutam o estado, mas produzem um resultado juntamente com provas de computação. Além disso, assim como a programação imperativa e funcional, os rollups e coprocessadores têm seu lugar e devem ser usados de acordo.

Um Futuro Baseado em Prova

Se acabarmos em um mundo onde a computação é centralizada, mas a verificação da computação centralizada é confiável e altamente descentralizada, onde isso deixa o Ethereum? O computador mundial será reduzido a um mero banco de dados? Isso é algo ruim?

Em última análise, o objetivo do Ethereum é dar aos seus usuários acesso a cálculos e armazenamento sem confiança. No passado, a única maneira de acessar cálculos sem confiança no Ethereum era que a computação fosse realizada e verificada por todos os nós. Com a progressão das técnicas de prova (especialmente provas de conhecimento zero), podemos mover grande parte da computação que ocorreu nos nós validadores para cálculos fora da cadeia e apenas fazer com que os validadores verifiquem os resultados na cadeia. Isso essencialmente transforma o Ethereum em o quadro de avisos imutável do mundo. As provas de cálculo nos permitem verificar que uma transação foi feita corretamente e, ao postá-las no Ethereum, obtemos uma marca de data e um armazenamento histórico imutável para essas provas. À medida que as provas de conhecimento zero se tornam mais eficientes em cálculos arbitrários, é provável que, em algum momento, o custo de fazer cálculos em ZK seja significativamente menor do que o custo de fazê-lo em uma blockchain (talvez até em uma cadeia CometBFT de 100 validadores). Em um mundo assim, é difícil imaginar que as provas de conhecimento zero não se tornarão o modo dominante de acesso a cálculos sem confiança. Pensamentos semelhantes também foram ecoados recentemente por David Wong:

Um futuro em que qualquer cálculo possa ser comprovado também nos permite construir infraestrutura para os tipos de aplicativos sem confiança que têm demanda de usuários, em vez de tentar adaptar a camada base do Ethereum para se tornar a casa desses aplicativos. No caso ideal, a infraestrutura personalizada criará experiências de usuário mais contínuas e também se adaptará às aplicações construídas sobre ela. Isso esperançosamente permitirá que os aplicativos da web3 compitam com seus equivalentes da web2 e inaugurem o futuro sem confiança, baseado em provas, com o qual os cypherpunks sempre sonharam.

Tudo somado, acreditamos que estamos caminhando para o seguinte paradigma:

————————————————————Não Confie, Verifique————————————————————-

Aviso Legal:

  1. Este artigo é reproduzido a partir de [espelho]. Todos os direitos autorais pertencem ao autor original [Jacob Ko]. Se houver objeções a esta reimpressão, entre em contato com o Gate Learnequipe e eles lidarão com isso prontamente.
  2. Responsabilidade de Isenção: As opiniões e pontos de vista expressos neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
  3. As traduções do artigo para outros idiomas são feitas pela equipe do Gate Learn. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.
Comece agora
Inscreva-se e ganhe um cupom de
$100
!