Houve uma explosão cambriana de rollups no Ethereum. No momento da redação, há 91 L2 & L3s ao vivo e 82 próximos de acordo com L2Beat. Como resultado, também há uma quantidade significativa de fragmentação em termos de liquidez, experiência do usuário e ferramentas de desenvolvimento. As soluções atuais de interoperabilidade deixam muito a desejar, pois dependem de uma combinação de pontes de terceiros, ativos envolvidos externamente e estruturas de intenção, cada uma carregando seu próprio conjunto de problemas.
Neste artigo, analisamos a paisagem de interoperabilidade sem confiança definindo e discutindo seis níveis de soluções de interoperabilidade entre ecossistemas de rollup fragmentados.
Começamos com o caso padrão de retirar de forma assíncrona do rollup de origem para L1 e fazer a ponte manualmente para o rollup de destino, e terminamos com uma arquitetura hipotética para a composabilidade entre rollups em uma única transação. Vamos explorar como cada nível de interoperabilidade afetará a experiência do usuário, a experiência do desenvolvedor, o potencial de MEV e os próprios rollups (especificamente relacionados a mudanças de infraestrutura).
Permanecemos principalmente dentro do escopo do Ethereum e suas L2s para este artigo e focamos exclusivamente na interoperabilidade sem confiança. Neste caso, “interoperabilidade sem confiança” refere-se a canais em protocolo que não exigem terceiros para facilitar transferências fora da infraestrutura necessária que a maioria dos rollups já requer.
Fundamentalmente, a interoperabilidade sem confiança requer algum recurso compartilhado ao qual quaisquer dois protocolos que desejem interoperar devem ter acesso. No caso do Ethereum L1, todos os contratos inteligentes vivem no mesmo ambiente, compartilhando o estado completo do Ethereum, portanto, eles sempre terão o mais alto nível de interoperabilidade. No entanto, os L2s compartilham apenas uma camada de liquidação por meio de contratos de ponte separados e, portanto, a interoperabilidade é muito mais limitada.
Os componentes de infraestrutura compartilhada cruciais que podem nos fazer progredir ao longo da escada de interoperabilidade sem confiança são sequenciadores compartilhados, superconstrutores e liquidação compartilhada. As garantias e novas funcionalidades abertas por essas camadas compartilhadas estão relacionadas, mas essencialmente ortogonais por natureza.
Para começar, primeiro definiremos os seis níveis de interoperabilidade sem confiança mencionados na introdução:
Para entender cada nível mais a fundo, vamos percorrer os seguintes casos de uso principais para demonstrar o poder de cada nível, bem como as implicações para usuários, desenvolvedores, rollups e pesquisadores de MEV.
As seguintes perguntas também serão respondidas para entender melhor o impacto nos principais acionistas em qualquer ecossistema de rollup.
Visão geral das mudanças para as principais partes interessadas
N/A
Conforme definido, isso se refere ao modo padrão atual de interoperabilidade sem confiança. Todos os rollups são definidos como tal porque são construídos em um L1 como camada de liquidação e têm acesso a esse L1 apenas por meio dos contratos de ponte, onde eles postam periodicamente atualizações de estado para garantir a rede.
A única maneira canônica de realizar qualquer atividade sem confiança entre rollups neste caso é retirar ativos do rollup de origem via a ponte canônica e depositá-los manualmente no rollup de destino assim que estiverem disponíveis no L1.
Para rollups otimistas, essa latência de saque é de cerca de 7 dias para considerar a janela de prova de falhas. Em um ZK rollup, a latência de saque é menos certa, mas pode variar de 15 minutos a um dia inteiro, como é o caso do ZkSync.
Além disso, trocas atômicas peer-to-peer usando contratos inteligentes são possíveis, mas este é um caso de uso menor e não escala efetivamente.
Vale ressaltar as soluções de terceiros que atualmente existem:
Ambos os nossos exemplos ilustrativos requerem soluções de terceiros para facilitar.
Enviar para si mesmo:
Ordem Limitada Cruzada-Rollup
Como este é o caso padrão, é desnecessário discutir alterações no UX, DevEx, MEV e rollups.
Sequenciador Compartilhado *
A inclusão atômica apenas garante que um pacote de transferência inter-rollup será incluído no próximo bloco.
Isso requer um sequenciador compartilhado, mas teoricamente pode ser alcançado sem um manualmente se os sequenciadores em dois rollups dados não estiverem na capacidade máxima (alguém poderia simplesmente enviar duas transações para cada rollup individualmente). É por isso que adicionamos um asterisco à infraestrutura necessária.
No entanto, não assumimos que o sequenciador compartilhado esteja executando um nó completo de cada um dos pacotes cumulativos conectados e, portanto, não podemos garantir a execução bem-sucedida de um pacote de transações. O sequenciador compartilhado, nesse caso, só pode garantir que as transações sejam bem formadas e que sejam incluídas no próximo bloco, mas não necessariamente que serão executadas com sucesso.
Porque não há garantias de execução, é impossível aproveitar programaticamente a inclusão atômica de forma significativa sem correr o risco de uma das transações reverter. Como resultado, estamos essencialmente no mesmo caso exato que a interoperabilidade assíncrona L1.
Considere iniciar uma troca simples de rollup cruzado com apenas garantias de inclusão atômica:
Podemos ter garantias de inclusão atômica de que ambas as transações são de fato incluídas nos próximos blocos para cada rollup, mas se a primeira transação reverter e a segunda não, o usuário seria alocado incorretamente fundos na cadeia de destino sem tê-los bloqueado ou queimado na cadeia de origem e encontraríamos um problema de gastos duplos.
Qualquer solução de interoperabilidade, seja uma ponte de liquidez, um framework de intenção ou uma troca xERC-20, estaria vulnerável a esse risco e é impossível mitigá-lo. Devido a esse risco, as soluções atuais exigem que a transação iniciadora tenha sido executada com sucesso e incluída em um bloco na cadeia de origem antes de usar relayers para passar uma mensagem emitida e executar a segunda transação na cadeia de destino.
Importante: A inclusão atômica não impacta significativamente o potencial de interoperabilidade
Camada de agregação de prova // Contrato de ponte compartilhada
Aqui é onde as coisas começam a ficar mais interessantes. Como resultado do contrato de ponte compartilhada, toda a liquidez depositada no ecossistema de rollup do L1 pode ser movimentada livremente entre todos os rollups conectados. Até este ponto, não podíamos realizar trocas entre rollups sem passar por canais canônicos, envolver ativos externamente ou usar uma solução de terceiros.
Por que construir um contrato de ponte compartilhado? Para entender por que ter um contrato de ponte compartilhado nos permite mover ativos entre rollups sem confiança, primeiro considere o que aconteceria se fosse possível ter Eth em Rollup A, queimá-lo e criá-lo nativamente em Rollup B sem um contrato de ponte compartilhado em L1.
Vemos que cada rollup sairia de sincronia com seu contrato de ponte na mainnet. O contrato de ponte do rollup B ainda tem 50 Eth, então o usuário não seria capaz de sacar seu 1 Eth para o L1.
Para resolver isso, são construídos protocolos de envolvimento de ativos externos que emitem uma versão externamente envolta de tokens em vários rollups que simbolizam uma versão nativa em outro lugar na rede.
Com uma camada de liquidação compartilhada, a situação parece diferente. Porque toda a liquidez para cada rollup conectado está travada no mesmo contrato de ponte, alguém pode se mover livremente entre rollups, já que o valor total no contrato de ponte permanece o mesmo e sempre pode ser retirado.
Há a necessidade de uma atualização no nível do contrato L1 sobreonde a liquidez é permitir que os usuários saquem de qualquer lugar, mas isso é trivial porque todos os rollups conectados podem ler/escrever no contrato compartilhado.
Com uma camada de liquidação compartilhada, o fluxo pode parecer com o seguinte para um caso simples de envio para si mesmo.
Enviar para si mesmo:
Podemos estender esse fluxo para qualquer ERC-20 que tenha contratos em todos os rollups no ecossistema de liquidação compartilhada.
Pode-se pensar em um contrato de ponte compartilhada como uma camada de mensagens em protocolo entre todos os rollups conectados, então teoricamente esse fluxo pode ser estendido a qualquer padrão de mensagens arbitrário.
Isso nos aproxima da composição, mas devido às etapas necessárias de agregação de provas e transmissão de mensagens apenas após as mudanças de estado serem refletidas no L1, existem altas latências (embora notavelmente menores do que no caso assíncrono do L1). Além disso, qualquer atividade complexa de cross-rollup, como usar um DEX no rollup B começando com ativos no rollup A para uma ordem de limite de cross-rollup, ainda seria um processo tedioso para o usuário, pois ainda teriam que enviar para si mesmos e trocar manualmente ativos no rollup de destino. Não é possível criar bundles atômicos de cross-rollup nesse caso.
Outro benefício importante com o ajuste compartilhado é que há menos atrito para provedores de liquidez ou solvers que estão preenchendo pedidos em vários ambientes. Como sua liquidez em todos os rollups conectados é refletida no mesmo contrato de ponte, eles não precisam esperar a janela completa de saque para gerenciar sua liquidez entre rollups.
Ponto importante: O acordo compartilhado permite transferências de ativos não envolvidos externamente e mensagens arbitrárias em todos os rollups que compartilham o contrato de ponte e a camada de agregação de prova, mas ainda haverá latências não negligenciáveis (embora muito mais curtas do que L1 Async) e não é possível criar pacotes atômicos entre rollups.
Sequenciadores Compartilhados // Superconstrutores
A execução atômica nos permite garantir a execução bem-sucedida de pacotes cruzados, mas, como veremos, o número de casos de uso para pacotes cruzados que não têm transações dependentes é menor do que se poderia esperar inicialmente.
Se uma única transação em um pacote de transações dependentes for revertida, então todas as outras transações se tornam inválidas e também devem ser revertidas, como é o caso da queima e cunhagem de tokens em rollups. A cunhagem de tokens em um rollup de destino depende deles terem sido queimados ou bloqueados no rollup de origem, então poderíamos dizer que um pacote de transações de queima e cunhagem é um pacote de transações dependentes.
Criar este pacote é impossível sem uma parte intermediária, como um superconstrutor que pode criar a transação de destino.
Considere o que teria que ser verdade para que os pacotes de troca entre rollups cruzados fossem construídos sem a necessidade de outra parte além do usuário. Um pacote teria que ser criado para travar / queimar o ativo no rollup de origem e cunhar o ativo no rollup de destino, mas nos deparamos com problemas:
Podemos ver que, mesmo que pudéssemos garantir a execução de pacotes cruzados de rollup, encontramos dificuldades em como poderíamos construí-los em primeiro lugar para transferir ativos de valor.
No entanto, ainda existem alguns casos de uso para execução atômica sem pacotes dependentes de cross-rollup. Um dos quais é a arbitragem cross-rollup:
Arbitragem DEX Cross-Rollup com Execução Atômica
Porque não há dependências estritas entre essas transações, qualquer um pode criar este pacote atômico e enviá-lo para um sequenciador compartilhado que garantirá a execução atômica.
No entanto, para ter garantias de execução atômica em primeiro lugar, os rollups devem optar por um sequenciador compartilhado e superconstrutor que executaria nós completos de todos os rollups conectados, então o passo da execução atômica para a composabilidade em nível de bloco é bastante pequeno e todas as soluções de sequenciamento compartilhado farão isso. A única mudança necessária é que o construtor de bloco ou outro terceiro deve ser capaz de criar transações em nome do usuário para completar os pacotes dependentes entre rollups.
É improvável que a infraestrutura seja construída apenas permitindo a execução atômica sem avançar para ter composabilidade. O ganho relativo de pular para a composabilidade completa ao nível do bloco supera em muito a dificuldade de alcançá-la, dada a infraestrutura já ter a execução atômica.
Ponto importante: Embora os pacotes de rollup cruzados sejam garantidos para executar atomicamente, não está claro como esses pacotes serão construídos se não houver um superconstrutor que crie parte do pacote, então é improvável que a execução atômica por si só afete a interoperabilidade. Seqüenciadores/superconstrutores compartilhados devem, por padrão, construir em vez disso para composabilidade ao nível de bloco.
Sequenciador Compartilhado // Superconstrutor // Camada de agregação de provas// Contrato de ponte compartilhada
(* = opcional)
Em grande parte do discurso em torno de sequenciadores compartilhados e camadas de liquidação compartilhadas, o termo frequentemente usado para descrever esse nível de interoperabilidade é “componibilidade síncrona”.
Nós modificamos ligeiramente este termo para ser mais descritivo. Atualizar a nomenclatura para Componibilidade em Nível de Bloco implica que é possível compor entre dois rollups em um pacote de transações entre rollups que serão incluídas e executadas com sucesso no próximo bloco. A componibilidade síncrona pode ser confundida com a componibilidade em nível de transação, que exploramos na próxima seção. Importante ressaltar que isso requer uma parte intermediária (a infraestrutura de sequenciamento compartilhada) que pode ser o condutor e criador de pacotes de transações dependentes.
Neste nível, começamos a ver a verdadeira composição entre rollups além de simplesmente enviar para si mesmo para participar de um dapp em outro rollup.
Com a adição de um sequenciador compartilhado que pode criar transações, agora somos capazes de fazer pacotes cruzados de rollup que os desenvolvedores podem aproveitar programaticamente.
Há dois casos a considerar:
Em ambos os casos, podemos criar pacotes inter-rollup para atividades mais complexas, mas no segundo caso, com liquidação compartilhada, podemos usar ativos nativos, o que poderia ter melhores implicações de preço para atividades inter-rollup DEX, por exemplo.
Com a composabilidade ao nível do bloco, temos tanto as vantagens da execução atômica quanto a capacidade adicional de criar pacotes de transações dependentes. Vamos examinar nossos dois exemplos ilustrativos.
Transferência do Mesmo Token via xERC-20 (Sem Liquidação Compartilhada):
Com uma camada de liquidação compartilhada, o fluxo é ainda mais simplificado porque não haveria necessidade de primeiro embrulhar o ERC-20 como um xERC-20 para trocar.
Vamos agora examinar o limite de ordem cruzada para comprar um ERC-20 no Rollup B com um ERC-20 inicial (diferente) do Rollup A e fazer com que o ERC-20 resultante seja enviado de volta para o Rollup A. Neste caso, não assumimos que temos uma camada de liquidação compartilhada, embora um fluxo semelhante exista no caso com uma. A única diferença é não ter que envolver ativos externamente adicionalmente.
Aqui estão as transações necessárias neste caso:
Aqui está um fluxo potencial de como isso poderia funcionar:
Ordem limitada Cross-Rollup em ambiente componível de nível de bloco
Fluxo:
Porque o superconstrutor cria o bloco e ordena transações, ele pode simular cada transação e omitir o pacote se alguma das transações reverter. Por exemplo, se for constatado que o usuário não receberia o cumprimento completo de sua ordem limite, o pacote seria omitido antes que o bloco seja executado.
Neste caso de infraestrutura de sequenciamento compartilhada sem uma camada de liquidação compartilhada, uma versão externamente envolvida de Eth e xERC-20 precisaria ser usada, o que poderia resultar em condições de mercado piores na DEX devido a pools de liquidez mais finas para ativos envolvidos. Neste caso, um usuário pode ter que usar um limite mais suave com mais derrapagem tolerada e poderia receber preços subótimos. Uma exceção a isso é se o USDC estiver envolvido. É possível que um sequenciador compartilhado sem liquidação compartilhada possa trabalhar com a Circle para obter direitos exclusivos sobre os contratos USDC em todos os rollups para facilitar transferências nativas de USDC e trocas entre rollups.
Com uma camada de liquidação compartilhada, essa embalagem externa não é necessária e provavelmente forneceria melhores preços devido a pools de liquidez mais profundos para trocas de ativos nativos, mas o fluxo é essencialmente o mesmo.
As rollups precisariam confiar otimisticamente no sequenciador/superconstrutor compartilhado para criar pacotes válidos de cross-rollup. Isso se deve principalmente ao fato de que esse pacote de cross-rollup contém transações dependentes que os rollups individuais não podem verificar até após o bloco ser adicionado à cadeia de cada rollup e agregado a uma camada de liquidação no L1. Um exemplo é a queima inicial e a criação de Eth de origem para destino. É crucial que o Eth seja realmente queimado na cadeia de origem antes de ser criado na cadeia de destino, caso contrário, gastos duplos são possíveis.
No entanto, para ter este pacote completo executado em um bloco, todas as transações devem estar presentes nesse bloco, mesmo que a transação represente um estado inválido antes do próprio bloco (como ter Eth na cadeia de destino para a troca se o usuário não tiver nenhum antes do bloco). Por esse motivo, devemos confiar no sequenciador de que ele realmente incluiu as dependências válidas no pacote de intercâmbio entre rolos. Poderíamos apresentar provas após o fato para provar a validade de cada transação.
Isso é ligeiramente menos importante ao usar ativos envoltos, no entanto, porque eles não têm impacto na liquidez nativa armazenada no L1, mas mecanismos de fallback ainda devem estar em vigor para contrariar o risco de um sequenciador malicioso ou um bug no código que permitiu que um pacote de transações fosse executado com uma transação dependente que foi revertida.
Mudanças de nível VM // Liquidação compartilhada // Superconstrutores
A composabilidade ao nível da transação refere-se ao mesmo nível de funcionalidade que os contratos inteligentes em uma cadeia EVM compartilham. Neste caso, uma única transação poderia atualizar o estado em vários rollups simultaneamente e garantir que quaisquer alterações de estado anteriores a qualquer chamada possam ser revertidas se a chamada não retornar com sucesso. Na prática, um pacote atômico de transações em um ambiente componível ao nível do bloco pode ser feito dentro de uma única transação cruzada de rollup e VM. Isso requer alterações ao nível do VM para todos os rollups conectados, além de uma camada de liquidação compartilhada e um superconstrutor.
Descrevemos um possível mecanismo aqui em um nível alto. (Esta construção é devido à equipe Espresso conforme nosso conhecimento). Primeiro, um usuário envia uma transação cruzada para todos os rollups cujo estado é alterado pela transação ou um superconstrutor que pode construir blocos em todos os rollups envolvidos. Um superconstrutor simula a transação e forma listas de pares de entrada-saída, um para cada rollup envolvido, que especificam as mensagens cruzadas necessárias e esperadas dentro da transação. (Observe que o superconstrutor só pode fazer isso se tiver direitos de sequenciamento seguros para todos os rollups envolvidos por um período de tempo). O superconstrutor então envia o bloco simulado ao proponente de cada rollup, juntamente com as listas de pares de entrada-saída esperados para cada transação cruzada de rollup. Durante a execução, cada rollup executa sua própria função de transição de estado normalmente, assumindo que as entradas da lista de transações cruzadas de rollup estão corretas. Durante a liquidação, as listas de entrada-saída podem então ser cruzadas comparadas e comprovadas como seguras durante a fase de agregação de provas na camada de liquidação compartilhada. Especificamente, se alguma entrada esperada para uma transação cruzada de rollup não corresponder ao que outro rollup especificou como saída, o processo de liquidação rejeitará toda a transação cruzada.
Embora haja funcionalidades limitadas desbloqueadas com composabilidade ao nível da transação além dos empréstimos instantâneos, a experiência do desenvolvedor para criar aplicativos entre rollups pode ser significativamente melhorada. A capacidade de criar dapps que interajam com todas as blockchains conectadas sem precisar pensar em pacotes entre rollups tornará muito mais fácil inovar em um cenário de vários rollups. Além disso, é possível que novos casos de uso e comportamentos surjam como resultado.
Existem muitas perguntas de design aberto para composabilidade no nível de transação. Por exemplo, como os desenvolvedores podem optar por participar ou não de chamadas entre rollups para atender às necessidades de seus contratos inteligentes precisa ser cuidadosamente considerado. Permitir composabilidade arbitrária sem restrições significa que regredimos para um rollup monolítico. Acreditamos que a resposta aqui é os desenvolvedores indicarem explicitamente onde a composabilidade entre rollups é necessária em seus contratos, por exemplo, através de um modificador Solidity como componível
que marca certos pontos de entrada do contrato como cross rollup acionável.
Depois de percorrer os detalhes técnicos de cada nível de interoperabilidade definido aqui, podemos resumir:
Neste momento, existem muitos projetos surgindo para criar esses ecossistemas nativamente interoperáveis. Aqui está uma visão geral de alto nível da paisagem:
Mapa do ecossistema
Ainda existem questões em aberto sobre as nuances técnicas dentro dos frameworks delineados neste artigo. Por exemplo, a construção de bundles em um ecossistema componível em nível de bloco para ordens de limite cruzado entre rollups pode ter designs mais detalhados para lidar com o caso de cumprimento parcial e tolerância ao deslizamento para ordens de mercado. Oferecemos uma solução potencial aqui para reverter um pacote de ordens de limite cruzado entre rollups se a ordem não for completamente preenchida, mas o espaço de design está aberto.
Além disso, vale a pena relacionar isso com a atual conscientização crescente no espaço sobre as appchains. As appchains são L2 de cauda longa que são generalizadas ou com permissão com o objetivo de isolar protocolos específicos relacionados em um L2. É provável que, quando alcançarmos a composabilidade ao nível do bloco, também começaremos a ver ambientes de appchain ganhando significativa tração como resultado de ter composabilidade nativa entre todas as redes conectadas.
No momento atual, ainda é difícil gerar liquidez para essas appchains, mas uma vez que uma cadeia maior se conecta como uma rampa de acesso ao ambiente interoperável, é provável que vejamos ecossistemas de jardins murados em torno de infraestruturas compartilhadas.
Outra questão aberta importante é como o espaço de design em torno dos superconstrutores se resolverá. O desenvolvimento nesta frente ainda é bastante incipiente e ainda não está claro qual será a maneira mais eficiente e eficaz de criar uma rede de construtores sofisticados que possam criar pacotes de interconexão de rollup. Onde esses pacotes de interconexão de rollup serão incluídos de forma ideal em um bloco, e o impacto na receita do rollup é uma questão aberta com diferentes estratégias sendo exploradas por muitas equipes.
No final, o futuro provavelmente envolverá uma combinação de soluções de ponte em protocolo e fora de protocolo, e elas funcionarão em conjunto para fornecer um processo de interoperabilidade muito melhor para todos. Acreditamos que a progressão definida neste artigo pode servir como um guia para desenvolvedores e construtores que estão focados em tornar a interoperabilidade entre rollups cruzados mais perfeita para os usuários finais.
Também é provável que existam paradigmas completamente novos para interação entre rollups que ainda não foram descobertos. Se você é um construtor trabalhando em abordagens que expandem os tópicos aqui ou não estão cobertos acima, por favor alcançar(dms are open). A tecnologia finalmente amadureceu o suficiente para exercer uma pressão real na busca por soluções para a fragmentação da liquidez/ecossistema, e estamos sempre procurando nos conectar com fundadores que estão assumindo riscos para construir soluções criativas.
Este artigo surgiu de uma discussão incrivelmente esclarecedora sobre interoperabilidade de rollup realizada por 1kx na EthCC. Um agradecimento especial vai paraNoah Pravecek, Ellie Davidson, e Terrypara ler as primeiras versões deste artigo e fornecer feedback, bem como paraMarti, mteam, e Bo Dupara conversas adicionais sobre o assunto.
Este artigo é reproduzido a partir de [espelhoEncaminhe o Título Original 'Interoperabilidade Sem Confiança entre Rollups: Paisagem, Construções e Desafios', Todos os direitos autorais pertencem ao autor original [Marshall Vyletel Jr.]. Se houver objeções a essa reimpressão, entre em contato com oGate Aprenderequipe e eles vão lidar com isso prontamente.
Isenção de responsabilidade: As opiniões expressas neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
As traduções do artigo para outros idiomas são feitas pela equipe Gate Learn. Salvo indicação em contrário, copiar, distribuir ou plagiar os artigos traduzidos é proibido.
分享
Houve uma explosão cambriana de rollups no Ethereum. No momento da redação, há 91 L2 & L3s ao vivo e 82 próximos de acordo com L2Beat. Como resultado, também há uma quantidade significativa de fragmentação em termos de liquidez, experiência do usuário e ferramentas de desenvolvimento. As soluções atuais de interoperabilidade deixam muito a desejar, pois dependem de uma combinação de pontes de terceiros, ativos envolvidos externamente e estruturas de intenção, cada uma carregando seu próprio conjunto de problemas.
Neste artigo, analisamos a paisagem de interoperabilidade sem confiança definindo e discutindo seis níveis de soluções de interoperabilidade entre ecossistemas de rollup fragmentados.
Começamos com o caso padrão de retirar de forma assíncrona do rollup de origem para L1 e fazer a ponte manualmente para o rollup de destino, e terminamos com uma arquitetura hipotética para a composabilidade entre rollups em uma única transação. Vamos explorar como cada nível de interoperabilidade afetará a experiência do usuário, a experiência do desenvolvedor, o potencial de MEV e os próprios rollups (especificamente relacionados a mudanças de infraestrutura).
Permanecemos principalmente dentro do escopo do Ethereum e suas L2s para este artigo e focamos exclusivamente na interoperabilidade sem confiança. Neste caso, “interoperabilidade sem confiança” refere-se a canais em protocolo que não exigem terceiros para facilitar transferências fora da infraestrutura necessária que a maioria dos rollups já requer.
Fundamentalmente, a interoperabilidade sem confiança requer algum recurso compartilhado ao qual quaisquer dois protocolos que desejem interoperar devem ter acesso. No caso do Ethereum L1, todos os contratos inteligentes vivem no mesmo ambiente, compartilhando o estado completo do Ethereum, portanto, eles sempre terão o mais alto nível de interoperabilidade. No entanto, os L2s compartilham apenas uma camada de liquidação por meio de contratos de ponte separados e, portanto, a interoperabilidade é muito mais limitada.
Os componentes de infraestrutura compartilhada cruciais que podem nos fazer progredir ao longo da escada de interoperabilidade sem confiança são sequenciadores compartilhados, superconstrutores e liquidação compartilhada. As garantias e novas funcionalidades abertas por essas camadas compartilhadas estão relacionadas, mas essencialmente ortogonais por natureza.
Para começar, primeiro definiremos os seis níveis de interoperabilidade sem confiança mencionados na introdução:
Para entender cada nível mais a fundo, vamos percorrer os seguintes casos de uso principais para demonstrar o poder de cada nível, bem como as implicações para usuários, desenvolvedores, rollups e pesquisadores de MEV.
As seguintes perguntas também serão respondidas para entender melhor o impacto nos principais acionistas em qualquer ecossistema de rollup.
Visão geral das mudanças para as principais partes interessadas
N/A
Conforme definido, isso se refere ao modo padrão atual de interoperabilidade sem confiança. Todos os rollups são definidos como tal porque são construídos em um L1 como camada de liquidação e têm acesso a esse L1 apenas por meio dos contratos de ponte, onde eles postam periodicamente atualizações de estado para garantir a rede.
A única maneira canônica de realizar qualquer atividade sem confiança entre rollups neste caso é retirar ativos do rollup de origem via a ponte canônica e depositá-los manualmente no rollup de destino assim que estiverem disponíveis no L1.
Para rollups otimistas, essa latência de saque é de cerca de 7 dias para considerar a janela de prova de falhas. Em um ZK rollup, a latência de saque é menos certa, mas pode variar de 15 minutos a um dia inteiro, como é o caso do ZkSync.
Além disso, trocas atômicas peer-to-peer usando contratos inteligentes são possíveis, mas este é um caso de uso menor e não escala efetivamente.
Vale ressaltar as soluções de terceiros que atualmente existem:
Ambos os nossos exemplos ilustrativos requerem soluções de terceiros para facilitar.
Enviar para si mesmo:
Ordem Limitada Cruzada-Rollup
Como este é o caso padrão, é desnecessário discutir alterações no UX, DevEx, MEV e rollups.
Sequenciador Compartilhado *
A inclusão atômica apenas garante que um pacote de transferência inter-rollup será incluído no próximo bloco.
Isso requer um sequenciador compartilhado, mas teoricamente pode ser alcançado sem um manualmente se os sequenciadores em dois rollups dados não estiverem na capacidade máxima (alguém poderia simplesmente enviar duas transações para cada rollup individualmente). É por isso que adicionamos um asterisco à infraestrutura necessária.
No entanto, não assumimos que o sequenciador compartilhado esteja executando um nó completo de cada um dos pacotes cumulativos conectados e, portanto, não podemos garantir a execução bem-sucedida de um pacote de transações. O sequenciador compartilhado, nesse caso, só pode garantir que as transações sejam bem formadas e que sejam incluídas no próximo bloco, mas não necessariamente que serão executadas com sucesso.
Porque não há garantias de execução, é impossível aproveitar programaticamente a inclusão atômica de forma significativa sem correr o risco de uma das transações reverter. Como resultado, estamos essencialmente no mesmo caso exato que a interoperabilidade assíncrona L1.
Considere iniciar uma troca simples de rollup cruzado com apenas garantias de inclusão atômica:
Podemos ter garantias de inclusão atômica de que ambas as transações são de fato incluídas nos próximos blocos para cada rollup, mas se a primeira transação reverter e a segunda não, o usuário seria alocado incorretamente fundos na cadeia de destino sem tê-los bloqueado ou queimado na cadeia de origem e encontraríamos um problema de gastos duplos.
Qualquer solução de interoperabilidade, seja uma ponte de liquidez, um framework de intenção ou uma troca xERC-20, estaria vulnerável a esse risco e é impossível mitigá-lo. Devido a esse risco, as soluções atuais exigem que a transação iniciadora tenha sido executada com sucesso e incluída em um bloco na cadeia de origem antes de usar relayers para passar uma mensagem emitida e executar a segunda transação na cadeia de destino.
Importante: A inclusão atômica não impacta significativamente o potencial de interoperabilidade
Camada de agregação de prova // Contrato de ponte compartilhada
Aqui é onde as coisas começam a ficar mais interessantes. Como resultado do contrato de ponte compartilhada, toda a liquidez depositada no ecossistema de rollup do L1 pode ser movimentada livremente entre todos os rollups conectados. Até este ponto, não podíamos realizar trocas entre rollups sem passar por canais canônicos, envolver ativos externamente ou usar uma solução de terceiros.
Por que construir um contrato de ponte compartilhado? Para entender por que ter um contrato de ponte compartilhado nos permite mover ativos entre rollups sem confiança, primeiro considere o que aconteceria se fosse possível ter Eth em Rollup A, queimá-lo e criá-lo nativamente em Rollup B sem um contrato de ponte compartilhado em L1.
Vemos que cada rollup sairia de sincronia com seu contrato de ponte na mainnet. O contrato de ponte do rollup B ainda tem 50 Eth, então o usuário não seria capaz de sacar seu 1 Eth para o L1.
Para resolver isso, são construídos protocolos de envolvimento de ativos externos que emitem uma versão externamente envolta de tokens em vários rollups que simbolizam uma versão nativa em outro lugar na rede.
Com uma camada de liquidação compartilhada, a situação parece diferente. Porque toda a liquidez para cada rollup conectado está travada no mesmo contrato de ponte, alguém pode se mover livremente entre rollups, já que o valor total no contrato de ponte permanece o mesmo e sempre pode ser retirado.
Há a necessidade de uma atualização no nível do contrato L1 sobreonde a liquidez é permitir que os usuários saquem de qualquer lugar, mas isso é trivial porque todos os rollups conectados podem ler/escrever no contrato compartilhado.
Com uma camada de liquidação compartilhada, o fluxo pode parecer com o seguinte para um caso simples de envio para si mesmo.
Enviar para si mesmo:
Podemos estender esse fluxo para qualquer ERC-20 que tenha contratos em todos os rollups no ecossistema de liquidação compartilhada.
Pode-se pensar em um contrato de ponte compartilhada como uma camada de mensagens em protocolo entre todos os rollups conectados, então teoricamente esse fluxo pode ser estendido a qualquer padrão de mensagens arbitrário.
Isso nos aproxima da composição, mas devido às etapas necessárias de agregação de provas e transmissão de mensagens apenas após as mudanças de estado serem refletidas no L1, existem altas latências (embora notavelmente menores do que no caso assíncrono do L1). Além disso, qualquer atividade complexa de cross-rollup, como usar um DEX no rollup B começando com ativos no rollup A para uma ordem de limite de cross-rollup, ainda seria um processo tedioso para o usuário, pois ainda teriam que enviar para si mesmos e trocar manualmente ativos no rollup de destino. Não é possível criar bundles atômicos de cross-rollup nesse caso.
Outro benefício importante com o ajuste compartilhado é que há menos atrito para provedores de liquidez ou solvers que estão preenchendo pedidos em vários ambientes. Como sua liquidez em todos os rollups conectados é refletida no mesmo contrato de ponte, eles não precisam esperar a janela completa de saque para gerenciar sua liquidez entre rollups.
Ponto importante: O acordo compartilhado permite transferências de ativos não envolvidos externamente e mensagens arbitrárias em todos os rollups que compartilham o contrato de ponte e a camada de agregação de prova, mas ainda haverá latências não negligenciáveis (embora muito mais curtas do que L1 Async) e não é possível criar pacotes atômicos entre rollups.
Sequenciadores Compartilhados // Superconstrutores
A execução atômica nos permite garantir a execução bem-sucedida de pacotes cruzados, mas, como veremos, o número de casos de uso para pacotes cruzados que não têm transações dependentes é menor do que se poderia esperar inicialmente.
Se uma única transação em um pacote de transações dependentes for revertida, então todas as outras transações se tornam inválidas e também devem ser revertidas, como é o caso da queima e cunhagem de tokens em rollups. A cunhagem de tokens em um rollup de destino depende deles terem sido queimados ou bloqueados no rollup de origem, então poderíamos dizer que um pacote de transações de queima e cunhagem é um pacote de transações dependentes.
Criar este pacote é impossível sem uma parte intermediária, como um superconstrutor que pode criar a transação de destino.
Considere o que teria que ser verdade para que os pacotes de troca entre rollups cruzados fossem construídos sem a necessidade de outra parte além do usuário. Um pacote teria que ser criado para travar / queimar o ativo no rollup de origem e cunhar o ativo no rollup de destino, mas nos deparamos com problemas:
Podemos ver que, mesmo que pudéssemos garantir a execução de pacotes cruzados de rollup, encontramos dificuldades em como poderíamos construí-los em primeiro lugar para transferir ativos de valor.
No entanto, ainda existem alguns casos de uso para execução atômica sem pacotes dependentes de cross-rollup. Um dos quais é a arbitragem cross-rollup:
Arbitragem DEX Cross-Rollup com Execução Atômica
Porque não há dependências estritas entre essas transações, qualquer um pode criar este pacote atômico e enviá-lo para um sequenciador compartilhado que garantirá a execução atômica.
No entanto, para ter garantias de execução atômica em primeiro lugar, os rollups devem optar por um sequenciador compartilhado e superconstrutor que executaria nós completos de todos os rollups conectados, então o passo da execução atômica para a composabilidade em nível de bloco é bastante pequeno e todas as soluções de sequenciamento compartilhado farão isso. A única mudança necessária é que o construtor de bloco ou outro terceiro deve ser capaz de criar transações em nome do usuário para completar os pacotes dependentes entre rollups.
É improvável que a infraestrutura seja construída apenas permitindo a execução atômica sem avançar para ter composabilidade. O ganho relativo de pular para a composabilidade completa ao nível do bloco supera em muito a dificuldade de alcançá-la, dada a infraestrutura já ter a execução atômica.
Ponto importante: Embora os pacotes de rollup cruzados sejam garantidos para executar atomicamente, não está claro como esses pacotes serão construídos se não houver um superconstrutor que crie parte do pacote, então é improvável que a execução atômica por si só afete a interoperabilidade. Seqüenciadores/superconstrutores compartilhados devem, por padrão, construir em vez disso para composabilidade ao nível de bloco.
Sequenciador Compartilhado // Superconstrutor // Camada de agregação de provas// Contrato de ponte compartilhada
(* = opcional)
Em grande parte do discurso em torno de sequenciadores compartilhados e camadas de liquidação compartilhadas, o termo frequentemente usado para descrever esse nível de interoperabilidade é “componibilidade síncrona”.
Nós modificamos ligeiramente este termo para ser mais descritivo. Atualizar a nomenclatura para Componibilidade em Nível de Bloco implica que é possível compor entre dois rollups em um pacote de transações entre rollups que serão incluídas e executadas com sucesso no próximo bloco. A componibilidade síncrona pode ser confundida com a componibilidade em nível de transação, que exploramos na próxima seção. Importante ressaltar que isso requer uma parte intermediária (a infraestrutura de sequenciamento compartilhada) que pode ser o condutor e criador de pacotes de transações dependentes.
Neste nível, começamos a ver a verdadeira composição entre rollups além de simplesmente enviar para si mesmo para participar de um dapp em outro rollup.
Com a adição de um sequenciador compartilhado que pode criar transações, agora somos capazes de fazer pacotes cruzados de rollup que os desenvolvedores podem aproveitar programaticamente.
Há dois casos a considerar:
Em ambos os casos, podemos criar pacotes inter-rollup para atividades mais complexas, mas no segundo caso, com liquidação compartilhada, podemos usar ativos nativos, o que poderia ter melhores implicações de preço para atividades inter-rollup DEX, por exemplo.
Com a composabilidade ao nível do bloco, temos tanto as vantagens da execução atômica quanto a capacidade adicional de criar pacotes de transações dependentes. Vamos examinar nossos dois exemplos ilustrativos.
Transferência do Mesmo Token via xERC-20 (Sem Liquidação Compartilhada):
Com uma camada de liquidação compartilhada, o fluxo é ainda mais simplificado porque não haveria necessidade de primeiro embrulhar o ERC-20 como um xERC-20 para trocar.
Vamos agora examinar o limite de ordem cruzada para comprar um ERC-20 no Rollup B com um ERC-20 inicial (diferente) do Rollup A e fazer com que o ERC-20 resultante seja enviado de volta para o Rollup A. Neste caso, não assumimos que temos uma camada de liquidação compartilhada, embora um fluxo semelhante exista no caso com uma. A única diferença é não ter que envolver ativos externamente adicionalmente.
Aqui estão as transações necessárias neste caso:
Aqui está um fluxo potencial de como isso poderia funcionar:
Ordem limitada Cross-Rollup em ambiente componível de nível de bloco
Fluxo:
Porque o superconstrutor cria o bloco e ordena transações, ele pode simular cada transação e omitir o pacote se alguma das transações reverter. Por exemplo, se for constatado que o usuário não receberia o cumprimento completo de sua ordem limite, o pacote seria omitido antes que o bloco seja executado.
Neste caso de infraestrutura de sequenciamento compartilhada sem uma camada de liquidação compartilhada, uma versão externamente envolvida de Eth e xERC-20 precisaria ser usada, o que poderia resultar em condições de mercado piores na DEX devido a pools de liquidez mais finas para ativos envolvidos. Neste caso, um usuário pode ter que usar um limite mais suave com mais derrapagem tolerada e poderia receber preços subótimos. Uma exceção a isso é se o USDC estiver envolvido. É possível que um sequenciador compartilhado sem liquidação compartilhada possa trabalhar com a Circle para obter direitos exclusivos sobre os contratos USDC em todos os rollups para facilitar transferências nativas de USDC e trocas entre rollups.
Com uma camada de liquidação compartilhada, essa embalagem externa não é necessária e provavelmente forneceria melhores preços devido a pools de liquidez mais profundos para trocas de ativos nativos, mas o fluxo é essencialmente o mesmo.
As rollups precisariam confiar otimisticamente no sequenciador/superconstrutor compartilhado para criar pacotes válidos de cross-rollup. Isso se deve principalmente ao fato de que esse pacote de cross-rollup contém transações dependentes que os rollups individuais não podem verificar até após o bloco ser adicionado à cadeia de cada rollup e agregado a uma camada de liquidação no L1. Um exemplo é a queima inicial e a criação de Eth de origem para destino. É crucial que o Eth seja realmente queimado na cadeia de origem antes de ser criado na cadeia de destino, caso contrário, gastos duplos são possíveis.
No entanto, para ter este pacote completo executado em um bloco, todas as transações devem estar presentes nesse bloco, mesmo que a transação represente um estado inválido antes do próprio bloco (como ter Eth na cadeia de destino para a troca se o usuário não tiver nenhum antes do bloco). Por esse motivo, devemos confiar no sequenciador de que ele realmente incluiu as dependências válidas no pacote de intercâmbio entre rolos. Poderíamos apresentar provas após o fato para provar a validade de cada transação.
Isso é ligeiramente menos importante ao usar ativos envoltos, no entanto, porque eles não têm impacto na liquidez nativa armazenada no L1, mas mecanismos de fallback ainda devem estar em vigor para contrariar o risco de um sequenciador malicioso ou um bug no código que permitiu que um pacote de transações fosse executado com uma transação dependente que foi revertida.
Mudanças de nível VM // Liquidação compartilhada // Superconstrutores
A composabilidade ao nível da transação refere-se ao mesmo nível de funcionalidade que os contratos inteligentes em uma cadeia EVM compartilham. Neste caso, uma única transação poderia atualizar o estado em vários rollups simultaneamente e garantir que quaisquer alterações de estado anteriores a qualquer chamada possam ser revertidas se a chamada não retornar com sucesso. Na prática, um pacote atômico de transações em um ambiente componível ao nível do bloco pode ser feito dentro de uma única transação cruzada de rollup e VM. Isso requer alterações ao nível do VM para todos os rollups conectados, além de uma camada de liquidação compartilhada e um superconstrutor.
Descrevemos um possível mecanismo aqui em um nível alto. (Esta construção é devido à equipe Espresso conforme nosso conhecimento). Primeiro, um usuário envia uma transação cruzada para todos os rollups cujo estado é alterado pela transação ou um superconstrutor que pode construir blocos em todos os rollups envolvidos. Um superconstrutor simula a transação e forma listas de pares de entrada-saída, um para cada rollup envolvido, que especificam as mensagens cruzadas necessárias e esperadas dentro da transação. (Observe que o superconstrutor só pode fazer isso se tiver direitos de sequenciamento seguros para todos os rollups envolvidos por um período de tempo). O superconstrutor então envia o bloco simulado ao proponente de cada rollup, juntamente com as listas de pares de entrada-saída esperados para cada transação cruzada de rollup. Durante a execução, cada rollup executa sua própria função de transição de estado normalmente, assumindo que as entradas da lista de transações cruzadas de rollup estão corretas. Durante a liquidação, as listas de entrada-saída podem então ser cruzadas comparadas e comprovadas como seguras durante a fase de agregação de provas na camada de liquidação compartilhada. Especificamente, se alguma entrada esperada para uma transação cruzada de rollup não corresponder ao que outro rollup especificou como saída, o processo de liquidação rejeitará toda a transação cruzada.
Embora haja funcionalidades limitadas desbloqueadas com composabilidade ao nível da transação além dos empréstimos instantâneos, a experiência do desenvolvedor para criar aplicativos entre rollups pode ser significativamente melhorada. A capacidade de criar dapps que interajam com todas as blockchains conectadas sem precisar pensar em pacotes entre rollups tornará muito mais fácil inovar em um cenário de vários rollups. Além disso, é possível que novos casos de uso e comportamentos surjam como resultado.
Existem muitas perguntas de design aberto para composabilidade no nível de transação. Por exemplo, como os desenvolvedores podem optar por participar ou não de chamadas entre rollups para atender às necessidades de seus contratos inteligentes precisa ser cuidadosamente considerado. Permitir composabilidade arbitrária sem restrições significa que regredimos para um rollup monolítico. Acreditamos que a resposta aqui é os desenvolvedores indicarem explicitamente onde a composabilidade entre rollups é necessária em seus contratos, por exemplo, através de um modificador Solidity como componível
que marca certos pontos de entrada do contrato como cross rollup acionável.
Depois de percorrer os detalhes técnicos de cada nível de interoperabilidade definido aqui, podemos resumir:
Neste momento, existem muitos projetos surgindo para criar esses ecossistemas nativamente interoperáveis. Aqui está uma visão geral de alto nível da paisagem:
Mapa do ecossistema
Ainda existem questões em aberto sobre as nuances técnicas dentro dos frameworks delineados neste artigo. Por exemplo, a construção de bundles em um ecossistema componível em nível de bloco para ordens de limite cruzado entre rollups pode ter designs mais detalhados para lidar com o caso de cumprimento parcial e tolerância ao deslizamento para ordens de mercado. Oferecemos uma solução potencial aqui para reverter um pacote de ordens de limite cruzado entre rollups se a ordem não for completamente preenchida, mas o espaço de design está aberto.
Além disso, vale a pena relacionar isso com a atual conscientização crescente no espaço sobre as appchains. As appchains são L2 de cauda longa que são generalizadas ou com permissão com o objetivo de isolar protocolos específicos relacionados em um L2. É provável que, quando alcançarmos a composabilidade ao nível do bloco, também começaremos a ver ambientes de appchain ganhando significativa tração como resultado de ter composabilidade nativa entre todas as redes conectadas.
No momento atual, ainda é difícil gerar liquidez para essas appchains, mas uma vez que uma cadeia maior se conecta como uma rampa de acesso ao ambiente interoperável, é provável que vejamos ecossistemas de jardins murados em torno de infraestruturas compartilhadas.
Outra questão aberta importante é como o espaço de design em torno dos superconstrutores se resolverá. O desenvolvimento nesta frente ainda é bastante incipiente e ainda não está claro qual será a maneira mais eficiente e eficaz de criar uma rede de construtores sofisticados que possam criar pacotes de interconexão de rollup. Onde esses pacotes de interconexão de rollup serão incluídos de forma ideal em um bloco, e o impacto na receita do rollup é uma questão aberta com diferentes estratégias sendo exploradas por muitas equipes.
No final, o futuro provavelmente envolverá uma combinação de soluções de ponte em protocolo e fora de protocolo, e elas funcionarão em conjunto para fornecer um processo de interoperabilidade muito melhor para todos. Acreditamos que a progressão definida neste artigo pode servir como um guia para desenvolvedores e construtores que estão focados em tornar a interoperabilidade entre rollups cruzados mais perfeita para os usuários finais.
Também é provável que existam paradigmas completamente novos para interação entre rollups que ainda não foram descobertos. Se você é um construtor trabalhando em abordagens que expandem os tópicos aqui ou não estão cobertos acima, por favor alcançar(dms are open). A tecnologia finalmente amadureceu o suficiente para exercer uma pressão real na busca por soluções para a fragmentação da liquidez/ecossistema, e estamos sempre procurando nos conectar com fundadores que estão assumindo riscos para construir soluções criativas.
Este artigo surgiu de uma discussão incrivelmente esclarecedora sobre interoperabilidade de rollup realizada por 1kx na EthCC. Um agradecimento especial vai paraNoah Pravecek, Ellie Davidson, e Terrypara ler as primeiras versões deste artigo e fornecer feedback, bem como paraMarti, mteam, e Bo Dupara conversas adicionais sobre o assunto.
Este artigo é reproduzido a partir de [espelhoEncaminhe o Título Original 'Interoperabilidade Sem Confiança entre Rollups: Paisagem, Construções e Desafios', Todos os direitos autorais pertencem ao autor original [Marshall Vyletel Jr.]. Se houver objeções a essa reimpressão, entre em contato com oGate Aprenderequipe e eles vão lidar com isso prontamente.
Isenção de responsabilidade: As opiniões expressas neste artigo são exclusivamente do autor e não constituem qualquer conselho de investimento.
As traduções do artigo para outros idiomas são feitas pela equipe Gate Learn. Salvo indicação em contrário, copiar, distribuir ou plagiar os artigos traduzidos é proibido.