Documentación técnica de Optimism
Optimism ne dispose pas d'un livre blanc traditionnel. En tant que rollup optimiste de couche 2 (L2) Ethereum, sa conception et ses spécifications sont documentées à travers la documentation technique, la spécification de l'OP Stack et des articles de recherche, plutôt que dans un unique article académique formel.
Résumé
L'article aborde le problème de l'évolutivité dans les blockchain décentralisés en analysant le compromis entre le débit des transactions et les exigences matérielles pour exécuter un nœud. Les rollups, c'est-à-dire les technologies de vérification en chaîne des blocs exécutés hors chaîne, sont présentés sous forme de preuves de faute ou de validité. Nous comparons les cumuls optimistes et les cumuls de validité en ce qui concerne le temps de retrait, les coûts de transaction, les techniques d'optimisation et la compatibilité avec l'écosystème Ethereum. Notre analyse révèle que Optimism Bedrock a actuellement un taux de compression de gaz d'environ 20:1, tandis que StarkNet atteint un taux de compression des coûts d'écriture de stockage d'environ 24:1. Nous discutons également des techniques permettant d'optimiser davantage ces taux, telles que l'utilisation de contrats de cache et de filtres Bloom. En fin de compte, nos conclusions mettent en évidence les compromis entre complexité et agilité dans le choix entre les rollups optimistes et de validité. Mots-clés Blockchain, Scalability, Rollup 1. Introduction La technologie Blockchain a attiré une attention considérable en raison de son potentiel à révolutionner diverses industries. Cependant, l'évolutivité reste un défi majeur, car la plupart des blockchain sont confrontés à un compromis entre évolutivité, décentralisation et sécurité, communément appelé le trilemme de l'évolutivité [1, 2]. Pour augmenter le débit d'un blockchain, une solution triviale consiste à augmenter la taille de son bloc. Dans le contexte de Ethereum, cela signifie augmenter la quantité maximale de gaz qu'un bloc peut contenir. Comme chaque nœud complet doit valider chaque transaction de chaque bloc, à mesure que le débit augmente, les exigences matérielles augmentent également, conduisant à une plus grande centralisation du réseau. Certains blockchain, tels que Bitcoin et Ethereum, optimisent leur conception pour maximiser leur décentralisation architecturale, tandis que d'autres, comme la Binance Smart Chain et Solana, sont conçus pour être aussi rapides et bon marché que possible. Les réseaux décentralisés limitent artificiellement le débit du blockchain pour réduire la configuration matérielle requise pour participer au réseau. Au fil des années, des tentatives ont été faites pour trouver une solution au trilemme, comme les chaînes d'État [3] et Plasma [4, 5]. Ces solutions ont la caractéristique de déplacer certaines activités hors chaîne, de relier l'activité en chaîne à l'activité hors chaîne à l'aide de smart contract et de vérifier DLT 2023 : 5e atelier sur la technologie du grand livre distribué, 25 et 26 mai 2023, Bologne, Italie $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Copyright pour cet article par ses auteurs. Utilisation autorisée sous Creative Commons License Attribution 4.0 International (CC BY 4.0). Actes de l'atelier CEUR http://ceur-ws.org ISSN 1613-0073 Actes de l'atelier CEUR (CEUR-WS.org) en chaîne ce qui se passe hors chaîne. Cependant, les canaux Plasma et étatiques sont limités dans leur prise en charge des smart contract généraux. Les rollups sont des blockchain (appelés Layer 2 ou L2) qui publient leurs blocs sur un autre blockchain (Layer 1 ou L1) et héritent donc de ses propriétés de consensus, de disponibilité des données et de sécurité. Contrairement à d’autres solutions, elles prennent en charge le calcul arbitraire. Les rollups comportent trois composants principaux : • Séquenceurs : nœuds qui reçoivent les transactions Rollup des utilisateurs et les combinent en un bloc envoyé à Layer 1. Le bloc comprend au moins la racine de l'état (par exemple une racine Merkle) et les données nécessaires pour reconstruire et valider l'état. Le Layer 1 définit le...
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...
Introduction
- Introduction La technologie Blockchain a suscité une attention considérable en raison de son potentiel de révolution. diverses industries. Cependant, l'évolutivité reste un défi majeur, car la plupart des blockchain sont confrontés à un compromis entre évolutivité, décentralisation et sécurité, communément appelé le Trilemme d’évolutivité [1, 2]. Pour augmenter le débit d'un blockchain, une solution triviale est pour augmenter la taille de son bloc. Dans le contexte de Ethereum, cela signifie augmenter le maximum quantité de gaz qu'un bloc peut contenir. Comme chaque nœud complet doit valider chaque transaction de chaque bloc, à mesure que le débit augmente, les exigences matérielles augmentent également, ce qui entraîne une plus grande centralisation du réseau. Certains blockchain, comme Bitcoin et Ethereum, optimisent leur conception pour maximiser leur décentralisation architecturale, tandis que d'autres, comme le Binance Smart Chain et Solana sont conçus pour être aussi rapides et bon marché que possible. Réseaux décentralisés limiter artificiellement le débit du blockchain pour réduire la configuration matérielle requise à participer au réseau. Au fil des années, des tentatives ont été faites pour trouver une solution au trilemme, notamment en canaux [3] et Plasma [4, 5]. Ces solutions ont la particularité de déplacer certaines activités hors chaîne, reliant l'activité en chaîne à l'activité hors chaîne à l'aide de smart contract et en vérifiant DLT 2023 : 5e atelier sur la technologie du grand livre distribué, 25 et 26 mai 2023, Bologne, Italie $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Copyright pour cet article par ses auteurs. Utilisation autorisée sous Creative Commons License Attribution 4.0 International (CC BY 4.0). EUR Atelier Actes http://ceur-ws.org ISSN1613-0073 Actes de l'atelier CEUR (CEUR-WS.org)en chaîne ce qui se passe hors chaîne. Cependant, les canaux plasma et étatiques sont limités dans leur soutien aux smart contract généraux. Les rollups sont des blockchain (appelés Layer 2 ou L2) qui publient leurs blocs sur un autre blockchain (Layer 1 ou L1) et hérite donc de ses propriétés de consensus, de disponibilité des données et de sécurité. Eux, contrairement à d’autres solutions, prend en charge le calcul arbitraire. Les rollups comportent trois composants principaux : • Séquenceurs : nœuds qui reçoivent les transactions Rollup des utilisateurs et les combinent dans un bloc qui est envoyé à Layer 1. Le bloc comprend au moins la racine de l'état (par exemple un Merkle racine) et les données nécessaires à la reconstruction et à la validation de l'état. Le Layer 1 définit le canonique blockchain de la L2 en établissant l'ordre des données publiées. • Nœuds complets de cumul : nœuds qui obtiennent, traitent et valident les blocs de cumul à partir de Layer. 1 en vérifiant que la racine est correcte. Si un bloc contient des transactions invalides, il est alors rejetés, ce qui empêche les séquenceurs de créer des blocs valides incluant des blocs invalides transactions. • Nœuds légers de cumul : nœuds qui obtiennent des blocs de cumul de Layer 1 mais ne calculent pas le nouvel État lui-même. Ils vérifient que la nouvelle racine d'état est valide à l'aide de techniques telles que des preuves de défaut ou de validité. Les rollups atteignent l'évolutivité en diminuant le coût amorti des transactions à mesure que le nombre des utilisateurs augmente. En effet, le coût pour garantir la validité de blockchain augmente de manière sublinéaire en ce qui concerne le coût de la vérification individuelle des transactions. Les rollups diffèrent selon le mécanisme par lequel ils garantissent la validité de l'exécution des transactions sur les nœuds légers : dans Optimistic Rollups il est assuré par un modèle économique et par des preuves de fautes, tout en étant en Validité Rollups il est assuré cryptographiquement à l’aide de preuves de validité. Les nœuds légers peuvent être implémentés en tant que smart contract sur Layer 1. Ils acceptent la racine du nouvel état et vérifier la validité ou les preuves de défauts : ces Rollup sont donc appelés Smart Contract Cumuls. Si les nœuds légers sont indépendants, ils sont appelés Sovereign Rollups [6]. L'avantage de utiliser un Smart Contract Rollup, c'est être capable de construire un pont de confiance minimisé entre les deux blockchains : la validité de l'état L2 étant prouvée à L1, un système de transactions de L2 à L1 peuvent être mis en œuvre, permettant des retraits. L'inconvénient est que le coût du les transactions dépendent du coût de vérification de l'état sur L1 : si la couche de base est saturée par d'autres activités, le coût des transactions sur le Rollup augmente également. Les couches de données et de consensus sont celles qui déterminent la sécurité du système. ils définissent l'ordre des transactions, préviennent les attaques et mettent à disposition des données pour prouver l'état validité. Contribution papier Dans cet article, nous étudions les cumuls optimistes et de validité, deux solutions innovantes. des solutions au trilemme d'évolutivité, en mettant l'accent sur des implémentations notables, telles que Optimism Bedrock et StarkNet. Nos contributions incluent une comparaison complète de ces solutions, une analyse des temps de retrait et une discussion sur une éventuelle attaque contre Optimism Socle rocheux. De plus, nous calculons leurs taux de compression de gaz, fournissons des optimisations spécifiques à l'application et présentons les avantages et les inconvénients de l'abandon du Ethereum. Machine virtuelle (EVM).
Structure du papier Le document est organisé comme suit. Dans la section 2, les cumuls optimistes sont introduit en analysant Optimism Bedrock. Dans la section 3, les cumuls de validité sont introduits par analysant StarkNet. Dans la section 4, nous comparons les deux solutions. Enfin, dans la section 5, nous dessinons quelques conclusions.
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.
Cumuls optimistes
- Cumuls optimistes L'idée d'accepter avec optimisme la sortie des blocs sans vérifier leur exécution est déjà présent dans le livre blanc Bitcoin [7], traitant des nœuds lumineux. Ces nœuds suivent uniquement la chaîne d'en-tête en vérifiant la règle de consensus, les rendant vulnérables à l'acceptation de blocs contenant des transactions invalides en cas d'attaque à 51%. Nakamoto propose de résoudre ce problème problème en utilisant un système « d’alerte » pour avertir les nœuds légers qu’un bloc contient des transactions invalides. Ce mécanisme est mis en œuvre pour la première fois par Al-Bassam, Sonnino et Buterin [8] dans lequel une faute un système de preuve basé sur les codes de correction d’erreur [9] est utilisé. Afin de permettre la création de preuves de défauts, il est nécessaire que les données de tous les blocs, y compris les blocs invalides, soient disponibles pour le réseau : c'est le problème de disponibilité des données, qui est résolu à l'aide d'une approche probabiliste des données. mécanisme d’échantillonnage. La première conception Optimistic Rollup a été présentée par John Adler et Mikerah Quintyne-Collins en 2019 [10], dans lequel des blocs sont publiés sur un autre blockchain qui définit leur consensus sur la commande. 2.1. Optimism Socle rocheux Bedrock [11] est la dernière version de Optimism, un Smart Contract Rollup. La version précédente, la machine virtuelle optimiste (OVM) nécessitait un compilateur ad hoc pour compiler Solidity dans son propre bytecode : en revanche, Bedrock est tout à fait équivalent au EVM dans la mesure où le moteur d'exécution suit la spécification Ethereum Yellow Paper [12]. 2.1.1. Dépôts Les utilisateurs peuvent déposer des transactions via un contrat sur Ethereum, le portail Optimism, en appelant la fonction depositTransaction. Lorsqu'une transaction est exécutée, un L'événement TransactionDeposited est émis, que chaque nœud du Rollup écoute pour traiter dépôts. Une transaction déposée est une transaction L2 dérivée de L1. Si l'appelant du fonction est un contrat, l'adresse est transformée en lui ajoutant une valeur constante : cela évite attaques dans lesquelles un contrat sur L1 a la même adresse qu'un contrat sur L2 mais un code différent. L'inclusion sur L2 d'une transaction déposée est assurée par spécification au sein d'un séquençage fenêtre. Les transactions déposées sont un nouveau type de transaction compatible EIP-2718 [13] avec le préfixe 0x7E, où les champs codés rlp sont : • bytes32 sourceHash : hash qui identifie de manière unique la source de la transaction. • adresse de : l'adresse de l'expéditeur. • adresse à : l'adresse du destinataire, ou l'adresse zéro si la transaction déposée est une création de contrat.• uint256 mint : la valeur à créer sur L2. • valeur uint256 : la valeur à envoyer au destinataire. • données octets : les données d'entrée. • octets gasLimit : la limite de gaz de la transaction. Le sourceHash est calculé comme le keccak256 hash du bloc L1 hash et le journal L1 index, identifiant de manière unique un événement dans un bloc. Puisque les transactions déposées sont initiées sur L1 mais exécutées sur L2, le système a besoin d'un mécanisme permettant de payer sur L1 le gaz dépensé sur L2. Une solution consiste à envoyer de l'ETH via le portail, mais cela implique que chaque appelant (même les appelants indirects) doit être marqué comme payant, et ceci est pas possible pour de nombreux projets existants. L'alternative est de brûler le gaz correspondant sur L1. Le gaz 𝑔alloué à la transaction déposée est appelé gaz garanti. Le prix du gaz L2 sur L1 n'est pas automatiquement synchronisé mais est estimé à l'aide d'un mécanisme similaire à EIP-1559 [14]. La quantité maximale de gaz garantie par bloc Ethereum est de 8 millions, avec un objectif de 2 millions. La quantité 𝑐d’ETH nécessaire pour payer le gaz sur L2 est 𝑐= 𝑔𝑏L2 où 𝑏L2 est le frais de base sur L2. Le contrat sur L1 brûle une quantité de gaz égale à 𝑐/𝑏L2. Le gaz dépensé pour appeler depositTransaction est remboursé sur L2 : si ce montant est supérieur au gaz garanti, aucun gaz n'est brûlé. La première transaction d'un bloc rollup est une transaction déposée avec attributs L1, utilisée pour enregistrer sur un L2, prédéployez les attributs des blocs Ethereum. Les attributs que donne le pré-déploiement les accès sont le numéro de bloc, l'horodatage, les frais de base, le bloc hash et la séquence number, qui est le numéro de bloc de L2 par rapport au bloc L1 associé (également appelé époque) ; ce nombre est réinitialisé lorsqu'une nouvelle époque commence. 2.1.2. Séquençage Les nœuds Rollup dérivent entièrement la chaîne Optimism de Ethereum. Cette chaîne est prolongée à chaque fois de nouvelles transactions sont publiées sur L1, et ses blocs sont à chaque fois réorganisés Les blocs Ethereum sont réorganisés. Le Rollup blockchain est divisé en époques. Pour chaque 𝑛 numéro de bloc de Ethereum, il y a une époque 𝑛 correspondante. Chaque époque contient au moins un bloc, et chaque bloc d'une époque contient une transaction déposée avec des attributs L1. Le premier bloc dans une époque contient toutes les transactions déposées via le portail. Les blocs Layer 2 peuvent également contenait des transactions séquencées, c'est-à-dire des transactions envoyées directement au séquenceur. Le séquenceur accepte les transactions des utilisateurs et construit des blocs. Pour chaque bloc, il construit un lot à publier le Ethereum. Plusieurs lots peuvent être publiés de manière compressée, prenant le nom de la chaîne. Un canal peut être divisé en plusieurs trames, au cas où il serait trop grand pour une seule transaction. Un canal est défini comme la compression avec ZLIB [15] de fichiers codés en rlp. lots. Les champs d'un lot sont le numéro d'époque, l'époque hash, le parent hash, le l'horodatage et la liste des transactions. Une fenêtre de séquençage, identifiée par une époque, contient un nombre fixe 𝑤 de L1 consécutives blocs qu'une étape de dérivation prend en entrée pour construire un nombre variable de blocs L2. Pour époque 𝑛, la fenêtre de séquençage 𝑛inclut les blocs [𝑛, 𝑛+𝑤). Cela implique que la commande des transactions et des blocs L2 dans une fenêtre de séquençage n’est pas corrigé jusqu’à la fin de la fenêtre. Une transaction rollup est dite sécurisée si le lot la contenant a été confirmé sur L1. Cadressont lus à partir des blocs L1 pour reconstruire les lots. La mise en œuvre actuelle ne permet pas la décompression d'un canal doit commencer jusqu'à ce que toutes les trames correspondantes aient été reçues. Invalide les lots sont ignorés. Les transactions de bloc individuelles sont obtenues à partir des lots, qui sont utilisé par le moteur d'exécution pour appliquer des transitions d'état et obtenir l'état Rollup. 2.1.3. Retraits Afin de traiter les retraits, un système de messagerie L2 vers L1 est mis en place. Ethereum doit connaître l'état de L2 afin d'accepter les retraits, et cela se fait en publiant sur la sortie L2 Oracle smart contract sur L1, la racine d'état de chaque bloc L2. Ces racines sont acceptés avec optimisme comme valides (ou finalisés) si aucune vérification des défauts n'est effectuée pendant le période de litige. Seules les adresses désignées comme proposants peuvent publier des racines de sortie. La validité des racines de production est incité à ce que les proposants déposent une mise qui est réduite s'ils sont il a été démontré qu'il a proposé une racine invalide. Les transactions sont initiées en appelant la fonction initier un retrait sur un pré-déploiement sur L2 puis finalisé sur L1 en appelant la fonction finalizeWithdrawalTransaction sur le portail Optimism mentionné précédemment. La racine de sortie correspondant au bloc L2 est obtenue à partir de L2 Output Oracle ; c'est vérifié qu'il est finalisé, c'est-à-dire que le délai de contestation est écoulé ; il est vérifié que la Sortie Root Proof correspond à Oracle Proof ; il est vérifié que le hash du retrait est inclus en utilisant une preuve de retrait ; que le retrait n'est pas encore finalisé ; et puis le l'appel à l'adresse cible est exécuté, avec la limite de gaz, la quantité d'éther et les données spécifiées. 2.1.4. Cannon : le système sans faille Si un nœud complet de cumul, en exécutant localement des lots et des transactions déposées, découvre que l'état Layer 2 ne correspond pas à la racine d'état publiée en chaîne par un proposant, il peut s'exécuter une preuve de faute sur L1 pour prouver que le résultat de la transition de bloc est incorrect. À cause du surcharge, le traitement d'un bloc Rollup entier sur L1 est trop coûteux. La solution mise en œuvre par Bedrock est d'exécuter en chaîne uniquement la première instruction de désaccord de minigeth, le compiler dans une architecture MIPS qui est exécutée sur un interpréteur en chaîne et publiée sur L1. minigeth est une version simplifiée de geth 1 dans laquelle le consensus, le RPC et la base de données ont été supprimés. Pour trouver la première instruction de désaccord, une recherche binaire interactive est effectuée entre celui qui a initié la preuve de faute et celui qui a publié la racine de sortie. Quand la preuve démarre, les deux parties publient la racine de l'état mémoire MIPS à mi-chemin de l'exécution de le bloc sur le contrat Challenge : si le hash correspond cela signifie que les deux parties sont d'accord sur le première moitié de l'exécution publiant ainsi la racine de la moitié de la seconde moitié, sinon la moitié du premier semestre est publié et ainsi de suite. Cela permet d'obtenir la première instruction de désaccord en un nombre logarithmique d'étapes par rapport à l'exécution originale. Si l'un des deux s'arrête en interaction, à la fin de la période de contestation, l'autre participant gagne automatiquement. Pour traiter l'instruction, l'interpréteur MIPS a besoin d'accéder à sa mémoire : puisque la racine est disponibles, les cellules mémoire nécessaires peuvent être publiées en prouvant leur inclusion. Pour accéder l'état du EVM, on utilise le Preimage Oracle : étant donné le hash d'un bloc il renvoie 1https://geth.ethereum.org/docs
l'en-tête du bloc, à partir duquel on peut récupérer le hash du bloc précédent et remonter dans le chaîne, ou obtenez le hash de l'état et les journaux à partir desquels on peut obtenir la pré-image. Le oracle est implémenté par minigeth et remplace la base de données. Des requêtes sont adressées à d'autres nœuds pour obtenir les préimages.
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.
Cumuls de validité
- Cumuls de validité L'objectif d'un Validity Rollup est de prouver cryptographiquement la validité de la transition d'état. étant donné la séquence de transactions avec une courte preuve qui peut être vérifiée de manière sublinéaire par rapport au moment des calculs originaux. Ces types de certificats sont appelés preuves d'intégrité informatique et sont pratiquement implémentés avec des SNARK (Succint Non-interactive ARgument of Knowledge), qui utilisent l'arithmétique. circuits comme modèle informatique. Différentes implémentations de SNARK diffèrent en termes de temps de preuve, temps de vérification, nécessité d’une configuration fiable et résistance quantique [16, 17]. STARK (évolutif ARgument transparent de connaissances) [18] sont un type de SNARK qui ne nécessite pas de confiance configuration et sont résistants aux quantiques, tout en renonçant à une certaine efficacité en matière de preuve et de vérification par rapport à d'autres solutions. 3.1. StarkNet StarkNet est un cumul de validité de contrat intelligent développé par StarkWare qui utilise le STARK système de preuve pour valider son état à Ethereum. Pour faciliter la construction de preuves de validité, un une machine virtuelle différente de EVM est utilisée, dont le langage de haut niveau est Le Caire. 3.1.1. Dépôts Les utilisateurs peuvent déposer des transactions via un contrat sur Ethereum en appelant sendMessageToL2 fonction. Le message est enregistré en calculant son hash et en augmentant un compteur. Séquenceurs écoutez l'événement LogMessageToL2 et codez les informations dans une transaction StarkNet qui appelle une fonction d'un contrat qui a le décorateur l1_handler. En fin d'exécution, lorsque la preuve de transition d'état est produite, la consommation du message y est attachée et il est supprimé en diminuant son compteur. L'inclusion des transactions déposées n'est pas requise par la spécification StarkNet, donc un gaz un marché est nécessaire pour inciter les séquenceurs à les publier sur L2. Dans la version actuelle, parce que le Séquenceur est centralisé et géré par StarkWare, le coût des transactions déposées est uniquement déterminé par le coût d’exécution du dépôt. Ce coût est payé en envoyant ETH à sendMessageToL2. Ces Ethers restent verrouillés sur L1 et sont transférés vers le Séquenceur sur L1, lorsque la transaction déposée est incluse dans une transition d'état. Le montant d’ETH envoyé, si la transaction déposée est incluse, est entièrement dépensée, quelle que soit la quantité de gaz consommée sur L2. StarkNet ne dispose pas d'un système rendant automatiquement disponibles les attributs de bloc L1. Alternativement, Fossil est un protocole développé par Oiler Network 2 qui permet, étant donné un hash d'un bloc, toute information à obtenir auprès de Ethereum en publiant des préimages. 2https://www.oiler.network/3.1.2. Séquençage L'état actuel de StarkNet peut être entièrement dérivé de Ethereum. Toute différence d'état entre les transitions est publié sur L1 en tant que données d'appel. Les écarts sont publiés pour chaque contrat et sont enregistrés sous uint256[] avec le codage suivant : • Nombre de champs concernant les déploiements sous contrat. • Pour chaque contrat publié : – L’adresse du contrat publié. – Le hash du contrat publié. – Le nombre d’arguments du constructeur du contrat. – La liste des arguments du constructeur • Numéro de contrat dont le stockage a été modifié. • Pour chaque contrat modifié : – L’adresse du contrat modifié. – Le nombre de mises à jour du stockage. – Les paires clé-valeur des adresses de stockage avec les nouvelles valeurs. Les différences d'état sont publiées dans l'ordre, il suffit donc de les lire séquentiellement pour reconstruire l'État. 3.1.3. Retraits Pour envoyer un message de L2 à L1, l'appel système send_message_to_L1 est utilisé. Le message est publié en L1 en augmentant son compteur hash avec la preuve et finalisé en appelant le fonction consumeMessageFromL2 sur le StarkGate smart contract sur L1, qui décrémente le compteur. N’importe qui peut finaliser n’importe quel retrait. 3.1.4. Preuves de validité La machine virtuelle du Caire [19] est conçue pour faciliter la construction de preuves STARK. Le langage Cairo permet de décrire le calcul avec une programmation de haut niveau langage, et non directement comme un circuit. Ceci est accompli par un système d'équations polynomiales 3 représentant un seul calcul : le cycle FDE d'une architecture de von Neumann. Le numéro des contraintes est ainsi fixe et indépendant du type de calcul, ne permettant qu'un seul Programme vérificateur pour chaque programme dont le calcul doit être prouvé. StarkNet regroupe plusieurs transactions en une seule preuve STARK à l'aide d'un prouveur partagé nommé SHARP. Les épreuves sont envoyées à un smart contract le Ethereum, qui vérifie leur validité et met à jour la racine Merkle correspondant au nouvel état. Le coût sous-linéaire de la vérification d'un la preuve de validité permet d’amortir son coût sur plusieurs transactions. 3appelée Représentation Algébrique Intermédiaire (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)
Comparaison
- Comparaison 4.1. Délai de retrait L'aspect le plus important qui distingue les cumuls optimistes des cumuls de validité est le temps qui s'écoule entre l'initialisation d'un retrait et sa finalisation. Dans les deux cas, les retraits sont initialisés sur L2 et finalisés sur L1. Le StarkNet, la finalisation est possible car dès que la preuve de validité de la nouvelle racine d'état est acceptée le Ethereum : en théorie, c'est possible de retirer des fonds dans le premier bloc de L1 suivant l'initialisation. En pratique, le la fréquence d'envoi des preuves de validité le Ethereum est un compromis entre la vitesse de blocage finalisation et agrégation des preuves. Actuellement, StarkNet fournit des preuves de validité à des fins de vérification. toutes les 10 heures 4, mais il est prévu de diminuer à mesure que l'activité de transaction augmente. Sur Optimism Bedrock il est possible de finaliser un retrait uniquement à la fin du litige période (actuellement 7 jours), après laquelle une racine est automatiquement considérée comme valide. La longueur de ce délai est principalement déterminé par le fait que les preuves de défauts peuvent être censurées le Ethereum jusqu'à sa fin. La probabilité de réussite de ce type d’attaque diminue de façon exponentielle à mesure que le temps augmente : E[valeur soustraite] = 𝑉𝑝𝑛 où 𝑛est le nombre de blocs dans un intervalle, 𝑉est le montant des fonds qui peuvent être soustraits en publiant une racine invalide, et 𝑝 est la probabilité de réussir une censure attaque en un seul bloc. Supposons que cette probabilité soit de 99 %, que la valeur verrouillée dans le Rollup est d'un million d'Ether, et que les blocs dans un intervalle sont de 1800 (6 heures de blocs avec un 12 secondes d'intervalle) : la valeur attendue est d'environ 0,01391 Ether. Le système est sécurisé par demander aux proposants de miser une quantité d’Ether beaucoup plus importante que la valeur attendue. Winzer et coll. a montré comment mener une attaque de censure en utilisant un simple smart contract cela garantit que certaines zones de mémoire dans l'état ne changent pas [20]. Modélisation de l'attaque en tant que jeu de Markov, l'article montre que la censure est la stratégie dominante pour une société rationnelle. producteur de bloc s'il reçoit une compensation plus élevée que l'inclusion de la transaction qui change la mémoire. La valeur 𝑝 discutée ci-dessus peut être considérée comme le pourcentage du bloc rationnel producteurs du réseau, où le « rationnel » ne prend pas en compte les éventuelles pénalisations des externalités, telles qu'une moindre confiance dans le blockchain qui diminue sa valeur de crypto-monnaie. Le code suivant présente un smart contract qui peut être utilisé pour effectuer une attaque de censure sur le substrat rocheux. L'attaque exploite les incitations des producteurs de blocs en leur offrant un pot-de-vin censurer les transactions qui modifieraient des parties spécifiques de l’État. Le principal du contrat la fonction,claimBribe, permet aux producteurs de blocs de réclamer le pot-de-vin s'ils réussissent à censurer la transaction ciblée en vérifiant que la racine de sortie invalide n'est pas touchée. fonction réclamerBribe (octets de mémoire storageProof) externe { require(!claimed[block.number], "pot-de-vin déjà réclamé"); Mémoire actuelle de la proposition de sortie = storageOracle.getStorage (L2_ORACLE, block.number, SLOT, stockageProof); require(invalidOutputRoot == current.outputRoot, "l'attaque a échoué"); réclamé[bloc.numéro] = vrai ; (bool envoyé, ) = block.coinbase.call{value: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(sent, "échec de l'envoi d'éther"); } Liste 1 : Exemple de contrat qui incite à une attaque de censure contre Bedrock. La durée du délai de contestation doit également tenir compte du fait que la preuve de la faute est une preuve interactive et donc suffisamment de temps doit être prévu pour que les participants puissent interagir et que toute interaction pourrait être censurée. Si le dernier coup se produit à un moment très proche du À la fin de la période de litige, le coût de la censure est nettement moindre. Même si la censure est la stratégie dominante, la probabilité de succès est plus faible car les nœuds de censure sont vulnérables aux Attaques par déni de service : un attaquant peut générer des transactions très complexes se terminant par le publication d'une preuve de défaut sans frais, car aucun frais ne serait payé. Dans les cas extrêmes, une longue période de litige permet une coordination en cas de succès attaque de censure pour organiser un fork et exclure les producteurs de blocs attaquants. Un autre une attaque possible consiste à publier plus de propositions de racine d'état que les parties en conflit ne peuvent en vérifier, ce qui peut être évité en utilisant une limite de fréquence. 4.1.1. Retraits optimistes rapides Étant donné que la validité d'un cumul optimiste peut être vérifiée à tout moment par n'importe quel nœud complet, un oracle de confiance peut être utilisé pour savoir sur L1 si le retrait peut être finalisé en toute sécurité. Ceci mécanisme a été proposé pour la première fois par Maker [21] : un oracle vérifie le retrait, publie le résultat sur L1 sur lequel un prêt rémunéré est attribué à l'usager, qui est automatiquement clôturé au bout de 7 jours, c'est à dire lorsque le retrait peut effectivement être finalisé. Cette solution introduit une hypothèse de confiance, mais dans le cas de Maker elle est minimisée puisque l'opérateur oracle est géré par la même organisation qui assume le risque en accordant le prêt. 4.2. Coûts de transaction Le coût des transactions L2 est principalement déterminé par l’interaction avec le L1. Dans les deux solutions le coût de calcul des transactions est très bon marché car elles sont exécutées entièrement hors chaîne. Optimism publie les données d'appel des transactions L2 en tant que données d'appel et exécute rarement (ou jamais) les erreurs. preuves, donc les données d'appel sont la ressource la plus chère. Le 12 janvier 2022, un réseau Bedrock a été lancé sur le réseau de test Goerli de Ethereum. Un taux de compression de gaz peut être calculé en suivant la quantité de gaz utilisée sur Bedrock au cours d'une certaine période et en la comparant à la quantité de gaz dépensée sur L1 pour les blocs correspondants. En utilisant cette méthode, une compression de gaz un taux de ∼20 : 1 est trouvé, mais ce chiffre peut différer en fonction de l'activité réelle sur le réseau principal. StarkNet publie sur Ethereum chaque changement d'état L2 sous forme de données d'appel, le stockage est donc la ressource la plus chère. Puisque le réseau n'utilise pas le EVM, le coût de transaction la compression ne peut pas être estimée de manière triviale. En assumant le coût d'exécution et les données d'appel pour être négligeable, il est possible de calculer le taux de compression des écritures de stockage par rapport à L1. En supposant qu'aucun contrat n'est déployé et que 10 cellules non accessibles précédemment sur StarkNet sont modifié, un taux de compression du coût d'écriture du stockage de ∼24 : 1 est trouvé. Si une cellule est écrasée 𝑛fois entre les publications de données, le coût de chaque écriture sera de 1/𝑛 par rapport au coût d'une seule écriture, puisque seule la dernière est publiée. Le coût peut être encore minimisé encompresser les valeurs fréquemment utilisées. Le coût de la vérification de la preuve de validité est réparti entre les transactions auxquelles il fait référence : par exemple, le bloc StarkNet 4779 contient 200 transactions et son la preuve de validité consomme 267 830 unités de gaz, soit 1 339,15 gaz pour chaque transaction. 4.2.1. Optimisation des données d'appel : contrat de cache Présenté ci-dessous est un smart contract qui implémente un cache d'adresses pour les adresses en profitant du fait que le stockage et l’exécution sont beaucoup moins coûteux ressources, ainsi qu’un contrat Amis qui démontre son utilisation. Ce dernier assure le suivi des « amis » d'une adresse qui peut être enregistrée en appelant la fonction addFriend. Si une adresse a déjà été utilisé au moins une fois, il peut être ajouté en appelant la méthode addFriendWithCache fonction : les indices du cache sont des entiers de 4 octets tandis que les adresses sont représentées par 20 octets, il y a donc une économie de 5:1 sur l'argument de la fonction. La même logique peut être utilisée pour d'autres données des types tels que des entiers ou plus généralement des octets. contrat AddressCache { mapping(adresse => uint32) adresse publique2key ; adresse[] clé publique2adresse ; function cacheWrite(address _address) renvoie interne (uint32) { require(key2address.length < type(uint32).max, "AddressCache : le cache est plein"); require(address2key[_address] == 0, "AddressCache : adresse déjà mise en cache"); // les clés doivent commencer à 1 car 0 signifie "introuvable" clé uint32 = uint32(key2address.length + 1); adresse2key[_address] = clé ; key2address.push(_address); clé de retour ; } la fonction cacheRead (uint32 _key) renvoie la vue publique (adresse) { require(_key <= key2address.length && _key > 0, "AddressCache : clé introuvable"); return key2address[_key - 1] ; } } Listing 2 : Contrat de cache d’adresses. Le contrat Amis est AddressCache { mapping(adresse => adresse[]) amis publics ; function addFriend (adresse _friend) public { amis[msg.sender].push(_friend); cacheWrite(_friend); } function addFriendWithCache(uint32 _friendKey) public { amis[msg.sender].push(cacheRead(_friendKey)); } la fonction getFriends() vue publique renvoie (adresse[] mémoire) { renvoyer les amis[msg.sender] ;} } Listing 3 : Exemple de contrat qui hérite du cache d'adresses. Le contrat prend en charge en cache environ 4 milliards (232) d'adresses, et l'ajout d'un octet donne environ 1 billion (240). 4.2.2. Optimiser le stockage : les filtres Bloom Sur StarkNet, il existe plusieurs techniques pour minimiser l'utilisation du stockage. S'il n'est pas nécessaire de garantir la disponibilité des données originales alors il suffit de sauvegarder en chaîne ses hash : ce est le mécanisme utilisé pour sauvegarder les données d'un ERC-721 (NFT) [22], c'est-à-dire un lien IPFS qui résout le hash des données si disponibles. Pour les données stockées plusieurs fois, il est possible d'utiliser une recherche table similaire au système de mise en cache introduit pour Optimism, exigeant que toutes les valeurs soient enregistrées dans au moins une fois. Pour certaines applications, la sauvegarde de toutes les valeurs peut être évitée en utilisant un filtre Bloom [23, 24, 25], c'est-à-dire une structure de données probabiliste qui permet de savoir avec certitude si un élément n'appartient pas à un ensemble mais admet une probabilité faible mais non négligeable de faux points positifs. Un filtre Bloom est initialisé sous la forme d’un tableau de 𝑚bits à zéro. Pour ajouter un élément, les fonctions 𝑘hash avec une distribution aléatoire uniforme sont utilisés, chacun correspondant à un bit du tableau défini à 1. Pour vérifier si un élément appartient à l'ensemble, nous exécutons les fonctions 𝑘hash et vérifions que les 𝑘bits sont fixés à 1. Dans un simple filtre de Bloom, il n’y a aucun moyen de distinguer si un l'élément appartient réellement à l'ensemble ou est un faux positif, une probabilité qui augmente avec le nombre des entrées augmente. Après avoir inséré 𝑛éléments : P[faux positif] = (︃ 1 - [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 en supposant l'indépendance de la probabilité de chaque ensemble de bits. Si 𝑛éléments (de taille arbitraire !) sont devrait être inclus et la probabilité d’un faux positif toléré est 𝑝, la taille du tableau peut être calculé comme suit : 𝑚= −𝑛ln 𝑝 (ligne 2)2 Alors que le nombre optimal de fonctions hash est : 𝑘= 𝑚 𝑛ln 2 Si l'on suppose insérer 1000 éléments avec une tolérance de 1%, la taille du tableau est de 9585 bits avec 𝑘= 6, alors que pour une tolérance de 0,1% cela devient 14377 bits avec 𝑘= 9. Si un million d'éléments sont censés être insérés, la taille du tableau devient environ 1 170 Ko pour 1 % et 1 775 Ko pour 0,1%, avec les mêmes valeurs de 𝑘, puisque cela dépend uniquement de 𝑝[26]. Dans un jeu où les joueurs ne doivent pas être assignés à un adversaire qu'ils ont déjà défié, au lieu de sauvegarder en mémoire pour chaque joueur la liste des anciens adversaires, on peut utiliser un Bloom filtre. Le risque de ne pas défier certains joueurs est souvent acceptable, et le filtre peut être réinitialisé périodiquement.4.3. Compatibilité Ethereum Le principal avantage d'être compatible avec EVM et Ethereum est la réutilisation de tous les outils. Les Ethereum smart contracts peuvent être publiés sur Optimism sans aucune modification ni de nouveaux audits. Les wallets restent compatibles, outils de développement et d'analyse statique, analyse générale outils, outils d'indexation et oracles. Ethereum et Solidity ont une longue histoire de recherches bien étudiées vulnérabilités, telles que les attaques de réentrée, les débordements et les sous-versements, les prêts flash et oracle manipulations. Grâce à cela, Optimism a pu capturer une grande quantité de valeur en un court laps de temps. le temps. Choisir d'adopter une machine virtuelle différente implique de devoir reconstruire tout un écosystème, avec l’avantage d’une plus grande liberté de mise en œuvre. StarkNet implémente le compte de manière native abstraction, qui est un mécanisme par lequel chaque compte est un smart contract qui peut implémenter logique arbitraire pour autant qu’elle respecte une interface (d’où le terme abstraction) : cela permet l'utilisation de différents schémas de signature numérique, la possibilité de modifier la clé privée à l'aide du même adresse, ou utilisez un multisig. La communauté Ethereum a proposé l'introduction de ce mécanisme avec EIP-2938 en 2020, mais la proposition est restée obsolète pendant plus d'un an car les autres mises à jour ont reçu plus de priorité [27]. Un autre avantage important tiré de la compatibilité est la réutilisation des clients existants : Optimism utilise une version de geth pour son propre nœud avec seulement ∼800 lignes de différence, ce qui a été développé, testé et maintenu depuis 2014. Avoir un client robuste est crucial car il définit ce qui est accepté comme valide ou non dans le réseau. Un bug dans l'implémentation de la preuve de faute Le système pourrait faire en sorte qu'une preuve incorrecte soit acceptée comme correcte ou une preuve correcte pour un invalide. le bloc soit accepté comme incorrect, compromettant ainsi le système. La probabilité de ce type de l'attaque peut être limitée avec une plus grande diversité de clients : Optimism peut réutiliser en plus de geth le d'autres clients Ethereum sont déjà maintenus et le développement d'un autre client basé sur Erigon est en cours déjà en cours. En 2016, un problème dans la gestion de la mémoire de geth a été exploité pendant un certain temps. L'attaque DoS et la première ligne de défense consistaient à recommander l'utilisation de Parity, le deuxième plus client utilisé à l'époque 5. StarkNet est confronté au même problème avec les preuves de validité, mais les clients doivent être écrits à partir de zéro et le système de preuve est beaucoup plus complexe, et par conséquent il est également beaucoup plus complexe de garantir l'exactitude.
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.
Conclusion
- Conclusion Les rollups sont la solution la plus prometteuse disponible aujourd'hui pour résoudre le problème d'évolutivité dans des blockchain décentralisés, ouvrant la voie à l'ère des blockchain modulaires par opposition aux blockchain monolithiques. Le choix de développer soit un Rollup Optimiste, soit un Rollup de Validité est principalement illustré comme un compromis entre complexité et agilité. StarkNet présente de nombreux avantages tels que la rapidité retraits, incapacité structurelle à avoir des transitions d'état invalides, coût de transaction inférieur au au prix d'une période de développement plus longue et d'une incompatibilité avec EVM, alors que Optimism a a tiré parti de l’économie de réseau pour conquérir rapidement une part importante du marché. Optimism Bedrock possède cependant une conception modulaire qui lui permet de devenir un Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack
Rollup dans le futur : Cannon utilise actuellement minigeth compilé en MIPS pour sa preuve de panne système, mais la même architecture peut être utilisée pour obtenir un circuit et produire des preuves de validité. Compiler une machine complexe telle que la EVM pour une microarchitecture aboutit à un système plus simple. circuit qui n’a pas besoin d’être modifié et revérifié en cas de mises à niveau. RISC Zéro est un microarchitecture vérifiable avec des preuves STARK déjà en développement basées sur RISC-V qui peut être utilisé à cette fin comme alternative à MIPS [28]. Un aspect à ne pas sous-estimer est la complexité de comprendre comment le la technologie fonctionne. L’un des points forts des blockchain traditionnels est de pouvoir vérifier l’état de le blockchain sans faire confiance à aucune entité tierce. Cependant, dans le cas de StarkNet, il est nécessaire de faire confiance à la mise en œuvre lorsqu'il n'est pas possible de vérifier les différents composants basé sur la cryptographie et les mathématiques avancées. Cela peut initialement créer des frictions pour le l'adoption de la technologie, mais à mesure que les outils et l'utilisation des preuves d'intégrité progressent encore en dehors du champ blockchain, ce problème sera, espérons-le, résolu.
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.