Documentación técnica de Optimism
O Optimism não possui um whitepaper tradicional. Como rollup otimista de Camada 2 do Ethereum, seu design e especificações estão documentados por meio de documentação técnica, a especificação do OP Stack e posts de pesquisa, e não em um único artigo acadêmico formal.
Resumo
O artigo aborda o problema de escalabilidade em blockchains descentralizados analisando a compensação entre o rendimento da transação e os requisitos de hardware para executar um nó. Rollups, ou seja, tecnologias para verificação on-chain de blocos executados fora da cadeia, são apresentados na forma de provas de falha ou de validade. Comparamos Rollups Otimistas e Rollups de Validade em relação ao tempo de retirada, custos de transação, técnicas de otimização e compatibilidade com o ecossistema Ethereum. Nossa análise revela que Optimism Bedrock atualmente tem uma taxa de compressão de gás de aproximadamente 20:1, enquanto StarkNet atinge uma taxa de compressão de custo de gravação de armazenamento de cerca de 24:1. Também discutimos técnicas para otimizar ainda mais essas taxas, como o uso de contratos de cache e filtros Bloom. Em última análise, as nossas conclusões destacam os compromissos entre complexidade e agilidade na escolha entre rollups otimistas e de validade. Palavras-chave Blockchain, Escalabilidade, Rollup 1. Introdução A tecnologia Blockchain ganhou atenção significativa devido ao seu potencial para revolucionar vários setores. No entanto, a escalabilidade continua a ser um grande desafio, já que a maioria dos blockchains enfrentam um compromisso entre escalabilidade, descentralização e segurança, comumente referido como o Trilema da Escalabilidade [1, 2]. Para aumentar o rendimento de um blockchain, uma solução trivial é aumentar o tamanho do bloco. No contexto de Ethereum, isso significa aumentar a quantidade máxima de gás que um bloco pode conter. Como cada nó completo deve validar todas as transações de cada bloco, à medida que o rendimento aumenta, os requisitos de hardware também aumentam, levando a uma maior centralização da rede. Alguns blockchains, como Bitcoin e Ethereum, otimizam seu design para maximizar sua descentralização arquitetônica, enquanto outros, como Binance Smart Chain e Solana, são projetados para serem o mais rápidos e baratos possível. As redes descentralizadas limitam artificialmente o rendimento do blockchain para reduzir os requisitos de hardware para participar da rede. Ao longo dos anos, foram feitas tentativas para encontrar uma solução para o Trilema, como os canais estaduais [3] e Plasma [4, 5]. Essas soluções têm a característica de mover algumas atividades para fora da cadeia, vincular atividades on-chain a atividades fora da cadeia usando smart contracts e verificar DLT 2023: 5th Distributed Ledger Technology Workshop, 25 a 26 de maio de 2023, Bolonha, Itália $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Direitos autorais deste artigo de seus autores. Uso permitido sob Creative Commons License Attribution 4.0 International (CC BY 4.0). Procedimentos do Workshop CEUR http://ceur-ws.org ISSN 1613-0073 Procedimentos do Workshop CEUR (CEUR-WS.org) na rede o que está acontecendo fora da rede. No entanto, os canais de plasma e de estado são limitados no suporte a smart contracts gerais. Rollups são blockchains (chamados Layer 2 ou L2) que publicam seus blocos em outro blockchain (Layer 1 ou L1) e, portanto, herdam seu consenso, disponibilidade de dados e propriedades de segurança. Elas, ao contrário de outras soluções, suportam computação arbitrária. Rollups possuem três componentes principais: • Sequenciadores: nós que recebem transações Rollup de usuários e as combinam em um bloco que é enviado para Layer 1. O bloco consiste em pelo menos a raiz do estado (por exemplo, uma raiz Merkle) e os dados necessários para reconstruir e validar o estado. O Layer 1 define o...
Resumen
El documento aborda el problema de la escalabilidad en blockchains descentralizados analizando la compensación entre el rendimiento de las transacciones y los requisitos de hardware para ejecutar un nodo. Los rollups, es decir, tecnologías para la verificación en cadena de bloques ejecutados fuera de la cadena, se presentan en forma de pruebas de falla o validez. Comparamos los rollups optimistas y los rollups de validez con respecto al tiempo de retiro, los costos de transacción, las técnicas de optimización y la compatibilidad con el ecosistema Ethereum. Nuestro análisis revela que Optimism Bedrock tiene actualmente una tasa de compresión de gas de aproximadamente 20:1, mientras que StarkNet logra una tasa de compresión del costo de escritura de almacenamiento de alrededor de 24:1. También analizamos técnicas para optimizar aún más estas tasas, como el uso de contratos de caché y filtros Bloom. En última instancia, nuestras conclusiones resaltan las compensaciones entre complejidad y agilidad en la elección entre Optimistic y Validity Rollups. Palabras clave Blockchain, Escalabilidad, Rollup 1. Introducción La tecnología Blockchain ha ganado una atención significativa debido a su potencial para revolucionar diversas industrias. Sin embargo, la escalabilidad sigue siendo un desafío importante, ya que la mayoría de los blockchain__ se enfrentan a un equilibrio entre escalabilidad, descentralización y seguridad, comúnmente conocido como el trilema de la escalabilidad [1, 2]. Para aumentar el rendimiento de un blockchain, una solución trivial es aumentar el tamaño de su bloque. En el contexto de Ethereum, esto significa aumentar la cantidad máxima de gas que puede contener un bloque. Como cada nodo completo debe validar cada transacción de cada bloque, a medida que aumenta el rendimiento, también aumentan los requisitos de hardware, lo que lleva a una mayor centralización de la red. Algunos blockchains, como Bitcoin y Ethereum, optimizan su diseño para maximizar su descentralización arquitectónica, mientras que otros, como Binance Smart Chain y Solana, están diseñados para ser lo más rápidos y económicos posible. Las redes descentralizadas limitan artificialmente el rendimiento del blockchain para reducir los requisitos de hardware para participar en la red. A lo largo de los años, se han realizado intentos para encontrar una solución al Trilema, como los canales estatales [3] y Plasma [4, 5]. Estas soluciones tienen la característica de mover alguna actividad fuera de la cadena, vincular la actividad dentro de la cadena con la actividad fuera de la cadena usando smart contracts y verificar DLT 2023: 5to Taller de tecnología de contabilidad distribuida, 25 y 26 de mayo de 2023, Bolonia, Italia $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Copyright de este artículo por parte de sus autores. Uso permitido bajo la Licencia Creative Commons Attribution 4.0 International (CC BY 4.0). Actas del taller CEUR http://ceur-ws.org ISSN 1613-0073 Actas del taller CEUR (CEUR-WS.org) dentro de la cadena, qué está sucediendo fuera de la cadena. Sin embargo, tanto los canales Plasma como los estatales tienen un soporte limitado para los smart contracts generales. Los rollups son blockchains (llamados Layer 2 o L2) que publican sus bloques en otro blockchain (Layer 1 o L1) y por lo tanto heredan sus propiedades de consenso, disponibilidad de datos y seguridad. A diferencia de otras soluciones, admiten el cálculo arbitrario. Los rollups tienen tres componentes principales: • Secuenciadores: nodos que reciben transacciones Rollup de los usuarios y las combinan en un bloque que se envía a Layer 1. El bloque consta de al menos la raíz del estado (por ejemplo, una raíz de Merkle) y los datos necesarios para reconstruir y validar el estado. El Layer 1 define el...
Introdução
- Introdução A tecnologia Blockchain ganhou atenção significativa devido ao seu potencial para revolucionar diversas indústrias. No entanto, a escalabilidade continua a ser um grande desafio, uma vez que a maioria dos blockchains enfrentam um compromisso entre escalabilidade, descentralização e segurança, comumente referido como o Trilema de escalabilidade [1, 2]. Para aumentar o rendimento de um blockchain, uma solução trivial é para aumentar o tamanho do bloco. No contexto de Ethereum, isso significa aumentar o máximo quantidade de gás que um bloco pode conter. Como cada nó completo deve validar todas as transações de cada bloco, à medida que a taxa de transferência aumenta, os requisitos de hardware também aumentam, levando a um maior centralização da rede. Alguns blockchains, como Bitcoin e Ethereum, otimizam seus design para maximizar sua descentralização arquitetônica, enquanto outros, como o Binance Smart Chain e Solana são projetados para serem o mais rápidos e baratos possíveis. Redes descentralizadas limitar artificialmente o rendimento do blockchain para reduzir os requisitos de hardware para participar da rede. Ao longo dos anos, foram feitas tentativas para encontrar uma solução para o Trilema, tais como medidas estatais canais [3] e Plasma [4, 5]. Estas soluções têm a característica de movimentar alguma atividade fora da cadeia, vinculando a atividade na cadeia à atividade fora da cadeia usando smart contracts e verificando DLT 2023: 5º Workshop de Tecnologia de Ledger Distribuído, 25 a 26 de maio de 2023, Bolonha, Itália $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Direitos autorais deste artigo de seus autores. Uso permitido sob Creative Commons License Attribution 4.0 International (CC BY 4.0). CEUR Oficina Processos http://ceur-ws.org ISSN 1613-0073 Anais do Workshop CEUR (CEUR-WS.org)na cadeia o que está acontecendo fora da cadeia. No entanto, tanto os canais de plasma quanto os de estado são limitados em seu apoio aos smart contracts gerais. Rollups são blockchains (chamados Layer 2 ou L2) que publicam seus blocos em outro blockchain (Layer 1 ou L1) e, portanto, herda seu consenso, disponibilidade de dados e propriedades de segurança. Eles, ao contrário de outras soluções, suporta computação arbitrária. Os rollups têm três componentes principais: • Sequenciadores: nós que recebem transações Rollup dos usuários e as combinam em um bloco que é enviado para Layer 1. O bloco consiste em pelo menos a raiz do estado (por exemplo, um Merkle root) e os dados necessários para reconstruir e validar o estado. O Layer 1 define o canônico blockchain do L2 estabelecendo a ordenação dos dados publicados. • Nós completos de rollup: nós que obtêm, processam e validam blocos de rollup da camada 1 verificando se a raiz está correta. Se um bloco contém transações inválidas, então descartado, o que impede que os sequenciadores criem blocos válidos que incluam blocos inválidos transações. • Nós light de rollup: nós que obtêm blocos de rollup de Layer 1, mas não calculam o novo estado eles mesmos. Eles verificam se a nova raiz de estado é válida usando técnicas como provas de culpa ou validade. Os rollups alcançam escalabilidade diminuindo o custo amortizado das transações conforme o número de usuários aumenta. Isso ocorre porque o custo para garantir a validade de blockchain cresce sublinearmente no que diz respeito ao custo de verificação individual das transações. Os rollups diferem de acordo com o mecanismo pelo qual eles garantem a validade da execução da transação em nós leves: em Rollups Otimistas são garantidos por um modelo econômico e por provas de falhas, enquanto em Validade Rollups são garantidos criptograficamente usando provas de validade. Os nós leves podem ser implementados como smart contracts em Layer 1. Eles aceitam a raiz do novo estado e verificar a validade ou provas de falha: esses Rollup são, portanto, chamados de Contrato Inteligente Acumulações. Se os nós leves forem independentes, eles serão chamados de Rollups Soberanos [6]. A vantagem de usar um Smart Contract Rollup é ser capaz de construir uma ponte com confiança minimizada entre os dois blockchains: como a validade do estado L2 é comprovada para L1, um sistema de transações de L2 a L1 podem ser implementados, permitindo saques. A desvantagem é que o custo do transações depende do custo de verificação do estado em L1: se a camada base estiver saturada por outras atividades, o custo das transações no Rollup também aumenta. As camadas de dados e de consenso são as que determinam a segurança do sistema como eles definem a ordem das transações, evitam ataques e disponibilizam dados para comprovar o estado validade. Contribuição em papel Neste artigo, estudamos Optimistic e Validity Rollups, dois inovadores soluções para o Trilema de Escalabilidade, com foco em implementações notáveis, como Optimism Bedrock e StarkNet. Nossas contribuições incluem uma comparação abrangente desses soluções, uma análise dos tempos de retirada e uma discussão sobre um possível ataque a Optimism Base rochosa. Além disso, calculamos suas taxas de compressão de gás, fornecemos otimizações específicas da aplicação e apresentamos as vantagens e desvantagens de se afastar do Ethereum Máquina Virtual (EVM).
Estrutura do papel O artigo está organizado da seguinte forma. Na seção 2, Rollups otimistas são introduzido pela análise de Optimism Bedrock. Na seção 3, os Rollups de Validade são introduzidos por analisando StarkNet. Na seção 4 comparamos as duas soluções. Finalmente, na seção 5 desenhamos algumas conclusões.
Introducción
- Introducción La tecnología Blockchain ha ganado mucha atención debido a su potencial para revolucionar diversas industrias. Sin embargo, la escalabilidad sigue siendo un desafío importante, ya que la mayoría de los blockchains enfrentan un equilibrio entre escalabilidad, descentralización y seguridad, comúnmente conocido como el Trilema de escalabilidad [1, 2]. Para aumentar el rendimiento de un blockchain, una solución trivial es para aumentar el tamaño de su bloque. En el contexto de Ethereum, esto significa aumentar el máximo cantidad de gas que puede contener un bloque. Como cada nodo completo debe validar cada transacción de cada bloque, a medida que aumenta el rendimiento, los requisitos de hardware también aumentan, lo que lleva a una mayor centralización de la red. Algunos blockchains, como Bitcoin y Ethereum, optimizan su diseño para maximizar su descentralización arquitectónica, mientras que otros, como Binance Smart Chain y Solana, están diseñados para ser lo más rápidos y económicos posible. Redes descentralizadas limitar artificialmente el rendimiento del blockchain para reducir los requisitos de hardware a participar en la red. A lo largo de los años, se ha intentado encontrar una solución al Trilema, como por ejemplo la canales [3] y Plasma [4, 5]. Estas soluciones tienen la característica de mover alguna actividad fuera de la cadena, vinculando la actividad dentro de la cadena con la actividad fuera de la cadena usando smart contracts y verificando DLT 2023: 5.º taller sobre tecnología de contabilidad distribuida, 25 y 26 de mayo de 2023, Bolonia, Italia $ [email protected] (L.Donno) https://lucadonnoh.github.io/ (L.Donno) 0000-0001-9221-3529 (L.Donno) © 2023 Copyright de este artículo por parte de sus autores. Uso permitido bajo la Licencia Creative Commons Attribution 4.0 International (CC BY 4.0). EUR Taller Procedimientos http://ceur-ws.org ISSN 1613-0073 Actas del taller CEUR (CEUR-WS.org)dentro de la cadena lo que está sucediendo fuera de la cadena. Sin embargo, tanto los canales de plasma como los estatales están limitados en su apoyo al general smart contracts. Los rollups son blockchains (llamados Layer 2 o L2) que publican sus bloques en otro blockchain (Layer 1 o L1) y por lo tanto hereda sus propiedades de consenso, disponibilidad de datos y seguridad. Ellos, a diferencia de otras soluciones, admite cálculo arbitrario. Los rollups tienen tres componentes principales: • Secuenciadores: nodos que reciben transacciones acumuladas de los usuarios y las combinan en un bloque que se envía a Layer 1. El bloque consta de al menos la raíz del estado (por ejemplo, un Merkle root) y los datos necesarios para reconstruir y validar el estado. El Layer 1 define el canónico blockchain de la L2 estableciendo el ordenamiento de los datos publicados. • Nodos Rollup completos: nodos que obtienen, procesan y validan bloques Rollup de Layer. 1 verificando que la raíz sea correcta. Si un bloque contiene transacciones no válidas, entonces es descartados, lo que evita que los secuenciadores creen bloques válidos que incluyan bloques no válidos. transacciones. • Nodos ligeros de resumen: nodos que obtienen bloques de resumen de Layer 1 pero no calculan el nuevo Estado ellos mismos. Verifican que el nuevo estado raíz sea válido mediante técnicas como pruebas de error o validez. Los rollups logran escalabilidad al disminuir el costo amortizado de las transacciones a medida que aumenta el número. de usuarios aumenta. Esto se debe a que el costo de garantizar la validez de blockchain crece de manera sublineal. con respecto al costo de verificar las transacciones individualmente. Los rollups difieren según el mecanismo por el cual aseguran la validez de la ejecución de transacciones en los nodos ligeros: en Los Rollups Optimistas están garantizados por un modelo económico y por pruebas de fallos, mientras que en Validez Los rollups se aseguran criptográficamente mediante pruebas de validez. Los nodos ligeros se pueden implementar como smart contracts en Layer 1. Aceptan la raíz de la nuevo estado y verificar la validez o las pruebas de fallas: estos Rollup se denominan por lo tanto Smart Contract Acumulados. Si los nodos ligeros son independientes, se denominan Sovereign Rollups [6]. La ventaja de Usar un Smart Contract Rollup es poder construir un puente de confianza minimizada entre los dos. blockchains: dado que se prueba la validez del estado L2 para L1, se crea un sistema de transacciones desde Se pueden implementar L2 a L1, permitiendo retiros. La desventaja es que el costo del Las transacciones dependen del costo de verificar el estado en L1: si la capa base está saturada por otras actividades, el costo de las transacciones en el Rollup también aumenta. Las capas de datos y consenso son las que determinan la seguridad del sistema como Definen el orden de las transacciones, previenen ataques y ponen a disposición datos para probar el estado. validez. Contribución en papel En este artículo, estudiamos Optimistic y Validity Rollups, dos innovadores soluciones al Trilema de escalabilidad, con un enfoque en implementaciones notables, como Optimism Bedrock y StarkNet. Nuestras contribuciones incluyen una comparación exhaustiva de estos soluciones, un análisis de los tiempos de retiro y una discusión de un posible ataque a Optimism Base rocosa. Además, calculamos sus relaciones de compresión de gas, proporcionamos optimizaciones específicas de la aplicación y presentamos las ventajas y desventajas de alejarnos del Ethereum. Máquina virtual (EVM).
Estructura del papel El documento está organizado de la siguiente manera. En la sección 2 se muestran los resúmenes optimistas. introducido analizando Optimism Bedrock. En la sección 3, los acumuladores de validez se introducen por analizando StarkNet. En la sección 4 comparamos las dos soluciones. Finalmente, en la sección 5 dibujamos algunas conclusiones.
Rollups otimistas
- Rollups otimistas A ideia de aceitar de forma otimista a saída dos blocos sem verificar sua execução é já presente no white paper Bitcoin [7], discutindo nós de luz. Esses nós seguem apenas a cadeia de cabeçalho, verificando a regra de consenso, tornando-os vulneráveis à aceitação de blocos contendo transações inválidas no caso de um ataque de 51%. Nakamoto propõe resolver isso problema usando um sistema de “alerta” para avisar os nós leves de que um bloco contém transações inválidas. Este mecanismo foi implementado pela primeira vez por Al-Bassam, Sonnino e Buterin [8] em que uma falha sistema de prova baseado em códigos de correção de erros [9] é usado. Para permitir a criação de provas de falhas, é necessário que os dados de todos os blocos, inclusive os blocos inválidos, estejam disponíveis para a rede: este é o Problema de Disponibilidade de Dados, que é resolvido usando uma análise probabilística de dados mecanismo de amostragem. O primeiro design Optimistic Rollup foi apresentado por John Adler e Mikerah Quintyne-Collins em 2019 [10], em que os blocos são publicados em outro blockchain que define seu consenso sobre o pedido. 2.1. Optimism Base rochosa Bedrock [11] é a versão mais recente de Optimism, um Smart Contract Rollup. A versão anterior, a Optimistic Virtual Machine (OVM) exigia um compilador ad hoc para compilar o Solidity em seu próprio bytecode: em contraste, Bedrock é totalmente equivalente ao EVM em que o mecanismo de execução segue a especificação do papel amarelo Ethereum [12]. 2.1.1. Depósitos Os usuários podem depositar transações por meio de um contrato no Ethereum, o Portal Optimism, chamando a função depositTransaction. Quando uma transação é executada, um O evento TransactionDeposited é emitido, e cada nó no Rollup escuta para processar depósitos. Uma transação depositada é uma transação L2 derivada de L1. Se o chamador do função é um contrato, o endereço é transformado adicionando-lhe um valor constante: isso evita ataques em que um contrato em L1 tem o mesmo endereço que um contrato em L2, mas um código diferente. A inclusão em L2 de uma transação depositada é garantida pela especificação dentro de um sequenciamento janela. As transações depositadas são um novo tipo de transação compatível com EIP-2718 [13] com prefixo 0x7E, onde os campos codificados em rlp são: • bytes32 sourceHash: hash que identifica exclusivamente a origem da transação. • endereço de: o endereço do remetente. • endereço para: o endereço do destinatário, ou o endereço zero se a transação depositada for uma criação de contrato.• uint256 mint: o valor a ser criado em L2. • valor uint256: valor a ser enviado ao destinatário. • dados de bytes: os dados de entrada. • bytes gasLimit: o limite gas da transação. O sourceHash é calculado como o keccak256 hash do bloco L1 hash e o log L1 índice, identificando exclusivamente um evento em um bloco. Como as transações depositadas são iniciadas em L1, mas executadas em L2, o sistema precisa de um mecanismo para pagar em L1 pelo gás gasto em L2. Uma solução é enviar ETH pelo Portal, mas isso implica que cada chamador (mesmo os chamadores indiretos) deve ser marcado como pagável, e isso é não é possível para muitos projetos existentes. A alternativa é queimar o gás correspondente em L1. O gás 𝑔alocado para a transação depositada é chamado de gás garantido. O preço do gás L2 em L1 não é sincronizado automaticamente, mas é estimado usando um mecanismo semelhante ao EIP-1559 [14]. A quantidade máxima de gás garantida por bloco Ethereum é de 8 milhões, com meta de 2 milhões. A quantidade 𝑐de ETH necessária para pagar o gás em L2 é 𝑐= 𝑔𝑏L2 onde 𝑏L2 é o taxa base em L2. O contrato em L1 queima uma quantidade de gás igual a 𝑐/𝑏L2. O gás gasto para ligar depositTransaction é reembolsado em L2: se este valor for maior que o gás garantido, nenhum gás é queimado. A primeira transação de um bloco rollup é uma transação depositada com atributos L1, usada para registrar em um L2 pré-implante os atributos dos blocos Ethereum. Os atributos que a pré-implantação fornece acesso são o número do bloco, o carimbo de data / hora, a taxa base, o bloco hash e a sequência número, que é o número do bloco L2 relativo ao bloco L1 associado (também chamado de época); este número é redefinido quando uma nova época começa. 2.1.2. Sequenciamento Os nós Rollup derivam a cadeia Optimism inteiramente de Ethereum. Esta cadeia é estendida cada vez que novas transações são publicadas em L1, e seus blocos são reorganizados cada vez Ethereum blocos são reorganizados. O Rollup blockchain é dividido em épocas. Para cada 𝑛 número do bloco de Ethereum, há uma época 𝑛 correspondente. Cada época contém pelo menos um bloco, e cada bloco em uma época contém uma transação depositada com atributos L1. O primeiro bloco em uma época contém todas as transações depositadas através do Portal. Layer 2 blocos também podem continha transações sequenciadas, ou seja, transações enviadas diretamente ao sequenciador. O sequenciador aceita transações de usuários e constrói blocos. Para cada bloco, ele constrói um lote a ser publicado em Ethereum. Vários lotes podem ser publicados de forma compactada, tomando o nome do canal. Um canal pode ser dividido em vários frames, caso seja muito grande para uma única transação. Um canal é definido como a compactação com ZLIB [15] de canais codificados em rlp lotes. Os campos de um lote são o número da época, a época hash, o pai hash, o carimbo de data/hora e a lista de transações. Uma janela de sequenciação, identificada por uma época, contém um número fixo 𝑤de L1 consecutivos blocos que uma etapa de derivação toma como entrada para construir um número variável de blocos L2. Para época 𝑛, a janela de sequenciamento 𝑛 inclui os blocos [𝑛, 𝑛+𝑤). Isto implica que a ordenação O número de transações e blocos L2 dentro de uma janela de sequenciamento não é corrigido até que a janela termine. Uma transação rollup é chamada de segura se o lote que a contém foi confirmado em L1. Moldurassão lidos de blocos L1 para reconstruir lotes. A implementação atual não permite a descompressão de um canal comece até que todos os quadros correspondentes tenham sido recebidos. Inválido lotes são ignorados. As transações em bloco individuais são obtidas dos lotes, que são usado pelo mecanismo de execução para aplicar transições de estado e obter o estado Rollup. 2.1.3. Retiradas Para processar saques, é implementado um sistema de mensagens L2 para L1. Ethereum precisa saber o estado do L2 para aceitar saques, e isso é feito publicando no Oracle de saída L2 smart contract em L1 a raiz de estado de cada bloco L2. Essas raízes são otimistamente aceitos como válidos (ou finalizados) se nenhuma prova de falha for realizada durante o período de disputa. Somente endereços designados como Proponentes podem publicar raízes de saída. A validade das raízes da produção é incentivada fazendo com que os proponentes depositem uma participação que será reduzida se eles forem mostrado ter proposto uma raiz inválida. As transações são iniciadas chamando a função inicieWithdrawal em uma pré-implantação em L2 e, em seguida, finalize em L1 chamando a função finalizeWithdrawalTransaction no Portal Optimism mencionado anteriormente. A raiz de saída correspondente ao bloco L2 é obtida do L2 Output Oracle; é verificou que está finalizado, ou seja, que o período de disputa já passou; verifica-se que a Saída A Prova Raiz corresponde à Prova Oracle; verifica-se que o hash do saque está incluído nele utilizando um Comprovante de Saque; que a retirada ainda não foi finalizada; e então o a chamada para o endereço de destino é executada, com o limite de gás especificado, quantidade de Ether e dados. 2.1.4. Cannon: o sistema à prova de falhas Se um Rollup Full Node, ao executar localmente lotes e transações depositadas, descobrir que o estado Layer 2 não corresponde à raiz do estado publicada na cadeia por um proponente, ele pode ser executado uma prova de falha em L1 para provar que o resultado da transição do bloco está incorreto. Por causa do sobrecarga, processar um bloco Rollup inteiro em L1 é muito caro. A solução implementada por Bedrock é executar on-chain apenas a primeira instrução de desacordo de minigeth, compilando-o em uma arquitetura MIPS que é executada em um intérprete on-chain e publicada em L1. minigeth é uma versão simplificada do geth 1 em que o consenso, RPC e banco de dados foram removidos. Para encontrar a primeira instrução de desacordo, uma busca binária interativa é conduzida entre aquele que iniciou a prova de falhas e aquele que publicou a raiz de saída. Quando a prova começa, ambas as partes publicam a raiz do estado de memória MIPS no meio da execução de o bloqueio no contrato do Desafio: se hash corresponder, significa que ambas as partes concordam com o primeira metade da execução publicando assim a raiz da metade da segunda metade, caso contrário a metade do primeiro semestre é publicado e assim por diante. Fazer isso alcança a primeira instrução de desacordo em um número logarítmico de etapas em comparação com a execução original. Se um dos dois parar interagindo, ao final do período de disputa o outro participante ganha automaticamente. Para processar a instrução, o interpretador MIPS precisa de acesso à sua memória: já que a raiz é disponíveis, as células de memória necessárias podem ser publicadas comprovando sua inclusão. Para acessar o estado do EVM, é feito uso do Preimage Oracle: dado o hash de um bloco ele retorna 1https://geth.ethereum.org/docs
o cabeçalho do bloco, a partir do qual se pode obter o hash do bloco anterior e voltar no cadeia ou obtenha o hash do estado e dos logs dos quais é possível obter a pré-imagem. O oracle é implementado pelo minigeth e substitui o banco de dados. Consultas são feitas a outros nós para obter as pré-imagens.
Acumulaciones optimistas
- Resúmenes optimistas La idea de aceptar con optimismo la salida de bloques sin verificar su ejecución es ya presente en el documento técnico Bitcoin [7], que analiza los nodos de luz. Estos nodos sólo siguen la cadena de encabezado verificando la regla de consenso, haciéndolos vulnerables para aceptar bloques que contengan transacciones no válidas en caso de un ataque del 51%. Nakamoto propone solucionar esto problema mediante el uso de un sistema de "alerta" para advertir a los nodos ligeros que un bloque contiene transacciones no válidas. Este mecanismo fue implementado por primera vez por Al-Bassam, Sonnino y Buterin [8] en el que una falla Se utiliza un sistema de prueba basado en códigos de corrección de errores [9]. Para permitir la creación de pruebas de fallas, es necesario que los datos de todos los bloques, incluidos los bloques no válidos, estén disponibles para la red: este es el problema de disponibilidad de datos, que se resuelve utilizando un análisis de datos probabilístico mecanismo de muestreo. El primer diseño Optimistic Rollup fue presentado por John Adler y Mikerah Quintyne-Collins en 2019 [10], en el que se publican bloques en otro blockchain que define su consenso sobre el pedido. 2.1. Optimism Base de roca Bedrock [11] es la última versión de Optimism, un paquete acumulativo de contratos inteligentes. La versión anterior, La Máquina Virtual Optimista (OVM) requería un compilador ad hoc para compilar Solidity en su propio código de bytes: por el contrario, Bedrock es totalmente equivalente al EVM en que el motor de ejecución sigue la especificación de papel amarillo Ethereum [12]. 2.1.1. Depósitos Los usuarios pueden depositar transacciones a través de un contrato en Ethereum, el Portal Optimism, llamando a la función depositTransaction. Cuando se ejecuta una transacción, un Se emite el evento TransactionDeposited, que cada nodo del Rollup escucha para procesar depósitos. Una transacción depositada es una transacción L2 que se deriva de L1. Si la persona que llama del función es un contrato, la dirección se transforma añadiéndole un valor constante: esto evita Ataques en los que un contrato en L1 tiene la misma dirección que un contrato en L2 pero un código diferente. La inclusión en L2 de una transacción depositada está garantizada por la especificación dentro de una secuencia ventana. Las transacciones depositadas son un nuevo tipo de transacción compatible con EIP-2718 [13] con prefijo 0x7E, donde los campos codificados en rlp son: • bytes32 sourceHash: hash que identifica de forma única el origen de la transacción. • dirección de: la dirección del remitente. • dirección a: la dirección del destinatario, o la dirección cero si la transacción depositada es una creación de contrato.• uint256 mint: el valor que se creará en L2. • valor uint256: el valor que se enviará al destinatario. • bytes de datos: los datos de entrada. • bytes gasLimit: el límite de gas de la transacción. El sourceHash se calcula como keccak256 hash del bloque L1 hash y el registro L1 índice, que identifica de forma única un evento en un bloque. Dado que las transacciones depositadas se inician en L1 pero se ejecutan en L2, el sistema necesita un mecanismo para pagar en L1 el gas gastado en L2. Una solución es enviar ETH a través del Portal, pero esto implica que todas las personas que llaman (incluso las que llaman indirectamente) deben marcarse como pagaderas, y esto es Esto no es posible para muchos proyectos existentes. La alternativa es quemar el gas correspondiente en L1. El gas 𝑔 asignado a la transacción depositada se denomina gas garantizado. El precio del gas L2 en L1 no se sincroniza automáticamente, sino que se estima mediante un mecanismo similar al EIP-1559 [14]. La cantidad máxima de gas garantizada por bloque Ethereum es de 8 millones, con un objetivo de 2 millones. La cantidad 𝑐de ETH necesaria para pagar el gas en L2 es 𝑐= 𝑔𝑏L2 donde 𝑏L2 es el tarifa base en L2. El contrato en L1 quema una cantidad de gas igual a 𝑐/𝑏L2. El gas gastado para llamar. depositTransaction se reembolsa en L2: si esta cantidad es mayor que el gas garantizado, no se quema ningún gas. La primera transacción de un bloque rollup es una transacción depositada con atributos L1, utilizada para registrar en una L2, implemente previamente los atributos de los bloques Ethereum. Los atributos que otorga el predespliegue acceso son el número de bloque, la marca de tiempo, la tarifa base, el bloque hash y la secuencia número, que es el número de bloque de L2 en relación con el bloque L1 asociado (también llamado época); este número se restablece cuando comienza una nueva época. 2.1.2. Secuenciación Los nodos acumulativos derivan la cadena Optimism completamente de Ethereum. Esta cadena se extiende cada vez que se publican nuevas transacciones en L1, y sus bloques se reorganizan cada vez Se reorganizan Ethereum bloques. El Rollup blockchain se divide en épocas. Por cada 𝑛 número de bloque de Ethereum, hay una 𝑛época correspondiente. Cada época contiene al menos una bloque, y cada bloque en una época contiene una transacción depositada con atributos L1. el primer bloque en una época contiene todas las transacciones depositadas a través del Portal. Los bloques Layer 2 también pueden contenía transacciones secuenciadas, es decir, transacciones enviadas directamente al secuenciador. El secuenciador acepta transacciones de usuarios y construye bloques. Para cada bloque, construye un lote que se publicará el Ethereum. Se pueden publicar varios lotes de forma comprimida, tomando el nombre de canal. Un canal se puede dividir en varios fotogramas, en caso de que sea demasiado grande para una sola transacción. Un canal se define como la compresión con ZLIB [15] de archivos codificados en rlp. lotes. Los campos de un lote son el número de época, la época hash, el padre hash, el marca de tiempo y la lista de transacciones. Una ventana de secuenciación, identificada por una época, contiene un número fijo 𝑤 de L1 consecutivos bloques que un paso de derivación toma como entrada para construir un número variable de bloques L2. Para época 𝑛, la ventana de secuenciación 𝑛incluye los bloques [𝑛, 𝑛+𝑤). Esto implica que el pedido de transacciones y bloques L2 dentro de una ventana de secuenciación no se fija hasta que finaliza la ventana. Una transacción rollup se considera segura si el lote que la contiene ha sido confirmado en L1. Marcosse leen de los bloques L1 para reconstruir lotes. La implementación actual no permite La descompresión de un canal comienza hasta que se hayan recibido todas las tramas correspondientes. Inválido los lotes se ignoran. Las transacciones en bloque individuales se obtienen de los lotes, que se utilizado por el motor de ejecución para aplicar transiciones de estado y obtener el estado del Rollup. 2.1.3. Retiros Para procesar retiros, se implementa un sistema de mensajería L2 a L1. Ethereum necesita conocer el estado de L2 para poder aceptar retiros, y esto se hace publicando en el Oracle de salida L2 smart contract en L1, la raíz del estado de cada bloque L2. Estas raíces se aceptan con optimismo como válidos (o finalizados) si no se realiza ninguna prueba de fallo durante el período de disputa. Sólo las direcciones designadas como Proponentes pueden publicar raíces de salida. la validez de raíces productivas se incentiva haciendo que los Proponentes depositen una participación que se reduce drásticamente si son Se muestra que propuso una raíz no válida. Las transacciones se inician llamando a la función. iniciar el retiro en una implementación previa en L2 y luego finalizar en L1 llamando a la función finalizeWithdrawalTransaction en el Portal Optimism mencionado anteriormente. La raíz de salida correspondiente al bloque L2 se obtiene del Oráculo de salida L2; es verificado que está finalizado, es decir, que ha pasado el período de disputa; se verifica que la Salida La prueba raíz coincide con la prueba de Oracle; se verifica que el hash del retiro está incluido en él utilizando una Prueba de Retiro; que el retiro aún no se ha concretado; y luego el Se ejecuta la llamada a la dirección de destino, con el límite de gas, la cantidad de Ether y los datos especificados. 2.1.4. Cannon: el sistema a prueba de fallos Si un Rollup Full Node, al ejecutar localmente lotes y transacciones depositadas, descubre que el estado Layer 2 no coincide con la raíz del estado publicada en la cadena por un Proponente, puede ejecutarse una prueba de falla en L1 para demostrar que el resultado de la transición del bloque es incorrecto. debido a la gastos generales, procesar un bloque Rollup completo en L1 es demasiado costoso. La solución implementada por Bedrock es ejecutar en cadena solo la primera instrucción de desacuerdo de minigeth, compilándolo en una arquitectura MIPS que se ejecuta en un intérprete en cadena y se publica en L1. minigeth es una versión simplificada de geth 1 en la que el consenso, RPC y la base de datos han sido eliminados. Para encontrar la primera instrucción en desacuerdo, se realiza una búsqueda binaria interactiva entre el que inició la prueba de fallas y el que publicó la raíz de salida. cuando la prueba comienza, ambas partes publican la raíz del estado de memoria MIPS a mitad de la ejecución de el bloque en el contrato Challenge: si el hash coincide significa que ambas partes están de acuerdo en el primera mitad de la ejecución publicando así la raíz de la mitad de la segunda mitad, en caso contrario la mitad del primer semestre se publica y así sucesivamente. Al hacerlo se logra la primera instrucción de desacuerdo. en un número logarítmico de pasos en comparación con la ejecución original. Si uno de los dos se detiene interactuando, al final del período de disputa el otro participante gana automáticamente. Para procesar la instrucción, el intérprete MIPS necesita acceso a su memoria: dado que la raíz es disponibles, se pueden publicar las celdas de memoria necesarias demostrando su inclusión. Para acceder el estado del EVM, se hace uso del Oráculo Preimagen: dado el hash de un bloque devuelve 1https://geth.ethereum.org/docs
el encabezado del bloque, desde el cual se puede obtener el hash del bloque anterior y regresar al cadena, u obtenga el hash del estado y los registros de los cuales se puede obtener la imagen previa. El oracle Es implementado por minigeth y reemplaza la base de datos. Se realizan consultas a otros nodos para obtener las preimágenes.
Rollups de validade
- Rollups de validade O objetivo de um Validity Rollup é provar criptograficamente a validade da transição de estado dada a sequência de transações com uma prova curta que pode ser verificada sub-linearmente comparada ao tempo dos cálculos originais. Esses tipos de certificados são chamados de provas de integridade computacional e são praticamente implementados com SNARKs (Succint Non-interactive ARgument of Knowledge), que utilizam aritmética circuitos como seu modelo computacional. Diferentes implementações do SNARK diferem no tempo de prova, tempo de verificação, a necessidade de uma configuração confiável e resistência quântica [16, 17]. STARKs (escalável ARgumento Transparente de Conhecimento) [18] são um tipo de SNARKs que não requer um confiável configurados e são resistentes a quantum, ao mesmo tempo que abrem mão de alguma eficiência na prova e verificação em comparação com outras soluções. 3.1. StarkNet StarkNet é um Smart Contract Validity Rollup desenvolvido pela StarkWare que usa o STARK sistema de prova para validar seu estado para Ethereum. Para facilitar a construção de provas de validade, um É utilizada uma máquina virtual diferente da EVM, cuja linguagem de alto nível é Cairo. 3.1.1. Depósitos Os usuários podem depositar transações por meio de um contrato em Ethereum chamando sendMessageToL2 função. A mensagem é registrada calculando seu hash e aumentando um contador. Sequenciadores ouça o evento LogMessageToL2 e codifique as informações em uma transação StarkNet que chama uma função de um contrato que possui o decorador l1_handler. No final da execução, quando a prova de transição de estado é produzida, o consumo da mensagem é anexado a ela e é excluído diminuindo seu contador. A inclusão de transações depositadas não é exigida pela especificação StarkNet, portanto, um gás mercado é necessário para incentivar os sequenciadores a publicá-los em L2. Na versão atual, porque o Sequenciador é centralizado e gerenciado pela StarkWare, o custo das transações depositadas é determinado apenas pelo custo de execução do depósito. Este custo é pago enviando ETH para enviarMessageToL2. Esses Éteres permanecem bloqueados em L1 e são transferidos para o Sequenciador em L1, quando a transação depositada está incluída em uma transição de estado. A quantidade de ETH enviada, se a transação depositada está incluída, é totalmente gasta, independentemente da quantidade de gás consumida em L2. StarkNet não possui um sistema que disponibilize atributos do bloco L1 automaticamente. Alternativamente, Fossil é um protocolo desenvolvido pela Oiler Network 2 que permite, dado um hash de um bloco, qualquer informação a ser obtida de Ethereum através da publicação de pré-imagens. 2https://www.oiler.network/3.1.2. Sequenciamento O estado atual de StarkNet pode ser derivado inteiramente de Ethereum. Qualquer diferença de estado entre transições é publicado em L1 como calldata. As diferenças são publicadas para cada contrato e são salvos como uint256[] com a seguinte codificação: • Número de campos relativos a implantações contratuais. • Para cada contrato publicado: – O endereço do contrato publicado. – O hash do contrato publicado. – O número de argumentos do construtor do contrato. – A lista de argumentos do construtor • Número de contrato cuja armazenagem foi modificada. • Para cada contrato que foi modificado: – O endereço do contrato modificado. – O número de atualizações de armazenamento. – Os pares de valores-chave dos endereços de armazenamento com os novos valores. As diferenças de estado são publicadas em ordem, portanto é suficiente lê-las sequencialmente para reconstruir o estado. 3.1.3. Retiradas Para enviar uma mensagem de L2 para L1, é usado o syscall send_message_to_L1. A mensagem é publicado em L1 aumentando seu contador hash junto com a prova e finalizado chamando o função consomeMessageFromL2 no StarkGate smart contract em L1, que diminui o contador. Qualquer pessoa pode finalizar qualquer saque. 3.1.4. Provas de validade A Máquina Virtual Cairo [19] foi projetada para facilitar a construção de provas STARK. A linguagem Cairo permite que o cálculo seja descrito com uma programação de alto nível linguagem, e não diretamente como um circuito. Isso é conseguido por um sistema de equações polinomiais 3 representando um único cálculo: o ciclo FDE de uma arquitetura von Neumann. O número de restrições é, portanto, fixo e independente do tipo de computação, permitindo apenas um Programa verificador para cada programa cujo cálculo precisa ser provado. StarkNet agrega múltiplas transações em uma única prova STARK usando um provador compartilhado chamado SHARP. As provas são enviadas para smart contract em Ethereum, que verifica sua validade e atualiza a raiz Merkle correspondente ao novo estado. O custo sublinear de verificar um a prova de validade permite que seu custo seja amortizado em múltiplas transações. 3chamada Representação Algébrica Intermediária (AIR)
Resúmenes de validez
- Resúmenes de validez El objetivo de un Validity Rollup es demostrar criptográficamente la validez de la transición de estado. dada la secuencia de transacciones con una prueba breve que se puede verificar en comparación sublineal al momento de los cálculos originales. Este tipo de certificados se denominan pruebas de integridad computacional y se implementan prácticamente con SNARK (Succint Non-interactive ARgument of Knowledge), que utilizan aritmética. circuitos como su modelo computacional. Las diferentes implementaciones de SNARK difieren en el tiempo de prueba, tiempo de verificación, la necesidad de una configuración confiable y resistencia cuántica [16, 17]. STARK (Escalable Argumento transparente de conocimiento) [18] son un tipo de SNARK que no requiere una persona confiable configuración y son resistentes a los cuánticos, al tiempo que renuncian a cierta eficiencia en la prueba y verificación en comparación con otras soluciones. 3.1. StarkNet StarkNet es un paquete acumulativo de validez de contrato inteligente desarrollado por StarkWare que utiliza STARK sistema de prueba para validar su estado a Ethereum. Para facilitar la construcción de pruebas de validez, se Se utiliza una máquina virtual diferente a la EVM, cuyo lenguaje de alto nivel es Cairo. 3.1.1. Depósitos Los usuarios pueden depositar transacciones a través de un contrato en Ethereum llamando a sendMessageToL2 función. El mensaje se registra calculando su hash y aumentando un contador. Secuenciadores escuche el evento LogMessageToL2 y codifique la información en una transacción StarkNet que llama a una función de un contrato que tiene el decorador l1_handler. Al final de la ejecución, cuando se produce la prueba de transición de estado, se le adjunta el consumo del mensaje y se elimina disminuyendo su contador. La especificación StarkNet no requiere la inclusión de transacciones depositadas, por lo que un gas Se necesita mercado para incentivar a los secuenciadores a publicarlos en L2. En la versión actual, porque el secuenciador está centralizado y administrado por StarkWare, el costo de las transacciones depositadas sólo está determinado por el coste de ejecución del depósito. Este costo se paga enviando ETH a enviar mensaje a L2. Estos Éteres permanecen bloqueados en L1 y se transfieren al Secuenciador en L1, cuando la transacción depositada se incluye en una transición de estado. La cantidad de ETH enviada, si la transacción depositada está incluida, se gasta en su totalidad, independientemente de la cantidad de gas consumido en L2. StarkNet no tiene un sistema que haga que los atributos del bloque L1 estén disponibles automáticamente. Alternativamente, Fossil es un protocolo desarrollado por Oiler Network 2 que permite, dado un hash de un bloque, cualquier información se obtendrá de Ethereum mediante la publicación de preimágenes. 2https://www.oiler.network/3.1.2. Secuenciación El estado actual de StarkNet se puede derivar completamente de Ethereum. Cualquier diferencia de estado entre transiciones se publica en L1 como datos de llamada. Se publican las diferencias para cada contrato. y se guardan como uint256[] con la siguiente codificación: • Número de campos relativos a implementaciones de contratos. • Para cada contrato publicado: – La dirección del contrato publicado. – El hash del contrato publicado. – El número de argumentos del constructor del contrato. – La lista de argumentos del constructor. • Número de contrato cuyo almacenamiento ha sido modificado. • Por cada contrato que haya sido modificado: – La dirección del contrato modificado. – El número de actualizaciones de almacenamiento. – Los pares clave-valor de las direcciones de almacenamiento con los nuevos valores. Las diferencias de estado se publican en orden, por lo que basta con leerlas secuencialmente para reconstruir el estado. 3.1.3. Retiros Para enviar un mensaje de L2 a L1, se utiliza la llamada al sistema send_message_to_L1. El mensaje es publicado en L1 aumentando su contador hash junto con la prueba y finalizado llamando al función consumeMessageFromL2 en StarkGate smart contract en L1, que disminuye el mostrador. Cualquiera puede finalizar cualquier retiro. 3.1.4. Pruebas de validez La Máquina Virtual Cairo [19] está diseñada para facilitar la construcción de pruebas STARK. El lenguaje Cairo permite describir el cómputo con una programación de alto nivel. lenguaje, y no directamente como un circuito. Esto se logra mediante un sistema de ecuaciones polinómicas. 3 que representa un cálculo único: el ciclo FDE de una arquitectura von Neumann. el numero de restricciones es, por tanto, fija e independiente del tipo de cálculo, permitiendo sólo una Programa verificador para cada programa cuyo cálculo deba ser probado. StarkNet agrega múltiples transacciones en una única prueba STARK utilizando un probador compartido llamado AGUDO. Las pruebas se envían a un smart contract el Ethereum, que verifica su validez. y actualiza la raíz de Merkle correspondiente al nuevo estado. El coste sublineal de verificar una La prueba de validez permite que su costo se amortice en múltiples transacciones. 3llamada Representación Algebraica Intermedia (AIR)
Comparação
- Comparação 4.1. Tempo de retirada O aspecto mais importante que distingue os Rollups Otimistas dos Rollups de Validade é o tempo que decorre entre a inicialização de um levantamento e a sua finalização. Em ambos os casos, as retiradas são inicializadas em L2 e finalizadas em L1. Em StarkNet, a finalização é possível como assim que a prova de validade da nova raiz de estado for aceita em Ethereum: teoricamente, é possível retirar fundos no primeiro bloco de L1 após a inicialização. Na prática, o frequência de envio de provas de validade em Ethereum é uma compensação entre a velocidade do bloco finalização e agregação de provas. Atualmente StarkNet fornece provas de validade para verificação a cada 10 horas 4, mas pretende-se que diminua à medida que a atividade de transação aumenta. Em Optimism Bedrock é possível finalizar um saque somente no final da disputa período (atualmente 7 dias), após o qual uma raiz é automaticamente considerada válida. O comprimento de este período é determinado principalmente pelo fato de que as provas de falha podem ser censuradas em Ethereum até seu fim. A probabilidade de sucesso deste tipo de ataque diminui exponencialmente à medida que o tempo aumenta: E[valor subtraído] = 𝑉𝑝𝑛 onde 𝑛 é o número de blocos em um intervalo, 𝑉 é a quantidade de fundos que pode ser subtraída publicando uma raiz inválida, e 𝑝é a probabilidade de realizar uma censura com sucesso ataque em um único bloco. Suponha que esta probabilidade seja de 99%, que o valor bloqueado no Rollup é um milhão de Ether, e que os blocos em um intervalo são 1800 (6 horas de blocos com 12 intervalo de segundos): o valor esperado é cerca de 0,01391 Ether. O sistema é tornado seguro por pedindo aos proponentes que apostem uma quantidade muito maior de Ether do que o valor esperado. Winzer et al. mostrou como realizar um ataque de censura usando um simples smart contract isso garante que certas áreas da memória no estado não mudem [20]. Modelando o ataque como um jogo de Markov, o artigo mostra que a censura é a estratégia dominante para uma bloquear o produtor se receberem mais compensação do que incluindo a transação que muda a memória. O valor de 𝑝 discutido acima pode ser visto como a percentagem do bloco racional produtores da rede, onde “racional” não leva em conta possivelmente penalizar externalidades, como menos confiança no blockchain que diminui seu valor de criptomoeda. O código a seguir apresenta um smart contract que pode ser usado para realizar um ataque de censura em Bedrock. O ataque explora os incentivos dos produtores de blocos, oferecendo-lhes suborno censurar as transações que modificariam partes específicas do estado. O principal do contrato função, ClaimBribe, permite que os produtores de blocos reivindiquem o suborno se conseguirem censurar a transação alvo, verificando se a raiz de saída inválida não foi tocada. função reivindicaçãoSuborno(bytes memória storageProof) externo { require(!claimed[block.number], "suborno já reivindicado"); Memória OutputProposal atual = storageOracle.getStorage(L2_ORACLE, block.number, SLOT, prova de armazenamento); require(invalidOutputRoot == current.outputRoot, "ataque falhou"); reivindicado[bloco.número] = verdadeiro; (bool enviado,) = block.coinbase.call{valor: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(enviado, "falha ao enviar ether"); } Listagem 1: Exemplo de contrato que incentiva um ataque de censura a Bedrock. A duração do período de litígio também deve ter em conta o facto de a prova da culpa ser uma prova interativa e, portanto, deve ser fornecido tempo suficiente para os participantes interagirem e que qualquer interação poderia ser censurada. Se o último movimento ocorrer num momento muito próximo do final do período de disputa, o custo da censura é significativamente menor. Embora a censura seja o estratégia dominante, a probabilidade de sucesso é menor porque os nós de censura são vulneráveis a Ataques de negação de serviço: um invasor pode gerar transações muito complexas que terminam com o publicação de uma prova de culpa sem nenhum custo, uma vez que nenhuma taxa seria paga. Em casos extremos, um longo período de litígio permite a coordenação no caso de uma decisão bem-sucedida. ataque de censura para organizar um fork e excluir os produtores de blocos atacantes. Outro possível ataque consiste em publicar mais propostas de raiz estatal do que os disputantes podem verificar, que pode ser evitado usando um limite de frequência. 4.1.1. Retiradas rápidas e otimistas Como a validade de um Optimistic Rollup pode ser verificada a qualquer momento por qualquer Full Node, um confiável oracle pode ser usado para saber em L1 se a retirada pode ser finalizada com segurança. Isto mecanismo foi proposto pela primeira vez pelo Maker [21]: um oracle verifica a retirada, publica o resultado em L1 em que um empréstimo remunerado é atribuído ao usuário, que é automaticamente fechado ao final de 7 dias, ou seja, quando o saque pode realmente ser finalizado. Esta solução introduz uma suposição de confiança, mas no caso do Maker ela é minimizada, pois o operador oracle é gerido pela mesma organização que assume o risco ao conceder o empréstimo. 4.2. Custos de transação O custo das transações L2 é determinado principalmente pela interação com a L1. Em ambas as soluções o custo computacional das transações é muito barato, pois é executado inteiramente fora da cadeia. Optimism publica calldata de transações L2 como calldata e raramente (ou nunca) executa falha provas, portanto calldata é o recurso mais caro. Em 12 de janeiro de 2022, uma rede Bedrock foi lançado na testnet Goerli de Ethereum. Uma taxa de compressão de gás pode ser calculada rastreando a quantidade de gás usada em Bedrock em um determinado período e comparando-a com o quantidade de gás gasta em L1 para os blocos correspondentes. Usando este método, uma compressão de gás taxa de ∼20: 1 é encontrada, mas este número pode diferir com a atividade real na rede principal. StarkNet publica em Ethereum todas as alterações no estado L2 como dados de chamada, portanto, o armazenamento é o recurso mais caro. Como a rede não utiliza EVM, o custo da transação a compressão não pode ser estimada trivialmente. Ao assumir o custo de execução e calldata para ser insignificante, é possível calcular a taxa de compactação de gravações de armazenamento em comparação com L1. Supondo que nenhum contrato seja implantado e 10 células não acessadas anteriormente em StarkNet sejam modificado, uma taxa de compactação de custo de gravação de armazenamento de ∼24: 1 é encontrada. Se uma célula for sobrescrita 𝑛vezes entre publicações de dados, o custo de cada gravação será 1/𝑛comparado ao custo de uma única escrita, já que apenas a última é publicada. O custo pode ser ainda mais minimizado porcompactando valores usados com frequência. O custo da verificação da prova de validade é dividido entre as transações às quais se refere: por exemplo, o bloco StarkNet 4779 contém 200 transações e seu o comprovante de validade consome 267.830 unidades de gás, ou 1.339,15 gás para cada transação. 4.2.1. Otimizando calldata: contrato de cache Apresentado abaixo está um smart contract que implementa um cache de endereço para uso frequente endereços aproveitando o fato de que o armazenamento e a execução são muito mais baratos recursos, juntamente com um contrato de Amigos que demonstra seu uso. Este último acompanha o “amigos” de um endereço que pode ser registrado chamando a função addFriend. Se um endereço já foi usado pelo menos uma vez, ele pode ser adicionado chamando addFriendWithCache função: os índices de cache são inteiros de 4 bytes enquanto os endereços são representados por 20 bytes, portanto, há uma economia de 5:1 no argumento da função. A mesma lógica pode ser usada para outros dados tipos como inteiros ou, mais geralmente, bytes. contrato AddressCache { mapeamento (endereço => uint32) public address2key; endereço[] endereço-chave2 público; função cacheWrite(address _address) retornos internos (uint32) { require(key2address.length <type(uint32).max, "AddressCache: cache está cheio"); require(address2key[_address] == 0, "AddressCache: endereço já armazenado em cache"); // as chaves devem começar em 1 porque 0 significa "não encontrado" chave uint32 = uint32(key2address.length + 1); endereço2key[_endereço] = chave; key2address.push(_address); chave de retorno; } função cacheRead (uint32 _key) visualização pública retorna (endereço) { require(_key <= key2address.length && _key > 0, "AddressCache: chave não encontrada"); retornar key2address[_key - 1]; } } Listagem 2: Contrato de cache de endereço. contrato Amigos é AddressCache { mapeamento(endereço => endereço[]) amigos públicos; function addAmigo(endereço_amigo) public { amigos[msg.remetente].push(_amigo); cacheWrite(_amigo); } função addFriendWithCache(uint32 _friendKey) public { amigos[msg.sender].push(cacheRead(_friendKey)); } função getFriends() visualização pública retorna (endereço[] memória) { retornar amigos[msg.sender];} } Listagem 3: Exemplo de contrato que herda o cache de endereços. O contrato suporta em cache cerca de 4 bilhões (232) endereços, e adicionar um byte dá cerca de 1 trilhão (240). 4.2.2. Otimizando o armazenamento: filtros Bloom Em StarkNet existem diversas técnicas para minimizar o uso de armazenamento. Se não for necessário garantir a disponibilidade dos dados originais, então é suficiente salvar on-chain seu hash: este é o mecanismo usado para salvar dados para um ERC-721 (NFT) [22], ou seja, um link IPFS que resolve o hash dos dados, se disponíveis. Para dados armazenados diversas vezes, é possível usar uma pesquisa tabela semelhante ao sistema de cache introduzido para Optimism, exigindo que todos os valores sejam salvos em pelo menos uma vez. Para algumas aplicações, salvar todos os valores pode ser evitado usando um filtro Bloom [23, 24, 25], ou seja, uma estrutura de dados probabilística que permite saber com certeza se um elemento não pertence a um conjunto, mas admite uma probabilidade pequena, mas não desprezível, de falso positivos. Um filtro Bloom é inicializado como uma matriz de 𝑚bits em zero. Para adicionar um elemento, 𝑘hash funções com uma distribuição aleatória uniforme são usados, cada um mapeando para um bit da matriz que está definida para 1. Para verificar se um elemento pertence ao conjunto, executamos as funções 𝑘hash e verificamos que os 𝑘bits estão definidos como 1. Num filtro de Bloom simples, não há como distinguir se um elemento realmente pertence ao conjunto ou é um falso positivo, uma probabilidade que aumenta à medida que o número de entradas aumenta. Depois de inserir 𝑛elementos: P[falso positivo] = (︃ 1 - [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 assumindo a independência da probabilidade de cada conjunto de bits. Se 𝑛elementos (de tamanho arbitrário!) são espera-se que seja incluído e a probabilidade de um falso positivo tolerado é 𝑝, o tamanho da matriz pode ser calculado como: 𝑚= −𝑛ln 𝑝 (Em 2)2 Embora o número ideal de funções hash seja: 𝑘= 𝑚 𝑛ln 2 Se assumirmos a inserção de 1.000 elementos com tolerância de 1%, o tamanho do array será de 9.585 bits com 𝑘= 6, enquanto para uma tolerância de 0,1% torna-se 14377 bits com 𝑘= 9. Se um milhão de elementos espera-se que sejam inseridos, o tamanho da matriz torna-se cerca de 1170 kB para 1% e 1775 kB para 0,1%, com os mesmos valores de 𝑘, pois depende apenas de 𝑝[26]. Num jogo em que os jogadores não devem ser atribuídos a um adversário que já tenham desafiado, em vez de salvar no armazenamento para cada jogador a lista de oponentes anteriores, pode-se usar um Bloom filtro. O risco de não desafiar alguns jogadores é muitas vezes aceitável, e o filtro pode ser reiniciado periodicamente.4.3. Ethereum compatibilidade A principal vantagem de ser compatível com EVM e Ethereum é o reaproveitamento de todos os disponíveis ferramentas. Ethereum smart contracts podem ser publicados em Optimism sem qualquer modificação nem novas auditorias. As carteiras permanecem compatíveis, ferramentas de desenvolvimento e análise estática, análise geral ferramentas, ferramentas de indexação e oracles. Ethereum e Solidity têm uma longa história de estudos bem estudados vulnerabilidades, como ataques de reentrada, overflows e underflows, empréstimos instantâneos e oracle manipulações. Por causa disso, Optimism foi capaz de capturar uma grande quantidade de valor em um curto espaço de tempo tempo. Optar por adotar uma máquina virtual diferente implica reconstruir todo um ecossistema, com a vantagem de uma maior liberdade de implementação. StarkNet implementa conta nativamente abstração, que é um mecanismo pelo qual cada conta é um smart contract que pode implementar lógica arbitrária, desde que esteja em conformidade com uma interface (daí o termo abstração): isso permite o uso de diferentes esquemas de assinatura digital, a capacidade de alterar a chave privada usando o mesmo endereço ou use um multisig. A comunidade Ethereum propôs a introdução deste mecanismo com EIP-2938 em 2020, mas a proposta permaneceu obsoleta por mais de um ano como outras atualizações receberam mais prioridade [27]. Outro benefício importante obtido com a compatibilidade é a reutilização de clientes existentes: Optimism usa uma versão de geth para seu próprio nó com apenas 800 linhas de diferença, que foi desenvolvido, testado e mantido desde 2014. Ter um cliente robusto é crucial, pois define o que é aceito como válido ou não na rede. Um bug na implementação da prova de falhas sistema pode fazer com que uma prova incorreta seja aceita como correta ou uma prova correta para uma prova inválida. bloco seja aceito como incorreto, comprometendo o sistema. A probabilidade deste tipo de o ataque pode ser limitado com uma diversidade maior de clientes: Optimism pode reutilizar além de obter o outros clientes Ethereum já mantidos, e o desenvolvimento de outro cliente baseado em Erigon está já em andamento. Em 2016 um problema no gerenciamento de memória do geth foi explorado por um ataque DoS e a primeira linha de defesa foi recomendar o uso de Paridade, o segundo mais cliente usado na época 5. StarkNet enfrenta o mesmo problema com provas de validade, mas os clientes tem que ser escrito do zero e o sistema de provas é muito mais complexo e, conseqüentemente, também é muito mais complexo garantir a correção.
Comparación
- Comparación 4.1. tiempo de retiro El aspecto más importante que distingue los rollups optimistas de los rollups de validez es la tiempo que transcurre entre la inicialización de un retiro y su finalización. En ambos casos, los retiros se inicializan en L2 y finalizan en L1. El StarkNet, la finalización es posible como tan pronto como se acepte la prueba de validez de la nueva raíz estatal el Ethereum: en teoría, es Es posible retirar fondos en el primer bloque de L1 después de la inicialización. En la práctica, el La frecuencia de envío de pruebas de validez el Ethereum es una compensación entre la velocidad del bloque. finalización y agregación de pruebas. Actualmente StarkNet proporciona pruebas de validez para su verificación. cada 10 horas 4, pero se pretende disminuir a medida que aumenta la actividad de transacciones. En Optimism Bedrock es posible finalizar un retiro solo al final de la disputa. período (actualmente 7 días), después del cual una raíz se considera automáticamente válida. la longitud de este período está determinado principalmente por el hecho de que las pruebas de fallas pueden ser censuradas el Ethereum hasta su fin. La probabilidad de éxito de este tipo de ataque disminuye exponencialmente a medida que aumenta el tiempo: E[valor restado] = 𝑉𝑝𝑛 donde 𝑛 es el número de bloques en un intervalo, 𝑉 es la cantidad de fondos que se pueden restar publicando una raíz no válida, y 𝑝 es la probabilidad de realizar con éxito una censura ataque en un solo bloque. Supongamos que esta probabilidad es del 99%, que el valor bloqueado en el Rollup es un millón de Ether, y que los bloques en un intervalo son 1800 (6 horas de bloques con un 12 Intervalo de segundos): el valor esperado es aproximadamente 0,01391 éter. El sistema se hace seguro mediante pedir a los proponentes que apuesten una cantidad de Ether mucho mayor que el valor esperado. Winzer et al. mostró cómo llevar a cabo un ataque de censura usando un simple smart contract eso asegura que ciertas áreas de memoria en el estado no cambien [20]. Modelando el ataque Como juego de Markov, el artículo muestra que la censura es la estrategia dominante para un sistema racional. productor del bloque si recibe una compensación mayor que la que incluye la transacción que cambia la memoria. El valor de 𝑝 discutido anteriormente se puede ver como el porcentaje del bloque racional productores de la red, donde “racional” no tiene en cuenta la posible penalización externalidades, como una menor confianza en el blockchain que disminuye su valor de criptomoneda. El siguiente código presenta un smart contract que puede usarse para realizar un ataque de censura. en Bedrock. El ataque explota los incentivos de los productores de bloques ofreciéndoles un soborno. censurar las transacciones que modificarían partes específicas del estado. El principal del contrato La función ClaimBribe permite a los productores de bloques reclamar el soborno si censuran con éxito. la transacción objetivo comprobando que la raíz de salida no válida no se haya tocado. función reclamoSoborno(bytes memoria almacenamientoPrueba) externo { require(!claimed[block.number], "soborno ya reclamado"); Memoria OutputProposal actual = StorageOracle.getStorage(L2_ORACLE, block.number, SLOT, prueba de almacenamiento); require(invalidOutputRoot == current.outputRoot, "ataque fallido"); reclamado[bloque.número] = verdadero; (bool enviado,) = block.coinbase.call{valor: sobornoAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(enviado, "no se pudo enviar ether"); } Listado 1: Ejemplo de un contrato que incentiva un ataque de censura a Bedrock. La duración del período de disputa también debe tener en cuenta el hecho de que la prueba de la culpa es una prueba interactiva y por lo tanto se debe proporcionar tiempo suficiente para que los participantes interactúen y que cualquier interacción podría ser censurada. Si el último movimiento ocurre en un momento muy cercano al Al final del período de disputa, el costo de la censura es significativamente menor. Aunque la censura es la estrategia dominante, la probabilidad de éxito es menor porque los nodos de censura son vulnerables a Ataques de denegación de servicio: un atacante puede generar transacciones muy complejas que terminan con el publicación de una prueba de culpa sin coste alguno, ya que no se pagarían tasas. En casos extremos, un largo período de disputa permite la coordinación en caso de una solución exitosa. Ataque de censura para organizar una bifurcación y excluir a los productores de bloques atacantes. otro posible ataque consiste en publicar más propuestas de raíz estatal de las que los litigantes pueden verificar, lo cual se puede evitar utilizando un límite de frecuencia. 4.1.1. Retiros rápidos y optimistas Dado que la validez de un Optimistic Rollup puede ser verificada en cualquier momento por cualquier Nodo Completo, un El oracle de confianza se puede utilizar para saber en L1 si el retiro se puede finalizar de forma segura. esto El mecanismo fue propuesto por primera vez por Maker [21]: un oracle verifica el retiro, publica el resultado en L1 sobre el cual se asigna al usuario un préstamo que devenga intereses, que se cerrado al final de 7 días, es decir, cuando realmente se puede finalizar el retiro. esta solución introduce una suposición de confianza, pero en el caso de Maker se minimiza ya que el operador oracle es gestionado por la misma organización que asume el riesgo al conceder el préstamo. 4.2. Costos de transacción El costo de las transacciones L2 está determinado principalmente por la interacción con la L1. En ambas soluciones El costo computacional de las transacciones es muy económico ya que se ejecuta completamente fuera de la cadena. Optimism publica datos de llamada de transacciones L2 como datos de llamada y rara vez (o nunca) ejecuta la falla pruebas, por lo tanto calldata es el recurso más caro. El 12 de enero de 2022 una red Bedrock se lanzó en la red de prueba Goerli de Ethereum. Se puede calcular la tasa de compresión del gas. rastreando la cantidad de gas utilizada en Bedrock en un período determinado y comparándola con la cantidad de gas gastado en L1 para los bloques correspondientes. Usando este método una compresión de gas Se encuentra una tasa de ∼20: 1, pero esta cifra puede diferir con la actividad real en la red principal. StarkNet publica el Ethereum cada cambio en el estado L2 como datos de llamada, por lo tanto, el almacenamiento es el recurso más caro. Dado que la red no utiliza el EVM, el costo de transacción la compresión no se puede estimar trivialmente. Asumiendo el costo de ejecución y calldata para ser insignificante, es posible calcular la relación de compresión de las escrituras de almacenamiento en comparación con L1. Suponiendo que no se implemente ningún contrato y que 10 celdas a las que no se accedió anteriormente en StarkNet están modificado, se encuentra una tasa de compresión del costo de escritura de almacenamiento de ~24:1. Si se sobrescribe una celda 𝑛veces entre publicaciones de datos, el costo de cada escritura será 1/𝑛en comparación con el costo de un solo escrito, ya que sólo se publica el último. El costo se puede minimizar aún más mediantecomprimir valores de uso frecuente. El costo de la verificación de la prueba de validez se divide entre las transacciones a las que se refiere: por ejemplo, StarkNet el bloque 4779 contiene 200 transacciones y su La prueba de validez consume 267830 unidades de gas, o 1339,15 gas por cada transacción. 4.2.1. Optimización de datos de llamada: contrato de caché A continuación se presenta un smart contract que implementa un caché de direcciones para uso frecuente direcciones aprovechando el hecho de que el almacenamiento y la ejecución son mucho menos costosos recursos, junto con un contrato de Friends que demuestra su uso. Este último realiza un seguimiento de la "amigos" de una dirección que se puede registrar llamando a la función addFriend. si una dirección ya se ha utilizado al menos una vez, se puede agregar llamando a addFriendWithCache función: los índices de caché son números enteros de 4 bytes mientras que las direcciones están representadas por 20 bytes, por lo que hay un ahorro de 5:1 en el argumento de la función. La misma lógica se puede utilizar para otros datos. tipos como números enteros o, más generalmente, bytes. contrato AddressCache { mapeo (dirección => uint32) dirección pública2clave; dirección[] clave pública2dirección; función cacheWrite(dirección _dirección) retornos internos (uint32) { require(key2address.length < type(uint32).max, "AddressCache: el caché está lleno"); require(address2key[_address] == 0, "AddressCache: dirección ya almacenada en caché"); // las claves deben comenzar desde 1 porque 0 significa "no encontrado" clave uint32 = uint32(clave2dirección.longitud + 1); dirección2clave[_dirección] = clave; key2address.push(_address); tecla de retorno; } función cacheRead(uint32 _key) vista pública devuelve (dirección) { require(_key <= key2address.length && _key > 0, "AddressCache: clave no encontrada"); devolver clave2dirección[_clave - 1]; } } Listado 2: Contrato de caché de direcciones. contrato Amigos es AddressCache { mapeo (dirección => dirección []) amigos públicos; función agregarAmigo(dirección _amigo) pública { amigos[msg.sender].push(_friend); cacheWrite(_amigo); } función addFriendWithCache (uint32 _friendKey) público { amigos[msg.sender].push(cacheRead(_friendKey)); } función getFriends() devuelve la vista pública (dirección[] memoria) { devolver amigos[msg.sender];} } Listado 3: Ejemplo de un contrato que hereda la caché de direcciones. El contrato admite en caché alrededor de 4 mil millones (232) direcciones y agregar un byte da alrededor de 1 billón (240). 4.2.2. Optimización del almacenamiento: los filtros de Bloom En StarkNet existen varias técnicas para minimizar el uso de almacenamiento. Si no es necesario garantizar la disponibilidad de los datos originales, entonces es suficiente guardar en cadena su hash: esto es el mecanismo utilizado para guardar datos para un ERC-721 (NFT) [22], es decir, un enlace IPFS que resuelve el hash de los datos si están disponibles. Para datos que se almacenan varias veces, es posible utilizar una búsqueda tabla similar al sistema de almacenamiento en caché introducido para Optimism, que requiere que todos los valores se guarden en menos una vez. Para algunas aplicaciones, se puede evitar guardar todos los valores utilizando un filtro Bloom. [23, 24, 25], es decir, una estructura de datos probabilística que permite saber con certeza si un elemento no pertenece a un conjunto pero admite una probabilidad pequeña pero no despreciable de ser falso positivos. Un filtro Bloom se inicializa como una matriz de 𝑚bits en cero. Para agregar un elemento, funciones 𝑘hash con una distribución aleatoria uniforme, cada uno de los cuales se asigna a un bit de la matriz que se establece a 1. Para comprobar si un elemento pertenece al conjunto ejecutamos las funciones 𝑘hash y verificamos que los 𝑘bits están establecidos en 1. En un filtro de Bloom simple no hay forma de distinguir si un elemento realmente pertenece al conjunto o es un falso positivo, una probabilidad que crece a medida que el número de entradas aumenta. Después de insertar 𝑛elementos: P[falso positivo] = (︃ 1- [︂ 1-1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 suponiendo independencia de la probabilidad de cada conjunto de bits. Si 𝑛elementos (¡de tamaño arbitrario!) son se espera que se incluya y la probabilidad de que se tolere un falso positivo es 𝑝, el tamaño de la matriz se puede calcular como: 𝑚= −𝑛ln 𝑝 (en 2)2 Mientras que el número óptimo de funciones hash es: 𝑘= 𝑚 𝑛ln 2 Si suponemos que insertamos 1000 elementos con una tolerancia del 1%, el tamaño de la matriz es de 9585 bits. con 𝑘= 6, mientras que para una tolerancia del 0,1% se convierte en 14377 bits con 𝑘= 9. Si un millón de elementos se espera que se inserten, el tamaño de la matriz es de aproximadamente 1170 kB para el 1% y 1775 kB para 0.1%, con los mismos valores de 𝑘, ya que depende únicamente de 𝑝[26]. En un juego en el que los jugadores no deben ser asignados a un oponente al que ya hayan desafiado, En lugar de guardar en el almacenamiento para cada jugador la lista de oponentes anteriores, se puede usar un Bloom. filtrar. El riesgo de no desafiar a algunos jugadores suele ser aceptable y el filtro se puede restablecer periódicamente.4.3. Ethereum compatibilidad La principal ventaja de ser compatible con EVM y Ethereum es la reutilización de todos los disponibles herramientas. Ethereum smart contracts pueden publicarse en Optimism sin ninguna modificación ni nuevas auditorías. Las billeteras siguen siendo compatibles, herramientas de desarrollo y análisis estático, análisis general herramientas, herramientas de indexación y oracles. Ethereum y Solidity tienen una larga historia de estudios bien estudiados. vulnerabilidades, como ataques de reentrada, desbordamientos y desbordamientos, préstamos flash y oracle manipulaciones. Debido a esto, Optimism pudo capturar una gran cantidad de valor en poco tiempo. tiempo. Elegir adoptar una máquina virtual diferente implica tener que reconstruir todo un ecosistema, con la ventaja de una mayor libertad de implementación. StarkNet implementa la cuenta de forma nativa abstracción, que es un mecanismo por el cual cada cuenta es un smart contract que puede implementar lógica arbitraria siempre que cumpla con una interfaz (de ahí el término abstracción): esto permite el uso de diferentes esquemas de firma digital, la capacidad de cambiar la clave privada utilizando el misma dirección o utilice una firma múltiple. La comunidad Ethereum propuso la introducción de este mecanismo con EIP-2938 en 2020, pero la propuesta ha permanecido obsoleta durante más de un año como A otras actualizaciones se les ha dado más prioridad [27]. Otro beneficio importante obtenido de la compatibilidad es la reutilización de clientes existentes: Optimism utiliza una versión de geth para su propio nodo con solo ~800 líneas de diferencia, que ha sido desarrollado, probado y mantenido desde 2014. Tener un cliente sólido es crucial ya que define lo que se acepta como válido o no en la red. Un error en la implementación de la prueba de fallos. El sistema podría hacer que una prueba incorrecta sea aceptada como correcta o una prueba correcta para una prueba no válida. bloque sea aceptado como incorrecto, comprometiendo el sistema. La probabilidad de este tipo de El ataque se puede limitar con una diversidad de clientes más amplia: Optimism puede reutilizar además de geth el otros Ethereum clientes ya mantenidos, y se está desarrollando otro cliente basado en Erigon. ya en marcha. En 2016, un problema en la gestión de la memoria de geth fue explotado durante un ataque DoS y la primera línea de defensa fue recomendar el uso de Parity, el segundo más cliente usado en ese momento 5. StarkNet enfrenta el mismo problema con las pruebas de validez, pero los clientes tienen que escribirse desde cero y el sistema de prueba es mucho más complejo, y en consecuencia También es mucho más complejo garantizar la corrección.
Conclusão
- Conclusão Rollups são a solução mais promissora disponível atualmente para resolver o problema de escalabilidade em blockchains descentralizados, abrindo caminho para a era dos blockchains modulares em oposição a blockchains monolíticos. A escolha de desenvolver um Rollup Otimista ou um Rollup de Validade é mostrada principalmente como uma compensação entre complexidade e agilidade. StarkNet tem inúmeras vantagens, como rapidez retiradas, incapacidade estrutural de ter transições de estado inválidas, menor custo de transação no despesa de um período de desenvolvimento mais longo e incompatibilidade com EVM, enquanto Optimism tem alavancou a economia de rede para ganhar rapidamente uma grande fatia do mercado. Optimism Bedrock, entretanto, possui um design modular que permite que ele se torne um Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack
Rollup no futuro: Cannon atualmente usa minigeth compilado em MIPS para sua prova de falhas sistema, mas a mesma arquitetura pode ser usada para obter um circuito e produzir provas de validade. Compilar uma máquina complexa como EVM para uma microarquitetura resulta em uma solução mais simples circuito que não precisa ser modificado e verificado novamente em caso de atualizações. RISC Zero é um microarquitetura verificável com provas STARK já em desenvolvimento com base em RISC-V que pode ser usado para esta finalidade como uma alternativa a MIPS [28]. Um aspecto que não deve ser subestimado é a complexidade em compreender como o a tecnologia funciona. Um ponto forte dos blockchains tradicionais é ser capaz de verificar o estado de o blockchain sem confiar em nenhuma entidade terceirizada. No entanto, no caso de StarkNet, é necessário confiar na implementação quando não é possível verificar os vários componentes baseado em criptografia e matemática avançada. Isto pode inicialmente criar atrito para o adoção da tecnologia, mas à medida que as ferramentas e o uso de provas de integridade avançam ainda mais fora do campo blockchain este problema será resolvido.
Conclusión
- Conclusión Los rollups son la solución más prometedora disponible en la actualidad para resolver el problema de escalabilidad en blockchains descentralizados, allanando el camino para la era de los blockchains modulares en lugar de monolítico blockchains. Se muestra principalmente la elección de desarrollar un resumen optimista o un resumen de validez. como un equilibrio entre complejidad y agilidad. StarkNet tiene numerosas ventajas como la rapidez retiros, incapacidad estructural para tener transiciones de estado inválidas, menor costo de transacción en el a expensas de un período de desarrollo más largo e incompatibilidad con EVM, mientras que Optimism tiene aprovechó la economía de red para ganar rápidamente una porción importante del mercado. Optimism Bedrock, sin embargo, posee un diseño modular que le permite convertirse en Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack
Resumen en el futuro: Cannon actualmente usa minigeth compilado en MIPS para su prueba de fallas sistema, pero se puede utilizar la misma arquitectura para obtener un circuito y producir pruebas de validez. Compilar una máquina compleja como la EVM para una microarquitectura resulta en una solución más simple. circuito que no necesita ser modificado y reverificado en caso de actualizaciones. RISC Cero es un microarquitectura verificable con pruebas STARK ya en desarrollo basadas en RISC-V que se puede utilizar para este propósito como alternativa a MIPS [28]. Un aspecto que no debe subestimarse es la complejidad para entender cómo funciona el La tecnología funciona. Una fortaleza de los blockchain tradicionales es poder verificar el estado de el blockchain sin confiar en ninguna entidad de terceros. Sin embargo, en el caso de StarkNet, es necesario confiar en la implementación cuando no es posible verificar los distintos componentes basado en criptografía y matemáticas avanzadas. Inicialmente esto puede crear fricción para el adopción de la tecnología, pero a medida que las herramientas y el uso de pruebas de integridad avanzan aún más fuera del campo blockchain, es de esperar que este problema se resuelva.